summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorJames Simmons <jsimmons@maxwell.earthlink.net>2003-03-27 06:04:51 -0800
committerJames Simmons <jsimmons@maxwell.earthlink.net>2003-03-27 06:04:51 -0800
commitcb40c1f164f634bf0a8d488cd8f1061a100fc78a (patch)
tree6d4a8b495b6e3968f1543c39b42e2f598dd029ba /fs
parentfcd3a1b69763504555d994e07d482da00ac01df6 (diff)
parent10142a9b8ef26a31ae46265cc3b6cd1ee13ae866 (diff)
Merge maxwell.earthlink.net:/usr/src/linus-2.5
into maxwell.earthlink.net:/usr/src/fbdev-2.5
Diffstat (limited to 'fs')
-rw-r--r--fs/cramfs/inode.c4
-rw-r--r--fs/exec.c1
-rw-r--r--fs/nfs/nfs4proc.c1
-rw-r--r--fs/nfs/read.c12
-rw-r--r--fs/nfsd/export.c12
-rw-r--r--fs/nfsd/nfs4xdr.c20
-rw-r--r--fs/quota.c7
7 files changed, 33 insertions, 24 deletions
diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index 08b2125a6dae..af2c968a5571 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -43,6 +43,7 @@ static DECLARE_MUTEX(read_mutex);
static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inode * cramfs_inode)
{
struct inode * inode = new_inode(sb);
+ static struct timespec zerotime = { 0, 0 };
if (inode) {
inode->i_mode = cramfs_inode->mode;
@@ -51,7 +52,8 @@ static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inod
inode->i_blocks = (cramfs_inode->size - 1) / 512 + 1;
inode->i_blksize = PAGE_CACHE_SIZE;
inode->i_gid = cramfs_inode->gid;
- inode->i_mtime = inode->i_atime = inode->i_ctime = 0;
+ /* Struct copy intentional */
+ inode->i_mtime = inode->i_atime = inode->i_ctime = zerotime;
inode->i_ino = CRAMINO(cramfs_inode);
/* inode->i_nlink is left 1 - arguably wrong for directories,
but it's the best we can do without reading the directory
diff --git a/fs/exec.c b/fs/exec.c
index f0b70ae3698d..84fb2e24f106 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -38,7 +38,6 @@
#include <linux/binfmts.h>
#include <linux/swap.h>
#include <linux/utsname.h>
-#define __NO_VERSION__
#include <linux/module.h>
#include <linux/namei.h>
#include <linux/proc_fs.h>
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 1f1ab0213a87..317a8bb269d9 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1529,7 +1529,6 @@ static void
renew_release(struct rpc_task *task)
{
kfree(task->tk_calldata);
- task->tk_calldata = NULL;
}
int
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 8cf8dc082280..f4fff37de0f5 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -270,18 +270,10 @@ nfs_readpage_result(struct rpc_task *task)
req->wb_pgbase + count,
req->wb_bytes - count);
- if (data->res.eof ||
- ((fattr->valid & NFS_ATTR_FATTR) &&
- ((req_offset(req) + count) >= fattr->size)))
- SetPageUptodate(page);
- else
- if (count < req->wb_bytes)
- SetPageError(page);
count = 0;
- } else {
+ } else
count -= PAGE_CACHE_SIZE;
- SetPageUptodate(page);
- }
+ SetPageUptodate(page);
} else
SetPageError(page);
unlock_page(page);
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
index 4ea38a35403e..835d996497cb 100644
--- a/fs/nfsd/export.c
+++ b/fs/nfsd/export.c
@@ -496,13 +496,19 @@ exp_parent(svc_client *clp, struct vfsmount *mnt, struct dentry *dentry,
{
svc_export *exp;
- read_lock(&dparent_lock);
+ dget(dentry);
exp = exp_get_by_name(clp, mnt, dentry, reqp);
+
while (exp == NULL && dentry != dentry->d_parent) {
- dentry = dentry->d_parent;
+ struct dentry *parent;
+ read_lock(&dparent_lock);
+ parent = dget(dentry->d_parent);
+ dput(dentry);
+ dentry = parent;
+ read_unlock(&dparent_lock);
exp = exp_get_by_name(clp, mnt, dentry, reqp);
}
- read_unlock(&dparent_lock);
+ dput(dentry);
return exp;
}
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index db77e132a71e..f61a04d017a7 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -231,6 +231,7 @@ xdr_error: \
p += XDR_QUADLEN(nbytes); \
} while (0)
+/* READ_BUF, read_buf(): nbytes must be <= PAGE_SIZE */
#define READ_BUF(nbytes) do { \
if (nbytes <= (u32)((char *)argp->end - (char *)argp->p)) { \
p = argp->p; \
@@ -244,15 +245,15 @@ xdr_error: \
u32 *read_buf(struct nfsd4_compoundargs *argp, int nbytes)
{
/* We want more bytes than seem to be available.
- * Maybe we need a new page, may wehave just run out
+ * Maybe we need a new page, maybe we have just run out
*/
int avail = (char*)argp->end - (char*)argp->p;
u32 *p;
if (avail + argp->pagelen < nbytes)
return NULL;
- if (avail + PAGE_SIZE > nbytes) /* need more than a page !! */
+ if (avail + PAGE_SIZE < nbytes) /* need more than a page !! */
return NULL;
- /* ok, we can do it with the tail plus the next page */
+ /* ok, we can do it with the current plus the next page */
if (nbytes <= sizeof(argp->tmp))
p = argp->tmp;
else {
@@ -851,16 +852,16 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write)
v++;
write->wr_vec[v].iov_base = page_address(argp->pagelist[0]);
argp->pagelist++;
- if (argp->pagelen >= PAGE_SIZE) {
+ if (len >= PAGE_SIZE) {
write->wr_vec[v].iov_len = PAGE_SIZE;
argp->pagelen -= PAGE_SIZE;
} else {
write->wr_vec[v].iov_len = argp->pagelen;
- argp->pagelen = 0;
+ argp->pagelen -= len;
}
}
argp->end = (u32*) (write->wr_vec[v].iov_base + write->wr_vec[v].iov_len);
- argp->p = (u32*) (write->wr_vec[v].iov_base + len);
+ argp->p = (u32*) (write->wr_vec[v].iov_base + (XDR_QUADLEN(len) << 2));
write->wr_vec[v].iov_len = len;
write->wr_vlen = v+1;
@@ -1690,7 +1691,8 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_read
{
u32 eof;
int v, pn;
- unsigned long maxcount, len;
+ unsigned long maxcount;
+ long len;
ENCODE_HEAD;
if (nfserr)
@@ -1731,6 +1733,10 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, int nfserr, struct nfsd4_read
resp->xbuf->page_len = maxcount;
+ /* read zero bytes -> don't set up tail */
+ if(!maxcount)
+ return 0;
+
/* set up page for remaining responses */
svc_take_page(resp->rqstp);
resp->xbuf->tail[0].iov_base =
diff --git a/fs/quota.c b/fs/quota.c
index 8548c3708989..3daa61901363 100644
--- a/fs/quota.c
+++ b/fs/quota.c
@@ -221,12 +221,17 @@ asmlinkage long sys_quotactl(unsigned int cmd, const char *special, qid_t id, ca
uint cmds, type;
struct super_block *sb = NULL;
struct block_device *bdev;
+ char *tmp;
int ret = -ENODEV;
cmds = cmd >> SUBCMDSHIFT;
type = cmd & SUBCMDMASK;
- bdev = lookup_bdev(special);
+ tmp = getname(special);
+ if (IS_ERR(tmp))
+ return PTR_ERR(tmp);
+ bdev = lookup_bdev(tmp);
+ putname(tmp);
if (IS_ERR(bdev))
return PTR_ERR(bdev);
sb = get_super(bdev);