|
@@ -289,6 +289,30 @@ xfs_attr_set_args(
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Remove the attribute specified in @args.
|
|
|
|
+ */
|
|
|
|
+int
|
|
|
|
+xfs_attr_remove_args(
|
|
|
|
+ struct xfs_da_args *args)
|
|
|
|
+{
|
|
|
|
+ struct xfs_inode *dp = args->dp;
|
|
|
|
+ int error;
|
|
|
|
+
|
|
|
|
+ if (!xfs_inode_hasattr(dp)) {
|
|
|
|
+ error = -ENOATTR;
|
|
|
|
+ } else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
|
|
|
|
+ ASSERT(dp->i_afp->if_flags & XFS_IFINLINE);
|
|
|
|
+ error = xfs_attr_shortform_remove(args);
|
|
|
|
+ } else if (xfs_bmap_one_block(dp, XFS_ATTR_FORK)) {
|
|
|
|
+ error = xfs_attr_leaf_removename(args);
|
|
|
|
+ } else {
|
|
|
|
+ error = xfs_attr_node_removename(args);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return error;
|
|
|
|
+}
|
|
|
|
+
|
|
int
|
|
int
|
|
xfs_attr_set(
|
|
xfs_attr_set(
|
|
struct xfs_inode *dp,
|
|
struct xfs_inode *dp,
|
|
@@ -445,17 +469,7 @@ xfs_attr_remove(
|
|
*/
|
|
*/
|
|
xfs_trans_ijoin(args.trans, dp, 0);
|
|
xfs_trans_ijoin(args.trans, dp, 0);
|
|
|
|
|
|
- if (!xfs_inode_hasattr(dp)) {
|
|
|
|
- error = -ENOATTR;
|
|
|
|
- } else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
|
|
|
|
- ASSERT(dp->i_afp->if_flags & XFS_IFINLINE);
|
|
|
|
- error = xfs_attr_shortform_remove(&args);
|
|
|
|
- } else if (xfs_bmap_one_block(dp, XFS_ATTR_FORK)) {
|
|
|
|
- error = xfs_attr_leaf_removename(&args);
|
|
|
|
- } else {
|
|
|
|
- error = xfs_attr_node_removename(&args);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ error = xfs_attr_remove_args(&args);
|
|
if (error)
|
|
if (error)
|
|
goto out;
|
|
goto out;
|
|
|
|
|