intelfb: support i854
[safe/jmp/linux-2.6] / drivers / md / dm-delay.c
index 6928c13..59ee1b0 100644 (file)
@@ -13,7 +13,8 @@
 #include <linux/bio.h>
 #include <linux/slab.h>
 
-#include "dm.h"
+#include <linux/device-mapper.h>
+
 #include "dm-bio-list.h"
 
 #define DM_MSG_PREFIX "delay"
@@ -83,7 +84,7 @@ static struct bio *flush_delayed_bios(struct delay_c *dc, int flush_all)
        struct dm_delay_info *delayed, *next;
        unsigned long next_expires = 0;
        int start_timer = 0;
-       BIO_LIST(flush_bios);
+       struct bio_list flush_bios = { };
 
        mutex_lock(&delayed_bios_lock);
        list_for_each_entry_safe(delayed, next, &dc->delayed_bios, list) {
@@ -163,34 +164,32 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
                goto bad;
        }
 
-       if (argc == 3) {
-               dc->dev_write = NULL;
+       dc->dev_write = NULL;
+       if (argc == 3)
                goto out;
-       }
 
        if (sscanf(argv[4], "%llu", &tmpll) != 1) {
                ti->error = "Invalid write device sector";
-               goto bad;
+               goto bad_dev_read;
        }
        dc->start_write = tmpll;
 
        if (sscanf(argv[5], "%u", &dc->write_delay) != 1) {
                ti->error = "Invalid write delay";
-               goto bad;
+               goto bad_dev_read;
        }
 
        if (dm_get_device(ti, argv[3], dc->start_write, ti->len,
                          dm_table_get_mode(ti->table), &dc->dev_write)) {
                ti->error = "Write device lookup failed";
-               dm_put_device(ti, dc->dev_read);
-               goto bad;
+               goto bad_dev_read;
        }
 
 out:
        dc->delayed_pool = mempool_create_slab_pool(128, delayed_cache);
        if (!dc->delayed_pool) {
                DMERR("Couldn't create delayed bio pool.");
-               goto bad;
+               goto bad_dev_write;
        }
 
        setup_timer(&dc->delay_timer, handle_delayed_timer, (unsigned long)dc);
@@ -203,6 +202,11 @@ out:
        ti->private = dc;
        return 0;
 
+bad_dev_write:
+       if (dc->dev_write)
+               dm_put_device(ti, dc->dev_write);
+bad_dev_read:
+       dm_put_device(ti, dc->dev_read);
 bad:
        kfree(dc);
        return -EINVAL;
@@ -305,7 +309,7 @@ static int delay_status(struct dm_target *ti, status_type_t type,
                       (unsigned long long) dc->start_read,
                       dc->read_delay);
                if (dc->dev_write)
-                       DMEMIT("%s %llu %u", dc->dev_write->name,
+                       DMEMIT(" %s %llu %u", dc->dev_write->name,
                               (unsigned long long) dc->start_write,
                               dc->write_delay);
                break;
@@ -360,11 +364,7 @@ bad_queue:
 
 static void __exit dm_delay_exit(void)
 {
-       int r = dm_unregister_target(&delay_target);
-
-       if (r < 0)
-               DMERR("unregister failed %d", r);
-
+       dm_unregister_target(&delay_target);
        kmem_cache_destroy(delayed_cache);
        destroy_workqueue(kdelayd_wq);
 }