Joseph Qi
2013-May-29 02:42 UTC
[Ocfs2-devel] [PATCH] ocfs2: should not use le32_add_cpu to set ocfs2_dinode i_flags
If we use le32_add_cpu to set ocfs2_dinode i_flags, it may lead to the corresponding flag corrupted. So we should change it to bitwise and/or operation. Signed-off-by: Joseph Qi <joseph.qi at huawei.com> --- fs/ocfs2/namei.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index 04ee1b5..3a5269a 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c @@ -522,7 +522,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, fe->i_last_eb_blk = 0; strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE); - le32_add_cpu(&fe->i_flags, OCFS2_VALID_FL); + fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL); fe->i_atime = fe->i_ctime = fe->i_mtime cpu_to_le64(CURRENT_TIME.tv_sec); fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec @@ -2044,7 +2044,7 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, goto leave; } - le32_add_cpu(&fe->i_flags, OCFS2_ORPHANED_FL); + fe->i_flags |= cpu_to_le32(OCFS2_ORPHANED_FL); OCFS2_I(inode)->ip_flags &= ~OCFS2_INODE_SKIP_ORPHAN_DIR; /* Record which orphan dir our inode now resides @@ -2434,7 +2434,7 @@ int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, } di = (struct ocfs2_dinode *)di_bh->b_data; - le32_add_cpu(&di->i_flags, -OCFS2_ORPHANED_FL); + di->i_flags &= cpu_to_le32(~OCFS2_ORPHANED_FL); di->i_orphaned_slot = 0; set_nlink(inode, 1); ocfs2_set_links_count(di, inode->i_nlink); -- 1.7.9.7
shencanquan
2013-May-29 07:02 UTC
[Ocfs2-devel] [PATCH] ocfs2: should not use le32_add_cpu to set ocfs2_dinode i_flags
On 2013/5/29 10:42, Joseph Qi wrote:> If we use le32_add_cpu to set ocfs2_dinode i_flags, it may lead to the > corresponding flag corrupted. So we should change it to bitwise and/or > operation.I think it should be use bitwise and or operation, because one bit stand for one meaning.> > Signed-off-by: Joseph Qi<joseph.qi at huawei.com> > --- > fs/ocfs2/namei.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c > index 04ee1b5..3a5269a 100644 > --- a/fs/ocfs2/namei.c > +++ b/fs/ocfs2/namei.c > @@ -522,7 +522,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, > > fe->i_last_eb_blk = 0; > strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE); > - le32_add_cpu(&fe->i_flags, OCFS2_VALID_FL); > + fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL); > fe->i_atime = fe->i_ctime = fe->i_mtime > cpu_to_le64(CURRENT_TIME.tv_sec); > fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec > @@ -2044,7 +2044,7 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, > goto leave; > } > > - le32_add_cpu(&fe->i_flags, OCFS2_ORPHANED_FL); > + fe->i_flags |= cpu_to_le32(OCFS2_ORPHANED_FL); > OCFS2_I(inode)->ip_flags&= ~OCFS2_INODE_SKIP_ORPHAN_DIR; > > /* Record which orphan dir our inode now resides > @@ -2434,7 +2434,7 @@ int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, > } > > di = (struct ocfs2_dinode *)di_bh->b_data; > - le32_add_cpu(&di->i_flags, -OCFS2_ORPHANED_FL); > + di->i_flags&= cpu_to_le32(~OCFS2_ORPHANED_FL); > di->i_orphaned_slot = 0; > set_nlink(inode, 1); > ocfs2_set_links_count(di, inode->i_nlink);
Jeff Liu
2013-May-29 07:57 UTC
[Ocfs2-devel] [PATCH] ocfs2: should not use le32_add_cpu to set ocfs2_dinode i_flags
Thanks for your patch, Joseph. On 05/29/2013 10:42 AM, Joseph Qi wrote:> If we use le32_add_cpu to set ocfs2_dinode i_flags, it may lead to the > corresponding flag corrupted. So we should change it to bitwise and/or > operation. > > Signed-off-by: Joseph Qi <joseph.qi at huawei.com> > --- > fs/ocfs2/namei.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c > index 04ee1b5..3a5269a 100644 > --- a/fs/ocfs2/namei.c > +++ b/fs/ocfs2/namei.c > @@ -522,7 +522,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, > > fe->i_last_eb_blk = 0; > strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE); > - le32_add_cpu(&fe->i_flags, OCFS2_VALID_FL); > + fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL); > fe->i_atime = fe->i_ctime = fe->i_mtime > cpu_to_le64(CURRENT_TIME.tv_sec); > fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec > @@ -2044,7 +2044,7 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, > goto leave; > } > > - le32_add_cpu(&fe->i_flags, OCFS2_ORPHANED_FL); > + fe->i_flags |= cpu_to_le32(OCFS2_ORPHANED_FL); > OCFS2_I(inode)->ip_flags &= ~OCFS2_INODE_SKIP_ORPHAN_DIR; > > /* Record which orphan dir our inode now resides > @@ -2434,7 +2434,7 @@ int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, > } > > di = (struct ocfs2_dinode *)di_bh->b_data; > - le32_add_cpu(&di->i_flags, -OCFS2_ORPHANED_FL); > + di->i_flags &= cpu_to_le32(~OCFS2_ORPHANED_FL);Hmm? This is wrong. Instead it should be: di->i_flags &= ~cpu_to_le32(OCFS2_ORPHANED_FL);> di->i_orphaned_slot = 0; > set_nlink(inode, 1); > ocfs2_set_links_count(di, inode->i_nlink);-Jeff