zonefs: provide no-lock zonefs_io_error variant
authorJohannes Thumshirn <johannes.thumshirn@wdc.com>
Fri, 11 Sep 2020 08:56:49 +0000 (17:56 +0900)
committerDamien Le Moal <damien.lemoal@wdc.com>
Tue, 15 Sep 2020 09:32:48 +0000 (18:32 +0900)
Subsequent patches need to call zonefs_io_error() with the i_truncate_mutex
already held, so factor out the body of zonefs_io_error() into
__zonefs_io_error() which can be called from with the i_truncate_mutex
held.

Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
fs/zonefs/super.c

index 6e13a5127b017646f35a81f6490134200d09945f..4309979eeb36227ac309c15cbe90008626a2b63b 100644 (file)
@@ -348,7 +348,7 @@ static int zonefs_io_error_cb(struct blk_zone *zone, unsigned int idx,
  * eventually correct the file size and zonefs inode write pointer offset
  * (which can be out of sync with the drive due to partial write failures).
  */
-static void zonefs_io_error(struct inode *inode, bool write)
+static void __zonefs_io_error(struct inode *inode, bool write)
 {
        struct zonefs_inode_info *zi = ZONEFS_I(inode);
        struct super_block *sb = inode->i_sb;
@@ -362,8 +362,6 @@ static void zonefs_io_error(struct inode *inode, bool write)
        };
        int ret;
 
-       mutex_lock(&zi->i_truncate_mutex);
-
        /*
         * Memory allocations in blkdev_report_zones() can trigger a memory
         * reclaim which may in turn cause a recursion into zonefs as well as
@@ -379,7 +377,14 @@ static void zonefs_io_error(struct inode *inode, bool write)
                zonefs_err(sb, "Get inode %lu zone information failed %d\n",
                           inode->i_ino, ret);
        memalloc_noio_restore(noio_flag);
+}
 
+static void zonefs_io_error(struct inode *inode, bool write)
+{
+       struct zonefs_inode_info *zi = ZONEFS_I(inode);
+
+       mutex_lock(&zi->i_truncate_mutex);
+       __zonefs_io_error(inode, write);
        mutex_unlock(&zi->i_truncate_mutex);
 }