mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
iomap: always run error completions in user context
[ Upstream commit ddb4873286e03e193c5a3bebb5fc6fa820e9ee3a ]
At least zonefs expects error completions to be able to sleep. Because
error completions aren't performance critical, just defer them to workqueue
context unconditionally.
Fixes: 8dcc1a9d90 ("fs: New zonefs file system")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20251113170633.1453259-3-hch@lst.de
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4ae9ff07bc
commit
e3676761ef
@@ -172,7 +172,18 @@ static void iomap_dio_done(struct iomap_dio *dio)
|
||||
|
||||
WRITE_ONCE(dio->submit.waiter, NULL);
|
||||
blk_wake_io_task(waiter);
|
||||
} else if (dio->flags & IOMAP_DIO_INLINE_COMP) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Always run error completions in user context. These are not
|
||||
* performance critical and some code relies on taking sleeping locks
|
||||
* for error handling.
|
||||
*/
|
||||
if (dio->error)
|
||||
dio->flags &= ~IOMAP_DIO_INLINE_COMP;
|
||||
|
||||
if (dio->flags & IOMAP_DIO_INLINE_COMP) {
|
||||
WRITE_ONCE(iocb->private, NULL);
|
||||
iomap_dio_complete_work(&dio->aio.work);
|
||||
} else if (dio->flags & IOMAP_DIO_CALLER_COMP) {
|
||||
|
||||
Reference in New Issue
Block a user