[RFC][PATCH] stop abusing filp_open in reiserfs journal code

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Christoph Hellwig
Date: Friday, September 28, 2007 - 12:29 am

And here's a patch to stop the filp abuse in the journal code.  An additional
benefit is that the block device is now properly claimed when opened by
device number.


Index: linux-2.6/fs/reiserfs/journal.c
===================================================================
--- linux-2.6.orig/fs/reiserfs/journal.c	2007-09-28 09:18:50.000000000 +0200
+++ linux-2.6/fs/reiserfs/journal.c	2007-09-28 09:28:36.000000000 +0200
@@ -2544,11 +2544,9 @@ static int release_journal_dev(struct su
 
 	result = 0;
 
-	if (journal->j_dev_file != NULL) {
-		result = filp_close(journal->j_dev_file, NULL);
-		journal->j_dev_file = NULL;
-		journal->j_dev_bd = NULL;
-	} else if (journal->j_dev_bd != NULL) {
+	if (journal->j_dev_bd != NULL) {
+		if (journal->j_dev_bd->bd_dev != super->s_dev)
+			bd_release(journal->j_dev_bd);
 		result = blkdev_put(journal->j_dev_bd);
 		journal->j_dev_bd = NULL;
 	}
@@ -2573,7 +2571,6 @@ static int journal_init_dev(struct super
 	result = 0;
 
 	journal->j_dev_bd = NULL;
-	journal->j_dev_file = NULL;
 	jdev = SB_ONDISK_JOURNAL_DEVICE(super) ?
 	    new_decode_dev(SB_ONDISK_JOURNAL_DEVICE(super)) : super->s_dev;
 
@@ -2590,35 +2587,34 @@ static int journal_init_dev(struct super
 					 "cannot init journal device '%s': %i",
 					 __bdevname(jdev, b), result);
 			return result;
-		} else if (jdev != super->s_dev)
+		} else if (jdev != super->s_dev) {
+			result = bd_claim(journal->j_dev_bd, journal);
+			if (result) {
+				blkdev_put(journal->j_dev_bd);
+				return result;
+			}
+
 			set_blocksize(journal->j_dev_bd, super->s_blocksize);
+		}
+
 		return 0;
 	}
 
-	journal->j_dev_file = filp_open(jdev_name, 0, 0);
-	if (!IS_ERR(journal->j_dev_file)) {
-		struct inode *jdev_inode = journal->j_dev_file->f_mapping->host;
-		if (!S_ISBLK(jdev_inode->i_mode)) {
-			reiserfs_warning(super, "journal_init_dev: '%s' is "
-					 "not a block device", jdev_name);
-			result = -ENOTBLK;
-			release_journal_dev(super, journal);
-		} else {
-			/* ok */
-			journal->j_dev_bd = I_BDEV(jdev_inode);
-			set_blocksize(journal->j_dev_bd, super->s_blocksize);
-			reiserfs_info(super,
-				      "journal_init_dev: journal device: %s\n",
-				      bdevname(journal->j_dev_bd, b));
-		}
-	} else {
-		result = PTR_ERR(journal->j_dev_file);
-		journal->j_dev_file = NULL;
+	journal->j_dev_bd = open_bdev_excl(jdev_name, 0, journal);
+	if (IS_ERR(journal->j_dev_bd)) {
+		result = PTR_ERR(journal->j_dev_bd);
+		journal->j_dev_bd = NULL;
 		reiserfs_warning(super,
 				 "journal_init_dev: Cannot open '%s': %i",
 				 jdev_name, result);
+		return result;
 	}
-	return result;
+
+	set_blocksize(journal->j_dev_bd, super->s_blocksize);
+	reiserfs_info(super,
+		      "journal_init_dev: journal device: %s\n",
+		      bdevname(journal->j_dev_bd, b));
+	return 0;
 }
 
 /*
Index: linux-2.6/include/linux/reiserfs_fs_sb.h
===================================================================
--- linux-2.6.orig/include/linux/reiserfs_fs_sb.h	2007-09-28 09:24:27.000000000 +0200
+++ linux-2.6/include/linux/reiserfs_fs_sb.h	2007-09-28 09:24:31.000000000 +0200
@@ -177,7 +177,6 @@ struct reiserfs_journal {
 	struct reiserfs_journal_cnode *j_last;	/* newest journal block */
 	struct reiserfs_journal_cnode *j_first;	/*  oldest journal block.  start here for traverse */
 
-	struct file *j_dev_file;
 	struct block_device *j_dev_bd;
 	int j_1st_reserved_block;	/* first block on s_dev of reserved area journal */
 


-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.23-rc8-mm2, Andrew Morton, (Thu Sep 27, 2:22 am)
Re: 2.6.23-rc8-mm2 - drivers/net/ibm_newemac/mal - broken, Kamalesh Babulal, (Thu Sep 27, 3:52 am)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Rafael J. Wysocki, (Thu Sep 27, 8:19 am)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Thomas Gleixner, (Thu Sep 27, 8:49 am)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Rafael J. Wysocki, (Thu Sep 27, 8:59 am)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Sam Ravnborg, (Thu Sep 27, 9:53 am)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Randy Dunlap, (Thu Sep 27, 10:33 am)
Re: 2.6.23-rc8-mm2: BUG near reiserfs_xattr_set, Laurent Riffard, (Thu Sep 27, 12:18 pm)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Sam Ravnborg, (Thu Sep 27, 12:19 pm)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Randy Dunlap, (Thu Sep 27, 12:37 pm)
Re: 2.6.23-rc8-mm2: BUG near reiserfs_xattr_set, Andrew Morton, (Thu Sep 27, 12:48 pm)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Rafael J. Wysocki, (Thu Sep 27, 12:48 pm)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Rafael J. Wysocki, (Thu Sep 27, 1:01 pm)
Re: 2.6.23-rc8-mm2: BUG near reiserfs_xattr_set, Dave Hansen, (Thu Sep 27, 1:05 pm)
Re: 2.6.23-rc8-mm2: BUG near reiserfs_xattr_set, Christoph Hellwig, (Thu Sep 27, 1:26 pm)
Re: [RFC][PATCH] make reiserfs stop using 'struct file' fo ..., Christoph Hellwig, (Thu Sep 27, 2:04 pm)
Re: [RFC][PATCH] make reiserfs stop using 'struct file' fo ..., Christoph Hellwig, (Fri Sep 28, 12:16 am)
[RFC][PATCH] stop abusing filp_open in reiserfs journal code, Christoph Hellwig, (Fri Sep 28, 12:29 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Cedric Le Goater, (Fri Sep 28, 8:42 am)
Re: /proc/net/ bad hard links count [Was: 2.6.23-rc8-mm2], Eric W. Biederman, (Fri Sep 28, 10:03 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Ilpo Järvinen, (Fri Sep 28, 12:10 pm)
Re: 2.6.23-rc8-mm2: problems on HP nx6325, Rafael J. Wysocki, (Fri Sep 28, 2:31 pm)
Re: 2.6.23-rc8-mm2, Dave Young, (Sat Sep 29, 2:37 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Ilpo Järvinen, (Sat Sep 29, 5:44 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Cedric Le Goater, (Sat Sep 29, 7:55 am)
Re: 2.6.23-rc8-mm2, Greg KH, (Sat Sep 29, 8:19 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Ilpo Järvinen, (Sat Sep 29, 1:49 pm)
Re: 2.6.23-rc8-mm2, Dave Young, (Sat Sep 29, 6:29 pm)
Re: 2.6.23-rc8-mm2, Valdis.Kletnieks, (Sat Sep 29, 7:26 pm)
Re: 2.6.23-rc8-mm2, thunder7, (Sat Sep 29, 10:18 pm)
Re: 2.6.23-rc8-mm2, Andrew Morton, (Sun Sep 30, 1:50 am)
Re: 2.6.23-rc8-mm2, Rafael J. Wysocki, (Sun Sep 30, 1:01 pm)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Cedric Le Goater, (Mon Oct 1, 2:26 am)
Re: 2.6.23-rc8-mm2, Valdis.Kletnieks, (Mon Oct 1, 9:12 am)
Re: 2.6.23-rc8-mm2, Valdis.Kletnieks, (Mon Oct 1, 10:12 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Ilpo Järvinen, (Tue Oct 2, 3:26 am)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Ilpo Järvinen, (Tue Oct 2, 1:06 pm)
Re: 2.6.23-rc8-mm2 - tcp_fastretrans_alert() WARNING, Ilpo Järvinen, (Tue Oct 2, 2:48 pm)
Re: 2.6.23-rc8-mm2, Dave Young, (Sun Oct 7, 11:43 pm)
Re: 2.6.23-rc8-mm2, Matt Mackall, (Tue Oct 9, 10:49 am)