diff options
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfsctl.c | 6 | ||||
-rw-r--r-- | fs/nfsd/nfssvc.c | 12 | ||||
-rw-r--r-- | fs/nfsd/vfs.c | 9 |
3 files changed, 14 insertions, 13 deletions
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index 3d93b2064ce5..a4ed8644d69c 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c | |||
@@ -938,10 +938,12 @@ static ssize_t __write_ports(struct file *file, char *buf, size_t size) | |||
938 | char transport[16]; | 938 | char transport[16]; |
939 | int port; | 939 | int port; |
940 | if (sscanf(buf, "%15s %4d", transport, &port) == 2) { | 940 | if (sscanf(buf, "%15s %4d", transport, &port) == 2) { |
941 | if (port < 1 || port > 65535) | ||
942 | return -EINVAL; | ||
941 | err = nfsd_create_serv(); | 943 | err = nfsd_create_serv(); |
942 | if (!err) { | 944 | if (!err) { |
943 | err = svc_create_xprt(nfsd_serv, | 945 | err = svc_create_xprt(nfsd_serv, |
944 | transport, port, | 946 | transport, PF_INET, port, |
945 | SVC_SOCK_ANONYMOUS); | 947 | SVC_SOCK_ANONYMOUS); |
946 | if (err == -ENOENT) | 948 | if (err == -ENOENT) |
947 | /* Give a reasonable perror msg for | 949 | /* Give a reasonable perror msg for |
@@ -960,7 +962,7 @@ static ssize_t __write_ports(struct file *file, char *buf, size_t size) | |||
960 | char transport[16]; | 962 | char transport[16]; |
961 | int port; | 963 | int port; |
962 | if (sscanf(&buf[1], "%15s %4d", transport, &port) == 2) { | 964 | if (sscanf(&buf[1], "%15s %4d", transport, &port) == 2) { |
963 | if (port == 0) | 965 | if (port < 1 || port > 65535) |
964 | return -EINVAL; | 966 | return -EINVAL; |
965 | if (nfsd_serv) { | 967 | if (nfsd_serv) { |
966 | xprt = svc_find_xprt(nfsd_serv, transport, | 968 | xprt = svc_find_xprt(nfsd_serv, transport, |
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 07e4f5d7baa8..7c09852be713 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -229,7 +229,6 @@ int nfsd_create_serv(void) | |||
229 | 229 | ||
230 | atomic_set(&nfsd_busy, 0); | 230 | atomic_set(&nfsd_busy, 0); |
231 | nfsd_serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize, | 231 | nfsd_serv = svc_create_pooled(&nfsd_program, nfsd_max_blksize, |
232 | AF_INET, | ||
233 | nfsd_last_thread, nfsd, THIS_MODULE); | 232 | nfsd_last_thread, nfsd, THIS_MODULE); |
234 | if (nfsd_serv == NULL) | 233 | if (nfsd_serv == NULL) |
235 | err = -ENOMEM; | 234 | err = -ENOMEM; |
@@ -244,7 +243,7 @@ static int nfsd_init_socks(int port) | |||
244 | if (!list_empty(&nfsd_serv->sv_permsocks)) | 243 | if (!list_empty(&nfsd_serv->sv_permsocks)) |
245 | return 0; | 244 | return 0; |
246 | 245 | ||
247 | error = svc_create_xprt(nfsd_serv, "udp", port, | 246 | error = svc_create_xprt(nfsd_serv, "udp", PF_INET, port, |
248 | SVC_SOCK_DEFAULTS); | 247 | SVC_SOCK_DEFAULTS); |
249 | if (error < 0) | 248 | if (error < 0) |
250 | return error; | 249 | return error; |
@@ -253,7 +252,7 @@ static int nfsd_init_socks(int port) | |||
253 | if (error < 0) | 252 | if (error < 0) |
254 | return error; | 253 | return error; |
255 | 254 | ||
256 | error = svc_create_xprt(nfsd_serv, "tcp", port, | 255 | error = svc_create_xprt(nfsd_serv, "tcp", PF_INET, port, |
257 | SVC_SOCK_DEFAULTS); | 256 | SVC_SOCK_DEFAULTS); |
258 | if (error < 0) | 257 | if (error < 0) |
259 | return error; | 258 | return error; |
@@ -404,7 +403,6 @@ static int | |||
404 | nfsd(void *vrqstp) | 403 | nfsd(void *vrqstp) |
405 | { | 404 | { |
406 | struct svc_rqst *rqstp = (struct svc_rqst *) vrqstp; | 405 | struct svc_rqst *rqstp = (struct svc_rqst *) vrqstp; |
407 | struct fs_struct *fsp; | ||
408 | int err, preverr = 0; | 406 | int err, preverr = 0; |
409 | 407 | ||
410 | /* Lock module and set up kernel thread */ | 408 | /* Lock module and set up kernel thread */ |
@@ -413,13 +411,11 @@ nfsd(void *vrqstp) | |||
413 | /* At this point, the thread shares current->fs | 411 | /* At this point, the thread shares current->fs |
414 | * with the init process. We need to create files with a | 412 | * with the init process. We need to create files with a |
415 | * umask of 0 instead of init's umask. */ | 413 | * umask of 0 instead of init's umask. */ |
416 | fsp = copy_fs_struct(current->fs); | 414 | if (unshare_fs_struct() < 0) { |
417 | if (!fsp) { | ||
418 | printk("Unable to start nfsd thread: out of memory\n"); | 415 | printk("Unable to start nfsd thread: out of memory\n"); |
419 | goto out; | 416 | goto out; |
420 | } | 417 | } |
421 | exit_fs(current); | 418 | |
422 | current->fs = fsp; | ||
423 | current->fs->umask = 0; | 419 | current->fs->umask = 0; |
424 | 420 | ||
425 | /* | 421 | /* |
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 6e50aaa56ca2..78376b6c0236 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -356,7 +356,7 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, | |||
356 | put_write_access(inode); | 356 | put_write_access(inode); |
357 | goto out_nfserr; | 357 | goto out_nfserr; |
358 | } | 358 | } |
359 | DQUOT_INIT(inode); | 359 | vfs_dq_init(inode); |
360 | } | 360 | } |
361 | 361 | ||
362 | /* sanitize the mode change */ | 362 | /* sanitize the mode change */ |
@@ -723,7 +723,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, int type, | |||
723 | else | 723 | else |
724 | flags = O_WRONLY|O_LARGEFILE; | 724 | flags = O_WRONLY|O_LARGEFILE; |
725 | 725 | ||
726 | DQUOT_INIT(inode); | 726 | vfs_dq_init(inode); |
727 | } | 727 | } |
728 | *filp = dentry_open(dget(dentry), mntget(fhp->fh_export->ex_path.mnt), | 728 | *filp = dentry_open(dget(dentry), mntget(fhp->fh_export->ex_path.mnt), |
729 | flags, cred); | 729 | flags, cred); |
@@ -998,8 +998,11 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
998 | 998 | ||
999 | if (!EX_ISSYNC(exp)) | 999 | if (!EX_ISSYNC(exp)) |
1000 | stable = 0; | 1000 | stable = 0; |
1001 | if (stable && !EX_WGATHER(exp)) | 1001 | if (stable && !EX_WGATHER(exp)) { |
1002 | spin_lock(&file->f_lock); | ||
1002 | file->f_flags |= O_SYNC; | 1003 | file->f_flags |= O_SYNC; |
1004 | spin_unlock(&file->f_lock); | ||
1005 | } | ||
1003 | 1006 | ||
1004 | /* Write the data. */ | 1007 | /* Write the data. */ |
1005 | oldfs = get_fs(); set_fs(KERNEL_DS); | 1008 | oldfs = get_fs(); set_fs(KERNEL_DS); |