forked from luck/tmp_suning_uos_patched
ocfs2: delay inode update transactions after verifying the input flags
There is no need to start the inode update transactions before/while verifying the input flags. As a refinement, this patch delay the transactions utill the pre-check up is ok. Signed-off-by: Jie Liu <jeff.liu@oracle.com> Acked-by: Joel Becker <jlbec@evilplan.org> Cc: Mark Fasheh <mfasheh@suse.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
18ff44b189
commit
b3e0767abc
|
@ -101,13 +101,6 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,
|
|||
if (!S_ISDIR(inode->i_mode))
|
||||
flags &= ~OCFS2_DIRSYNC_FL;
|
||||
|
||||
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
|
||||
if (IS_ERR(handle)) {
|
||||
status = PTR_ERR(handle);
|
||||
mlog_errno(status);
|
||||
goto bail_unlock;
|
||||
}
|
||||
|
||||
oldflags = ocfs2_inode->ip_attr;
|
||||
flags = flags & mask;
|
||||
flags |= oldflags & ~mask;
|
||||
|
@ -120,7 +113,14 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,
|
|||
if ((oldflags & OCFS2_IMMUTABLE_FL) || ((flags ^ oldflags) &
|
||||
(OCFS2_APPEND_FL | OCFS2_IMMUTABLE_FL))) {
|
||||
if (!capable(CAP_LINUX_IMMUTABLE))
|
||||
goto bail_commit;
|
||||
goto bail_unlock;
|
||||
}
|
||||
|
||||
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
|
||||
if (IS_ERR(handle)) {
|
||||
status = PTR_ERR(handle);
|
||||
mlog_errno(status);
|
||||
goto bail_unlock;
|
||||
}
|
||||
|
||||
ocfs2_inode->ip_attr = flags;
|
||||
|
@ -130,8 +130,8 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags,
|
|||
if (status < 0)
|
||||
mlog_errno(status);
|
||||
|
||||
bail_commit:
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
|
||||
bail_unlock:
|
||||
ocfs2_inode_unlock(inode, 1);
|
||||
bail:
|
||||
|
|
Loading…
Reference in New Issue
Block a user