btrfs: fix EIO misuse to report missing degraded option
authorAnand Jain <anand.jain@oracle.com>
Mon, 9 Oct 2017 03:07:44 +0000 (11:07 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 30 Oct 2017 11:27:59 +0000 (12:27 +0100)
EIO is only for the IO failure to the device, avoid it. Use ENOENT as
that's the closest error code describing what happened.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ update changelog ]
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/volumes.c

index 23b628cfad198e3d8141aa0959c45ec1a582f171..3896dfd6c8e04784aa1f7a75429dd41e456091aa 100644 (file)
@@ -6437,7 +6437,7 @@ static int read_one_chunk(struct btrfs_fs_info *fs_info, struct btrfs_key *key,
                    !btrfs_test_opt(fs_info, DEGRADED)) {
                        free_extent_map(em);
                        btrfs_report_missing_device(fs_info, devid, uuid);
-                       return -EIO;
+                       return -ENOENT;
                }
                if (!map->stripes[i].dev) {
                        map->stripes[i].dev =
@@ -6570,7 +6570,7 @@ static int read_one_dev(struct btrfs_fs_info *fs_info,
        if (!device) {
                if (!btrfs_test_opt(fs_info, DEGRADED)) {
                        btrfs_report_missing_device(fs_info, devid, dev_uuid);
-                       return -EIO;
+                       return -ENOENT;
                }
 
                device = add_missing_dev(fs_devices, devid, dev_uuid);
@@ -6585,7 +6585,7 @@ static int read_one_dev(struct btrfs_fs_info *fs_info,
                if (!device->bdev) {
                        btrfs_report_missing_device(fs_info, devid, dev_uuid);
                        if (!btrfs_test_opt(fs_info, DEGRADED))
-                               return -EIO;
+                               return -ENOENT;
                }
 
                if(!device->bdev && !device->missing) {