diff options
| author | James Simmons <jsimmons@maxwell.earthlink.net> | 2003-03-27 06:04:51 -0800 |
|---|---|---|
| committer | James Simmons <jsimmons@maxwell.earthlink.net> | 2003-03-27 06:04:51 -0800 |
| commit | cb40c1f164f634bf0a8d488cd8f1061a100fc78a (patch) | |
| tree | 6d4a8b495b6e3968f1543c39b42e2f598dd029ba /fs | |
| parent | fcd3a1b69763504555d994e07d482da00ac01df6 (diff) | |
| parent | 10142a9b8ef26a31ae46265cc3b6cd1ee13ae866 (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.c | 4 | ||||
| -rw-r--r-- | fs/exec.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs4proc.c | 1 | ||||
| -rw-r--r-- | fs/nfs/read.c | 12 | ||||
| -rw-r--r-- | fs/nfsd/export.c | 12 | ||||
| -rw-r--r-- | fs/nfsd/nfs4xdr.c | 20 | ||||
| -rw-r--r-- | fs/quota.c | 7 |
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); |
