rbd: use lock_on_read if set
authorMike Christie <mchristi@redhat.com>
Tue, 11 Oct 2016 21:36:55 +0000 (16:36 -0500)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 16 Oct 2016 07:55:42 +0000 (09:55 +0200)
If lock_on_read is set initially, pass it as a map option
when remapping the image.

Signed-off-by: Mike Christie <mchristi@redhat.com>
libmultipath/checkers/rbd.c

index e516166..c920cbb 100644 (file)
@@ -46,6 +46,7 @@ struct rbd_checker_context {
        char *username;
        int remapped;
        int blacklisted;
+       int lock_on_read:1;
 
        rados_t cluster;
 
@@ -142,6 +143,9 @@ int libcheck_init(struct checker * c)
                goto free_addr;
        }
 
+       if (strstr(config_info, "lock_on_read"))
+               ct->lock_on_read = 1;
+
        ct->config_info = strdup(config_info);
        if (!ct->config_info)
                goto free_addr;
@@ -398,7 +402,10 @@ static int rbd_remap(struct rbd_checker_context *ct)
        case 0:
                argv[i++] = "rbd";
                argv[i++] = "map";
-               argv[i++] = "-o noshare";
+               if (ct->lock_on_read)
+                       argv[i++] = "-o noshare,lock_on_read";
+               else
+                       argv[i++] = "-o noshare";
                if (ct->username) {
                        argv[i++] = "--id";
                        argv[i++] = ct->username;