All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: chris.mason@oracle.com, akpm@osdl.org
Cc: linux-fsdevel@vger.kernel.org, reiserfs-devel@vger.kernel.org
Subject: Re: [PATCH] reiserfs: use open_bdev_excl
Date: Thu, 7 Feb 2008 05:45:13 +0100	[thread overview]
Message-ID: <20080207044513.GA4088@lst.de> (raw)
In-Reply-To: <20071226153101.GA2428@lst.de>

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 <hch@lst.de>
> 
> Index: linux-2.6-xfs/fs/reiserfs/journal.c
> ===================================================================
> --- linux-2.6-xfs.orig/fs/reiserfs/journal.c	2007-12-13 18:55:40.000000000 +0100
> +++ linux-2.6-xfs/fs/reiserfs/journal.c	2007-12-26 15:13:22.000000000 +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.000000000 +0100
> +++ linux-2.6-xfs/include/linux/reiserfs_fs_sb.h	2007-12-26 15:13:22.000000000 +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---

  reply	other threads:[~2008-02-07  4:45 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-26 15:31 [PATCH] reiserfs: use open_bdev_excl Christoph Hellwig
2008-02-07  4:45 ` Christoph Hellwig [this message]
2008-02-07  5:16   ` Andrew Morton
2008-02-07  5:19     ` Christoph Hellwig
2008-04-29 18:13 ` Christoph Hellwig
2008-04-29 18:24   ` Andrew Morton
2008-04-29 22:49   ` Edward Shishkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080207044513.GA4088@lst.de \
    --to=hch@lst.de \
    --cc=akpm@osdl.org \
    --cc=chris.mason@oracle.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=reiserfs-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.