Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2b47c3611de05c585e2d81204f6c7e3e255a3461
Commit:     2b47c3611de05c585e2d81204f6c7e3e255a3461
Parent:     41d10da3717409de33d5441f2f6d8f072ab3fbb6
Author:     Mathieu Desnoyers <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 23:27:21 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed Oct 17 08:42:53 2007 -0700

    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 <[EMAIL PROTECTED]>
    Cc: Martin Bligh <[EMAIL PROTECTED]>
    Cc: "Randy.Dunlap" <[EMAIL PROTECTED]>
    Cc: Al Viro <[EMAIL PROTECTED]>
    Cc: <[EMAIL PROTECTED]>
    Cc: Mark Fasheh <[EMAIL PROTECTED]>
    Cc: Christoph Hellwig <[EMAIL PROTECTED]>
    Cc: "J. Bruce Fields" <[EMAIL PROTECTED]>
    Cc: Trond Myklebust <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 fs/ext3/dir.c            |    2 +-
 fs/ext4/dir.c            |    2 +-
 fs/ocfs2/dir.c           |   10 +++++-----
 fs/proc/base.c           |    4 ++--
 include/linux/fs.h       |    2 +-
 include/linux/seq_file.h |    2 +-
 6 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/fs/ext3/dir.c b/fs/ext3/dir.c
index c2c3491..fd4b6dd 100644
--- a/fs/ext3/dir.c
+++ b/fs/ext3/dir.c
@@ -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,
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index e11890a..0fb1e62 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -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,
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c
index 7453b70..6a2f143 100644
--- a/fs/ocfs2/dir.c
+++ b/fs/ocfs2/dir.c
@@ -586,7 +586,7 @@ bail:
 }
 
 static int ocfs2_dir_foreach_blk_id(struct inode *inode,
-                                   unsigned long *f_version,
+                                   u64 *f_version,
                                    loff_t *f_pos, void *priv,
                                    filldir_t filldir, int *filldir_err)
 {
@@ -648,7 +648,7 @@ revalidate:
                         * not the directory has been modified
                         * during the copy operation.
                         */
-                       unsigned long version = *f_version;
+                       u64 version = *f_version;
                        unsigned char d_type = DT_UNKNOWN;
 
                        if (de->file_type < OCFS2_FT_MAX)
@@ -677,7 +677,7 @@ out:
 }
 
 static int ocfs2_dir_foreach_blk_el(struct inode *inode,
-                                   unsigned long *f_version,
+                                   u64 *f_version,
                                    loff_t *f_pos, void *priv,
                                    filldir_t filldir, int *filldir_err)
 {
@@ -798,7 +798,7 @@ out:
        return stored;
 }
 
-static int ocfs2_dir_foreach_blk(struct inode *inode, unsigned long *f_version,
+static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
                                 loff_t *f_pos, void *priv, filldir_t filldir,
                                 int *filldir_err)
 {
@@ -818,7 +818,7 @@ int ocfs2_dir_foreach(struct inode *inode, loff_t *f_pos, 
void *priv,
                      filldir_t filldir)
 {
        int ret = 0, filldir_err = 0;
-       unsigned long version = inode->i_version;
+       u64 version = inode->i_version;
 
        while (*f_pos < i_size_read(inode)) {
                ret = ocfs2_dir_foreach_blk(inode, &version, f_pos, priv,
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 78fdfea..ea115d4 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;
                }
diff --git a/include/linux/fs.h b/include/linux/fs.h
index bb89a5d..30aca33 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -792,7 +792,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
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h
index 8bf1e05..ebbc02b 100644
--- a/include/linux/seq_file.h
+++ b/include/linux/seq_file.h
@@ -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;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to