All of lore.kernel.org
 help / color / mirror / Atom feed
From: Edward Shishkin <edward.shishkin@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: chris.mason@oracle.com, Andrew Morton <akpm@linux-foundation.org>,
	linux-fsdevel@vger.kernel.org, reiserfs-devel@vger.kernel.org
Subject: Re: [PATCH] reiserfs: use open_bdev_excl
Date: Wed, 30 Apr 2008 02:49:11 +0400	[thread overview]
Message-ID: <4817A5E7.6040307@gmail.com> (raw)
In-Reply-To: <20080429181322.GA21741@lst.de>

Christoph Hellwig 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.
>>    
>>
>
>Any reason this still didn't get sent to Linus?
>
>  
>
>>Signed-off-by: Christoph Hellwig <hch@lst.de>
>>    
>>

Acked-by: Edward Shishkin <edward.shishkin@gmail.com>


>>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---
>--
>To unsubscribe from this list: send the line "unsubscribe reiserfs-devel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>  
>


      parent reply	other threads:[~2008-04-29 22:49 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
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 [this message]

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=4817A5E7.6040307@gmail.com \
    --to=edward.shishkin@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chris.mason@oracle.com \
    --cc=hch@lst.de \
    --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.