fibmap: Use bmap instead of ->bmap method in ioctl_fibmap
Now we have the possibility of proper error return in bmap, use bmap() function in ioctl_fibmap() instead of calling ->bmap method directly. Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
569d2056de
commit
0d89fdae2a
30
fs/ioctl.c
30
fs/ioctl.c
|
@ -54,19 +54,29 @@ EXPORT_SYMBOL(vfs_ioctl);
|
|||
|
||||
static int ioctl_fibmap(struct file *filp, int __user *p)
|
||||
{
|
||||
struct address_space *mapping = filp->f_mapping;
|
||||
int res, block;
|
||||
struct inode *inode = file_inode(filp);
|
||||
int error, ur_block;
|
||||
sector_t block;
|
||||
|
||||
/* do we support this mess? */
|
||||
if (!mapping->a_ops->bmap)
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_RAWIO))
|
||||
return -EPERM;
|
||||
res = get_user(block, p);
|
||||
if (res)
|
||||
return res;
|
||||
res = mapping->a_ops->bmap(mapping, block);
|
||||
return put_user(res, p);
|
||||
|
||||
error = get_user(ur_block, p);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
block = ur_block;
|
||||
error = bmap(inode, &block);
|
||||
|
||||
if (error)
|
||||
ur_block = 0;
|
||||
else
|
||||
ur_block = block;
|
||||
|
||||
if (put_user(ur_block, p))
|
||||
error = -EFAULT;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue