forked from luck/tmp_suning_uos_patched
ceph: don't use writeback_control in writepages completion
The ->writepages writeback_control is not still valid in the writepages completion. We were touching it solely to adjust pages_skipped when there was a writeback error (EIO, ENOSPC, EPERM due to bad osd credentials), causing an oops in the writeback code shortly thereafter. Updating pages_skipped on error isn't correct anyway, so let's just rip out this (clearly broken) code to pass the wbc to the completion. Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
parent
5dfc589a84
commit
54ad023ba8
@ -504,7 +504,6 @@ static void writepages_finish(struct ceph_osd_request *req,
|
||||
int i;
|
||||
struct ceph_snap_context *snapc = req->r_snapc;
|
||||
struct address_space *mapping = inode->i_mapping;
|
||||
struct writeback_control *wbc = req->r_wbc;
|
||||
__s32 rc = -EIO;
|
||||
u64 bytes = 0;
|
||||
struct ceph_client *client = ceph_inode_to_client(inode);
|
||||
@ -546,10 +545,6 @@ static void writepages_finish(struct ceph_osd_request *req,
|
||||
clear_bdi_congested(&client->backing_dev_info,
|
||||
BLK_RW_ASYNC);
|
||||
|
||||
if (i >= wrote) {
|
||||
dout("inode %p skipping page %p\n", inode, page);
|
||||
wbc->pages_skipped++;
|
||||
}
|
||||
ceph_put_snap_context((void *)page->private);
|
||||
page->private = 0;
|
||||
ClearPagePrivate(page);
|
||||
@ -799,7 +794,6 @@ static int ceph_writepages_start(struct address_space *mapping,
|
||||
alloc_page_vec(client, req);
|
||||
req->r_callback = writepages_finish;
|
||||
req->r_inode = inode;
|
||||
req->r_wbc = wbc;
|
||||
}
|
||||
|
||||
/* note position of first page in pvec */
|
||||
|
@ -66,7 +66,6 @@ struct ceph_osd_request {
|
||||
struct list_head r_unsafe_item;
|
||||
|
||||
struct inode *r_inode; /* for use by callbacks */
|
||||
struct writeback_control *r_wbc; /* ditto */
|
||||
|
||||
char r_oid[40]; /* object name */
|
||||
int r_oid_len;
|
||||
|
Loading…
Reference in New Issue
Block a user