Commit 6cc4f4ff authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: merge xfs_attrmulti_attr_remove into xfs_attrmulti_attr_set



Merge the ioctl handlers just like the low-level xfs_attr_set function.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarChandan Rajendra <chandanrlinux@gmail.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 0eb81a5f
Loading
Loading
Loading
Loading
+10 −24
Original line number Diff line number Diff line
@@ -389,18 +389,20 @@ xfs_attrmulti_attr_set(
	uint32_t		len,
	uint32_t		flags)
{
	unsigned char		*kbuf;
	unsigned char		*kbuf = NULL;
	int			error;
	size_t			namelen;

	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
		return -EPERM;

	if (ubuf) {
		if (len > XFS_XATTR_SIZE_MAX)
			return -EINVAL;

		kbuf = memdup_user(ubuf, len);
		if (IS_ERR(kbuf))
			return PTR_ERR(kbuf);
	}

	namelen = strlen(name);
	error = xfs_attr_set(XFS_I(inode), name, namelen, kbuf, len, flags);
@@ -410,22 +412,6 @@ xfs_attrmulti_attr_set(
	return error;
}

int
xfs_attrmulti_attr_remove(
	struct inode		*inode,
	unsigned char		*name,
	uint32_t		flags)
{
	int			error;

	if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
		return -EPERM;
	error = xfs_attr_set(XFS_I(inode), name, strlen(name), NULL, 0, flags);
	if (!error)
		xfs_forget_acl(inode, name, flags);
	return error;
}

STATIC int
xfs_attrmulti_by_handle(
	struct file		*parfilp,
@@ -504,8 +490,8 @@ xfs_attrmulti_by_handle(
			ops[i].am_error = mnt_want_write_file(parfilp);
			if (ops[i].am_error)
				break;
			ops[i].am_error = xfs_attrmulti_attr_remove(
					d_inode(dentry), attr_name,
			ops[i].am_error = xfs_attrmulti_attr_set(
					d_inode(dentry), attr_name, NULL, 0,
					ops[i].am_flags);
			mnt_drop_write_file(parfilp);
			break;
+0 −6
Original line number Diff line number Diff line
@@ -46,12 +46,6 @@ xfs_attrmulti_attr_set(
	uint32_t		len,
	uint32_t		flags);

extern int
xfs_attrmulti_attr_remove(
	struct inode		*inode,
	unsigned char		*name,
	uint32_t		flags);

extern struct dentry *
xfs_handle_to_dentry(
	struct file		*parfilp,
+2 −2
Original line number Diff line number Diff line
@@ -488,8 +488,8 @@ xfs_compat_attrmulti_by_handle(
			ops[i].am_error = mnt_want_write_file(parfilp);
			if (ops[i].am_error)
				break;
			ops[i].am_error = xfs_attrmulti_attr_remove(
					d_inode(dentry), attr_name,
			ops[i].am_error = xfs_attrmulti_attr_set(
					d_inode(dentry), attr_name, NULL, 0,
					ops[i].am_flags);
			mnt_drop_write_file(parfilp);
			break;