diff mbox series

[1/3] zonefs: introduce helper for zone management

Message ID 20200904112328.28887-2-johannes.thumshirn@wdc.com (mailing list archive)
State New, archived
Headers show
Series zonefs: introduce -o explicit-open mount option | expand

Commit Message

Johannes Thumshirn Sept. 4, 2020, 11:23 a.m. UTC
Introduce a helper function for sending zone management commands to the
block device.

As zone management commands can change a zone write pointer position
reflected in the size of the zone file, this function expects the truncate
mutex to be held.

Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
---
 fs/zonefs/super.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

Comments

Damien Le Moal Sept. 7, 2020, 2:55 a.m. UTC | #1
On 2020/09/04 20:23, Johannes Thumshirn wrote:
> Introduce a helper function for sending zone management commands to the
> block device.
> 
> As zone management commands can change a zone write pointer position
> reflected in the size of the zone file, this function expects the truncate
> mutex to be held.
> 
> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
> ---
>  fs/zonefs/super.c | 27 +++++++++++++++++++++++----
>  1 file changed, 23 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
> index 8ec7c8f109d7..9573aebee146 100644
> --- a/fs/zonefs/super.c
> +++ b/fs/zonefs/super.c
> @@ -24,6 +24,26 @@
>  
>  #include "zonefs.h"
>  
> +static inline int zonefs_zone_mgmt(struct inode *inode,
> +				   enum req_opf op)
> +{
> +	struct zonefs_inode_info *zi = ZONEFS_I(inode);
> +	int ret;
> +
> +	lockdep_assert_held(&zi->i_truncate_mutex);
> +
> +	ret = blkdev_zone_mgmt(inode->i_sb->s_bdev, op, zi->i_zsector,
> +			       zi->i_zone_size >> SECTOR_SHIFT, GFP_NOFS);
> +	if (ret) {
> +		zonefs_err(inode->i_sb,
> +			   "Zone management operation %d at %llu failed %d",
> +			   op, zi->i_zsector, ret);

Printing blk_op_str() instead of the raw op value would make the message easier
to understand.

> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
>  static int zonefs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
>  			      unsigned int flags, struct iomap *iomap,
>  			      struct iomap *srcmap)
> @@ -397,12 +417,11 @@ static int zonefs_file_truncate(struct inode *inode, loff_t isize)
>  	if (isize == old_isize)
>  		goto unlock;
>  
> -	ret = blkdev_zone_mgmt(inode->i_sb->s_bdev, op, zi->i_zsector,
> -			       zi->i_zone_size >> SECTOR_SHIFT, GFP_NOFS);
> +	ret = zonefs_zone_mgmt(inode, op);
>  	if (ret) {
>  		zonefs_err(inode->i_sb,
> -			   "Zone management operation at %llu failed %d",
> -			   zi->i_zsector, ret);
> +			   "Zone management operation %s at %llu failed %d",
> +			   blk_op_str(op), zi->i_zsector, ret);

That repeats the error message already printed by zonefs_zone_mgmt(). There is
no need for this one.

>  		goto unlock;
>  	}
>  
>
diff mbox series

Patch

diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c
index 8ec7c8f109d7..9573aebee146 100644
--- a/fs/zonefs/super.c
+++ b/fs/zonefs/super.c
@@ -24,6 +24,26 @@ 
 
 #include "zonefs.h"
 
+static inline int zonefs_zone_mgmt(struct inode *inode,
+				   enum req_opf op)
+{
+	struct zonefs_inode_info *zi = ZONEFS_I(inode);
+	int ret;
+
+	lockdep_assert_held(&zi->i_truncate_mutex);
+
+	ret = blkdev_zone_mgmt(inode->i_sb->s_bdev, op, zi->i_zsector,
+			       zi->i_zone_size >> SECTOR_SHIFT, GFP_NOFS);
+	if (ret) {
+		zonefs_err(inode->i_sb,
+			   "Zone management operation %d at %llu failed %d",
+			   op, zi->i_zsector, ret);
+		return ret;
+	}
+
+	return 0;
+}
+
 static int zonefs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
 			      unsigned int flags, struct iomap *iomap,
 			      struct iomap *srcmap)
@@ -397,12 +417,11 @@  static int zonefs_file_truncate(struct inode *inode, loff_t isize)
 	if (isize == old_isize)
 		goto unlock;
 
-	ret = blkdev_zone_mgmt(inode->i_sb->s_bdev, op, zi->i_zsector,
-			       zi->i_zone_size >> SECTOR_SHIFT, GFP_NOFS);
+	ret = zonefs_zone_mgmt(inode, op);
 	if (ret) {
 		zonefs_err(inode->i_sb,
-			   "Zone management operation at %llu failed %d",
-			   zi->i_zsector, ret);
+			   "Zone management operation %s at %llu failed %d",
+			   blk_op_str(op), zi->i_zsector, ret);
 		goto unlock;
 	}