[PATCH] fix i_generation in ext2, and nfsd headers

G. Allen Morris III (gam3@ann.ixlabs.com)
Mon, 10 May 1999 23:45:18 -0700


This patch fixes the i_generation (what was called i_version) code
in ext2. It also adds a location to keep a generation number in the
nfsd filehandle.
-------------------------------------------------------------------------------
diff -u --new-file -X exclude linux-2.2.7-knfsdv3/fs/ext2/ialloc.c linux/fs/ext2/ialloc.c
--- linux-2.2.7-knfsdv3/fs/ext2/ialloc.c Tue Oct 20 14:08:14 1998
+++ linux/fs/ext2/ialloc.c Mon May 10 22:59:21 1999
@@ -268,21 +268,6 @@
}

/*
- * This function increments the inode version number
- *
- * This may be used one day by the NFS server
- */
-static void inc_inode_version (struct inode * inode,
- struct ext2_group_desc *gdp,
- int mode)
-{
- inode->u.ext2_i.i_version++;
- mark_inode_dirty(inode);
-
- return;
-}
-
-/*
* There are two policies for allocating an inode. If the new inode is
* a directory, then a forward search is made for a block group with both
* free space and a low directory-to-inode ratio; if that fails, then of
@@ -493,8 +478,8 @@
if (inode->u.ext2_i.i_flags & EXT2_SYNC_FL)
inode->i_flags |= MS_SYNCHRONOUS;
insert_inode_hash(inode);
+ inode->i_generation++;
mark_inode_dirty(inode);
- inc_inode_version (inode, gdp, mode);

unlock_super (sb);
if(DQUOT_ALLOC_INODE(sb, inode)) {
diff -u --new-file -X exclude linux-2.2.7-knfsdv3/fs/ext2/inode.c linux/fs/ext2/inode.c
--- linux-2.2.7-knfsdv3/fs/ext2/inode.c Fri Apr 30 13:48:58 1999
+++ linux/fs/ext2/inode.c Mon May 10 11:39:00 1999
@@ -552,7 +552,7 @@
<< 32;
#endif
}
- inode->u.ext2_i.i_version = le32_to_cpu(raw_inode->i_version);
+ inode->i_generation = le32_to_cpu(raw_inode->i_generation);
inode->u.ext2_i.i_block_group = block_group;
inode->u.ext2_i.i_next_alloc_block = 0;
inode->u.ext2_i.i_next_alloc_goal = 0;
@@ -682,7 +682,7 @@
raw_inode->i_size_high = cpu_to_le32(inode->i_size >> 32);
#endif
}
- raw_inode->i_version = cpu_to_le32(inode->u.ext2_i.i_version);
+ raw_inode->i_generation = cpu_to_le32(inode->i_generation);
if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
raw_inode->i_block[0] = cpu_to_le32(kdev_t_to_nr(inode->i_rdev));
else if (S_ISLNK(inode->i_mode) && !inode->i_blocks)
diff -u --new-file -X exclude linux-2.2.7-knfsdv3/fs/ext2/ioctl.c linux/fs/ext2/ioctl.c
--- linux-2.2.7-knfsdv3/fs/ext2/ioctl.c Wed May 6 10:56:05 1998
+++ linux/fs/ext2/ioctl.c Sun May 9 19:01:41 1999
@@ -69,13 +69,13 @@
mark_inode_dirty(inode);
return 0;
case EXT2_IOC_GETVERSION:
- return put_user(inode->u.ext2_i.i_version, (int *) arg);
+ return put_user(inode->i_generation, (int *) arg);
case EXT2_IOC_SETVERSION:
if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
return -EPERM;
if (IS_RDONLY(inode))
return -EROFS;
- if (get_user(inode->u.ext2_i.i_version, (int *) arg))
+ if (get_user(inode->i_generation, (int *) arg))
return -EFAULT;
inode->i_ctime = CURRENT_TIME;
mark_inode_dirty(inode);
diff -u --new-file -X exclude linux-2.2.7-knfsdv3/include/linux/ext2_fs.h linux/include/linux/ext2_fs.h
--- linux-2.2.7-knfsdv3/include/linux/ext2_fs.h Fri Apr 30 13:50:19 1999
+++ linux/include/linux/ext2_fs.h Sun May 9 18:57:50 1999
@@ -238,7 +238,7 @@
} masix1;
} osd1; /* OS dependent 1 */
__u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
- __u32 i_version; /* File version (for NFS) */
+ __u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl; /* File ACL */
__u32 i_dir_acl; /* Directory ACL */
__u32 i_faddr; /* Fragment address */
diff -u --new-file -X exclude linux-2.2.7-knfsdv3/include/linux/ext2_fs_i.h linux/include/linux/ext2_fs_i.h
--- linux-2.2.7-knfsdv3/include/linux/ext2_fs_i.h Thu Apr 2 13:39:51 1998
+++ linux/include/linux/ext2_fs_i.h Mon May 10 23:02:04 1999
@@ -29,7 +29,7 @@
__u32 i_file_acl;
__u32 i_dir_acl;
__u32 i_dtime;
- __u32 i_version;
+ __u32 not_used_1; /* FIX: not used/ 2.2 placeholder */
__u32 i_block_group;
__u32 i_next_alloc_block;
__u32 i_next_alloc_goal;
diff -u --new-file -X exclude linux-2.2.7-knfsdv3/include/linux/nfsd/nfsfh.h linux/include/linux/nfsd/nfsfh.h
--- linux-2.2.7-knfsdv3/include/linux/nfsd/nfsfh.h Fri Apr 30 16:30:11 1999
+++ linux/include/linux/nfsd/nfsfh.h Mon May 10 12:59:00 1999
@@ -36,6 +36,7 @@
__u32 fb_dev; /* our device */
__u32 fb_xdev;
__u32 fb_xino;
+ __u32 fb_generation;
};

#define NFS_FH_PADDING (NFS_FHSIZE - sizeof(struct nfs_fhbase))
@@ -50,6 +51,7 @@
#define fh_dev fh_base.fb_dev
#define fh_xdev fh_base.fb_xdev
#define fh_xino fh_base.fb_xino
+#define fh_generation fh_base.fb_generation

#ifdef __KERNEL__

--
Allen Morris <gam3@acm.org>

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/