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
VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git]
/
fs
/
nfsd
/
vfs.c
diff --git
a/fs/nfsd/vfs.c
b/fs/nfsd/vfs.c
index
d520fea
..
d50269b
100644
(file)
--- a/
fs/nfsd/vfs.c
+++ b/
fs/nfsd/vfs.c
@@
-611,7
+611,7
@@
static int
nfsd_read_actor(read_descriptor_t *desc, struct page *page, unsigned long offset , unsigned long size)
{
unsigned long count = desc->count;
nfsd_read_actor(read_descriptor_t *desc, struct page *page, unsigned long offset , unsigned long size)
{
unsigned long count = desc->count;
- struct svc_rqst *rqstp =
(struct svc_rqst *)desc->buf
;
+ struct svc_rqst *rqstp =
desc->arg.data
;
if (size > count)
size = count;
if (size > count)
size = count;
@@
-641,7
+641,7
@@
nfsd_read_actor(read_descriptor_t *desc, struct page *page, unsigned long offset
*/
int
nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
*/
int
nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
- struct
io
vec *vec, int vlen, unsigned long *count)
+ struct
k
vec *vec, int vlen, unsigned long *count)
{
struct raparms *ra;
mm_segment_t oldfs;
{
struct raparms *ra;
mm_segment_t oldfs;
@@
-673,7
+673,7
@@
nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
} else {
oldfs = get_fs();
set_fs(KERNEL_DS);
} else {
oldfs = get_fs();
set_fs(KERNEL_DS);
- err = vfs_readv(&file, vec, vlen, &offset);
+ err = vfs_readv(&file,
(struct iovec __user *)
vec, vlen, &offset);
set_fs(oldfs);
}
set_fs(oldfs);
}
@@
-704,7
+704,7
@@
out:
*/
int
nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
*/
int
nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
- struct
io
vec *vec, int vlen,
+ struct
k
vec *vec, int vlen,
unsigned long cnt, int *stablep)
{
struct svc_export *exp;
unsigned long cnt, int *stablep)
{
struct svc_export *exp;
@@
-753,7
+753,7
@@
nfsd_write(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
/* Write the data. */
oldfs = get_fs(); set_fs(KERNEL_DS);
/* Write the data. */
oldfs = get_fs(); set_fs(KERNEL_DS);
- err = vfs_writev(&file, vec, vlen, &offset);
+ err = vfs_writev(&file,
(struct iovec __user *)
vec, vlen, &offset);
set_fs(oldfs);
if (err >= 0) {
nfsdstats.io_write += cnt;
set_fs(oldfs);
if (err >= 0) {
nfsdstats.io_write += cnt;
@@
-1477,10
+1477,12
@@
nfsd_readdir(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t *offsetp,
err = nfsd_open(rqstp, fhp, S_IFDIR, MAY_READ, &file);
if (err)
goto out;
err = nfsd_open(rqstp, fhp, S_IFDIR, MAY_READ, &file);
if (err)
goto out;
- if (offset > ~(u32) 0)
- goto out_close;
- file.f_pos = offset;
+ offset = vfs_llseek(&file, offset, 0);
+ if (offset < 0) {
+ err = nfserrno((int)offset);
+ goto out_close;
+ }
/*
* Read the directory entries. This silly loop is necessary because
/*
* Read the directory entries. This silly loop is necessary because
@@
-1496,7
+1498,7
@@
nfsd_readdir(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t *offsetp,
err = nfserrno(err);
else
err = cdp->err;
err = nfserrno(err);
else
err = cdp->err;
- *offsetp =
file.f_pos
;
+ *offsetp =
vfs_llseek(&file, 0, 1)
;
if (err == nfserr_eof || err == nfserr_toosmall)
err = nfs_ok; /* can still be found in ->err */
if (err == nfserr_eof || err == nfserr_toosmall)
err = nfs_ok; /* can still be found in ->err */
@@
-1514,7
+1516,6
@@
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->d_inode->i_sb,stat))
err = nfserr_io;
return err;
if (!err && vfs_statfs(fhp->fh_dentry->d_inode->i_sb,stat))
err = nfserr_io;
return err;
@@
-1532,7
+1533,7
@@
nfsd_permission(struct svc_export *exp, struct dentry *dentry, int acc)
if (acc == MAY_NOP)
return 0;
#if 0
if (acc == MAY_NOP)
return 0;
#if 0
- printk("nfsd: permission 0x%x%s%s%s%s%s%s%s mode 0%o%s%s%s\n",
+
d
printk("nfsd: permission 0x%x%s%s%s%s%s%s%s mode 0%o%s%s%s\n",
acc,
(acc & MAY_READ)? " read" : "",
(acc & MAY_WRITE)? " write" : "",
acc,
(acc & MAY_READ)? " read" : "",
(acc & MAY_WRITE)? " write" : "",
@@
-1545,7
+1546,7
@@
nfsd_permission(struct svc_export *exp, struct dentry *dentry, int acc)
IS_IMMUTABLE(inode)? " immut" : "",
IS_APPEND(inode)? " append" : "",
IS_RDONLY(inode)? " ro" : "");
IS_IMMUTABLE(inode)? " immut" : "",
IS_APPEND(inode)? " append" : "",
IS_RDONLY(inode)? " ro" : "");
- printk(" owner %d/%d user %d/%d\n",
+
d
printk(" owner %d/%d user %d/%d\n",
inode->i_uid, inode->i_gid, current->fsuid, current->fsgid);
#endif
inode->i_uid, inode->i_gid, current->fsuid, current->fsgid);
#endif