From a5729f7b22e14aed657bd716f3ee98b02f7e7c41 Mon Sep 17 00:00:00 2001 From: "Fajar A. Nugraha" Date: Thu, 24 Mar 2011 15:22:52 +0700 Subject: [PATCH] Fixes to enable zvol symlink creation This commit fixes issue on https://github.com/behlendorf/zfs/issues/#issue/172 Changes: - update BLKZNAME to use _IOR instead of _IO. Kernel 2.6.32 allows read parameters (copy_to_user) with _IO, while newer kernels (tested Archlinux's 2.6.37 kernel) enforces _IOR (which is correct) - fix return code and message on error Signed-off-by: Brian Behlendorf --- cmd/zvol_id/zvol_id_main.c | 7 +++++-- include/sys/fs/zfs.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cmd/zvol_id/zvol_id_main.c b/cmd/zvol_id/zvol_id_main.c index 2aa8abbdc..018bb6672 100644 --- a/cmd/zvol_id/zvol_id_main.c +++ b/cmd/zvol_id/zvol_id_main.c @@ -40,7 +40,6 @@ int ioctl_get_msg(char *var, int fd) error = ioctl(fd, BLKZNAME, msg); if (error < 0) { - printf("ioctl_get_msg failed:%d\n", error); return (error); } @@ -77,7 +76,11 @@ int main(int argc, char **argv) return (errno); } - ioctl_get_msg(zvol_name, fd); + error = ioctl_get_msg(zvol_name, fd); + if (error < 0) { + printf("ioctl_get_msg failed:%s\n", strerror(errno)); + return (errno); + } if (dev_part > 0) snprintf(zvol_name_part, ZFS_MAXNAMELEN, "%s-part%d", zvol_name, dev_part); diff --git a/include/sys/fs/zfs.h b/include/sys/fs/zfs.h index 44aed1335..920ba770d 100644 --- a/include/sys/fs/zfs.h +++ b/include/sys/fs/zfs.h @@ -785,7 +785,7 @@ typedef enum zfs_ioc { /* * zvol ioctl to get dataset name */ -#define BLKZNAME _IO(0x12,125) +#define BLKZNAME _IOR(0x12,125,char[ZFS_MAXNAMELEN]) /* * Internal SPA load state. Used by FMA diagnosis engine.