Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fba73005 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent fbb5a9ab
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -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 @@ static int nfs_pagein_multi(struct nfs_pageio_descriptor *desc, struct list_head
		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;
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ enum {
	PG_NEED_COMMIT,
	PG_NEED_RESCHED,
	PG_PNFS_COMMIT,
	PG_PARTIAL_READ_FAILED,
};

struct nfs_inode;