| From 68faa63aaad81f4a289e4a03173ab4cf798deb53 Mon Sep 17 00:00:00 2001 |
| From: Azat Khuzhin <a3at.mail@gmail.com> |
| Date: Sat, 1 Nov 2014 22:24:32 +0300 |
| Subject: [PATCH 3/3] Fix 3-d argument for BLKROSET it must be 'const int *' |
| |
| Most of *SET ioctls have int type for 3-d argument, except BLKROSET. |
| So add bc_arg_type enum, build it into bool_comand and install arg_type |
| to bc_arg_int_ptr for BLKROSET only. |
| |
| Debian-bug-id: 641164 |
| Link: https://bugs.debian.org/641164 |
| |
| This patch is taken from |
| ftp://ftp.debian.org/debian/pool/main/b/blktool/blktool_4-7.debian.tar.xz |
| |
| Upstream-Status: Inappropriate [upstream is dead] |
| Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> |
| |
| --- |
| blktool.c | 11 +++++++++-- |
| blktool.h | 7 +++++++ |
| 2 files changed, 16 insertions(+), 2 deletions(-) |
| |
| diff --git a/blktool.c b/blktool.c |
| index fbefecd..221a195 100644 |
| --- a/blktool.c |
| +++ b/blktool.c |
| @@ -85,7 +85,7 @@ static struct bool_command bool_cmd_tbl[] = { |
| { { DEF_BOOL("pio-data"), dc_ata, DEF_HDIO(32BIT) }, |
| "16-bit", "32-bit" }, |
| { { DEF_BOOL("readonly"), dc_any, IOCNAME(BLKROGET), IOCNAME(BLKROSET) }, |
| - DEF_BOOLSTR }, |
| + DEF_BOOLSTR, bc_arg_int_ptr }, |
| { { DEF_BOOL("unmask-irq"), dc_ata, DEF_HDIO(UNMASKINTR) }, |
| DEF_BOOLSTR }, |
| { { "wcache", ct_bool, handle_wcache, dc_any, |
| @@ -171,7 +171,14 @@ static void handle_bool(int argc, char **argv, struct command *cmd) |
| |
| } else if ((argc == 4) && (cmd->write_ioctl_name != NULL)) { |
| do_32 = parse_bool(argc, argv, bcm); |
| - if (ioctl(blkdev, cmd->write_ioctl, do_32)) |
| + |
| + int ret; |
| + if (bcm->arg_type == bc_arg_int_ptr) { |
| + ret = ioctl(blkdev, cmd->write_ioctl, &do_32); |
| + } else { |
| + ret = ioctl(blkdev, cmd->write_ioctl, do_32); |
| + } |
| + if (ret) |
| pdie(cmd->write_ioctl_name, 1); |
| } |
| else { |
| diff --git a/blktool.h b/blktool.h |
| index fce4387..85add83 100644 |
| --- a/blktool.h |
| +++ b/blktool.h |
| @@ -85,11 +85,18 @@ struct command { |
| const char *write_ioctl_name; |
| }; |
| |
| +enum bc_arg_type { |
| + bc_arg_int, |
| + bc_arg_int_ptr, |
| +}; |
| + |
| struct bool_command { |
| struct command cmd; |
| |
| const char *str_false; |
| const char *str_true; |
| + |
| + enum bc_arg_type arg_type; |
| }; |
| |
| struct class_operations { |
| -- |
| 2.1.4 |
| |