]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/block/dcssblk.c
[S390] device_schedule_callback() for dcssblk.
[linux-2.6-omap-h63xx.git] / drivers / s390 / block / dcssblk.c
index 4d8798bacf9717a256b20f02bb933b72ec4ca3f9..5e083d1f57e70a115dac935895d4e40bcd6a5624 100644 (file)
@@ -193,6 +193,12 @@ dcssblk_segment_warn(int rc, char* seg_name)
        }
 }
 
+static void dcssblk_unregister_callback(struct device *dev)
+{
+       device_unregister(dev);
+       put_device(dev);
+}
+
 /*
  * device attribute for switching shared/nonshared (exclusive)
  * operation (show + store)
@@ -276,8 +282,7 @@ removeseg:
        blk_cleanup_queue(dev_info->dcssblk_queue);
        dev_info->gd->queue = NULL;
        put_disk(dev_info->gd);
-       device_unregister(dev);
-       put_device(dev);
+       rc = device_schedule_callback(dev, dcssblk_unregister_callback);
 out:
        up_write(&dcssblk_devices_sem);
        return rc;
@@ -674,10 +679,10 @@ dcssblk_make_request(struct request_queue *q, struct bio *bio)
                }
                bytes_done += bvec->bv_len;
        }
-       bio_endio(bio, bytes_done, 0);
+       bio_endio(bio, 0);
        return 0;
 fail:
-       bio_io_error(bio, bio->bi_size);
+       bio_io_error(bio);
        return 0;
 }