diff options
author | Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | 2007-10-17 02:27:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 11:42:53 -0400 |
commit | 2b47c3611de05c585e2d81204f6c7e3e255a3461 (patch) | |
tree | 24a14614fb9bf507b4b6ad3fa6a7cfa5a92318fb /fs | |
parent | 41d10da3717409de33d5441f2f6d8f072ab3fbb6 (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.c | 2 | ||||
-rw-r--r-- | fs/ext4/dir.c | 2 | ||||
-rw-r--r-- | fs/ocfs2/dir.c | 10 | ||||
-rw-r--r-- | fs/proc/base.c | 4 |
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 | ||
588 | static int ocfs2_dir_foreach_blk_id(struct inode *inode, | 588 | static 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 | ||
679 | static int ocfs2_dir_foreach_blk_el(struct inode *inode, | 679 | static 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 | ||
801 | static int ocfs2_dir_foreach_blk(struct inode *inode, unsigned long *f_version, | 801 | static 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 | } |