Skip to content

Commit

Permalink
Fix up CIFS for "test_clear_page_dirty()" removal
Browse files Browse the repository at this point in the history
This also adds he required page "writeback" flag handling, that cifs
hasn't been doing and that the page dirty flag changes made obvious.

Acked-by: Steve French <smfltc@us.ibm.com>
Acked-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Linus Torvalds committed Dec 24, 2006
1 parent 8d1c481 commit cb876f4
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions fs/cifs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1245,14 +1245,21 @@ static int cifs_writepages(struct address_space *mapping,
wait_on_page_writeback(page);

if (PageWriteback(page) ||
!test_clear_page_dirty(page)) {
!clear_page_dirty_for_io(page)) {
unlock_page(page);
break;
}

/*
* This actually clears the dirty bit in the radix tree.
* See cifs_writepage() for more commentary.
*/
set_page_writeback(page);

if (page_offset(page) >= mapping->host->i_size) {
done = 1;
unlock_page(page);
end_page_writeback(page);
break;
}

Expand Down Expand Up @@ -1316,6 +1323,7 @@ static int cifs_writepages(struct address_space *mapping,
SetPageError(page);
kunmap(page);
unlock_page(page);
end_page_writeback(page);
page_cache_release(page);
}
if ((wbc->nr_to_write -= n_iov) <= 0)
Expand Down Expand Up @@ -1352,11 +1360,23 @@ static int cifs_writepage(struct page* page, struct writeback_control *wbc)
if (!PageUptodate(page)) {
cFYI(1, ("ppw - page not up to date"));
}


/*
* Set the "writeback" flag, and clear "dirty" in the radix tree.
*
* A writepage() implementation always needs to do either this,
* or re-dirty the page with "redirty_page_for_writepage()" in
* the case of a failure.
*
* Just unlocking the page will cause the radix tree tag-bits
* to fail to update with the state of the page correctly.
*/
set_page_writeback(page);
rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
SetPageUptodate(page); /* BB add check for error and Clearuptodate? */
unlock_page(page);
page_cache_release(page);
end_page_writeback(page);
page_cache_release(page);
FreeXid(xid);
return rc;
}
Expand Down

0 comments on commit cb876f4

Please sign in to comment.