This interface is currently unused, so we can change it.
Before become to use it, Igor requested a possibility
to pass partition/block device/crypto target instead
of mount point.

This patch changes the type of argument: now open
block device fd is required. Also added sanity check
of sync_fd: in case of passed sync_fd == -1, we don't
differ it with the case when it is not passed at all.

https://jira.sw.ru/browse/PSBM-107925
Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
---
 drivers/block/ploop/dev.c |   21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
index 81340f97b7c1..d6edbfbe4422 100644
--- a/drivers/block/ploop/dev.c
+++ b/drivers/block/ploop/dev.c
@@ -3680,20 +3680,23 @@ static int get_bdev_from_fd(int fd, struct block_device 
**bdev)
 {
        struct file *file = fget(fd);
        struct inode *inode;
-       int ret = -ENODEV;
+       int ret;
 
        if (!file)
-               return -ENODEV;
+               return -EBADF;
 
-       inode = file_inode(file);
+       ret = -ENODEV;
+       inode = file->f_mapping->host;
        if (!inode)
                goto fput;
 
-       *bdev = inode->i_sb->s_bdev;
-       if (*bdev) {
-               bdgrab(*bdev);
-               ret = 0;
-       }
+       ret = -ENOTBLK;
+       if (!S_ISBLK(inode->i_mode))
+               goto fput;
+
+       ret = 0;
+       *bdev = I_BDEV(inode);
+       bdgrab(*bdev);
 fput:
        fput(file);
        return ret;
@@ -3780,6 +3783,8 @@ static int ploop_snapshot(struct ploop_device * plo, 
unsigned long arg,
                        return -EINVAL;
                /* The rest of fields are ignored */
                sync_fd = chunk.pctl_fd;
+               if (sync_fd < 0)
+                       return -EBADF;
                ctl.pctl_chunks = 1;
        }
        if (ctl.pctl_chunks != 1)


_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to