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@xxxxxxx> > --- > 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; > } > > -- Damien Le Moal Western Digital Research