All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anand Jain <anand.jain@oracle.com>
To: linux-btrfs@vger.kernel.org
Cc: clm@fb.com, dsterba@suse.cz
Subject: [PATCH 06/23] Btrfs: SB read failure should return EIO for __bread failure
Date: Fri, 14 Aug 2015 18:32:51 +0800	[thread overview]
Message-ID: <1439548388-29686-7-git-send-email-anand.jain@oracle.com> (raw)
In-Reply-To: <1439548388-29686-1-git-send-email-anand.jain@oracle.com>

This will return EIO when __bread() fails to read SB,
instead of EINVAL.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 fs/btrfs/disk-io.c | 18 +++++++++++++++---
 fs/btrfs/volumes.c |  8 ++++----
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 8571025..faf5b8d 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2648,8 +2648,8 @@ int open_ctree(struct super_block *sb,
 	 * Read super block and check the signature bytes only
 	 */
 	bh = btrfs_read_dev_super(fs_devices->latest_bdev);
-	if (!bh) {
-		err = -EINVAL;
+	if (IS_ERR(bh)) {
+		err = PTR_ERR(bh);
 		goto fail_alloc;
 	}
 
@@ -3191,6 +3191,7 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)
 	int i;
 	u64 transid = 0;
 	u64 bytenr;
+	int ret = -EINVAL;
 
 	/* we would like to check all the supers, but that would make
 	 * a btrfs mount succeed after a mkfs from a different FS.
@@ -3204,13 +3205,20 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)
 			break;
 		bh = __bread(bdev, bytenr / 4096,
 					BTRFS_SUPER_INFO_SIZE);
-		if (!bh)
+		/*
+		 * If we fail to read from the underlaying drivers, as of now
+		 * the best option we have is to mark it EIO.
+		 */
+		if (!bh) {
+			ret = -EIO;
 			continue;
+		}
 
 		super = (struct btrfs_super_block *)bh->b_data;
 		if (btrfs_super_bytenr(super) != bytenr ||
 		    btrfs_super_magic(super) != BTRFS_MAGIC) {
 			brelse(bh);
+			ret = -EINVAL;
 			continue;
 		}
 
@@ -3222,6 +3230,10 @@ struct buffer_head *btrfs_read_dev_super(struct block_device *bdev)
 			brelse(bh);
 		}
 	}
+
+	if (!latest)
+		return ERR_PTR(ret);
+
 	return latest;
 }
 
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 8368393..a3fde18 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -211,8 +211,8 @@ btrfs_get_bdev_and_sb(const char *device_path, fmode_t flags, void *holder,
 	}
 	invalidate_bdev(*bdev);
 	*bh = btrfs_read_dev_super(*bdev);
-	if (!*bh) {
-		ret = -EINVAL;
+	if (IS_ERR(*bh)) {
+		ret = PTR_ERR(*bh);
 		blkdev_put(*bdev, flags);
 		goto error;
 	}
@@ -6842,8 +6842,8 @@ int btrfs_scratch_superblock(struct btrfs_device *device)
 	struct btrfs_super_block *disk_super;
 
 	bh = btrfs_read_dev_super(device->bdev);
-	if (!bh)
-		return -EINVAL;
+	if (IS_ERR(bh))
+		return PTR_ERR(bh);
 	disk_super = (struct btrfs_super_block *)bh->b_data;
 
 	memset(&disk_super->magic, 0, sizeof(disk_super->magic));
-- 
2.4.1


  parent reply	other threads:[~2015-08-14 10:33 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-14 10:32 [PATCH 00/23] btrfs device related patch set Anand Jain
2015-08-14 10:32 ` [PATCH 01/23] Btrfs: rename btrfs_sysfs_add_one to btrfs_sysfs_add_mounted Anand Jain
2015-08-14 10:32 ` [PATCH 02/23] Btrfs: rename btrfs_sysfs_remove_one to btrfs_sysfs_remove_mounted Anand Jain
2015-08-14 10:32 ` [PATCH 03/23] Btrfs: rename btrfs_kobj_add_device to btrfs_sysfs_add_device_link Anand Jain
2015-08-14 10:32 ` [PATCH 04/23] Btrfs: rename btrfs_kobj_rm_device to btrfs_sysfs_rm_device_link Anand Jain
2015-08-14 10:32 ` [PATCH 05/23] Btrfs: rename super_kobj to fsid_kobj Anand Jain
2015-08-14 10:32 ` Anand Jain [this message]
2015-08-14 10:32 ` [PATCH 07/23] Btrfs: __btrfs_std_error() logic should be consistent w/out CONFIG_PRINTK defined Anand Jain
2015-08-14 10:32 ` [PATCH 08/23] Btrfs: device delete by devid Anand Jain
2015-10-06  9:38   ` [PATCH V4 08/23] Btrfs: Introduce " Anand Jain
2015-08-14 10:32 ` [PATCH 09/23] Btrfs: move check for min number of devices to a function Anand Jain
2015-08-14 10:32 ` [PATCH 10/23] Btrfs: rename btrfs_dev_replace_find_srcdev() Anand Jain
2015-08-14 10:32 ` [PATCH 11/23] Btrfs: use BTRFS_ERROR_DEV_MISSING_NOT_FOUND when missing device is not found Anand Jain
2015-08-14 10:32 ` [PATCH 12/23] Btrfs: use btrfs_find_device_by_user_input() Anand Jain
2015-08-14 10:32 ` [PATCH 13/23] Btrfs: add btrfs_read_dev_one_super() to read one specific SB Anand Jain
2015-08-14 10:32 ` [PATCH 14/23] Btrfs: fix btrfs_scratch_superblock() with fixes from device delete Anand Jain
2015-08-14 10:33 ` [PATCH 15/23] Btrfs: use btrfs_scratch_superblock() in btrfs_rm_device() Anand Jain
2015-08-14 10:33 ` [PATCH 16/23] Btrfs: device path change must be logged Anand Jain
2015-10-01 13:40   ` David Sterba
2015-10-01 13:47     ` Anand Jain
2015-10-05  8:50       ` Anand Jain
2015-08-14 10:33 ` [PATCH 17/23] Btrfs: kernel operation should come after user input has been verified Anand Jain
2015-08-14 10:33 ` [PATCH 18/23] Btrfs: check device_path in btrfs_find_device_by_user_input() Anand Jain
2015-08-14 10:33 ` [PATCH 19/23] Btrfs: avoid user cli usage error logging into the sys log Anand Jain
2015-08-14 10:33 ` [PATCH 20/23] Btrfs: move device close to btrfs_close_one_device Anand Jain
2015-08-14 10:33 ` [PATCH 21/23] Btrfs: fix fs logging for multi device Anand Jain
2015-10-01 13:45   ` David Sterba
2015-10-01 13:48     ` Anand Jain
2015-08-14 10:33 ` [PATCH 22/23] Btrfs: move kobj stuff out of dev_replace lock range Anand Jain
2015-08-14 10:33 ` [PATCH 23/23] Btrfs: allow -o rw,degraded for single group profile Anand Jain
2015-09-29 14:34 ` [PATCH 00/23] btrfs device related patch set David Sterba
2015-09-29 22:10   ` Anand Jain
2015-09-30 15:05     ` David Sterba
2015-10-01 14:42       ` David Sterba
2015-10-01 15:00         ` Anand Jain
2015-10-01 16:17           ` David Sterba
2015-10-02  8:07             ` Anand Jain

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=1439548388-29686-7-git-send-email-anand.jain@oracle.com \
    --to=anand.jain@oracle.com \
    --cc=clm@fb.com \
    --cc=dsterba@suse.cz \
    --cc=linux-btrfs@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.