aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>2007-10-17 02:27:21 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-17 11:42:53 -0400
commit2b47c3611de05c585e2d81204f6c7e3e255a3461 (patch)
tree24a14614fb9bf507b4b6ad3fa6a7cfa5a92318fb /fs
parent41d10da3717409de33d5441f2f6d8f072ab3fbb6 (diff)
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 <mathieu.desnoyers@polymtl.ca> Cc: Martin Bligh <mbligh@google.com> Cc: "Randy.Dunlap" <rdunlap@xenotime.net> Cc: Al Viro <viro@ftp.linux.org.uk> Cc: <linux-ext4@vger.kernel.org> Cc: Mark Fasheh <mark.fasheh@oracle.com> Cc: Christoph Hellwig <hch@lst.de> Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/ext3/dir.c2
-rw-r--r--fs/ext4/dir.c2
-rw-r--r--fs/ocfs2/dir.c10
-rw-r--r--fs/proc/base.c4
4 files changed, 9 insertions, 9 deletions
diff --git a/fs/ext3/dir.c b/fs/ext3/dir.c
index c2c3491b18cf..fd4b6dd71150 100644
--- a/fs/ext3/dir.c
+++ b/fs/ext3/dir.c
@@ -210,7 +210,7 @@ revalidate:
210 * not the directory has been modified 210 * not the directory has been modified
211 * during the copy operation. 211 * during the copy operation.
212 */ 212 */
213 unsigned long version = filp->f_version; 213 u64 version = filp->f_version;
214 214
215 error = filldir(dirent, de->name, 215 error = filldir(dirent, de->name,
216 de->name_len, 216 de->name_len,
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index e11890acfa21..0fb1e62b20d0 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -210,7 +210,7 @@ revalidate:
210 * not the directory has been modified 210 * not the directory has been modified
211 * during the copy operation. 211 * during the copy operation.
212 */ 212 */
213 unsigned long version = filp->f_version; 213 u64 version = filp->f_version;
214 214
215 error = filldir(dirent, de->name, 215 error = filldir(dirent, de->name,
216 de->name_len, 216 de->name_len,
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 7453b70c1a19..6a2f143e269c 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -586,7 +586,7 @@ bail:
586} 586}
587 587
588static int ocfs2_dir_foreach_blk_id(struct inode *inode, 588static int ocfs2_dir_foreach_blk_id(struct inode *inode,
589 unsigned long *f_version, 589 u64 *f_version,
590 loff_t *f_pos, void *priv, 590 loff_t *f_pos, void *priv,
591 filldir_t filldir, int *filldir_err) 591 filldir_t filldir, int *filldir_err)
592{ 592{
@@ -648,7 +648,7 @@ revalidate:
648 * not the directory has been modified 648 * not the directory has been modified
649 * during the copy operation. 649 * during the copy operation.
650 */ 650 */
651 unsigned long version = *f_version; 651 u64 version = *f_version;
652 unsigned char d_type = DT_UNKNOWN; 652 unsigned char d_type = DT_UNKNOWN;
653 653
654 if (de->file_type < OCFS2_FT_MAX) 654 if (de->file_type < OCFS2_FT_MAX)
@@ -677,7 +677,7 @@ out:
677} 677}
678 678
679static int ocfs2_dir_foreach_blk_el(struct inode *inode, 679static int ocfs2_dir_foreach_blk_el(struct inode *inode,
680 unsigned long *f_version, 680 u64 *f_version,
681 loff_t *f_pos, void *priv, 681 loff_t *f_pos, void *priv,
682 filldir_t filldir, int *filldir_err) 682 filldir_t filldir, int *filldir_err)
683{ 683{
@@ -798,7 +798,7 @@ out:
798 return stored; 798 return stored;
799} 799}
800 800
801static int ocfs2_dir_foreach_blk(struct inode *inode, unsigned long *f_version, 801static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
802 loff_t *f_pos, void *priv, filldir_t filldir, 802 loff_t *f_pos, void *priv, filldir_t filldir,
803 int *filldir_err) 803 int *filldir_err)
804{ 804{
@@ -818,7 +818,7 @@ int ocfs2_dir_foreach(struct inode *inode, loff_t *f_pos, void *priv,
818 filldir_t filldir) 818 filldir_t filldir)
819{ 819{
820 int ret = 0, filldir_err = 0; 820 int ret = 0, filldir_err = 0;
821 unsigned long version = inode->i_version; 821 u64 version = inode->i_version;
822 822
823 while (*f_pos < i_size_read(inode)) { 823 while (*f_pos < i_size_read(inode)) {
824 ret = ocfs2_dir_foreach_blk(inode, &version, f_pos, priv, 824 ret = ocfs2_dir_foreach_blk(inode, &version, f_pos, priv,
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 78fdfea1a7f8..ea115d4c9f59 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
2586 /* f_version caches the tgid value that the last readdir call couldn't 2586 /* f_version caches the tgid value that the last readdir call couldn't
2587 * return. lseek aka telldir automagically resets f_version to 0. 2587 * return. lseek aka telldir automagically resets f_version to 0.
2588 */ 2588 */
2589 tid = filp->f_version; 2589 tid = (int)filp->f_version;
2590 filp->f_version = 0; 2590 filp->f_version = 0;
2591 for (task = first_tid(leader, tid, pos - 2); 2591 for (task = first_tid(leader, tid, pos - 2);
2592 task; 2592 task;
@@ -2595,7 +2595,7 @@ static int proc_task_readdir(struct file * filp, void * dirent, filldir_t filldi
2595 if (proc_task_fill_cache(filp, dirent, filldir, task, tid) < 0) { 2595 if (proc_task_fill_cache(filp, dirent, filldir, task, tid) < 0) {
2596 /* returning this tgid failed, save it as the first 2596 /* returning this tgid failed, save it as the first
2597 * pid for the next readir call */ 2597 * pid for the next readir call */
2598 filp->f_version = tid; 2598 filp->f_version = (u64)tid;
2599 put_task_struct(task); 2599 put_task_struct(task);
2600 break; 2600 break;
2601 } 2601 }