mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-21 21:12:25 -05:00
xfs: always complete the buffer inline in xfs_buf_submit
xfs_buf_submit now only completes a buffer on error, or for in-memory buftargs. There is no point in using a workqueue for the latter as the completion will just wake up the caller. Optimize this case by avoiding the workqueue roundtrip. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Acked-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
committed by
Carlos Maiolino
parent
6dca5abb3d
commit
819f29cc7b
@@ -1657,21 +1657,17 @@ xfs_buf_submit(
|
||||
|
||||
if ((bp->b_flags & XBF_WRITE) && !xfs_buf_verify_write(bp)) {
|
||||
xfs_force_shutdown(bp->b_mount, SHUTDOWN_CORRUPT_INCORE);
|
||||
goto done;
|
||||
xfs_buf_ioend(bp);
|
||||
return;
|
||||
}
|
||||
|
||||
/* In-memory targets are directly mapped, no I/O required. */
|
||||
if (xfs_buftarg_is_mem(bp->b_target))
|
||||
goto done;
|
||||
if (xfs_buftarg_is_mem(bp->b_target)) {
|
||||
xfs_buf_ioend(bp);
|
||||
return;
|
||||
}
|
||||
|
||||
xfs_buf_submit_bio(bp);
|
||||
return;
|
||||
|
||||
done:
|
||||
if (bp->b_error || !(bp->b_flags & XBF_ASYNC))
|
||||
xfs_buf_ioend(bp);
|
||||
else
|
||||
xfs_buf_ioend_async(bp);
|
||||
}
|
||||
|
||||
void *
|
||||
|
||||
Reference in New Issue
Block a user