patch-2.4.19 linux-2.4.19/fs/nfs/inode.c
Next file: linux-2.4.19/fs/nfs/mount_clnt.c
Previous file: linux-2.4.19/fs/nfs/flushd.c
Back to the patch index
Back to the overall index
- Lines: 120
- Date:
Fri Aug 2 17:39:45 2002
- Orig file:
linux-2.4.18/fs/nfs/inode.c
- Orig date:
Mon Feb 25 11:38:09 2002
diff -urN linux-2.4.18/fs/nfs/inode.c linux-2.4.19/fs/nfs/inode.c
@@ -463,6 +463,8 @@
server->namelen = maxlen;
sb->s_maxbytes = fsinfo.maxfilesize;
+ if (sb->s_maxbytes > MAX_LFS_FILESIZE)
+ sb->s_maxbytes = MAX_LFS_FILESIZE;
/* Fire up the writeback cache */
if (nfs_reqlist_alloc(server) < 0) {
@@ -632,7 +634,6 @@
*/
if (inode->i_mode == 0) {
NFS_FILEID(inode) = fattr->fileid;
- NFS_FSID(inode) = fattr->fsid;
inode->i_mode = fattr->mode;
/* Why so? Because we want revalidate for devices/FIFOs, and
* that's precisely what we have in nfs_file_inode_operations.
@@ -671,39 +672,18 @@
struct nfs_fh *fh = desc->fh;
struct nfs_fattr *fattr = desc->fattr;
- if (NFS_FSID(inode) != fattr->fsid)
- return 0;
if (NFS_FILEID(inode) != fattr->fileid)
return 0;
if (memcmp(&inode->u.nfs_i.fh, fh, sizeof(inode->u.nfs_i.fh)) != 0)
return 0;
+ if (is_bad_inode(inode))
+ return 0;
/* Force an attribute cache update if inode->i_count == 0 */
if (!atomic_read(&inode->i_count))
NFS_CACHEINV(inode);
return 1;
}
-int
-nfs_inode_is_stale(struct inode *inode, struct nfs_fh *fh, struct nfs_fattr *fattr)
-{
- /* Empty inodes are not stale */
- if (!inode->i_mode)
- return 0;
-
- if ((fattr->mode & S_IFMT) != (inode->i_mode & S_IFMT))
- return 1;
-
- if (is_bad_inode(inode) || NFS_STALE(inode))
- return 1;
-
- /* Has the filehandle changed? If so is the old one stale? */
- if (memcmp(&inode->u.nfs_i.fh, fh, sizeof(inode->u.nfs_i.fh)) != 0 &&
- __nfs_revalidate_inode(NFS_SERVER(inode),inode) == -ESTALE)
- return 1;
-
- return 0;
-}
-
/*
* This is our own version of iget that looks up inodes by file handle
* instead of inode number. We use this technique instead of using
@@ -769,7 +749,7 @@
/*
* Make sure the inode is up-to-date.
*/
- error = nfs_revalidate(dentry);
+ error = nfs_revalidate_inode(NFS_SERVER(inode),inode);
if (error) {
#ifdef NFS_PARANOIA
printk("nfs_notify_change: revalidate failed, error=%d\n", error);
@@ -1004,12 +984,11 @@
inode->i_dev, inode->i_ino,
atomic_read(&inode->i_count), fattr->valid);
- if (NFS_FSID(inode) != fattr->fsid ||
- NFS_FILEID(inode) != fattr->fileid) {
+ if (NFS_FILEID(inode) != fattr->fileid) {
printk(KERN_ERR "nfs_refresh_inode: inode number mismatch\n"
- "expected (0x%Lx/0x%Lx), got (0x%Lx/0x%Lx)\n",
- (long long)NFS_FSID(inode), (long long)NFS_FILEID(inode),
- (long long)fattr->fsid, (long long)fattr->fileid);
+ "expected (0x%x/0x%Lx), got (0x%x/0x%Lx)\n",
+ inode->i_dev, (long long)NFS_FILEID(inode),
+ inode->i_dev, (long long)fattr->fileid);
goto out_err;
}
@@ -1079,8 +1058,11 @@
inode->i_atime = new_atime;
- NFS_CACHE_MTIME(inode) = new_mtime;
- inode->i_mtime = nfs_time_to_secs(new_mtime);
+ if (NFS_CACHE_MTIME(inode) != new_mtime) {
+ NFS_MTIME_UPDATE(inode) = jiffies;
+ NFS_CACHE_MTIME(inode) = new_mtime;
+ inode->i_mtime = nfs_time_to_secs(new_mtime);
+ }
NFS_CACHE_ISIZE(inode) = new_size;
inode->i_size = new_isize;
@@ -1105,14 +1087,17 @@
inode->i_rdev = to_kdev_t(fattr->rdev);
/* Update attrtimeo value */
- if (!invalid && time_after(jiffies, NFS_ATTRTIMEO_UPDATE(inode)+NFS_ATTRTIMEO(inode))) {
+ if (invalid) {
+ NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode);
+ NFS_ATTRTIMEO_UPDATE(inode) = jiffies;
+ invalidate_inode_pages(inode);
+ memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode)));
+ } else if (time_after(jiffies, NFS_ATTRTIMEO_UPDATE(inode)+NFS_ATTRTIMEO(inode))) {
if ((NFS_ATTRTIMEO(inode) <<= 1) > NFS_MAXATTRTIMEO(inode))
NFS_ATTRTIMEO(inode) = NFS_MAXATTRTIMEO(inode);
NFS_ATTRTIMEO_UPDATE(inode) = jiffies;
}
- if (invalid)
- nfs_zap_caches(inode);
return 0;
out_nochange:
if (new_atime - inode->i_atime > 0)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)