diff options
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/callback.c | 16 | ||||
-rw-r--r-- | fs/nfs/file.c | 1 | ||||
-rw-r--r-- | fs/nfs/inode.c | 5 | ||||
-rw-r--r-- | fs/nfs/nfs3acl.c | 4 | ||||
-rw-r--r-- | fs/nfs/nfs4renewd.c | 3 | ||||
-rw-r--r-- | fs/nfs/super.c | 2 |
6 files changed, 12 insertions, 19 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 4c8459e5bdee..d9e2a1880783 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -45,7 +45,7 @@ unsigned short nfs_callback_tcpport6; | |||
45 | static int | 45 | static int |
46 | nfs4_callback_svc(void *vrqstp) | 46 | nfs4_callback_svc(void *vrqstp) |
47 | { | 47 | { |
48 | int err, preverr = 0; | 48 | int err; |
49 | struct svc_rqst *rqstp = vrqstp; | 49 | struct svc_rqst *rqstp = vrqstp; |
50 | 50 | ||
51 | set_freezable(); | 51 | set_freezable(); |
@@ -55,20 +55,8 @@ nfs4_callback_svc(void *vrqstp) | |||
55 | * Listen for a request on the socket | 55 | * Listen for a request on the socket |
56 | */ | 56 | */ |
57 | err = svc_recv(rqstp, MAX_SCHEDULE_TIMEOUT); | 57 | err = svc_recv(rqstp, MAX_SCHEDULE_TIMEOUT); |
58 | if (err == -EAGAIN || err == -EINTR) { | 58 | if (err == -EAGAIN || err == -EINTR) |
59 | preverr = err; | ||
60 | continue; | 59 | continue; |
61 | } | ||
62 | if (err < 0) { | ||
63 | if (err != preverr) { | ||
64 | printk(KERN_WARNING "NFS: %s: unexpected error " | ||
65 | "from svc_recv (%d)\n", __func__, err); | ||
66 | preverr = err; | ||
67 | } | ||
68 | schedule_timeout_uninterruptible(HZ); | ||
69 | continue; | ||
70 | } | ||
71 | preverr = err; | ||
72 | svc_process(rqstp); | 60 | svc_process(rqstp); |
73 | } | 61 | } |
74 | return 0; | 62 | return 0; |
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 6a7fcab7ecb3..f692be97676d 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -578,6 +578,7 @@ out: | |||
578 | static const struct vm_operations_struct nfs_file_vm_ops = { | 578 | static const struct vm_operations_struct nfs_file_vm_ops = { |
579 | .fault = filemap_fault, | 579 | .fault = filemap_fault, |
580 | .page_mkwrite = nfs_vm_page_mkwrite, | 580 | .page_mkwrite = nfs_vm_page_mkwrite, |
581 | .remap_pages = generic_file_remap_pages, | ||
581 | }; | 582 | }; |
582 | 583 | ||
583 | static int nfs_need_sync_write(struct file *filp, struct inode *inode) | 584 | static int nfs_need_sync_write(struct file *filp, struct inode *inode) |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 9b47610338f5..e4c716d374a8 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -1571,6 +1571,11 @@ static int __init nfs_init_inodecache(void) | |||
1571 | 1571 | ||
1572 | static void nfs_destroy_inodecache(void) | 1572 | static void nfs_destroy_inodecache(void) |
1573 | { | 1573 | { |
1574 | /* | ||
1575 | * Make sure all delayed rcu free inodes are flushed before we | ||
1576 | * destroy cache. | ||
1577 | */ | ||
1578 | rcu_barrier(); | ||
1574 | kmem_cache_destroy(nfs_inode_cachep); | 1579 | kmem_cache_destroy(nfs_inode_cachep); |
1575 | } | 1580 | } |
1576 | 1581 | ||
diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c index e4498dc351a8..4a1aafba6a20 100644 --- a/fs/nfs/nfs3acl.c +++ b/fs/nfs/nfs3acl.c | |||
@@ -70,7 +70,7 @@ ssize_t nfs3_getxattr(struct dentry *dentry, const char *name, | |||
70 | if (type == ACL_TYPE_ACCESS && acl->a_count == 0) | 70 | if (type == ACL_TYPE_ACCESS && acl->a_count == 0) |
71 | error = -ENODATA; | 71 | error = -ENODATA; |
72 | else | 72 | else |
73 | error = posix_acl_to_xattr(acl, buffer, size); | 73 | error = posix_acl_to_xattr(&init_user_ns, acl, buffer, size); |
74 | posix_acl_release(acl); | 74 | posix_acl_release(acl); |
75 | } else | 75 | } else |
76 | error = -ENODATA; | 76 | error = -ENODATA; |
@@ -92,7 +92,7 @@ int nfs3_setxattr(struct dentry *dentry, const char *name, | |||
92 | else | 92 | else |
93 | return -EOPNOTSUPP; | 93 | return -EOPNOTSUPP; |
94 | 94 | ||
95 | acl = posix_acl_from_xattr(value, size); | 95 | acl = posix_acl_from_xattr(&init_user_ns, value, size); |
96 | if (IS_ERR(acl)) | 96 | if (IS_ERR(acl)) |
97 | return PTR_ERR(acl); | 97 | return PTR_ERR(acl); |
98 | error = nfs3_proc_setacl(inode, type, acl); | 98 | error = nfs3_proc_setacl(inode, type, acl); |
diff --git a/fs/nfs/nfs4renewd.c b/fs/nfs/nfs4renewd.c index 6930bec91bca..1720d32ffa54 100644 --- a/fs/nfs/nfs4renewd.c +++ b/fs/nfs/nfs4renewd.c | |||
@@ -117,8 +117,7 @@ nfs4_schedule_state_renewal(struct nfs_client *clp) | |||
117 | timeout = 5 * HZ; | 117 | timeout = 5 * HZ; |
118 | dprintk("%s: requeueing work. Lease period = %ld\n", | 118 | dprintk("%s: requeueing work. Lease period = %ld\n", |
119 | __func__, (timeout + HZ - 1) / HZ); | 119 | __func__, (timeout + HZ - 1) / HZ); |
120 | cancel_delayed_work(&clp->cl_renewd); | 120 | mod_delayed_work(system_wq, &clp->cl_renewd, timeout); |
121 | schedule_delayed_work(&clp->cl_renewd, timeout); | ||
122 | set_bit(NFS_CS_RENEWD, &clp->cl_res_state); | 121 | set_bit(NFS_CS_RENEWD, &clp->cl_res_state); |
123 | spin_unlock(&clp->cl_lock); | 122 | spin_unlock(&clp->cl_lock); |
124 | } | 123 | } |
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index b8eda700584b..d2c7f5db0847 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -1537,7 +1537,7 @@ static int nfs_parse_mount_options(char *raw, | |||
1537 | 1537 | ||
1538 | /* | 1538 | /* |
1539 | * verify that any proto=/mountproto= options match the address | 1539 | * verify that any proto=/mountproto= options match the address |
1540 | * familiies in the addr=/mountaddr= options. | 1540 | * families in the addr=/mountaddr= options. |
1541 | */ | 1541 | */ |
1542 | if (protofamily != AF_UNSPEC && | 1542 | if (protofamily != AF_UNSPEC && |
1543 | protofamily != mnt->nfs_server.address.ss_family) | 1543 | protofamily != mnt->nfs_server.address.ss_family) |