mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 13:34:10 +08:00
xfs: Add helper function xfs_attr_try_sf_addname
This patch adds a subroutine xfs_attr_try_sf_addname used by xfs_attr_set. This subrotine will attempt to add the attribute name specified in args in shortform, as well and perform error handling previously done in xfs_attr_set. This patch helps to pre-simplify xfs_attr_set for reviewing purposes and reduce indentation. New function will be added in the next patch. [dgc: moved commit to helper function, too.] Signed-off-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
e2421f0b5f
commit
4c74a56b9d
@ -191,6 +191,33 @@ xfs_attr_calc_size(
|
||||
return nblks;
|
||||
}
|
||||
|
||||
STATIC int
|
||||
xfs_attr_try_sf_addname(
|
||||
struct xfs_inode *dp,
|
||||
struct xfs_da_args *args)
|
||||
{
|
||||
|
||||
struct xfs_mount *mp = dp->i_mount;
|
||||
int error, error2;
|
||||
|
||||
error = xfs_attr_shortform_addname(args);
|
||||
if (error == -ENOSPC)
|
||||
return error;
|
||||
|
||||
/*
|
||||
* Commit the shortform mods, and we're done.
|
||||
* NOTE: this is also the error path (EEXIST, etc).
|
||||
*/
|
||||
if (!error && (args->flags & ATTR_KERNOTIME) == 0)
|
||||
xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
xfs_trans_set_sync(args->trans);
|
||||
|
||||
error2 = xfs_trans_commit(args->trans);
|
||||
return error ? error : error2;
|
||||
}
|
||||
|
||||
int
|
||||
xfs_attr_set(
|
||||
struct xfs_inode *dp,
|
||||
@ -204,7 +231,7 @@ xfs_attr_set(
|
||||
struct xfs_da_args args;
|
||||
struct xfs_trans_res tres;
|
||||
int rsvd = (flags & ATTR_ROOT) != 0;
|
||||
int error, err2, local;
|
||||
int error, local;
|
||||
|
||||
XFS_STATS_INC(mp, xs_attr_set);
|
||||
|
||||
@ -281,30 +308,10 @@ xfs_attr_set(
|
||||
* Try to add the attr to the attribute list in
|
||||
* the inode.
|
||||
*/
|
||||
error = xfs_attr_shortform_addname(&args);
|
||||
error = xfs_attr_try_sf_addname(dp, &args);
|
||||
if (error != -ENOSPC) {
|
||||
/*
|
||||
* Commit the shortform mods, and we're done.
|
||||
* NOTE: this is also the error path (EEXIST, etc).
|
||||
*/
|
||||
ASSERT(args.trans != NULL);
|
||||
|
||||
/*
|
||||
* If this is a synchronous mount, make sure that
|
||||
* the transaction goes to disk before returning
|
||||
* to the user.
|
||||
*/
|
||||
if (mp->m_flags & XFS_MOUNT_WSYNC)
|
||||
xfs_trans_set_sync(args.trans);
|
||||
|
||||
if (!error && (flags & ATTR_KERNOTIME) == 0) {
|
||||
xfs_trans_ichgtime(args.trans, dp,
|
||||
XFS_ICHGTIME_CHG);
|
||||
}
|
||||
err2 = xfs_trans_commit(args.trans);
|
||||
xfs_iunlock(dp, XFS_ILOCK_EXCL);
|
||||
|
||||
return error ? error : err2;
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user