diff mbox series

btrfs: Move missing device handling in a dedicate function

Message ID 20220111160026.1900599-1-nborisov@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: Move missing device handling in a dedicate function | expand

Commit Message

Nikolay Borisov Jan. 11, 2022, 4 p.m. UTC
This simplifies the code flow in read_one_chunk and makes error handling
when handling missing devices a bit simipler by reducing it to a single
check if something went wrong. No functional changes.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 fs/btrfs/volumes.c | 39 +++++++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 14 deletions(-)

Comments

Su Yue Jan. 12, 2022, 3:28 a.m. UTC | #1
On Tue 11 Jan 2022 at 18:00, Nikolay Borisov <nborisov@suse.com> 
wrote:

> This simplifies the code flow in read_one_chunk and makes error 
> handling
> when handling missing devices a bit simipler by reducing it to a 
> single
> check if something went wrong. No functional changes.
>
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>
> ---
>  fs/btrfs/volumes.c | 39 +++++++++++++++++++++++++--------------
>  1 file changed, 25 insertions(+), 14 deletions(-)
>
> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
> index b07d382d53a8..7518ac5c28dc 100644
> --- a/fs/btrfs/volumes.c
> +++ b/fs/btrfs/volumes.c
> @@ -7060,6 +7060,27 @@ static void warn_32bit_meta_chunk(struct 
> btrfs_fs_info *fs_info,
>  }
>  #endif
>
> +static struct btrfs_device *handle_missing_device(struct 
> btrfs_fs_info *fs_info,
> +						  u64 devid, u8 
> *uuid)
> +{
> +	struct btrfs_device *dev;
> +
> +	if (!btrfs_test_opt(fs_info, DEGRADED)) {
> +		btrfs_report_missing_device(fs_info, devid, uuid, 
> true);
> +		return ERR_PTR(-ENOENT);
> +	}
> +
> +	dev = add_missing_dev(fs_info->fs_devices, devid, uuid);
> +	if (IS_ERR(dev)) {
> +		btrfs_err(fs_info, "failed to init missing dev 
> %llu: %ld",
> +			  devid, PTR_ERR(dev));
> +		return dev;
> +	}
> +	btrfs_report_missing_device(fs_info, devid, uuid, false);
> +
> +	return dev;
> +}
> +
>  static int read_one_chunk(struct btrfs_key *key, struct 
>  extent_buffer *leaf,
>  			  struct btrfs_chunk *chunk)
>  {
> @@ -7147,28 +7168,18 @@ static int read_one_chunk(struct 
> btrfs_key *key, struct extent_buffer *leaf,
>  				   BTRFS_UUID_SIZE);
>  		args.uuid = uuid;
>  		map->stripes[i].dev = 
>  btrfs_find_device(fs_info->fs_devices, &args);
> -		if (!map->stripes[i].dev &&
> -		    !btrfs_test_opt(fs_info, DEGRADED)) {
> -			free_extent_map(em);
> -			btrfs_report_missing_device(fs_info, 
> devid, uuid, true);
> -			return -ENOENT;
> -		}
>  		if (!map->stripes[i].dev) {
> -			map->stripes[i].dev =
> - 
> add_missing_dev(fs_info->fs_devices, devid,
> -						uuid);
> +			map->stripes[i].dev = 
> handle_missing_device(fs_info,
> + 
> devid, uuid);
>  			if (IS_ERR(map->stripes[i].dev)) {
>  				free_extent_map(em);
> -				btrfs_err(fs_info,
> -					"failed to init missing 
> dev %llu: %ld",
> -					devid, 
> PTR_ERR(map->stripes[i].dev));
>  				return 
>  PTR_ERR(map->stripes[i].dev);
> +
>

No need for the blank line, I think.

Reviewed-by: Su Yue <l@damenly.su>

--
Su
>  			}
> -			btrfs_report_missing_device(fs_info, 
> devid, uuid, false);
>  		}
> +
>  		set_bit(BTRFS_DEV_STATE_IN_FS_METADATA,
>  				&(map->stripes[i].dev->dev_state));
> -
>  	}
>
>  	write_lock(&map_tree->lock);
David Sterba Jan. 12, 2022, 3:40 p.m. UTC | #2
On Tue, Jan 11, 2022 at 06:00:26PM +0200, Nikolay Borisov wrote:
> This simplifies the code flow in read_one_chunk and makes error handling
> when handling missing devices a bit simipler by reducing it to a single
> check if something went wrong. No functional changes.
> 
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>

Added to misc-next, thanks.
diff mbox series

Patch

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index b07d382d53a8..7518ac5c28dc 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -7060,6 +7060,27 @@  static void warn_32bit_meta_chunk(struct btrfs_fs_info *fs_info,
 }
 #endif
 
+static struct btrfs_device *handle_missing_device(struct btrfs_fs_info *fs_info,
+						  u64 devid, u8 *uuid)
+{
+	struct btrfs_device *dev;
+
+	if (!btrfs_test_opt(fs_info, DEGRADED)) {
+		btrfs_report_missing_device(fs_info, devid, uuid, true);
+		return ERR_PTR(-ENOENT);
+	}
+
+	dev = add_missing_dev(fs_info->fs_devices, devid, uuid);
+	if (IS_ERR(dev)) {
+		btrfs_err(fs_info, "failed to init missing dev %llu: %ld",
+			  devid, PTR_ERR(dev));
+		return dev;
+	}
+	btrfs_report_missing_device(fs_info, devid, uuid, false);
+
+	return dev;
+}
+
 static int read_one_chunk(struct btrfs_key *key, struct extent_buffer *leaf,
 			  struct btrfs_chunk *chunk)
 {
@@ -7147,28 +7168,18 @@  static int read_one_chunk(struct btrfs_key *key, struct extent_buffer *leaf,
 				   BTRFS_UUID_SIZE);
 		args.uuid = uuid;
 		map->stripes[i].dev = btrfs_find_device(fs_info->fs_devices, &args);
-		if (!map->stripes[i].dev &&
-		    !btrfs_test_opt(fs_info, DEGRADED)) {
-			free_extent_map(em);
-			btrfs_report_missing_device(fs_info, devid, uuid, true);
-			return -ENOENT;
-		}
 		if (!map->stripes[i].dev) {
-			map->stripes[i].dev =
-				add_missing_dev(fs_info->fs_devices, devid,
-						uuid);
+			map->stripes[i].dev = handle_missing_device(fs_info,
+								    devid, uuid);
 			if (IS_ERR(map->stripes[i].dev)) {
 				free_extent_map(em);
-				btrfs_err(fs_info,
-					"failed to init missing dev %llu: %ld",
-					devid, PTR_ERR(map->stripes[i].dev));
 				return PTR_ERR(map->stripes[i].dev);
+
 			}
-			btrfs_report_missing_device(fs_info, devid, uuid, false);
 		}
+
 		set_bit(BTRFS_DEV_STATE_IN_FS_METADATA,
 				&(map->stripes[i].dev->dev_state));
-
 	}
 
 	write_lock(&map_tree->lock);