mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 02:56:40 +07:00
Btrfs: fix hang when failing to submit bio of directIO
The hang is uncoverd by generic/019. btrfs_endio_direct_write() skips the "finish_ordered_fn" part when it hits an error, thus those added ordered extents will never get processed, which block processes that waiting for them via btrfs_start_ordered_extent(). This fixes the above, and meanwhile finish_ordered_fn will do the space accounting work. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Tested-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
9c6429d96d
commit
ad9ee2053f
@ -7872,8 +7872,6 @@ static void btrfs_endio_direct_write(struct bio *bio, int err)
|
||||
struct bio *dio_bio;
|
||||
int ret;
|
||||
|
||||
if (err)
|
||||
goto out_done;
|
||||
again:
|
||||
ret = btrfs_dec_test_first_ordered_pending(inode, &ordered,
|
||||
&ordered_offset,
|
||||
@ -7896,7 +7894,6 @@ static void btrfs_endio_direct_write(struct bio *bio, int err)
|
||||
ordered = NULL;
|
||||
goto again;
|
||||
}
|
||||
out_done:
|
||||
dio_bio = dip->dio_bio;
|
||||
|
||||
kfree(dip);
|
||||
|
Loading…
Reference in New Issue
Block a user