mirror of https://gitee.com/openkylin/linux.git
udf: simplify udf_ioctl()
"out" label was only returning error code. Signed-off-by: Fabian Frederick <fabf@skynet.be> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
782deb2eec
commit
a074faad51
|
@ -176,57 +176,46 @@ long udf_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|||
{
|
||||
struct inode *inode = file_inode(filp);
|
||||
long old_block, new_block;
|
||||
int result = -EINVAL;
|
||||
int result;
|
||||
|
||||
if (inode_permission(inode, MAY_READ) != 0) {
|
||||
udf_debug("no permission to access inode %lu\n", inode->i_ino);
|
||||
result = -EPERM;
|
||||
goto out;
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (!arg && ((cmd == UDF_GETVOLIDENT) || (cmd == UDF_GETEASIZE) ||
|
||||
(cmd == UDF_RELOCATE_BLOCKS) || (cmd == UDF_GETEABLOCK))) {
|
||||
udf_debug("invalid argument to udf_ioctl\n");
|
||||
result = -EINVAL;
|
||||
goto out;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case UDF_GETVOLIDENT:
|
||||
if (copy_to_user((char __user *)arg,
|
||||
UDF_SB(inode->i_sb)->s_volume_ident, 32))
|
||||
result = -EFAULT;
|
||||
else
|
||||
result = 0;
|
||||
goto out;
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
case UDF_RELOCATE_BLOCKS:
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
result = -EPERM;
|
||||
goto out;
|
||||
}
|
||||
if (get_user(old_block, (long __user *)arg)) {
|
||||
result = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
if (get_user(old_block, (long __user *)arg))
|
||||
return -EFAULT;
|
||||
result = udf_relocate_blocks(inode->i_sb,
|
||||
old_block, &new_block);
|
||||
if (result == 0)
|
||||
result = put_user(new_block, (long __user *)arg);
|
||||
goto out;
|
||||
return result;
|
||||
case UDF_GETEASIZE:
|
||||
result = put_user(UDF_I(inode)->i_lenEAttr, (int __user *)arg);
|
||||
goto out;
|
||||
return put_user(UDF_I(inode)->i_lenEAttr, (int __user *)arg);
|
||||
case UDF_GETEABLOCK:
|
||||
result = copy_to_user((char __user *)arg,
|
||||
return copy_to_user((char __user *)arg,
|
||||
UDF_I(inode)->i_ext.i_data,
|
||||
UDF_I(inode)->i_lenEAttr) ? -EFAULT : 0;
|
||||
goto out;
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
out:
|
||||
return result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int udf_release_file(struct inode *inode, struct file *filp)
|
||||
|
|
Loading…
Reference in New Issue