Sfoglia il codice sorgente

[S390] dcssblk: prevent early access without own make_request function

When loading a dcss segment with the dcssblk driver, sometimes the
following kind of message appears:

bio too big device dcssblk0 (8 > 0)
Buffer I/O error on device dcssblk0, logical block 172016
..

The fix is to move the disk registration after setting the
make_request function, to avoid calls into generic_make_request
for dcssblock without having the make_request function set up
properly.

Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Christian Borntraeger 17 anni fa
parent
commit
436d1bc7fe
1 ha cambiato i file con 2 aggiunte e 2 eliminazioni
  1. 2 2
      drivers/s390/block/dcssblk.c

+ 2 - 2
drivers/s390/block/dcssblk.c

@@ -472,11 +472,11 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
 	if (rc)
 	if (rc)
 		goto unregister_dev;
 		goto unregister_dev;
 
 
-	add_disk(dev_info->gd);
-
 	blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
 	blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
 	blk_queue_hardsect_size(dev_info->dcssblk_queue, 4096);
 	blk_queue_hardsect_size(dev_info->dcssblk_queue, 4096);
 
 
+	add_disk(dev_info->gd);
+
 	switch (dev_info->segment_type) {
 	switch (dev_info->segment_type) {
 		case SEG_TYPE_SR:
 		case SEG_TYPE_SR:
 		case SEG_TYPE_ER:
 		case SEG_TYPE_ER: