From 2b47c3611de05c585e2d81204f6c7e3e255a3461 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 16 Oct 2007 23:27:21 -0700 Subject: Fix f_version type: should be u64 instead of unsigned long 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 Cc: Martin Bligh Cc: "Randy.Dunlap" Cc: Al Viro Cc: Cc: Mark Fasheh Cc: Christoph Hellwig Cc: "J. Bruce Fields" Cc: Trond Myklebust Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- fs/proc/base.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'fs/proc') diff --git a/fs/proc/base.c b/fs/proc/base.c index 78fdfea1a7f..ea115d4c9f5 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2586,7 +2586,7 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi /* 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; @@ -2595,7 +2595,7 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi 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; } -- cgit v1.2.3