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