Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit abf5d15f authored by Evgeniy Dushistov's avatar Evgeniy Dushistov Committed by Linus Torvalds
Browse files

[PATCH] ufs: easy debug



Currently to turn on debug mode "user" has to edit ~10 files, to turn off he
has to do it again.

This patch introduce such changes:
1)turn on(off) debug messages via ".config"
2)remove unnecessary duplication of code
3)make "UFSD" macros more similar to function
4)fix some compiler warnings

Signed-off-by: default avatarEvgeniy Dushistov <dushistov@mail.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 5afb3145
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -1375,6 +1375,14 @@ config UFS_FS_WRITE
	  Say Y here if you want to try writing to UFS partitions. This is
	  Say Y here if you want to try writing to UFS partitions. This is
	  experimental, so you should back up your UFS partitions beforehand.
	  experimental, so you should back up your UFS partitions beforehand.


config UFS_DEBUG
	bool "UFS debugging"
	depends on UFS_FS
	help
	  If you are experiencing any problems with the UFS filesystem, say
	  Y here.  This will result in _many_ additional debugging messages to be
	  written to the system log.

endmenu
endmenu


menu "Network File Systems"
menu "Network File Systems"
+27 −35
Original line number Original line Diff line number Diff line
@@ -21,14 +21,6 @@
#include "swab.h"
#include "swab.h"
#include "util.h"
#include "util.h"


#undef UFS_BALLOC_DEBUG

#ifdef UFS_BALLOC_DEBUG
#define UFSD(x) printk("(%s, %d), %s:", __FILE__, __LINE__, __FUNCTION__); printk x;
#else
#define UFSD(x)
#endif

static unsigned ufs_add_fragments (struct inode *, unsigned, unsigned, unsigned, int *);
static unsigned ufs_add_fragments (struct inode *, unsigned, unsigned, unsigned, int *);
static unsigned ufs_alloc_fragments (struct inode *, unsigned, unsigned, unsigned, int *);
static unsigned ufs_alloc_fragments (struct inode *, unsigned, unsigned, unsigned, int *);
static unsigned ufs_alloccg_block (struct inode *, struct ufs_cg_private_info *, unsigned, int *);
static unsigned ufs_alloccg_block (struct inode *, struct ufs_cg_private_info *, unsigned, int *);
@@ -52,7 +44,7 @@ void ufs_free_fragments(struct inode *inode, unsigned fragment, unsigned count)
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
	usb1 = ubh_get_usb_first(uspi);
	usb1 = ubh_get_usb_first(uspi);
	
	
	UFSD(("ENTER, fragment %u, count %u\n", fragment, count))
	UFSD("ENTER, fragment %u, count %u\n", fragment, count);
	
	
	if (ufs_fragnum(fragment) + count > uspi->s_fpg)
	if (ufs_fragnum(fragment) + count > uspi->s_fpg)
		ufs_error (sb, "ufs_free_fragments", "internal error");
		ufs_error (sb, "ufs_free_fragments", "internal error");
@@ -123,12 +115,12 @@ void ufs_free_fragments(struct inode *inode, unsigned fragment, unsigned count)
	sb->s_dirt = 1;
	sb->s_dirt = 1;
	
	
	unlock_super (sb);
	unlock_super (sb);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return;
	return;


failed:
failed:
	unlock_super (sb);
	unlock_super (sb);
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	return;
	return;
}
}


@@ -148,7 +140,7 @@ void ufs_free_blocks(struct inode *inode, unsigned fragment, unsigned count)
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
	usb1 = ubh_get_usb_first(uspi);
	usb1 = ubh_get_usb_first(uspi);


	UFSD(("ENTER, fragment %u, count %u\n", fragment, count))
	UFSD("ENTER, fragment %u, count %u\n", fragment, count);
	
	
	if ((fragment & uspi->s_fpbmask) || (count & uspi->s_fpbmask)) {
	if ((fragment & uspi->s_fpbmask) || (count & uspi->s_fpbmask)) {
		ufs_error (sb, "ufs_free_blocks", "internal error, "
		ufs_error (sb, "ufs_free_blocks", "internal error, "
@@ -215,12 +207,12 @@ void ufs_free_blocks(struct inode *inode, unsigned fragment, unsigned count)


	sb->s_dirt = 1;
	sb->s_dirt = 1;
	unlock_super (sb);
	unlock_super (sb);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return;
	return;


failed:
failed:
	unlock_super (sb);
	unlock_super (sb);
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	return;
	return;
}
}


@@ -290,8 +282,8 @@ static void ufs_change_blocknr(struct inode *inode, unsigned int count,


	baseblk = ((i_size_read(inode) - 1) >> inode->i_blkbits) + 1 - count;
	baseblk = ((i_size_read(inode) - 1) >> inode->i_blkbits) + 1 - count;


	UFSD(("ENTER, ino %lu, count %u, oldb %u, newb %u\n",
	UFSD("ENTER, ino %lu, count %u, oldb %u, newb %u\n",
	      inode->i_ino, count, oldb, newb));
	      inode->i_ino, count, oldb, newb);


	BUG_ON(!PageLocked(locked_page));
	BUG_ON(!PageLocked(locked_page));


@@ -326,7 +318,7 @@ static void ufs_change_blocknr(struct inode *inode, unsigned int count,
			page_cache_release(page);
			page_cache_release(page);
		}
		}
 	}
 	}
	UFSD(("EXIT\n"));
	UFSD("EXIT\n");
}
}


unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
@@ -337,7 +329,7 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
	struct ufs_super_block_first * usb1;
	struct ufs_super_block_first * usb1;
	unsigned cgno, oldcount, newcount, tmp, request, result;
	unsigned cgno, oldcount, newcount, tmp, request, result;
	
	
	UFSD(("ENTER, ino %lu, fragment %u, goal %u, count %u\n", inode->i_ino, fragment, goal, count))
	UFSD("ENTER, ino %lu, fragment %u, goal %u, count %u\n", inode->i_ino, fragment, goal, count);
	
	
	sb = inode->i_sb;
	sb = inode->i_sb;
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
@@ -366,14 +358,14 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
			return (unsigned)-1;
			return (unsigned)-1;
		}
		}
		if (fragment < UFS_I(inode)->i_lastfrag) {
		if (fragment < UFS_I(inode)->i_lastfrag) {
			UFSD(("EXIT (ALREADY ALLOCATED)\n"))
			UFSD("EXIT (ALREADY ALLOCATED)\n");
			unlock_super (sb);
			unlock_super (sb);
			return 0;
			return 0;
		}
		}
	}
	}
	else {
	else {
		if (tmp) {
		if (tmp) {
			UFSD(("EXIT (ALREADY ALLOCATED)\n"))
			UFSD("EXIT (ALREADY ALLOCATED)\n");
			unlock_super(sb);
			unlock_super(sb);
			return 0;
			return 0;
		}
		}
@@ -384,7 +376,7 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
	 */
	 */
	if (!capable(CAP_SYS_RESOURCE) && ufs_freespace(usb1, UFS_MINFREE) <= 0) {
	if (!capable(CAP_SYS_RESOURCE) && ufs_freespace(usb1, UFS_MINFREE) <= 0) {
		unlock_super (sb);
		unlock_super (sb);
		UFSD(("EXIT (FAILED)\n"))
		UFSD("EXIT (FAILED)\n");
		return 0;
		return 0;
	}
	}


@@ -407,7 +399,7 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
			UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
			UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
		}
		}
		unlock_super(sb);
		unlock_super(sb);
		UFSD(("EXIT, result %u\n", result))
		UFSD("EXIT, result %u\n", result);
		return result;
		return result;
	}
	}


@@ -420,7 +412,7 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
		inode->i_blocks += count << uspi->s_nspfshift;
		inode->i_blocks += count << uspi->s_nspfshift;
		UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
		UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
		unlock_super(sb);
		unlock_super(sb);
		UFSD(("EXIT, result %u\n", result))
		UFSD("EXIT, result %u\n", result);
		return result;
		return result;
	}
	}


@@ -458,12 +450,12 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
		if (newcount < request)
		if (newcount < request)
			ufs_free_fragments (inode, result + newcount, request - newcount);
			ufs_free_fragments (inode, result + newcount, request - newcount);
		ufs_free_fragments (inode, tmp, oldcount);
		ufs_free_fragments (inode, tmp, oldcount);
		UFSD(("EXIT, result %u\n", result))
		UFSD("EXIT, result %u\n", result);
		return result;
		return result;
	}
	}


	unlock_super(sb);
	unlock_super(sb);
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	return 0;
	return 0;
}		
}		


@@ -478,7 +470,7 @@ ufs_add_fragments (struct inode * inode, unsigned fragment,
	struct ufs_cylinder_group * ucg;
	struct ufs_cylinder_group * ucg;
	unsigned cgno, fragno, fragoff, count, fragsize, i;
	unsigned cgno, fragno, fragoff, count, fragsize, i;
	
	
	UFSD(("ENTER, fragment %u, oldcount %u, newcount %u\n", fragment, oldcount, newcount))
	UFSD("ENTER, fragment %u, oldcount %u, newcount %u\n", fragment, oldcount, newcount);
	
	
	sb = inode->i_sb;
	sb = inode->i_sb;
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
@@ -538,7 +530,7 @@ ufs_add_fragments (struct inode * inode, unsigned fragment,
	}
	}
	sb->s_dirt = 1;
	sb->s_dirt = 1;


	UFSD(("EXIT, fragment %u\n", fragment))
	UFSD("EXIT, fragment %u\n", fragment);
	
	
	return fragment;
	return fragment;
}
}
@@ -561,7 +553,7 @@ static unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
	struct ufs_cylinder_group * ucg;
	struct ufs_cylinder_group * ucg;
	unsigned oldcg, i, j, k, result, allocsize;
	unsigned oldcg, i, j, k, result, allocsize;
	
	
	UFSD(("ENTER, ino %lu, cgno %u, goal %u, count %u\n", inode->i_ino, cgno, goal, count))
	UFSD("ENTER, ino %lu, cgno %u, goal %u, count %u\n", inode->i_ino, cgno, goal, count);


	sb = inode->i_sb;
	sb = inode->i_sb;
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
@@ -595,7 +587,7 @@ static unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
		UFS_TEST_FREE_SPACE_CG
		UFS_TEST_FREE_SPACE_CG
	}
	}
	
	
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	return 0;
	return 0;


cg_found:
cg_found:
@@ -664,7 +656,7 @@ static unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
	sb->s_dirt = 1;
	sb->s_dirt = 1;


	result += cgno * uspi->s_fpg;
	result += cgno * uspi->s_fpg;
	UFSD(("EXIT3, result %u\n", result))
	UFSD("EXIT3, result %u\n", result);
	return result;
	return result;
}
}


@@ -677,7 +669,7 @@ static unsigned ufs_alloccg_block (struct inode * inode,
	struct ufs_cylinder_group * ucg;
	struct ufs_cylinder_group * ucg;
	unsigned result, cylno, blkno;
	unsigned result, cylno, blkno;


	UFSD(("ENTER, goal %u\n", goal))
	UFSD("ENTER, goal %u\n", goal);


	sb = inode->i_sb;
	sb = inode->i_sb;
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
@@ -721,7 +713,7 @@ static unsigned ufs_alloccg_block (struct inode * inode,
	fs16_sub(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(result)), 1);
	fs16_sub(sb, &ubh_cg_blks(ucpi, cylno, ufs_cbtorpos(result)), 1);
	fs32_sub(sb, &ubh_cg_blktot(ucpi, cylno), 1);
	fs32_sub(sb, &ubh_cg_blktot(ucpi, cylno), 1);
	
	
	UFSD(("EXIT, result %u\n", result))
	UFSD("EXIT, result %u\n", result);


	return result;
	return result;
}
}
@@ -781,7 +773,7 @@ static unsigned ufs_bitmap_search(struct super_block *sb,
	unsigned start, length, loc, result;
	unsigned start, length, loc, result;
	unsigned pos, want, blockmap, mask, end;
	unsigned pos, want, blockmap, mask, end;


	UFSD(("ENTER, cg %u, goal %u, count %u\n", ucpi->c_cgx, goal, count));
	UFSD("ENTER, cg %u, goal %u, count %u\n", ucpi->c_cgx, goal, count);


	usb1 = ubh_get_usb_first (uspi);
	usb1 = ubh_get_usb_first (uspi);
	ucg = ubh_get_ucg(UCPI_UBH(ucpi));
	ucg = ubh_get_ucg(UCPI_UBH(ucpi));
@@ -825,7 +817,7 @@ static unsigned ufs_bitmap_search(struct super_block *sb,
		want = want_arr[count];
		want = want_arr[count];
		for (pos = 0; pos <= uspi->s_fpb - count; pos++) {
		for (pos = 0; pos <= uspi->s_fpb - count; pos++) {
			if ((blockmap & mask) == want) {
			if ((blockmap & mask) == want) {
				UFSD(("EXIT, result %u\n", result));
				UFSD("EXIT, result %u\n", result);
				return result + pos;
				return result + pos;
 			}
 			}
			mask <<= 1;
			mask <<= 1;
@@ -835,7 +827,7 @@ static unsigned ufs_bitmap_search(struct super_block *sb,


	ufs_error(sb, "ufs_bitmap_search", "block not in map on cg %u\n",
	ufs_error(sb, "ufs_bitmap_search", "block not in map on cg %u\n",
		  ucpi->c_cgx);
		  ucpi->c_cgx);
	UFSD(("EXIT (FAILED)\n"));
	UFSD("EXIT (FAILED)\n");
	return (unsigned)-1;
	return (unsigned)-1;
}
}


+11 −20
Original line number Original line Diff line number Diff line
@@ -20,15 +20,6 @@
#include "swab.h"
#include "swab.h"
#include "util.h"
#include "util.h"


#undef UFS_CYLINDER_DEBUG

#ifdef UFS_CYLINDER_DEBUG
#define UFSD(x) printk("(%s, %d), %s:", __FILE__, __LINE__, __FUNCTION__); printk x;
#else
#define UFSD(x)
#endif


/*
/*
 * Read cylinder group into cache. The memory space for ufs_cg_private_info
 * Read cylinder group into cache. The memory space for ufs_cg_private_info
 * structure is already allocated during ufs_read_super.
 * structure is already allocated during ufs_read_super.
@@ -42,7 +33,7 @@ static void ufs_read_cylinder (struct super_block * sb,
	struct ufs_cylinder_group * ucg;
	struct ufs_cylinder_group * ucg;
	unsigned i, j;
	unsigned i, j;


	UFSD(("ENTER, cgno %u, bitmap_nr %u\n", cgno, bitmap_nr))
	UFSD("ENTER, cgno %u, bitmap_nr %u\n", cgno, bitmap_nr);
	uspi = sbi->s_uspi;
	uspi = sbi->s_uspi;
	ucpi = sbi->s_ucpi[bitmap_nr];
	ucpi = sbi->s_ucpi[bitmap_nr];
	ucg = (struct ufs_cylinder_group *)sbi->s_ucg[cgno]->b_data;
	ucg = (struct ufs_cylinder_group *)sbi->s_ucg[cgno]->b_data;
@@ -73,7 +64,7 @@ static void ufs_read_cylinder (struct super_block * sb,
	ucpi->c_clustersumoff = fs32_to_cpu(sb, ucg->cg_u.cg_44.cg_clustersumoff);
	ucpi->c_clustersumoff = fs32_to_cpu(sb, ucg->cg_u.cg_44.cg_clustersumoff);
	ucpi->c_clusteroff = fs32_to_cpu(sb, ucg->cg_u.cg_44.cg_clusteroff);
	ucpi->c_clusteroff = fs32_to_cpu(sb, ucg->cg_u.cg_44.cg_clusteroff);
	ucpi->c_nclusterblks = fs32_to_cpu(sb, ucg->cg_u.cg_44.cg_nclusterblks);
	ucpi->c_nclusterblks = fs32_to_cpu(sb, ucg->cg_u.cg_44.cg_nclusterblks);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return;	
	return;	
	
	
failed:
failed:
@@ -95,11 +86,11 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
	struct ufs_cylinder_group * ucg;
	struct ufs_cylinder_group * ucg;
	unsigned i;
	unsigned i;


	UFSD(("ENTER, bitmap_nr %u\n", bitmap_nr))
	UFSD("ENTER, bitmap_nr %u\n", bitmap_nr);


	uspi = sbi->s_uspi;
	uspi = sbi->s_uspi;
	if (sbi->s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) {
	if (sbi->s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) {
		UFSD(("EXIT\n"))
		UFSD("EXIT\n");
		return;
		return;
	}
	}
	ucpi = sbi->s_ucpi[bitmap_nr];
	ucpi = sbi->s_ucpi[bitmap_nr];
@@ -122,7 +113,7 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
	}
	}


	sbi->s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
	sbi->s_cgno[bitmap_nr] = UFS_CGNO_EMPTY;
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
}
}


/*
/*
@@ -139,7 +130,7 @@ struct ufs_cg_private_info * ufs_load_cylinder (
	struct ufs_cg_private_info * ucpi;
	struct ufs_cg_private_info * ucpi;
	unsigned cg, i, j;
	unsigned cg, i, j;


	UFSD(("ENTER, cgno %u\n", cgno))
	UFSD("ENTER, cgno %u\n", cgno);


	uspi = sbi->s_uspi;
	uspi = sbi->s_uspi;
	if (cgno >= uspi->s_ncg) {
	if (cgno >= uspi->s_ncg) {
@@ -150,7 +141,7 @@ struct ufs_cg_private_info * ufs_load_cylinder (
	 * Cylinder group number cg it in cache and it was last used
	 * Cylinder group number cg it in cache and it was last used
	 */
	 */
	if (sbi->s_cgno[0] == cgno) {
	if (sbi->s_cgno[0] == cgno) {
		UFSD(("EXIT\n"))
		UFSD("EXIT\n");
		return sbi->s_ucpi[0];
		return sbi->s_ucpi[0];
	}
	}
	/*
	/*
@@ -160,16 +151,16 @@ struct ufs_cg_private_info * ufs_load_cylinder (
		if (sbi->s_cgno[cgno] != UFS_CGNO_EMPTY) {
		if (sbi->s_cgno[cgno] != UFS_CGNO_EMPTY) {
			if (sbi->s_cgno[cgno] != cgno) {
			if (sbi->s_cgno[cgno] != cgno) {
				ufs_panic (sb, "ufs_load_cylinder", "internal error, wrong number of cg in cache");
				ufs_panic (sb, "ufs_load_cylinder", "internal error, wrong number of cg in cache");
				UFSD(("EXIT (FAILED)\n"))
				UFSD("EXIT (FAILED)\n");
				return NULL;
				return NULL;
			}
			}
			else {
			else {
				UFSD(("EXIT\n"))
				UFSD("EXIT\n");
				return sbi->s_ucpi[cgno];
				return sbi->s_ucpi[cgno];
			}
			}
		} else {
		} else {
			ufs_read_cylinder (sb, cgno, cgno);
			ufs_read_cylinder (sb, cgno, cgno);
			UFSD(("EXIT\n"))
			UFSD("EXIT\n");
			return sbi->s_ucpi[cgno];
			return sbi->s_ucpi[cgno];
		}
		}
	}
	}
@@ -204,6 +195,6 @@ struct ufs_cg_private_info * ufs_load_cylinder (
		sbi->s_ucpi[0] = ucpi;
		sbi->s_ucpi[0] = ucpi;
		ufs_read_cylinder (sb, cgno, 0);
		ufs_read_cylinder (sb, cgno, 0);
	}
	}
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return sbi->s_ucpi[0];
	return sbi->s_ucpi[0];
}
}
+10 −18
Original line number Original line Diff line number Diff line
@@ -25,14 +25,6 @@
#include "swab.h"
#include "swab.h"
#include "util.h"
#include "util.h"


#undef UFS_DIR_DEBUG

#ifdef UFS_DIR_DEBUG
#define UFSD(x) printk("(%s, %d), %s: ", __FILE__, __LINE__, __FUNCTION__); printk x;
#else
#define UFSD(x)
#endif

/*
/*
 * NOTE! unlike strncmp, ufs_match returns 1 for success, 0 for failure.
 * NOTE! unlike strncmp, ufs_match returns 1 for success, 0 for failure.
 *
 *
@@ -262,7 +254,7 @@ struct ufs_dir_entry *ufs_find_entry(struct inode *dir, struct dentry *dentry,
	struct page *page = NULL;
	struct page *page = NULL;
	struct ufs_dir_entry *de;
	struct ufs_dir_entry *de;


	UFSD(("ENTER, dir_ino %lu, name %s, namlen %u\n", dir->i_ino, name, namelen));
	UFSD("ENTER, dir_ino %lu, name %s, namlen %u\n", dir->i_ino, name, namelen);


	if (npages == 0 || namelen > UFS_MAXNAMLEN)
	if (npages == 0 || namelen > UFS_MAXNAMLEN)
		goto out;
		goto out;
@@ -326,7 +318,7 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode)
	unsigned from, to;
	unsigned from, to;
	int err;
	int err;


	UFSD(("ENTER, name %s, namelen %u\n", name, namelen));
	UFSD("ENTER, name %s, namelen %u\n", name, namelen);


	/*
	/*
	 * We take care of directory expansion in the same loop.
	 * We take care of directory expansion in the same loop.
@@ -442,7 +434,7 @@ ufs_readdir(struct file *filp, void *dirent, filldir_t filldir)
	int need_revalidate = filp->f_version != inode->i_version;
	int need_revalidate = filp->f_version != inode->i_version;
	unsigned flags = UFS_SB(sb)->s_flags;
	unsigned flags = UFS_SB(sb)->s_flags;


	UFSD(("BEGIN"));
	UFSD("BEGIN\n");


	if (pos > inode->i_size - UFS_DIR_REC_LEN(1))
	if (pos > inode->i_size - UFS_DIR_REC_LEN(1))
		return 0;
		return 0;
@@ -484,9 +476,9 @@ ufs_readdir(struct file *filp, void *dirent, filldir_t filldir)


				offset = (char *)de - kaddr;
				offset = (char *)de - kaddr;


				UFSD(("filldir(%s,%u)\n", de->d_name,
				UFSD("filldir(%s,%u)\n", de->d_name,
				      fs32_to_cpu(sb, de->d_ino)));
				      fs32_to_cpu(sb, de->d_ino));
				UFSD(("namlen %u\n", ufs_get_de_namlen(sb, de)));
				UFSD("namlen %u\n", ufs_get_de_namlen(sb, de));


				if ((flags & UFS_DE_MASK) == UFS_DE_44BSD)
				if ((flags & UFS_DE_MASK) == UFS_DE_44BSD)
					d_type = de->d_u.d_44.d_type;
					d_type = de->d_u.d_44.d_type;
@@ -524,12 +516,12 @@ int ufs_delete_entry(struct inode *inode, struct ufs_dir_entry *dir,
	struct ufs_dir_entry *de = (struct ufs_dir_entry *) (kaddr + from);
	struct ufs_dir_entry *de = (struct ufs_dir_entry *) (kaddr + from);
	int err;
	int err;


	UFSD(("ENTER\n"));
	UFSD("ENTER\n");


	UFSD(("ino %u, reclen %u, namlen %u, name %s\n",
	UFSD("ino %u, reclen %u, namlen %u, name %s\n",
	      fs32_to_cpu(sb, de->d_ino),
	      fs32_to_cpu(sb, de->d_ino),
	      fs16_to_cpu(sb, de->d_reclen),
	      fs16_to_cpu(sb, de->d_reclen),
	      ufs_get_de_namlen(sb, de), de->d_name));
	      ufs_get_de_namlen(sb, de), de->d_name);


	while ((char*)de < (char*)dir) {
	while ((char*)de < (char*)dir) {
		if (de->d_reclen == 0) {
		if (de->d_reclen == 0) {
@@ -554,7 +546,7 @@ int ufs_delete_entry(struct inode *inode, struct ufs_dir_entry *dir,
	mark_inode_dirty(inode);
	mark_inode_dirty(inode);
out:
out:
	ufs_put_page(page);
	ufs_put_page(page);
	UFSD(("EXIT\n"));
	UFSD("EXIT\n");
	return err;
	return err;
}
}


+7 −15
Original line number Original line Diff line number Diff line
@@ -34,14 +34,6 @@
#include "swab.h"
#include "swab.h"
#include "util.h"
#include "util.h"


#undef UFS_IALLOC_DEBUG

#ifdef UFS_IALLOC_DEBUG
#define UFSD(x) printk("(%s, %d), %s: ", __FILE__, __LINE__, __FUNCTION__); printk x;
#else
#define UFSD(x)
#endif

/*
/*
 * NOTE! When we get the inode, we're the only people
 * NOTE! When we get the inode, we're the only people
 * that have access to it, and as such there are no
 * that have access to it, and as such there are no
@@ -68,7 +60,7 @@ void ufs_free_inode (struct inode * inode)
	int is_directory;
	int is_directory;
	unsigned ino, cg, bit;
	unsigned ino, cg, bit;
	
	
	UFSD(("ENTER, ino %lu\n", inode->i_ino))
	UFSD("ENTER, ino %lu\n", inode->i_ino);


	sb = inode->i_sb;
	sb = inode->i_sb;
	uspi = UFS_SB(sb)->s_uspi;
	uspi = UFS_SB(sb)->s_uspi;
@@ -130,7 +122,7 @@ void ufs_free_inode (struct inode * inode)
	
	
	sb->s_dirt = 1;
	sb->s_dirt = 1;
	unlock_super (sb);
	unlock_super (sb);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
}
}


/*
/*
@@ -155,7 +147,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
	unsigned cg, bit, i, j, start;
	unsigned cg, bit, i, j, start;
	struct ufs_inode_info *ufsi;
	struct ufs_inode_info *ufsi;


	UFSD(("ENTER\n"))
	UFSD("ENTER\n");
	
	
	/* Cannot create files in a deleted directory */
	/* Cannot create files in a deleted directory */
	if (!dir || !dir->i_nlink)
	if (!dir || !dir->i_nlink)
@@ -227,7 +219,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
			goto failed;
			goto failed;
		}
		}
	}
	}
	UFSD(("start = %u, bit = %u, ipg = %u\n", start, bit, uspi->s_ipg))
	UFSD("start = %u, bit = %u, ipg = %u\n", start, bit, uspi->s_ipg);
	if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit))
	if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit))
		ubh_setbit (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit);
		ubh_setbit (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit);
	else {
	else {
@@ -287,14 +279,14 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
		return ERR_PTR(-EDQUOT);
		return ERR_PTR(-EDQUOT);
	}
	}


	UFSD(("allocating inode %lu\n", inode->i_ino))
	UFSD("allocating inode %lu\n", inode->i_ino);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return inode;
	return inode;


failed:
failed:
	unlock_super (sb);
	unlock_super (sb);
	make_bad_inode(inode);
	make_bad_inode(inode);
	iput (inode);
	iput (inode);
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	return ERR_PTR(-ENOSPC);
	return ERR_PTR(-ENOSPC);
}
}
Loading