[Ocfs2-devel] [PATCH] ocfs2: Commit transactions in error cases -v2
Sunil Mushran
sunil.mushran at oracle.com
Wed Oct 12 09:51:08 PDT 2011
Acked-by: Sunil Mushran <sunil.mushran at oracle.com>
On 10/12/2011 12:22 AM, Wengang Wang wrote:
> There are three cases found that in error cases, journal transactions are not
> committed nor aborted. We should take care of these case by committing the
> transactions. Otherwise, there would left a journal handle which will lead to
> , in same process context, the comming ocfs2_start_trans() gets wrong credits.
>
> Signed-off-by: Wengang Wang<wen.gang.wang at oracle.com>
> ---
> fs/ocfs2/alloc.c | 2 +-
> fs/ocfs2/ioctl.c | 3 ++-
> fs/ocfs2/xattr.c | 10 ++++++----
> 3 files changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
> index ed553c6..3165aeb 100644
> --- a/fs/ocfs2/alloc.c
> +++ b/fs/ocfs2/alloc.c
> @@ -5699,7 +5699,7 @@ int ocfs2_remove_btree_range(struct inode *inode,
> OCFS2_JOURNAL_ACCESS_WRITE);
> if (ret) {
> mlog_errno(ret);
> - goto out;
> + goto out_commit;
> }
>
> dquot_free_space_nodirty(inode,
> diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c
> index bc91072..5612c3d 100644
> --- a/fs/ocfs2/ioctl.c
> +++ b/fs/ocfs2/ioctl.c
> @@ -122,7 +122,7 @@ 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_unlock;
> + goto bail_commit;
> }
>
> ocfs2_inode->ip_attr = flags;
> @@ -132,6 +132,7 @@ 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);
> diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
> index 81ecf9c..93d6c80 100644
> --- a/fs/ocfs2/xattr.c
> +++ b/fs/ocfs2/xattr.c
> @@ -2376,16 +2376,18 @@ static int ocfs2_remove_value_outside(struct inode*inode,
> }
>
> ret = ocfs2_xattr_value_truncate(inode, vb, 0,&ctxt);
> - if (ret< 0) {
> - mlog_errno(ret);
> - break;
> - }
>
> ocfs2_commit_trans(osb, ctxt.handle);
> if (ctxt.meta_ac) {
> ocfs2_free_alloc_context(ctxt.meta_ac);
> ctxt.meta_ac = NULL;
> }
> +
> + if (ret< 0) {
> + mlog_errno(ret);
> + break;
> + }
> +
> }
>
> if (ctxt.meta_ac)
More information about the Ocfs2-devel
mailing list