git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
fs
/
nfsd
/
vfs.c
diff --git
a/fs/nfsd/vfs.c
b/fs/nfsd/vfs.c
index
98a6df8
..
c9a49da
100644
(file)
--- a/
fs/nfsd/vfs.c
+++ b/
fs/nfsd/vfs.c
@@
-16,6
+16,7
@@
* Zerocpy NFS support (C) 2002 Hirokazu Takahashi <taka@valinux.co.jp>
*/
* Zerocpy NFS support (C) 2002 Hirokazu Takahashi <taka@valinux.co.jp>
*/
+#include <linux/config.h>
#include <linux/string.h>
#include <linux/time.h>
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/time.h>
#include <linux/errno.h>
@@
-370,6
+371,7
@@
out_nfserr:
static ssize_t nfsd_getxattr(struct dentry *dentry, char *key, void **buf)
{
ssize_t buflen;
static ssize_t nfsd_getxattr(struct dentry *dentry, char *key, void **buf)
{
ssize_t buflen;
+ int error;
buflen = vfs_getxattr(dentry, key, NULL, 0);
if (buflen <= 0)
buflen = vfs_getxattr(dentry, key, NULL, 0);
if (buflen <= 0)
@@
-379,7
+381,10
@@
static ssize_t nfsd_getxattr(struct dentry *dentry, char *key, void **buf)
if (!*buf)
return -ENOMEM;
if (!*buf)
return -ENOMEM;
- return vfs_getxattr(dentry, key, *buf, buflen);
+ error = vfs_getxattr(dentry, key, *buf, buflen);
+ if (error < 0)
+ return error;
+ return buflen;
}
#endif
}
#endif
@@
-672,10
+677,7
@@
nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
goto out_nfserr;
if (access & MAY_WRITE) {
goto out_nfserr;
if (access & MAY_WRITE) {
- if (access & MAY_READ)
- flags = O_RDWR|O_LARGEFILE;
- else
- flags = O_WRONLY|O_LARGEFILE;
+ flags = O_WRONLY|O_LARGEFILE;
DQUOT_INIT(inode);
}
DQUOT_INIT(inode);
}
@@
-704,7
+706,7
@@
nfsd_close(struct file *filp)
* after it.
*/
static inline int nfsd_dosync(struct file *filp, struct dentry *dp,
* after it.
*/
static inline int nfsd_dosync(struct file *filp, struct dentry *dp,
-
const
struct file_operations *fop)
+ struct file_operations *fop)
{
struct inode *inode = dp->d_inode;
int (*fsync) (struct file *, struct dentry *, int);
{
struct inode *inode = dp->d_inode;
int (*fsync) (struct file *, struct dentry *, int);
@@
-836,7
+838,7
@@
nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
if (ra && ra->p_set)
file->f_ra = ra->p_ra;
if (ra && ra->p_set)
file->f_ra = ra->p_ra;
- if (file->f_op->sendfile
&& rqstp->rq_sendfile_ok
) {
+ if (file->f_op->sendfile) {
svc_pushback_unused_pages(rqstp);
err = file->f_op->sendfile(file, &offset, *count,
nfsd_read_actor, rqstp);
svc_pushback_unused_pages(rqstp);
err = file->f_op->sendfile(file, &offset, *count,
nfsd_read_actor, rqstp);
@@
-1114,7
+1116,7
@@
nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
*/
if (!resfhp->fh_dentry) {
/* called from nfsd_proc_mkdir, or possibly nfsd3_proc_create */
*/
if (!resfhp->fh_dentry) {
/* called from nfsd_proc_mkdir, or possibly nfsd3_proc_create */
- fh_lock
_nested(fhp, I_MUTEX_PARENT
);
+ fh_lock
(fhp
);
dchild = lookup_one_len(fname, dentry, flen);
err = PTR_ERR(dchild);
if (IS_ERR(dchild))
dchild = lookup_one_len(fname, dentry, flen);
err = PTR_ERR(dchild);
if (IS_ERR(dchild))
@@
-1240,7
+1242,7
@@
nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp,
err = nfserr_notdir;
if(!dirp->i_op || !dirp->i_op->lookup)
goto out;
err = nfserr_notdir;
if(!dirp->i_op || !dirp->i_op->lookup)
goto out;
- fh_lock
_nested(fhp, I_MUTEX_PARENT
);
+ fh_lock
(fhp
);
/*
* Compose the response file handle.
/*
* Compose the response file handle.
@@
-1496,7
+1498,7
@@
nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,
if (isdotent(name, len))
goto out;
if (isdotent(name, len))
goto out;
- fh_lock
_nested(ffhp, I_MUTEX_PARENT
);
+ fh_lock
(ffhp
);
ddir = ffhp->fh_dentry;
dirp = ddir->d_inode;
ddir = ffhp->fh_dentry;
dirp = ddir->d_inode;
@@
-1521,15
+1523,14
@@
nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,
err = nfserrno(err);
}
err = nfserrno(err);
}
- dput(dnew);
-out_unlock:
fh_unlock(ffhp);
fh_unlock(ffhp);
+ dput(dnew);
out:
return err;
out_nfserr:
err = nfserrno(err);
out:
return err;
out_nfserr:
err = nfserrno(err);
- goto out
_unlock
;
+ goto out;
}
/*
}
/*
@@
-1558,7
+1559,7
@@
nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,
tdir = tdentry->d_inode;
err = (rqstp->rq_vers == 2) ? nfserr_acces : nfserr_xdev;
tdir = tdentry->d_inode;
err = (rqstp->rq_vers == 2) ? nfserr_acces : nfserr_xdev;
- if (f
fhp->fh_export != tfhp->fh_export
)
+ if (f
dir->i_sb != tdir->i_sb
)
goto out;
err = nfserr_perm;
goto out;
err = nfserr_perm;
@@
-1646,7
+1647,7
@@
nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
if (err)
goto out;
if (err)
goto out;
- fh_lock
_nested(fhp, I_MUTEX_PARENT
);
+ fh_lock
(fhp
);
dentry = fhp->fh_dentry;
dirp = dentry->d_inode;
dentry = fhp->fh_dentry;
dirp = dentry->d_inode;
@@
-1742,7
+1743,7
@@
int
nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat)
{
int err = fh_verify(rqstp, fhp, 0, MAY_NOP);
nfsd_statfs(struct svc_rqst *rqstp, struct svc_fh *fhp, struct kstatfs *stat)
{
int err = fh_verify(rqstp, fhp, 0, MAY_NOP);
- if (!err && vfs_statfs(fhp->fh_dentry,stat))
+ if (!err && vfs_statfs(fhp->fh_dentry
->d_inode->i_sb
,stat))
err = nfserr_io;
return err;
}
err = nfserr_io;
return err;
}
@@
-1928,10
+1929,11
@@
nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl)
value = kmalloc(size, GFP_KERNEL);
if (!value)
return -ENOMEM;
value = kmalloc(size, GFP_KERNEL);
if (!value)
return -ENOMEM;
- error = posix_acl_to_xattr(acl, value, size);
- if (error < 0)
+ size = posix_acl_to_xattr(acl, value, size);
+ if (size < 0) {
+ error = size;
goto getout;
goto getout;
- size = error;
+ }
} else
size = 0;
} else
size = 0;