mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 14:43:16 +00:00
NFS: Don't rely on PageError in nfs_readpage_release_partial
Don't rely on the PageError flag to tell us if one of the partial reads of the page failed. Instead, replace that with a dedicated flag in the struct nfs_page. Then clean out redundant uses of the PageError flag: the VM no longer checks it for reads. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
fbb5a9abf0
commit
fba730050d
@ -276,7 +276,6 @@ nfs_async_read_error(struct list_head *head)
|
||||
while (!list_empty(head)) {
|
||||
req = nfs_list_entry(head->next);
|
||||
nfs_list_remove_request(req);
|
||||
SetPageError(req->wb_page);
|
||||
nfs_readpage_release(req);
|
||||
}
|
||||
}
|
||||
@ -330,7 +329,6 @@ out_bad:
|
||||
list_del(&data->list);
|
||||
nfs_readdata_free(data);
|
||||
}
|
||||
SetPageError(page);
|
||||
nfs_readpage_release(req);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@ -460,10 +458,10 @@ static void nfs_readpage_release_partial(void *calldata)
|
||||
int status = data->task.tk_status;
|
||||
|
||||
if (status < 0)
|
||||
SetPageError(page);
|
||||
set_bit(PG_PARTIAL_READ_FAILED, &req->wb_flags);
|
||||
|
||||
if (atomic_dec_and_test(&req->wb_complete)) {
|
||||
if (!PageError(page))
|
||||
if (!test_bit(PG_PARTIAL_READ_FAILED, &req->wb_flags))
|
||||
SetPageUptodate(page);
|
||||
nfs_readpage_release(req);
|
||||
}
|
||||
@ -656,7 +654,6 @@ readpage_async_filler(void *data, struct page *page)
|
||||
return 0;
|
||||
out_error:
|
||||
error = PTR_ERR(new);
|
||||
SetPageError(page);
|
||||
out_unlock:
|
||||
unlock_page(page);
|
||||
return error;
|
||||
|
@ -34,6 +34,7 @@ enum {
|
||||
PG_NEED_COMMIT,
|
||||
PG_NEED_RESCHED,
|
||||
PG_PNFS_COMMIT,
|
||||
PG_PARTIAL_READ_FAILED,
|
||||
};
|
||||
|
||||
struct nfs_inode;
|
||||
|
Loading…
x
Reference in New Issue
Block a user