zonefs: provide no-lock zonefs_io_error variant
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>
This commit is contained in:
Родитель
5498d5f932
Коммит
48d546a8da
|
@ -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
|
* 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).
|
* (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 zonefs_inode_info *zi = ZONEFS_I(inode);
|
||||||
struct super_block *sb = inode->i_sb;
|
struct super_block *sb = inode->i_sb;
|
||||||
|
@ -362,8 +362,6 @@ static void zonefs_io_error(struct inode *inode, bool write)
|
||||||
};
|
};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&zi->i_truncate_mutex);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Memory allocations in blkdev_report_zones() can trigger a memory
|
* Memory allocations in blkdev_report_zones() can trigger a memory
|
||||||
* reclaim which may in turn cause a recursion into zonefs as well as
|
* 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",
|
zonefs_err(sb, "Get inode %lu zone information failed %d\n",
|
||||||
inode->i_ino, ret);
|
inode->i_ino, ret);
|
||||||
memalloc_noio_restore(noio_flag);
|
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);
|
mutex_unlock(&zi->i_truncate_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче