X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fblock%2Fdasd_genhd.c;h=d163632101d2da8ed3535092da67d9298e340ae4;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=44b6e73f06e6c3044c1365a180a0195b9423165e;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/s390/block/dasd_genhd.c b/drivers/s390/block/dasd_genhd.c index 44b6e73f0..d16363210 100644 --- a/drivers/s390/block/dasd_genhd.c +++ b/drivers/s390/block/dasd_genhd.c @@ -9,10 +9,8 @@ * * gendisk related functions for the dasd driver. * - * $Revision: 1.46 $ */ -#include #include #include #include @@ -69,9 +67,7 @@ dasd_gendisk_alloc(struct dasd_device *device) } len += sprintf(gdp->disk_name + len, "%c", 'a'+(device->devindex%26)); - sprintf(gdp->devfs_name, "dasd/%s", device->cdev->dev.bus_id); - - if (test_bit(DASD_FLAG_RO, &device->flags)) + if (device->features & DASD_FEATURE_READONLY) set_disk_ro(gdp, 1); gdp->private_data = device; gdp->queue = device->request_queue; @@ -87,10 +83,12 @@ dasd_gendisk_alloc(struct dasd_device *device) void dasd_gendisk_free(struct dasd_device *device) { - del_gendisk(device->gdp); - device->gdp->queue = 0; - put_disk(device->gdp); - device->gdp = 0; + if (device->gdp) { + del_gendisk(device->gdp); + device->gdp->queue = NULL; + put_disk(device->gdp); + device->gdp = NULL; + } } /* @@ -101,8 +99,6 @@ dasd_scan_partitions(struct dasd_device * device) { struct block_device *bdev; - /* Make the disk known. */ - set_capacity(device->gdp, device->blocks << device->s2b_shift); bdev = bdget_disk(device->gdp, 0); if (!bdev || blkdev_get(bdev, FMODE_READ, 1) < 0) return -ENODEV; @@ -142,18 +138,19 @@ dasd_destroy_partitions(struct dasd_device * device) * device->bdev to lower the offline open_count limit again. */ bdev = device->bdev; - device->bdev = 0; + device->bdev = NULL; /* * See fs/partition/check.c:delete_partition * Can't call delete_partitions directly. Use ioctl. * The ioctl also does locking and invalidation. */ - memset(&bpart, sizeof(struct blkpg_partition), 0); - memset(&barg, sizeof(struct blkpg_ioctl_arg), 0); - barg.data = &bpart; + memset(&bpart, 0, sizeof(struct blkpg_partition)); + memset(&barg, 0, sizeof(struct blkpg_ioctl_arg)); + barg.data = (void __user *) &bpart; + barg.op = BLKPG_DEL_PARTITION; for (bpart.pno = device->gdp->minors - 1; bpart.pno > 0; bpart.pno--) - ioctl_by_bdev(bdev, BLKPG_DEL_PARTITION, (unsigned long) &barg); + ioctl_by_bdev(bdev, BLKPG, (unsigned long) &barg); invalidate_partition(device->gdp, 0); /* Matching blkdev_put to the blkdev_get in dasd_scan_partitions. */