]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/md/dm-mpath-rdac.c
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzi...
[linux-2.6-omap-h63xx.git] / drivers / md / dm-mpath-rdac.c
index 8b776b8cb7f7029c6997d2e54e31076a5adc6f54..95e77734880a7ea39b4159359d92f9c42316b843 100644 (file)
@@ -284,7 +284,6 @@ static struct request *get_rdac_req(struct rdac_handler *h,
                return NULL;
        }
 
-       memset(&rq->cmd, 0, BLK_MAX_CDB);
        rq->sense = h->sense;
        memset(rq->sense, 0, SCSI_SENSE_BUFFERSIZE);
        rq->sense_len = 0;
@@ -292,7 +291,7 @@ static struct request *get_rdac_req(struct rdac_handler *h,
        rq->end_io_data = h;
        rq->timeout = h->timeout;
        rq->cmd_type = REQ_TYPE_BLOCK_PC;
-       rq->cmd_flags = REQ_FAILFAST | REQ_NOMERGE;
+       rq->cmd_flags |= REQ_FAILFAST | REQ_NOMERGE;
        return rq;
 }
 
@@ -664,20 +663,21 @@ static struct hw_handler_type rdac_handler = {
 
 static int __init rdac_init(void)
 {
-       int r = dm_register_hw_handler(&rdac_handler);
-
-       if (r < 0) {
-               DMERR("%s: register failed %d", RDAC_DM_HWH_NAME, r);
-               return r;
-       }
+       int r;
 
        rdac_wkqd = create_singlethread_workqueue("rdac_wkqd");
        if (!rdac_wkqd) {
                DMERR("Failed to create workqueue rdac_wkqd.");
-               dm_unregister_hw_handler(&rdac_handler);
                return -ENOMEM;
        }
 
+       r = dm_register_hw_handler(&rdac_handler);
+       if (r < 0) {
+               DMERR("%s: register failed %d", RDAC_DM_HWH_NAME, r);
+               destroy_workqueue(rdac_wkqd);
+               return r;
+       }
+
        DMINFO("%s: version %s loaded", RDAC_DM_HWH_NAME, RDAC_DM_HWH_VER);
        return 0;
 }