Update to pass back minor mapped
authorJens Axboe <jaxboe@fusionio.com>
Fri, 8 Oct 2010 07:59:38 +0000 (09:59 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 8 Oct 2010 07:59:38 +0000 (09:59 +0200)
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
main.c
tools/bbind.c
tools/bdel.c

diff --git a/main.c b/main.c
index 5831cd55621959df8a69d26395ecd597e94c147c..676fd1e9c43fd4d596892ce2f771c15512bedb89 100644 (file)
--- a/main.c
+++ b/main.c
@@ -648,6 +648,7 @@ static int b_add_dev(struct b_ioctl_cmd *bic)
                goto out_idr;
 
        list_add_tail(&bd->device_list, &b_dev_list);
+       bic->minor = bd->minor;
        spin_unlock(&b_dev_lock);
        return 0;
 out_idr:
@@ -665,15 +666,22 @@ static long b_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        int __user *uarg = (int __user *) arg;
        struct b_ioctl_cmd bic;
+       int ret = -ENOTTY;
 
        if (copy_from_user(&bic, uarg, sizeof(bic)))
                return -EFAULT;
 
        switch (cmd) {
        case 0:
-               return b_add_dev(&bic);
+               ret = b_add_dev(&bic);
+               if (!ret && copy_to_user(uarg, &bic, sizeof(bic))) {
+                       b_del_dev(&bic);
+                       ret = -EFAULT;
+               }
+               break;
        case 1:
-               return b_del_dev(&bic);
+               ret =  b_del_dev(&bic);
+               break;
        default:
                break;
        }
index 271354d6086592c2794bbc403170b8d2e9ae9786..78803a1d2d2873fe9de1dd87008d6a99ffeb7092 100644 (file)
@@ -2,14 +2,10 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <string.h>
+#include <linux/types.h>
 #include <sys/ioctl.h>
 
-#define B_NAME_LEN     32
-
-struct b_ioctl_cmd {
-        int fd;
-        char name[B_NAME_LEN];
-};
+#include "../binject.h"
 
 int main(int argc, char *argv[])
 {
@@ -33,10 +29,12 @@ int main(int argc, char *argv[])
        }
 
        bic.fd = fd;
-       strcpy(bic.name, argv[1]);
 
-       if (ioctl(fdb, 0, &bic) < 0)
+       if (ioctl(fdb, 0, &bic) < 0) {
                perror("ioctl");
+               return 1;
+       }
 
+       printf("%s mapped to binject minor %u\n", argv[1], bic.minor);
        return 0;
 }
index 4a8472823d6f5eef2b7439b704ac3c8cce8aef2a..5e8116d5623d82fc1c0ce35f6380e8e580b25aa4 100644 (file)
@@ -5,11 +5,9 @@
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <linux/types.h>
 
-struct b_ioctl_cmd {
-        int fd;
-       int minor;
-};
+#include "../binject.h"
 
 int main(int argc, char *argv[])
 {