Commit 0d89fdae authored by Carlos Maiolino's avatar Carlos Maiolino Committed by Al Viro

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: default avatarCarlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 569d2056
...@@ -54,19 +54,29 @@ EXPORT_SYMBOL(vfs_ioctl); ...@@ -54,19 +54,29 @@ EXPORT_SYMBOL(vfs_ioctl);
static int ioctl_fibmap(struct file *filp, int __user *p) static int ioctl_fibmap(struct file *filp, int __user *p)
{ {
struct address_space *mapping = filp->f_mapping; struct inode *inode = file_inode(filp);
int res, block; int error, ur_block;
sector_t block;
/* do we support this mess? */
if (!mapping->a_ops->bmap)
return -EINVAL;
if (!capable(CAP_SYS_RAWIO)) if (!capable(CAP_SYS_RAWIO))
return -EPERM; return -EPERM;
res = get_user(block, p);
if (res) error = get_user(ur_block, p);
return res; if (error)
res = mapping->a_ops->bmap(mapping, block); return error;
return put_user(res, p);
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;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment