diff options
| -rw-r--r-- | drivers/s390/block/dasd.c | 7 | ||||
| -rw-r--r-- | drivers/s390/block/dasd_genhd.c | 10 | ||||
| -rw-r--r-- | drivers/s390/block/dasd_proc.c | 14 |
3 files changed, 13 insertions, 18 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index f1ba053f1c6b..c3214c1d0f3b 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -1573,6 +1573,7 @@ dasd_end_request_cb(dasd_ccw_req_t * cqr, void *data) static inline void __dasd_process_blk_queue(dasd_device_t * device) { + struct block_device *bdev; request_queue_t *queue; struct list_head *l; struct request *req; @@ -1601,11 +1602,14 @@ __dasd_process_blk_queue(dasd_device_t * device) if (cqr->status == DASD_CQR_QUEUED) nr_queued++; } + bdev = bdget(kdev_t_to_nr(device->kdev)); + if (!bdev) + return; while (!blk_queue_plugged(queue) && !blk_queue_empty(queue) && nr_queued < DASD_CHANQ_MAX_SIZE) { req = elv_next_request(queue); - if (is_read_only(device->kdev) && rq_data_dir(req) == WRITE) { + if (bdev_read_only(bdev) && rq_data_dir(req) == WRITE) { DBF_EVENT(DBF_ERR, "(%04x) Rejecting write request %p", device->devinfo.devno, req); @@ -1632,6 +1636,7 @@ __dasd_process_blk_queue(dasd_device_t * device) dasd_profile_start(device, cqr, req); nr_queued++; } + bdput(bdev); } /* diff --git a/drivers/s390/block/dasd_genhd.c b/drivers/s390/block/dasd_genhd.c index 835b28627b83..e5229cc967f9 100644 --- a/drivers/s390/block/dasd_genhd.c +++ b/drivers/s390/block/dasd_genhd.c @@ -65,7 +65,7 @@ dasd_register_major(int major) { struct major_info *mi; struct hd_struct *gd_part; - devfs_handle_t *gd_de_arr, *gd_label_arr; + devfs_handle_t *gd_de_arr; int *gd_sizes; char *gd_flags; int new_major, rc; @@ -78,14 +78,12 @@ dasd_register_major(int major) gd_de_arr = kmalloc(DASD_PER_MAJOR * sizeof(devfs_handle_t), GFP_KERNEL); gd_flags = kmalloc(DASD_PER_MAJOR * sizeof(char), GFP_KERNEL); - gd_label_arr = kmalloc(DASD_PER_MAJOR * sizeof(devfs_handle_t), - GFP_KERNEL); gd_part = kmalloc(sizeof (struct hd_struct) << MINORBITS, GFP_ATOMIC); gd_sizes = kmalloc(sizeof(int) << MINORBITS, GFP_ATOMIC); /* Check if one of the allocations failed. */ if (mi == NULL || gd_de_arr == NULL || gd_flags == NULL || - gd_label_arr == NULL || gd_part == NULL || gd_sizes == NULL) { + gd_part == NULL || gd_sizes == NULL) { MESSAGE(KERN_WARNING, "%s", "Cannot get memory to allocate another " "major number"); @@ -114,14 +112,12 @@ dasd_register_major(int major) mi->gendisk.fops = &dasd_device_operations; mi->gendisk.de_arr = gd_de_arr; mi->gendisk.flags = gd_flags; - mi->gendisk.label_arr = gd_label_arr; mi->gendisk.part = gd_part; mi->gendisk.sizes = gd_sizes; /* Initialize the gendisk arrays. */ memset(gd_de_arr, 0, DASD_PER_MAJOR * sizeof(devfs_handle_t)); memset(gd_flags, 0, DASD_PER_MAJOR * sizeof (char)); - memset(gd_label_arr, 0, DASD_PER_MAJOR * sizeof(devfs_handle_t)); memset(gd_part, 0, sizeof (struct hd_struct) << MINORBITS); memset(gd_sizes, 0, sizeof(int) << MINORBITS); @@ -143,7 +139,6 @@ out_error: /* We rely on kfree to do the != NULL check. */ kfree(gd_sizes); kfree(gd_part); - kfree(gd_label_arr); kfree(gd_flags); kfree(gd_de_arr); kfree(mi); @@ -182,7 +177,6 @@ dasd_unregister_major(struct major_info * mi) /* Free memory. */ kfree(bs); kfree(mi->gendisk.part); - kfree(mi->gendisk.label_arr); kfree(mi->gendisk.flags); kfree(mi->gendisk.de_arr); kfree(mi); diff --git a/drivers/s390/block/dasd_proc.c b/drivers/s390/block/dasd_proc.c index 83da92ea5463..aca31b3bfed8 100644 --- a/drivers/s390/block/dasd_proc.c +++ b/drivers/s390/block/dasd_proc.c @@ -93,7 +93,7 @@ dasd_devices_write(struct file *file, const char *user_buf, size_t user_len, loff_t * offset) { char *buffer, *str; - int add_or_set, device_or_range; + int add_or_set; int from, to, features; buffer = dasd_get_user_string(user_buf, user_len); @@ -109,15 +109,11 @@ dasd_devices_write(struct file *file, const char *user_buf, goto out_error; for (str = str + 4; isspace(*str); str++); - /* Scan for "device " or "range=". */ - if (strncmp(str, "device", 6) == 0 && isspace(str[6])) { - device_or_range = 0; + /* Scan for "device " and "range=" and ignore it. This is sick. */ + if (strncmp(str, "device", 6) == 0 && isspace(str[6])) + for (str = str + 6; isspace(*str); str++); + if (strncmp(str, "range=", 6) == 0) for (str = str + 6; isspace(*str); str++); - } else if (strncmp(str, "range=", 6) == 0) { - device_or_range = 1; - str = str + 6; - } else - goto out_error; /* Scan device number range and feature string. */ to = from = dasd_devno(str, &str); |
