[Cluster-devel] Re: [PATCH] Copy i_flags to gfs2 inode flags on write

Steven Whitehouse swhiteho at redhat.com
Tue Apr 24 10:05:12 UTC 2007


Hi,

On Mon, 2007-04-23 at 20:41 +0200, Jan Kara wrote:
>   Hi,
> 
>   attached is a patch to copy i_flags to GFS2 specific i_di_di_flags. The
> patch is compile-tested only. Steven, does it look OK to you?
> 
> 								Honza
> 
I can't see why we need this at the moment... what other interface is
there aside from the ioctl() for setting these flags?

Also:

        diff -rupX /home/jack/.kerndiffexclude linux-2.6.21-rc6-4-ocfs2_flags_update/fs/gfs2/ops_file.c linux-2.6.21-rc6-5-gfs2_flags_update/fs/gfs2/ops_file.c
        ---
        linux-2.6.21-rc6-4-ocfs2_flags_update/fs/gfs2/ops_file.c    2007-04-10 17:09:55.000000000 +0200
        +++
        linux-2.6.21-rc6-5-gfs2_flags_update/fs/gfs2/ops_file.c     2007-04-23 20:10:55.000000000 +0200
        @@ -207,6 +207,7 @@ static int gfs2_get_flags(struct file *f
                if (error)
                        return error;
         
        +       gfs2_get_inode_flags(ip);
                fsflags = fsflags_cvt(gfs2_to_fsflags,
        ip->i_di.di_flags);

Why do you call gfs2_get_inode_flags() here? There is no reason that the
gfs2 flags will not match the vfs inode flags at this point that I can
see (its a bug if they don't match). It is not valid to change the flags
while only holding a read lock and when outside of a transaction anyway.

        diff -rupX /home/jack/.kerndiffexclude linux-2.6.21-rc6-4-ocfs2_flags_update/fs/gfs2/ops_file.h linux-2.6.21-rc6-5-gfs2_flags_update/fs/gfs2/ops_file.h
        ---
        linux-2.6.21-rc6-4-ocfs2_flags_update/fs/gfs2/ops_file.h    2007-02-07 12:03:23.000000000 +0100
        +++
        linux-2.6.21-rc6-5-gfs2_flags_update/fs/gfs2/ops_file.h     2007-04-23 20:11:43.000000000 +0200
        @@ -18,6 +18,7 @@ extern int gfs2_internal_read(struct gfs
                                      struct file_ra_state *ra_state,
                                      char *buf, loff_t *pos, unsigned
        size);
         extern void gfs2_set_inode_flags(struct inode *inode);
        +extern void gfs2_get_inode_flags(struct gfs2_inode *inode);

Please use *ip for struct gfs2_inode and *inode for struct inode in
common with the rest of the code as it helps avoid confusion,

Steve.






More information about the Cluster-devel mailing list