mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 06:50:58 +07:00
ext4: fix the deadlock in mpage_da_map_and_submit()
If ext4_jbd2_file_inode() in mpage_da_map_and_submit() fails due to journal abort, this function returns to caller without unlocking the page. It leads to the deadlock, and the patch fixes this issue by calling mpage_da_submit_io(). Signed-off-by: Kazuya Mio <k-mio@sx.jp.nec.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
parent
09e0834fb0
commit
8de49e674a
@ -1552,9 +1552,11 @@ static void mpage_da_map_and_submit(struct mpage_da_data *mpd)
|
||||
|
||||
if (ext4_should_order_data(mpd->inode)) {
|
||||
err = ext4_jbd2_file_inode(handle, mpd->inode);
|
||||
if (err)
|
||||
if (err) {
|
||||
/* Only if the journal is aborted */
|
||||
return;
|
||||
mpd->retval = err;
|
||||
goto submit_io;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2294,11 +2296,12 @@ static int ext4_da_writepages(struct address_space *mapping,
|
||||
ret = 0;
|
||||
} else if (ret == MPAGE_DA_EXTENT_TAIL) {
|
||||
/*
|
||||
* got one extent now try with
|
||||
* rest of the pages
|
||||
* Got one extent now try with rest of the pages.
|
||||
* If mpd.retval is set -EIO, journal is aborted.
|
||||
* So we don't need to write any more.
|
||||
*/
|
||||
pages_written += mpd.pages_written;
|
||||
ret = 0;
|
||||
ret = mpd.retval;
|
||||
io_done = 1;
|
||||
} else if (wbc->nr_to_write)
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user