Fix f_version type: should be u64 instead of long There is a type inconsistency between struct inode i_version and struct file f_version.
fs.h: struct inode u64 i_version; and struct file unsigned long f_version; Users do: fs/ext3/dir.c: if (filp->f_version != inode->i_version) { So why isn't f_version a u64 ? It becomes a problem if versions gets higher than 2^32 and we are on an architecture where longs are 32 bits. This patch changes the f_version type to u64, and updates the users accordingly. It applies to 2.6.23-rc2-mm2. Signed-off-by: Mathieu Desnoyers <[EMAIL PROTECTED]> CC: Martin Bligh <[EMAIL PROTECTED]> CC: Randy Dunlap <[EMAIL PROTECTED]> CC: Al Viro <[EMAIL PROTECTED]> --- fs/ext3/dir.c | 2 +- fs/ext4/dir.c | 2 +- fs/ocfs2/dir.c | 2 +- fs/proc/base.c | 4 ++-- include/linux/fs.h | 2 +- include/linux/seq_file.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) Index: linux-2.6-lttng/include/linux/fs.h =================================================================== --- linux-2.6-lttng.orig/include/linux/fs.h 2007-08-18 11:05:10.000000000 -0400 +++ linux-2.6-lttng/include/linux/fs.h 2007-08-18 11:05:56.000000000 -0400 @@ -799,7 +799,7 @@ struct file { unsigned int f_uid, f_gid; struct file_ra_state f_ra; - unsigned long f_version; + u64 f_version; #ifdef CONFIG_SECURITY void *f_security; #endif Index: linux-2.6-lttng/fs/ext3/dir.c =================================================================== --- linux-2.6-lttng.orig/fs/ext3/dir.c 2007-08-18 11:08:25.000000000 -0400 +++ linux-2.6-lttng/fs/ext3/dir.c 2007-08-18 11:08:32.000000000 -0400 @@ -210,7 +210,7 @@ revalidate: * not the directory has been modified * during the copy operation. */ - unsigned long version = filp->f_version; + u64 version = filp->f_version; error = filldir(dirent, de->name, de->name_len, Index: linux-2.6-lttng/fs/ext4/dir.c =================================================================== --- linux-2.6-lttng.orig/fs/ext4/dir.c 2007-08-18 11:08:47.000000000 -0400 +++ linux-2.6-lttng/fs/ext4/dir.c 2007-08-18 11:08:53.000000000 -0400 @@ -210,7 +210,7 @@ revalidate: * not the directory has been modified * during the copy operation. */ - unsigned long version = filp->f_version; + u64 version = filp->f_version; error = filldir(dirent, de->name, de->name_len, Index: linux-2.6-lttng/fs/ocfs2/dir.c =================================================================== --- linux-2.6-lttng.orig/fs/ocfs2/dir.c 2007-08-18 11:09:23.000000000 -0400 +++ linux-2.6-lttng/fs/ocfs2/dir.c 2007-08-18 11:09:30.000000000 -0400 @@ -183,7 +183,7 @@ revalidate: * not the directory has been modified * during the copy operation. */ - unsigned long version = filp->f_version; + u64 version = filp->f_version; unsigned char d_type = DT_UNKNOWN; if (de->file_type < OCFS2_FT_MAX) Index: linux-2.6-lttng/fs/proc/base.c =================================================================== --- linux-2.6-lttng.orig/fs/proc/base.c 2007-08-18 11:11:21.000000000 -0400 +++ linux-2.6-lttng/fs/proc/base.c 2007-08-18 11:11:39.000000000 -0400 @@ -2570,7 +2570,7 @@ static int proc_task_readdir(struct file /* f_version caches the tgid value that the last readdir call couldn't * return. lseek aka telldir automagically resets f_version to 0. */ - tid = filp->f_version; + tid = (int)filp->f_version; filp->f_version = 0; for (task = first_tid(leader, tid, pos - 2); task; @@ -2579,7 +2579,7 @@ static int proc_task_readdir(struct file if (proc_task_fill_cache(filp, dirent, filldir, task, tid) < 0) { /* returning this tgid failed, save it as the first * pid for the next readir call */ - filp->f_version = tid; + filp->f_version = (u64)tid; put_task_struct(task); break; } Index: linux-2.6-lttng/include/linux/seq_file.h =================================================================== --- linux-2.6-lttng.orig/include/linux/seq_file.h 2007-08-18 11:12:39.000000000 -0400 +++ linux-2.6-lttng/include/linux/seq_file.h 2007-08-18 11:12:50.000000000 -0400 @@ -18,7 +18,7 @@ struct seq_file { size_t from; size_t count; loff_t index; - loff_t version; + u64 version; struct mutex lock; const struct seq_operations *op; void *private; -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/