mirror of https://github.com/torvalds/linux.git
iomap: always run error completions in user context
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>
This commit is contained in:
parent
f9f8514999
commit
ddb4873286
|
|
@ -173,7 +173,18 @@ static void iomap_dio_done(struct iomap_dio *dio)
|
||||||
|
|
||||||
WRITE_ONCE(dio->submit.waiter, NULL);
|
WRITE_ONCE(dio->submit.waiter, NULL);
|
||||||
blk_wake_io_task(waiter);
|
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);
|
WRITE_ONCE(iocb->private, NULL);
|
||||||
iomap_dio_complete_work(&dio->aio.work);
|
iomap_dio_complete_work(&dio->aio.work);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue