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 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
	  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

menu "Network File Systems"
+27 −35
Original line number Diff line number Diff line
@@ -21,14 +21,6 @@
#include "swab.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_alloc_fragments (struct inode *, unsigned, unsigned, 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;
	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)
		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;
	
	unlock_super (sb);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return;

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

@@ -148,7 +140,7 @@ void ufs_free_blocks(struct inode *inode, unsigned fragment, unsigned count)
	uspi = UFS_SB(sb)->s_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)) {
		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;
	unlock_super (sb);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return;

failed:
	unlock_super (sb);
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	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;

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

	BUG_ON(!PageLocked(locked_page));

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

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;
	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;
	uspi = UFS_SB(sb)->s_uspi;
@@ -366,14 +358,14 @@ unsigned ufs_new_fragments(struct inode * inode, __fs32 * p, unsigned fragment,
			return (unsigned)-1;
		}
		if (fragment < UFS_I(inode)->i_lastfrag) {
			UFSD(("EXIT (ALREADY ALLOCATED)\n"))
			UFSD("EXIT (ALREADY ALLOCATED)\n");
			unlock_super (sb);
			return 0;
		}
	}
	else {
		if (tmp) {
			UFSD(("EXIT (ALREADY ALLOCATED)\n"))
			UFSD("EXIT (ALREADY ALLOCATED)\n");
			unlock_super(sb);
			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) {
		unlock_super (sb);
		UFSD(("EXIT (FAILED)\n"))
		UFSD("EXIT (FAILED)\n");
		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);
		}
		unlock_super(sb);
		UFSD(("EXIT, result %u\n", result))
		UFSD("EXIT, result %u\n", 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;
		UFS_I(inode)->i_lastfrag = max_t(u32, UFS_I(inode)->i_lastfrag, fragment + count);
		unlock_super(sb);
		UFSD(("EXIT, result %u\n", result))
		UFSD("EXIT, result %u\n", result);
		return result;
	}

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

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

@@ -478,7 +470,7 @@ ufs_add_fragments (struct inode * inode, unsigned fragment,
	struct ufs_cylinder_group * ucg;
	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;
	uspi = UFS_SB(sb)->s_uspi;
@@ -538,7 +530,7 @@ ufs_add_fragments (struct inode * inode, unsigned fragment,
	}
	sb->s_dirt = 1;

	UFSD(("EXIT, fragment %u\n", fragment))
	UFSD("EXIT, fragment %u\n", fragment);
	
	return fragment;
}
@@ -561,7 +553,7 @@ static unsigned ufs_alloc_fragments (struct inode * inode, unsigned cgno,
	struct ufs_cylinder_group * ucg;
	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;
	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
	}
	
	UFSD(("EXIT (FAILED)\n"))
	UFSD("EXIT (FAILED)\n");
	return 0;

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

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

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

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

	sb = inode->i_sb;
	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);
	fs32_sub(sb, &ubh_cg_blktot(ucpi, cylno), 1);
	
	UFSD(("EXIT, result %u\n", result))
	UFSD("EXIT, result %u\n", result);

	return result;
}
@@ -781,7 +773,7 @@ static unsigned ufs_bitmap_search(struct super_block *sb,
	unsigned start, length, loc, result;
	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);
	ucg = ubh_get_ucg(UCPI_UBH(ucpi));
@@ -825,7 +817,7 @@ static unsigned ufs_bitmap_search(struct super_block *sb,
		want = want_arr[count];
		for (pos = 0; pos <= uspi->s_fpb - count; pos++) {
			if ((blockmap & mask) == want) {
				UFSD(("EXIT, result %u\n", result));
				UFSD("EXIT, result %u\n", result);
				return result + pos;
 			}
			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",
		  ucpi->c_cgx);
	UFSD(("EXIT (FAILED)\n"));
	UFSD("EXIT (FAILED)\n");
	return (unsigned)-1;
}

+11 −20
Original line number Diff line number Diff line
@@ -20,15 +20,6 @@
#include "swab.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
 * 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;
	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;
	ucpi = sbi->s_ucpi[bitmap_nr];
	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_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);
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return;	
	
failed:
@@ -95,11 +86,11 @@ void ufs_put_cylinder (struct super_block * sb, unsigned bitmap_nr)
	struct ufs_cylinder_group * ucg;
	unsigned i;

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

	uspi = sbi->s_uspi;
	if (sbi->s_cgno[bitmap_nr] == UFS_CGNO_EMPTY) {
		UFSD(("EXIT\n"))
		UFSD("EXIT\n");
		return;
	}
	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;
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
}

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

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

	uspi = sbi->s_uspi;
	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
	 */
	if (sbi->s_cgno[0] == cgno) {
		UFSD(("EXIT\n"))
		UFSD("EXIT\n");
		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] != cgno) {
				ufs_panic (sb, "ufs_load_cylinder", "internal error, wrong number of cg in cache");
				UFSD(("EXIT (FAILED)\n"))
				UFSD("EXIT (FAILED)\n");
				return NULL;
			}
			else {
				UFSD(("EXIT\n"))
				UFSD("EXIT\n");
				return sbi->s_ucpi[cgno];
			}
		} else {
			ufs_read_cylinder (sb, cgno, cgno);
			UFSD(("EXIT\n"))
			UFSD("EXIT\n");
			return sbi->s_ucpi[cgno];
		}
	}
@@ -204,6 +195,6 @@ struct ufs_cg_private_info * ufs_load_cylinder (
		sbi->s_ucpi[0] = ucpi;
		ufs_read_cylinder (sb, cgno, 0);
	}
	UFSD(("EXIT\n"))
	UFSD("EXIT\n");
	return sbi->s_ucpi[0];
}
+10 −18
Original line number Diff line number Diff line
@@ -25,14 +25,6 @@
#include "swab.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.
 *
@@ -262,7 +254,7 @@ struct ufs_dir_entry *ufs_find_entry(struct inode *dir, struct dentry *dentry,
	struct page *page = NULL;
	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)
		goto out;
@@ -326,7 +318,7 @@ int ufs_add_link(struct dentry *dentry, struct inode *inode)
	unsigned from, to;
	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.
@@ -442,7 +434,7 @@ ufs_readdir(struct file *filp, void *dirent, filldir_t filldir)
	int need_revalidate = filp->f_version != inode->i_version;
	unsigned flags = UFS_SB(sb)->s_flags;

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

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

				offset = (char *)de - kaddr;

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

				if ((flags & UFS_DE_MASK) == UFS_DE_44BSD)
					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);
	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),
	      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) {
		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);
out:
	ufs_put_page(page);
	UFSD(("EXIT\n"));
	UFSD("EXIT\n");
	return err;
}

+7 −15
Original line number Diff line number Diff line
@@ -34,14 +34,6 @@
#include "swab.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
 * 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;
	unsigned ino, cg, bit;
	
	UFSD(("ENTER, ino %lu\n", inode->i_ino))
	UFSD("ENTER, ino %lu\n", inode->i_ino);

	sb = inode->i_sb;
	uspi = UFS_SB(sb)->s_uspi;
@@ -130,7 +122,7 @@ void ufs_free_inode (struct inode * inode)
	
	sb->s_dirt = 1;
	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;
	struct ufs_inode_info *ufsi;

	UFSD(("ENTER\n"))
	UFSD("ENTER\n");
	
	/* Cannot create files in a deleted directory */
	if (!dir || !dir->i_nlink)
@@ -227,7 +219,7 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
			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))
		ubh_setbit (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit);
	else {
@@ -287,14 +279,14 @@ struct inode * ufs_new_inode(struct inode * dir, int mode)
		return ERR_PTR(-EDQUOT);
	}

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

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