diff options
Diffstat (limited to 'drivers/s390/block/dasd.c')
-rw-r--r-- | drivers/s390/block/dasd.c | 54 |
1 files changed, 18 insertions, 36 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index cfb1fff3787c..7e9978ad1445 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -95,7 +95,7 @@ dasd_alloc_device(void) | |||
95 | spin_lock_init(&device->mem_lock); | 95 | spin_lock_init(&device->mem_lock); |
96 | spin_lock_init(&device->request_queue_lock); | 96 | spin_lock_init(&device->request_queue_lock); |
97 | atomic_set (&device->tasklet_scheduled, 0); | 97 | atomic_set (&device->tasklet_scheduled, 0); |
98 | tasklet_init(&device->tasklet, | 98 | tasklet_init(&device->tasklet, |
99 | (void (*)(unsigned long)) dasd_tasklet, | 99 | (void (*)(unsigned long)) dasd_tasklet, |
100 | (unsigned long) device); | 100 | (unsigned long) device); |
101 | INIT_LIST_HEAD(&device->ccw_queue); | 101 | INIT_LIST_HEAD(&device->ccw_queue); |
@@ -128,7 +128,7 @@ dasd_state_new_to_known(struct dasd_device *device) | |||
128 | int rc; | 128 | int rc; |
129 | 129 | ||
130 | /* | 130 | /* |
131 | * As long as the device is not in state DASD_STATE_NEW we want to | 131 | * As long as the device is not in state DASD_STATE_NEW we want to |
132 | * keep the reference count > 0. | 132 | * keep the reference count > 0. |
133 | */ | 133 | */ |
134 | dasd_get_device(device); | 134 | dasd_get_device(device); |
@@ -336,7 +336,7 @@ dasd_decrease_state(struct dasd_device *device) | |||
336 | if (device->state == DASD_STATE_ONLINE && | 336 | if (device->state == DASD_STATE_ONLINE && |
337 | device->target <= DASD_STATE_READY) | 337 | device->target <= DASD_STATE_READY) |
338 | dasd_state_online_to_ready(device); | 338 | dasd_state_online_to_ready(device); |
339 | 339 | ||
340 | if (device->state == DASD_STATE_READY && | 340 | if (device->state == DASD_STATE_READY && |
341 | device->target <= DASD_STATE_BASIC) | 341 | device->target <= DASD_STATE_BASIC) |
342 | dasd_state_ready_to_basic(device); | 342 | dasd_state_ready_to_basic(device); |
@@ -348,7 +348,7 @@ dasd_decrease_state(struct dasd_device *device) | |||
348 | if (device->state == DASD_STATE_BASIC && | 348 | if (device->state == DASD_STATE_BASIC && |
349 | device->target <= DASD_STATE_KNOWN) | 349 | device->target <= DASD_STATE_KNOWN) |
350 | dasd_state_basic_to_known(device); | 350 | dasd_state_basic_to_known(device); |
351 | 351 | ||
352 | if (device->state == DASD_STATE_KNOWN && | 352 | if (device->state == DASD_STATE_KNOWN && |
353 | device->target <= DASD_STATE_NEW) | 353 | device->target <= DASD_STATE_NEW) |
354 | dasd_state_known_to_new(device); | 354 | dasd_state_known_to_new(device); |
@@ -994,7 +994,7 @@ dasd_int_handler(struct ccw_device *cdev, unsigned long intparm, | |||
994 | ((irb->scsw.cstat << 8) | irb->scsw.dstat), cqr); | 994 | ((irb->scsw.cstat << 8) | irb->scsw.dstat), cqr); |
995 | 995 | ||
996 | /* Find out the appropriate era_action. */ | 996 | /* Find out the appropriate era_action. */ |
997 | if (irb->scsw.fctl & SCSW_FCTL_HALT_FUNC) | 997 | if (irb->scsw.fctl & SCSW_FCTL_HALT_FUNC) |
998 | era = dasd_era_fatal; | 998 | era = dasd_era_fatal; |
999 | else if (irb->scsw.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END) && | 999 | else if (irb->scsw.dstat == (DEV_STAT_CHN_END | DEV_STAT_DEV_END) && |
1000 | irb->scsw.cstat == 0 && | 1000 | irb->scsw.cstat == 0 && |
@@ -1004,7 +1004,7 @@ dasd_int_handler(struct ccw_device *cdev, unsigned long intparm, | |||
1004 | era = dasd_era_fatal; /* don't recover this request */ | 1004 | era = dasd_era_fatal; /* don't recover this request */ |
1005 | else if (irb->esw.esw0.erw.cons) | 1005 | else if (irb->esw.esw0.erw.cons) |
1006 | era = device->discipline->examine_error(cqr, irb); | 1006 | era = device->discipline->examine_error(cqr, irb); |
1007 | else | 1007 | else |
1008 | era = dasd_era_recover; | 1008 | era = dasd_era_recover; |
1009 | 1009 | ||
1010 | DBF_DEV_EVENT(DBF_DEBUG, device, "era_code %d", era); | 1010 | DBF_DEV_EVENT(DBF_DEBUG, device, "era_code %d", era); |
@@ -1287,7 +1287,7 @@ __dasd_start_head(struct dasd_device * device) | |||
1287 | } | 1287 | } |
1288 | 1288 | ||
1289 | /* | 1289 | /* |
1290 | * Remove requests from the ccw queue. | 1290 | * Remove requests from the ccw queue. |
1291 | */ | 1291 | */ |
1292 | static void | 1292 | static void |
1293 | dasd_flush_ccw_queue(struct dasd_device * device, int all) | 1293 | dasd_flush_ccw_queue(struct dasd_device * device, int all) |
@@ -1450,23 +1450,23 @@ dasd_sleep_on(struct dasd_ccw_req * cqr) | |||
1450 | wait_queue_head_t wait_q; | 1450 | wait_queue_head_t wait_q; |
1451 | struct dasd_device *device; | 1451 | struct dasd_device *device; |
1452 | int rc; | 1452 | int rc; |
1453 | 1453 | ||
1454 | device = cqr->device; | 1454 | device = cqr->device; |
1455 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 1455 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
1456 | 1456 | ||
1457 | init_waitqueue_head (&wait_q); | 1457 | init_waitqueue_head (&wait_q); |
1458 | cqr->callback = dasd_wakeup_cb; | 1458 | cqr->callback = dasd_wakeup_cb; |
1459 | cqr->callback_data = (void *) &wait_q; | 1459 | cqr->callback_data = (void *) &wait_q; |
1460 | cqr->status = DASD_CQR_QUEUED; | 1460 | cqr->status = DASD_CQR_QUEUED; |
1461 | list_add_tail(&cqr->list, &device->ccw_queue); | 1461 | list_add_tail(&cqr->list, &device->ccw_queue); |
1462 | 1462 | ||
1463 | /* let the bh start the request to keep them in order */ | 1463 | /* let the bh start the request to keep them in order */ |
1464 | dasd_schedule_bh(device); | 1464 | dasd_schedule_bh(device); |
1465 | 1465 | ||
1466 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1466 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
1467 | 1467 | ||
1468 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1468 | wait_event(wait_q, _wait_for_wakeup(cqr)); |
1469 | 1469 | ||
1470 | /* Request status is either done or failed. */ | 1470 | /* Request status is either done or failed. */ |
1471 | rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0; | 1471 | rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0; |
1472 | return rc; | 1472 | return rc; |
@@ -1568,7 +1568,7 @@ dasd_sleep_on_immediatly(struct dasd_ccw_req * cqr) | |||
1568 | wait_queue_head_t wait_q; | 1568 | wait_queue_head_t wait_q; |
1569 | struct dasd_device *device; | 1569 | struct dasd_device *device; |
1570 | int rc; | 1570 | int rc; |
1571 | 1571 | ||
1572 | device = cqr->device; | 1572 | device = cqr->device; |
1573 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 1573 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
1574 | rc = _dasd_term_running_cqr(device); | 1574 | rc = _dasd_term_running_cqr(device); |
@@ -1576,20 +1576,20 @@ dasd_sleep_on_immediatly(struct dasd_ccw_req * cqr) | |||
1576 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1576 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
1577 | return rc; | 1577 | return rc; |
1578 | } | 1578 | } |
1579 | 1579 | ||
1580 | init_waitqueue_head (&wait_q); | 1580 | init_waitqueue_head (&wait_q); |
1581 | cqr->callback = dasd_wakeup_cb; | 1581 | cqr->callback = dasd_wakeup_cb; |
1582 | cqr->callback_data = (void *) &wait_q; | 1582 | cqr->callback_data = (void *) &wait_q; |
1583 | cqr->status = DASD_CQR_QUEUED; | 1583 | cqr->status = DASD_CQR_QUEUED; |
1584 | list_add(&cqr->list, &device->ccw_queue); | 1584 | list_add(&cqr->list, &device->ccw_queue); |
1585 | 1585 | ||
1586 | /* let the bh start the request to keep them in order */ | 1586 | /* let the bh start the request to keep them in order */ |
1587 | dasd_schedule_bh(device); | 1587 | dasd_schedule_bh(device); |
1588 | 1588 | ||
1589 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1589 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
1590 | 1590 | ||
1591 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1591 | wait_event(wait_q, _wait_for_wakeup(cqr)); |
1592 | 1592 | ||
1593 | /* Request status is either done or failed. */ | 1593 | /* Request status is either done or failed. */ |
1594 | rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0; | 1594 | rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0; |
1595 | return rc; | 1595 | return rc; |
@@ -1725,7 +1725,7 @@ dasd_flush_request_queue(struct dasd_device * device) | |||
1725 | 1725 | ||
1726 | if (!device->request_queue) | 1726 | if (!device->request_queue) |
1727 | return; | 1727 | return; |
1728 | 1728 | ||
1729 | spin_lock_irq(&device->request_queue_lock); | 1729 | spin_lock_irq(&device->request_queue_lock); |
1730 | while (!list_empty(&device->request_queue->queue_head)) { | 1730 | while (!list_empty(&device->request_queue->queue_head)) { |
1731 | req = elv_next_request(device->request_queue); | 1731 | req = elv_next_request(device->request_queue); |
@@ -2172,21 +2172,3 @@ EXPORT_SYMBOL_GPL(dasd_generic_set_online); | |||
2172 | EXPORT_SYMBOL_GPL(dasd_generic_set_offline); | 2172 | EXPORT_SYMBOL_GPL(dasd_generic_set_offline); |
2173 | EXPORT_SYMBOL_GPL(dasd_generic_auto_online); | 2173 | EXPORT_SYMBOL_GPL(dasd_generic_auto_online); |
2174 | 2174 | ||
2175 | /* | ||
2176 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
2177 | * Emacs will notice this stuff at the end of the file and automatically | ||
2178 | * adjust the settings for this buffer only. This must remain at the end | ||
2179 | * of the file. | ||
2180 | * --------------------------------------------------------------------------- | ||
2181 | * Local variables: | ||
2182 | * c-indent-level: 4 | ||
2183 | * c-brace-imaginary-offset: 0 | ||
2184 | * c-brace-offset: -4 | ||
2185 | * c-argdecl-indent: 4 | ||
2186 | * c-label-offset: -4 | ||
2187 | * c-continued-statement-offset: 4 | ||
2188 | * c-continued-brace-offset: 0 | ||
2189 | * indent-tabs-mode: 1 | ||
2190 | * tab-width: 8 | ||
2191 | * End: | ||
2192 | */ | ||