* Fills in a dm_ioctl structure, ready for sending back to
  * userland.
  */
-static int __dev_status(struct mapped_device *md, struct dm_ioctl *param)
+static void __dev_status(struct mapped_device *md, struct dm_ioctl *param)
 {
        struct gendisk *disk = dm_disk(md);
        struct dm_table *table;
                        dm_table_put(table);
                }
        }
-
-       return 0;
 }
 
 static int dev_create(struct dm_ioctl *param, size_t param_size)
                return r;
 
        r = dm_hash_insert(param->name, *param->uuid ? param->uuid : NULL, md);
-       if (r) {
-               dm_put(md);
-               return r;
-       }
+       if (r)
+               goto out;
 
        param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
 
-       r = __dev_status(md, param);
+       __dev_status(md, param);
+
+out:
        dm_put(md);
 
        return r;
        if (param->flags & DM_NOFLUSH_FLAG)
                suspend_flags |= DM_SUSPEND_NOFLUSH_FLAG;
 
-       if (!dm_suspended_md(md))
+       if (!dm_suspended_md(md)) {
                r = dm_suspend(md, suspend_flags);
+               if (r)
+                       goto out;
+       }
 
-       if (!r)
-               r = __dev_status(md, param);
+       __dev_status(md, param);
 
+out:
        dm_put(md);
+
        return r;
 }
 
                dm_table_destroy(old_map);
 
        if (!r)
-               r = __dev_status(md, param);
+               __dev_status(md, param);
 
        dm_put(md);
        return r;
  */
 static int dev_status(struct dm_ioctl *param, size_t param_size)
 {
-       int r;
        struct mapped_device *md;
 
        md = find_device(param);
        if (!md)
                return -ENXIO;
 
-       r = __dev_status(md, param);
+       __dev_status(md, param);
        dm_put(md);
-       return r;
+
+       return 0;
 }
 
 /*
  */
 static int dev_wait(struct dm_ioctl *param, size_t param_size)
 {
-       int r;
+       int r = 0;
        struct mapped_device *md;
        struct dm_table *table;
 
         * changed to trigger the event, so we may as well tell
         * him and save an ioctl.
         */
-       r = __dev_status(md, param);
-       if (r)
-               goto out;
+       __dev_status(md, param);
 
        table = dm_get_live_or_inactive_table(md, param);
        if (table) {
                dm_table_put(table);
        }
 
- out:
+out:
        dm_put(md);
+
        return r;
 }
 
        up_write(&_hash_lock);
 
        param->flags |= DM_INACTIVE_PRESENT_FLAG;
-       r = __dev_status(md, param);
+       __dev_status(md, param);
 
 out:
        dm_put(md);
 
 static int table_clear(struct dm_ioctl *param, size_t param_size)
 {
-       int r;
        struct hash_cell *hc;
        struct mapped_device *md;
 
 
        param->flags &= ~DM_INACTIVE_PRESENT_FLAG;
 
-       r = __dev_status(hc->md, param);
+       __dev_status(hc->md, param);
        md = hc->md;
        up_write(&_hash_lock);
        dm_put(md);
-       return r;
+
+       return 0;
 }
 
 /*
 
 static int table_deps(struct dm_ioctl *param, size_t param_size)
 {
-       int r = 0;
        struct mapped_device *md;
        struct dm_table *table;
 
        if (!md)
                return -ENXIO;
 
-       r = __dev_status(md, param);
-       if (r)
-               goto out;
+       __dev_status(md, param);
 
        table = dm_get_live_or_inactive_table(md, param);
        if (table) {
                dm_table_put(table);
        }
 
- out:
        dm_put(md);
-       return r;
+
+       return 0;
 }
 
 /*
  */
 static int table_status(struct dm_ioctl *param, size_t param_size)
 {
-       int r;
        struct mapped_device *md;
        struct dm_table *table;
 
        if (!md)
                return -ENXIO;
 
-       r = __dev_status(md, param);
-       if (r)
-               goto out;
+       __dev_status(md, param);
 
        table = dm_get_live_or_inactive_table(md, param);
        if (table) {
                dm_table_put(table);
        }
 
-out:
        dm_put(md);
-       return r;
+
+       return 0;
 }
 
 /*