forked from luck/tmp_suning_uos_patched
More NFS client fixes for Linux 5.0
- Make sure Send CQ is allocated on an existing compvec - Properly check debugfs dentry before using it - Don't use page_file_mapping() after removing a page -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEnZ5MQTpR7cLU7KEp18tUv7ClQOsFAlxnMQ0ACgkQ18tUv7Cl QOsbhQ//VhgoXX25xHrApLz8wMuYPNOboDFSUf0O1GWoHi3opHnP+9LPf/iZkRQy YS0ufcO95i1LGjZLb8ac9hBWkko8TBl/dIONsG4ppf2bAbiVuag848wehi8hsGba zaSsXV6qdibq4qZsyK35hh0cHVHDgB1EMTu7AVORdvXsTHVX3xL86vts2y2VSLKv w9yKQBg4E4pWwENi7v77icSuGg/WpwfKnYxBzG6JPXuHQLGidyc/HrnVmLwhd6DQ 0Sa6nzOAvgjjgVibB+tJfsitScmMTsaxulvHsm5iLjPJZ8SUjxYvAPl3AZdCYPvU XaADy8nrvXJUe9APhMINbkoxnF4W/OPnUMG3bWkWp2LeNZvk5l7VOzTW5Sh49Xyk pBAOd7qr3kfjFdvzypVz9NeXuS6BsTUA6LAudo8rF7nxi8jHPp6L+zZNWVrPIjY0 +bNIj3K1Bji3jU9vTHyTzxDRB/4ZnzJaPF2Gv/5Y2cvkI7mfzHUz5p6cAU1OPIVB kuhZXkQFEPSS2OV6MUOe/HgmtY0oLM3XU9cEaFkLz59D1kb1fjO/yUu9YBQMq6Ke o6b7Dwh4WvLVN/AbgegKOnp5G0/ljmz6y7ML0AElYXg1iT4k0zE+qJpMWhOTRJnd +jf4hSS+l7p7D1ed+uqdMS/jc1s5vcuxwYDQUIutELjA/TCbLNI= =28v+ -----END PGP SIGNATURE----- Merge tag 'nfs-for-5.0-4' of git://git.linux-nfs.org/projects/anna/linux-nfs Pull more NFS client fixes from Anna Schumaker: "Three fixes this time. Nicolas's is for xprtrdma completion vector allocation on single-core systems. Greg's adds an error check when allocating a debugfs dentry. And Ben's is an additional fix for nfs_page_async_flush() to prevent pages from accidentally getting truncated. Summary: - Make sure Send CQ is allocated on an existing compvec - Properly check debugfs dentry before using it - Don't use page_file_mapping() after removing a page" * tag 'nfs-for-5.0-4' of git://git.linux-nfs.org/projects/anna/linux-nfs: NFS: Don't use page_file_mapping after removing the page rpc: properly check debugfs dentry before using it xprtrdma: Make sure Send CQ is allocated on an existing compvec
This commit is contained in:
commit
55638c520b
|
@ -238,9 +238,9 @@ static void nfs_grow_file(struct page *page, unsigned int offset, unsigned int c
|
|||
}
|
||||
|
||||
/* A writeback failed: mark the page as bad, and invalidate the page cache */
|
||||
static void nfs_set_pageerror(struct page *page)
|
||||
static void nfs_set_pageerror(struct address_space *mapping)
|
||||
{
|
||||
nfs_zap_mapping(page_file_mapping(page)->host, page_file_mapping(page));
|
||||
nfs_zap_mapping(mapping->host, mapping);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -994,7 +994,7 @@ static void nfs_write_completion(struct nfs_pgio_header *hdr)
|
|||
nfs_list_remove_request(req);
|
||||
if (test_bit(NFS_IOHDR_ERROR, &hdr->flags) &&
|
||||
(hdr->good_bytes < bytes)) {
|
||||
nfs_set_pageerror(req->wb_page);
|
||||
nfs_set_pageerror(page_file_mapping(req->wb_page));
|
||||
nfs_context_set_write_error(req->wb_context, hdr->error);
|
||||
goto remove_req;
|
||||
}
|
||||
|
@ -1348,7 +1348,8 @@ int nfs_updatepage(struct file *file, struct page *page,
|
|||
unsigned int offset, unsigned int count)
|
||||
{
|
||||
struct nfs_open_context *ctx = nfs_file_open_context(file);
|
||||
struct inode *inode = page_file_mapping(page)->host;
|
||||
struct address_space *mapping = page_file_mapping(page);
|
||||
struct inode *inode = mapping->host;
|
||||
int status = 0;
|
||||
|
||||
nfs_inc_stats(inode, NFSIOS_VFSUPDATEPAGE);
|
||||
|
@ -1366,7 +1367,7 @@ int nfs_updatepage(struct file *file, struct page *page,
|
|||
|
||||
status = nfs_writepage_setup(ctx, page, offset, count);
|
||||
if (status < 0)
|
||||
nfs_set_pageerror(page);
|
||||
nfs_set_pageerror(mapping);
|
||||
else
|
||||
__set_page_dirty_nobuffers(page);
|
||||
out:
|
||||
|
|
|
@ -146,7 +146,7 @@ rpc_clnt_debugfs_register(struct rpc_clnt *clnt)
|
|||
rcu_read_lock();
|
||||
xprt = rcu_dereference(clnt->cl_xprt);
|
||||
/* no "debugfs" dentry? Don't bother with the symlink. */
|
||||
if (!xprt->debugfs) {
|
||||
if (IS_ERR_OR_NULL(xprt->debugfs)) {
|
||||
rcu_read_unlock();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -527,7 +527,8 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
|
|||
|
||||
sendcq = ib_alloc_cq(ia->ri_device, NULL,
|
||||
ep->rep_attr.cap.max_send_wr + 1,
|
||||
1, IB_POLL_WORKQUEUE);
|
||||
ia->ri_device->num_comp_vectors > 1 ? 1 : 0,
|
||||
IB_POLL_WORKQUEUE);
|
||||
if (IS_ERR(sendcq)) {
|
||||
rc = PTR_ERR(sendcq);
|
||||
goto out1;
|
||||
|
|
Loading…
Reference in New Issue
Block a user