diff options
author | David Howells <dhowells@redhat.com> | 2017-03-16 12:27:49 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2017-03-16 12:29:30 -0400 |
commit | 65a151094edeb04e8f5f6f1502028e2383e81bb8 (patch) | |
tree | e1c79de194d66e4f6c065c54d6e198c0c68ef98c | |
parent | 954cd6dc02a65065aecb7150962c0870c5b0e322 (diff) |
afs: ->writepage() shouldn't call clear_page_dirty_for_io()
The ->writepage() op shouldn't call clear_page_dirty_for_io() as that has
already been called by the caller.
Fix afs_writepage() by moving the call out of
afs_write_back_from_locked_page() to afs_writepages_region() where it is
needed.
Signed-off-by: David Howells <dhowells@redhat.com>
-rw-r--r-- | fs/afs/write.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/afs/write.c b/fs/afs/write.c index 134de0667898..e5f150bccfb5 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c | |||
@@ -231,7 +231,7 @@ flush_conflicting_wb: | |||
231 | if (wb->state == AFS_WBACK_PENDING) | 231 | if (wb->state == AFS_WBACK_PENDING) |
232 | wb->state = AFS_WBACK_CONFLICTING; | 232 | wb->state = AFS_WBACK_CONFLICTING; |
233 | spin_unlock(&vnode->writeback_lock); | 233 | spin_unlock(&vnode->writeback_lock); |
234 | if (PageDirty(page)) { | 234 | if (clear_page_dirty_for_io(page)) { |
235 | ret = afs_write_back_from_locked_page(wb, page); | 235 | ret = afs_write_back_from_locked_page(wb, page); |
236 | if (ret < 0) { | 236 | if (ret < 0) { |
237 | afs_put_writeback(candidate); | 237 | afs_put_writeback(candidate); |
@@ -353,8 +353,6 @@ static int afs_write_back_from_locked_page(struct afs_writeback *wb, | |||
353 | _enter(",%lx", primary_page->index); | 353 | _enter(",%lx", primary_page->index); |
354 | 354 | ||
355 | count = 1; | 355 | count = 1; |
356 | if (!clear_page_dirty_for_io(primary_page)) | ||
357 | BUG(); | ||
358 | if (test_set_page_writeback(primary_page)) | 356 | if (test_set_page_writeback(primary_page)) |
359 | BUG(); | 357 | BUG(); |
360 | 358 | ||
@@ -542,6 +540,8 @@ static int afs_writepages_region(struct address_space *mapping, | |||
542 | wb->state = AFS_WBACK_WRITING; | 540 | wb->state = AFS_WBACK_WRITING; |
543 | spin_unlock(&wb->vnode->writeback_lock); | 541 | spin_unlock(&wb->vnode->writeback_lock); |
544 | 542 | ||
543 | if (!clear_page_dirty_for_io(page)) | ||
544 | BUG(); | ||
545 | ret = afs_write_back_from_locked_page(wb, page); | 545 | ret = afs_write_back_from_locked_page(wb, page); |
546 | unlock_page(page); | 546 | unlock_page(page); |
547 | put_page(page); | 547 | put_page(page); |