diff options
author | Bob Peterson <rpeterso@redhat.com> | 2023-06-12 12:26:23 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-07-19 16:21:54 +0200 |
commit | 2e980eb9550d01d8d86b7bb29ab16a12fc57c6fa (patch) | |
tree | e36608300c6eaec32a291292409ffcbad0f7028b /fs/gfs2 | |
parent | f5d7f9e155175a099e47db40926cf82f46348bcc (diff) | |
download | linux-stable-2e980eb9550d01d8d86b7bb29ab16a12fc57c6fa.tar.gz linux-stable-2e980eb9550d01d8d86b7bb29ab16a12fc57c6fa.tar.bz2 linux-stable-2e980eb9550d01d8d86b7bb29ab16a12fc57c6fa.zip |
gfs2: Fix duplicate should_fault_in_pages() call
[ Upstream commit c8ed1b35931245087968fd95b2ec3dfc50f77769 ]
In gfs2_file_buffered_write(), we currently jump from the second call of
function should_fault_in_pages() to above the first call, so
should_fault_in_pages() is getting called twice in a row, causing it to
accidentally fall back to single-page writes rather than trying the more
efficient multi-page writes first.
Fix that by moving the retry label to the correct place, behind the
first call to should_fault_in_pages().
Fixes: e1fa9ea85ce8 ("gfs2: Stop using glock holder auto-demotion for now")
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/file.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index bc6cd5f4b107..c367f1678d5d 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -1029,8 +1029,8 @@ static ssize_t gfs2_file_buffered_write(struct kiocb *iocb, } gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, gh); -retry: if (should_fault_in_pages(from, iocb, &prev_count, &window_size)) { +retry: window_size -= fault_in_iov_iter_readable(from, window_size); if (!window_size) { ret = -EFAULT; |