diff options
author | David Howells <dhowells@redhat.com> | 2017-03-16 17:27:49 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2017-03-16 17:29:30 +0100 |
commit | c5051c7bc777dffa5661569dec5997f432b9a34a (patch) | |
tree | 1a7e785c0feb49c4c83eea20ab00e24f99c7fca1 /fs | |
parent | afs: ->writepage() shouldn't call clear_page_dirty_for_io() (diff) | |
download | linux-c5051c7bc777dffa5661569dec5997f432b9a34a.tar.xz linux-c5051c7bc777dffa5661569dec5997f432b9a34a.zip |
afs: Don't wait for page writeback with the page lock held
Drop the page lock before waiting for page writeback.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/afs/write.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/afs/write.c b/fs/afs/write.c index e5f150bccfb5..2d2fccd5044b 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -518,17 +518,16 @@ static int afs_writepages_region(struct address_space *mapping, */ lock_page(page); - if (page->mapping != mapping) { + if (page->mapping != mapping || !PageDirty(page)) { unlock_page(page); put_page(page); continue; } - if (wbc->sync_mode != WB_SYNC_NONE) - wait_on_page_writeback(page); - - if (PageWriteback(page) || !PageDirty(page)) { + if (PageWriteback(page)) { unlock_page(page); + if (wbc->sync_mode != WB_SYNC_NONE) + wait_on_page_writeback(page); put_page(page); continue; } |