Re: [PATCH] reiserfs: use open_bdev_excl
On Wed, Feb 06, 2008 at 09:16:27PM -0800, Andrew Morton wrote: > On Thu, 7 Feb 2008 05:45:13 +0100 Christoph Hellwig <[EMAIL PROTECTED]> wrote: > > > On Wed, Dec 26, 2007 at 04:31:01PM +0100, Christoph Hellwig wrote: > > > Use the proper helper to open a blockdevice by name for filesystem > > > use, this makes sure it's properly claimed (also added for open-by-number) > > > and gets rid of the struct file abuse. > > > > > > Tested by mounting a reiserfs filesystem with external journal. > > > > Folks, what do we do with this patch? It's been out for more than a > > month but didn't actually get picked up in any tree. > > It's still sitting in the great pile of things I got sent over Christmas > and haven't looked at yet. It didn't look like a bugfix. Well, it's fixing that reiserds doesn't bd_claim it's journal device so people can open the block device with O_EXCL against the documetned semantics. It's probably also fixing various corner cases that open_bdev_excl deals with and a hand-crafted filp_open doesn't. > > I'd really like > > to see this going in soon. > > How come? I just hate sitting on a stack of patches. Even more so if I'd like to see the public API removed in there eventually go away. - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] reiserfs: use open_bdev_excl
On Thu, 7 Feb 2008 05:45:13 +0100 Christoph Hellwig <[EMAIL PROTECTED]> wrote: > On Wed, Dec 26, 2007 at 04:31:01PM +0100, Christoph Hellwig wrote: > > Use the proper helper to open a blockdevice by name for filesystem > > use, this makes sure it's properly claimed (also added for open-by-number) > > and gets rid of the struct file abuse. > > > > Tested by mounting a reiserfs filesystem with external journal. > > Folks, what do we do with this patch? It's been out for more than a > month but didn't actually get picked up in any tree. It's still sitting in the great pile of things I got sent over Christmas and haven't looked at yet. It didn't look like a bugfix. > I'd really like > to see this going in soon. How come? - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] reiserfs: use open_bdev_excl
On Wed, Dec 26, 2007 at 04:31:01PM +0100, Christoph Hellwig wrote: > Use the proper helper to open a blockdevice by name for filesystem > use, this makes sure it's properly claimed (also added for open-by-number) > and gets rid of the struct file abuse. > > Tested by mounting a reiserfs filesystem with external journal. Folks, what do we do with this patch? It's been out for more than a month but didn't actually get picked up in any tree. I'd really like to see this going in soon. > Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]> > > Index: linux-2.6-xfs/fs/reiserfs/journal.c > === > --- linux-2.6-xfs.orig/fs/reiserfs/journal.c 2007-12-13 18:55:40.0 > +0100 > +++ linux-2.6-xfs/fs/reiserfs/journal.c 2007-12-26 15:13:22.0 > +0100 > @@ -2574,11 +2574,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; > } > @@ -2603,7 +2601,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; > > @@ -2620,35 +2617,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-xfs/include/linux/reiserfs_fs_sb.h > === > --- linux-2.6-xfs.orig/include/linux/reiserfs_fs_sb.h 2007-12-13 > 19:06:58.0 +0100 > +++ linux-2.6-xfs/include/linux/reiserfs_fs_sb.h 2007-12-26 > 15:13:22.0 +0100 > @@ -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 */ > ---end quoted text--- - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the
[PATCH] reiserfs: use open_bdev_excl
Use the proper helper to open a blockdevice by name for filesystem use, this makes sure it's properly claimed (also added for open-by-number) and gets rid of the struct file abuse. Tested by mounting a reiserfs filesystem with external journal. Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]> Index: linux-2.6-xfs/fs/reiserfs/journal.c === --- linux-2.6-xfs.orig/fs/reiserfs/journal.c2007-12-13 18:55:40.0 +0100 +++ linux-2.6-xfs/fs/reiserfs/journal.c 2007-12-26 15:13:22.0 +0100 @@ -2574,11 +2574,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; } @@ -2603,7 +2601,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; @@ -2620,35 +2617,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-xfs/include/linux/reiserfs_fs_sb.h === --- linux-2.6-xfs.orig/include/linux/reiserfs_fs_sb.h 2007-12-13 19:06:58.0 +0100 +++ linux-2.6-xfs/include/linux/reiserfs_fs_sb.h2007-12-26 15:13:22.0 +0100 @@ -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 */ - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html