Lines Matching defs:cqr

635  * Add profiling information for cqr before execution.
638 struct dasd_ccw_req *cqr,
673 device = cqr->startdev;
692 * Add profiling information for cqr after execution.
750 struct dasd_ccw_req *cqr,
760 device = cqr->startdev;
767 if (!cqr->buildclk || !cqr->startclk ||
768 !cqr->stopclk || !cqr->endclk ||
772 strtime = ((cqr->startclk - cqr->buildclk) >> 12);
773 irqtime = ((cqr->stopclk - cqr->startclk) >> 12);
774 endtime = ((cqr->endclk - cqr->stopclk) >> 12);
775 tottime = ((cqr->endclk - cqr->buildclk) >> 12);
794 cqr->startdev != block->base,
795 cqr->cpmode == 1,
812 cqr->startdev != block->base,
813 cqr->cpmode == 1,
830 cqr->startdev != block->base,
831 cqr->cpmode == 1,
1091 #define dasd_profile_start(block, cqr, req) do {} while (0)
1092 #define dasd_profile_end(block, cqr, req) do {} while (0)
1169 struct dasd_ccw_req *cqr)
1179 if (!cqr)
1180 size += (sizeof(*cqr) + 7L) & -8L;
1187 if (!cqr) {
1188 cqr = (void *) data;
1189 data += (sizeof(*cqr) + 7L) & -8L;
1191 memset(cqr, 0, sizeof(*cqr));
1192 cqr->mem_chunk = chunk;
1194 cqr->cpaddr = data;
1196 memset(cqr->cpaddr, 0, cplength * sizeof(struct ccw1));
1199 cqr->data = data;
1200 memset(cqr->data, 0, datasize);
1202 cqr->magic = magic;
1203 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
1205 return cqr;
1213 struct dasd_ccw_req *cqr;
1218 cqr_size = (sizeof(*cqr) + 7L) & -8L;
1226 cqr = dasd_alloc_chunk(&device->ese_chunks, size);
1228 if (!cqr)
1230 memset(cqr, 0, sizeof(*cqr));
1231 data = (char *)cqr + cqr_size;
1232 cqr->cpaddr = NULL;
1234 cqr->cpaddr = data;
1236 memset(cqr->cpaddr, 0, cplength * sizeof(struct ccw1));
1238 cqr->data = NULL;
1240 cqr->data = data;
1241 memset(cqr->data, 0, datasize);
1244 cqr->magic = magic;
1245 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
1248 return cqr;
1252 void dasd_sfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
1257 dasd_free_chunk(&device->ccw_chunks, cqr->mem_chunk);
1263 void dasd_ffree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
1268 dasd_free_chunk(&device->ese_chunks, cqr);
1275 * Check discipline magic in cqr.
1277 static inline int dasd_check_cqr(struct dasd_ccw_req *cqr)
1281 if (cqr == NULL)
1283 device = cqr->startdev;
1284 if (strncmp((char *) &cqr->magic, device->discipline->ebcname, 4)) {
1288 cqr->magic,
1301 int dasd_term_IO(struct dasd_ccw_req *cqr)
1307 /* Check the cqr */
1308 rc = dasd_check_cqr(cqr);
1312 device = (struct dasd_device *) cqr->startdev;
1313 while ((retries < 5) && (cqr->status == DASD_CQR_IN_IO)) {
1314 rc = ccw_device_clear(device->cdev, (long) cqr);
1317 cqr->status = DASD_CQR_CLEAR_PENDING;
1318 cqr->stopclk = get_tod_clock();
1319 cqr->starttime = 0;
1321 "terminate cqr %p successful",
1322 cqr);
1333 cqr->status = DASD_CQR_CLEARED;
1334 cqr->stopclk = get_tod_clock();
1335 cqr->starttime = 0;
1337 cqr->retries = -1;
1362 int dasd_start_IO(struct dasd_ccw_req *cqr)
1368 /* Check the cqr */
1369 rc = dasd_check_cqr(cqr);
1371 cqr->intrc = rc;
1374 device = (struct dasd_device *) cqr->startdev;
1375 if (((cqr->block &&
1376 test_bit(DASD_FLAG_LOCK_STOLEN, &cqr->block->base->flags)) ||
1378 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
1380 "because of stolen lock", cqr);
1381 cqr->status = DASD_CQR_ERROR;
1382 cqr->intrc = -EPERM;
1385 if (cqr->retries < 0) {
1387 sprintf(errorstring, "14 %p", cqr);
1390 cqr->status = DASD_CQR_ERROR;
1393 cqr->startclk = get_tod_clock();
1394 cqr->starttime = jiffies;
1395 cqr->retries--;
1396 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
1397 cqr->lpm &= dasd_path_get_opm(device);
1398 if (!cqr->lpm)
1399 cqr->lpm = dasd_path_get_opm(device);
1405 if (cqr->block)
1406 cqr->trkcount = atomic_read(&cqr->block->trkcount);
1408 if (cqr->cpmode == 1) {
1409 rc = ccw_device_tm_start(device->cdev, cqr->cpaddr,
1410 (long) cqr, cqr->lpm);
1412 rc = ccw_device_start(device->cdev, cqr->cpaddr,
1413 (long) cqr, cqr->lpm, 0);
1417 cqr->status = DASD_CQR_IN_IO;
1431 if (test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
1434 cqr->lpm);
1435 } else if (cqr->lpm != dasd_path_get_opm(device)) {
1436 cqr->lpm = dasd_path_get_opm(device);
1455 dasd_handle_autoquiesce(device, cqr, DASD_EER_STARTIO);
1475 cqr->intrc = rc;
1525 struct dasd_ccw_req *cqr;
1530 cqr = (struct dasd_ccw_req *) intparm;
1531 if (cqr->status != DASD_CQR_IN_IO) {
1534 "%02x", cqr->status);
1545 if (!cqr->startdev ||
1546 device != cqr->startdev ||
1547 strncmp(cqr->startdev->discipline->ebcname,
1548 (char *) &cqr->magic, 4)) {
1556 cqr->status = DASD_CQR_QUEUED;
1621 struct dasd_ccw_req *cqr, *next, *fcqr;
1630 cqr = (struct dasd_ccw_req *) intparm;
1634 if (cqr && cqr->status == DASD_CQR_CLEAR_PENDING) {
1635 device = cqr->startdev;
1636 cqr->status = DASD_CQR_CLEARED;
1658 if (!cqr ||
1661 if (cqr)
1662 memcpy(&cqr->irb, irb, sizeof(*irb));
1681 test_bit(DASD_CQR_SUPPRESS_FP, &cqr->flags);
1683 test_bit(DASD_CQR_SUPPRESS_NRF, &cqr->flags);
1690 dasd_generic_space_exhaust(device, cqr);
1691 device->discipline->ext_pool_exhaust(device, cqr);
1700 device->discipline->dump_sense(device, cqr, irb);
1701 device->discipline->check_for_device_change(device, cqr, irb);
1715 if (!cqr)
1718 device = (struct dasd_device *) cqr->startdev;
1720 strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
1726 if (dasd_ese_needs_format(cqr->block, irb)) {
1727 req = dasd_get_callback_data(cqr);
1729 cqr->status = DASD_CQR_ERROR;
1733 device->discipline->ese_read(cqr, irb);
1734 cqr->status = DASD_CQR_SUCCESS;
1735 cqr->stopclk = now;
1740 fcqr = device->discipline->ese_format(device, cqr, irb);
1743 cqr->status = DASD_CQR_ERROR;
1750 cqr->status = DASD_CQR_QUEUED;
1755 cqr->status = DASD_CQR_QUEUED;
1763 if (cqr->status == DASD_CQR_CLEAR_PENDING &&
1765 cqr->status = DASD_CQR_CLEARED;
1773 if (cqr->status != DASD_CQR_IN_IO) {
1775 "status %02x", dev_name(&cdev->dev), cqr->status);
1784 cqr->status = DASD_CQR_SUCCESS;
1785 cqr->stopclk = now;
1787 if (cqr->devlist.next != &device->ccw_queue) {
1788 next = list_entry(cqr->devlist.next,
1796 if (cqr->cpmode && dasd_check_hpf_error(irb) &&
1803 if (!test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags) &&
1804 cqr->retries > 0) {
1805 if (cqr->lpm == dasd_path_get_opm(device))
1809 cqr->retries);
1810 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags))
1811 cqr->lpm = dasd_path_get_opm(device);
1812 cqr->status = DASD_CQR_QUEUED;
1813 next = cqr;
1815 cqr->status = DASD_CQR_ERROR;
1861 struct dasd_ccw_req *cqr;
1870 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1871 if (cqr->status == DASD_CQR_QUEUED &&
1872 ref_cqr->block == cqr->block) {
1873 cqr->status = DASD_CQR_CLEARED;
1886 struct dasd_ccw_req *cqr;
1890 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1893 if (cqr->status == DASD_CQR_QUEUED ||
1894 cqr->status == DASD_CQR_IN_IO ||
1895 cqr->status == DASD_CQR_CLEAR_PENDING)
1897 if (cqr->status == DASD_CQR_ERROR) {
1898 __dasd_device_recovery(device, cqr);
1901 list_move_tail(&cqr->devlist, final_queue);
1906 struct dasd_ccw_req *cqr)
1910 switch (cqr->status) {
1912 cqr->status = DASD_CQR_DONE;
1915 cqr->status = DASD_CQR_NEED_ERP;
1918 cqr->status = DASD_CQR_TERMINATED;
1921 /* internal error 12 - wrong cqr status*/
1922 snprintf(errorstring, ERRORLENGTH, "12 %p %x02", cqr, cqr->status);
1928 if (cqr->callback)
1929 cqr->callback(cqr, cqr->callback_data);
1940 struct dasd_ccw_req *cqr;
1944 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1945 list_del_init(&cqr->devlist);
1946 block = cqr->block;
1948 __dasd_process_cqr(device, cqr);
1951 __dasd_process_cqr(device, cqr);
1961 struct dasd_ccw_req *cqr)
1963 if ((device->default_retries - cqr->retries) >= device->aq_timeouts)
1964 dasd_handle_autoquiesce(device, cqr, DASD_EER_TIMEOUTS);
1973 struct dasd_ccw_req *cqr;
1977 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
1978 if ((cqr->status == DASD_CQR_IN_IO && cqr->expires != 0) &&
1979 (time_after_eq(jiffies, cqr->expires + cqr->starttime))) {
1985 cqr->retries++;
1987 if (device->discipline->term_IO(cqr) != 0) {
1990 "cqr %p timed out (%lus) but cannot be "
1992 cqr, (cqr->expires/HZ));
1993 cqr->expires += 5*HZ;
1997 "cqr %p timed out (%lus), %i retries "
1998 "remaining\n", cqr, (cqr->expires/HZ),
1999 cqr->retries);
2001 __dasd_device_check_autoquiesce_timeout(device, cqr);
2009 struct dasd_ccw_req *cqr)
2026 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
2042 struct dasd_ccw_req *cqr;
2047 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
2048 if (cqr->status != DASD_CQR_QUEUED)
2051 if (__dasd_device_is_unusable(device, cqr)) {
2052 cqr->intrc = -EAGAIN;
2053 cqr->status = DASD_CQR_CLEARED;
2058 rc = device->discipline->start_IO(cqr);
2060 dasd_device_set_timer(device, cqr->expires);
2105 struct dasd_ccw_req *cqr, *n;
2112 list_for_each_entry_safe(cqr, n, &device->ccw_queue, devlist) {
2114 switch (cqr->status) {
2116 rc = device->discipline->term_IO(cqr);
2121 "failed for request %p\n", cqr);
2127 cqr->stopclk = get_tod_clock();
2128 cqr->status = DASD_CQR_CLEARED;
2133 list_move_tail(&cqr->devlist, &flush_queue);
2142 list_for_each_entry_safe(cqr, n, &flush_queue, devlist)
2144 (cqr->status != DASD_CQR_CLEAR_PENDING));
2213 void dasd_add_request_head(struct dasd_ccw_req *cqr)
2218 device = cqr->startdev;
2220 cqr->status = DASD_CQR_QUEUED;
2221 list_add(&cqr->devlist, &device->ccw_queue);
2232 void dasd_add_request_tail(struct dasd_ccw_req *cqr)
2237 device = cqr->startdev;
2239 cqr->status = DASD_CQR_QUEUED;
2240 list_add_tail(&cqr->devlist, &device->ccw_queue);
2250 void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data)
2252 spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev));
2253 cqr->callback_data = DASD_SLEEPON_END_TAG;
2254 spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev));
2259 static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr)
2264 device = cqr->startdev;
2266 rc = (cqr->callback_data == DASD_SLEEPON_END_TAG);
2274 static int __dasd_sleep_on_erp(struct dasd_ccw_req *cqr)
2279 if (cqr->status == DASD_CQR_FILLED)
2281 device = cqr->startdev;
2282 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) {
2283 if (cqr->status == DASD_CQR_TERMINATED) {
2284 device->discipline->handle_terminated_request(cqr);
2287 if (cqr->status == DASD_CQR_NEED_ERP) {
2288 erp_fn = device->discipline->erp_action(cqr);
2289 erp_fn(cqr);
2292 if (cqr->status == DASD_CQR_FAILED)
2293 dasd_log_sense(cqr, &cqr->irb);
2294 if (cqr->refers) {
2295 __dasd_process_erp(device, cqr);
2302 static int __dasd_sleep_on_loop_condition(struct dasd_ccw_req *cqr)
2304 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) {
2305 if (cqr->refers) /* erp is not done yet */
2307 return ((cqr->status != DASD_CQR_DONE) &&
2308 (cqr->status != DASD_CQR_FAILED));
2310 return (cqr->status == DASD_CQR_FILLED);
2318 struct dasd_ccw_req *cqr;
2324 for (cqr = maincqr; __dasd_sleep_on_loop_condition(cqr);
2325 cqr = list_first_entry(&ccw_queue,
2328 if (__dasd_sleep_on_erp(cqr))
2330 if (cqr->status != DASD_CQR_FILLED) /* could be failed */
2333 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2334 cqr->status = DASD_CQR_FAILED;
2335 cqr->intrc = -EPERM;
2340 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2342 cqr->status = DASD_CQR_FAILED;
2343 cqr->intrc = -ENOLINK;
2351 cqr->status = DASD_CQR_FAILED;
2352 cqr->intrc = -ENODEV;
2359 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
2364 cqr->status = DASD_CQR_FAILED;
2371 if (!cqr->callback)
2372 cqr->callback = dasd_wakeup_cb;
2374 cqr->callback_data = DASD_SLEEPON_START_TAG;
2375 dasd_add_request_tail(cqr);
2378 generic_waitq, _wait_for_wakeup(cqr));
2380 dasd_cancel_req(cqr);
2383 _wait_for_wakeup(cqr));
2384 cqr->status = DASD_CQR_FAILED;
2389 wait_event(generic_waitq, _wait_for_wakeup(cqr));
2407 struct dasd_ccw_req *cqr;
2409 list_for_each_entry(cqr, ccw_queue, blocklist) {
2410 if (cqr->callback_data != DASD_SLEEPON_END_TAG)
2420 struct dasd_ccw_req *cqr, *n;
2425 list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) {
2426 device = cqr->startdev;
2427 if (cqr->status != DASD_CQR_FILLED) /*could be failed*/
2431 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2432 cqr->status = DASD_CQR_FAILED;
2433 cqr->intrc = -EPERM;
2438 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2440 cqr->status = DASD_CQR_FAILED;
2441 cqr->intrc = -EAGAIN;
2450 cqr->status = DASD_CQR_FAILED;
2451 cqr->intrc = rc;
2457 if (!cqr->callback)
2458 cqr->callback = dasd_wakeup_cb;
2459 cqr->callback_data = DASD_SLEEPON_START_TAG;
2460 dasd_add_request_tail(cqr);
2466 list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) {
2473 sense = dasd_get_sense(&cqr->irb);
2475 test_bit(DASD_CQR_SUPPRESS_FP, &cqr->flags))
2477 if (scsw_cstat(&cqr->irb.scsw) == 0x40 &&
2478 test_bit(DASD_CQR_SUPPRESS_IL, &cqr->flags))
2486 if (cqr->startdev != cqr->basedev && !cqr->refers &&
2487 (cqr->status == DASD_CQR_TERMINATED ||
2488 cqr->status == DASD_CQR_NEED_ERP))
2492 if (__dasd_sleep_on_erp(cqr))
2504 int dasd_sleep_on(struct dasd_ccw_req *cqr)
2506 return _dasd_sleep_on(cqr, 0);
2532 int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr)
2534 return _dasd_sleep_on(cqr, 1);
2546 struct dasd_ccw_req *cqr;
2551 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
2552 rc = device->discipline->term_IO(cqr);
2559 cqr->retries++;
2563 int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr)
2568 device = cqr->startdev;
2570 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2571 cqr->status = DASD_CQR_FAILED;
2572 cqr->intrc = -EPERM;
2581 cqr->callback = dasd_wakeup_cb;
2582 cqr->callback_data = DASD_SLEEPON_START_TAG;
2583 cqr->status = DASD_CQR_QUEUED;
2586 * first the terminated cqr needs to be finished
2588 list_add(&cqr->devlist, device->ccw_queue.next);
2595 wait_event(generic_waitq, _wait_for_wakeup(cqr));
2597 if (cqr->status == DASD_CQR_DONE)
2599 else if (cqr->intrc)
2600 rc = cqr->intrc;
2622 static int __dasd_cancel_req(struct dasd_ccw_req *cqr)
2624 struct dasd_device *device = cqr->startdev;
2627 switch (cqr->status) {
2630 cqr->status = DASD_CQR_CLEARED;
2634 rc = device->discipline->term_IO(cqr);
2638 cqr, rc);
2640 cqr->stopclk = get_tod_clock();
2650 int dasd_cancel_req(struct dasd_ccw_req *cqr)
2652 struct dasd_device *device = cqr->startdev;
2657 rc = __dasd_cancel_req(cqr);
2710 struct dasd_ccw_req *cqr)
2714 if (cqr->status == DASD_CQR_DONE)
2718 erp_fn = device->discipline->erp_postaction(cqr);
2719 erp_fn(cqr);
2722 static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr)
2729 req = (struct request *) cqr->callback_data;
2730 dasd_profile_end(cqr->block, cqr, req);
2732 proc_bytes = cqr->proc_bytes;
2733 status = cqr->block->base->discipline->free_cp(cqr, req);
2737 switch (cqr->intrc) {
2789 struct dasd_ccw_req *cqr;
2797 cqr = list_entry(l, struct dasd_ccw_req, blocklist);
2798 if (cqr->status != DASD_CQR_DONE &&
2799 cqr->status != DASD_CQR_FAILED &&
2800 cqr->status != DASD_CQR_NEED_ERP &&
2801 cqr->status != DASD_CQR_TERMINATED)
2804 if (cqr->status == DASD_CQR_TERMINATED) {
2805 base->discipline->handle_terminated_request(cqr);
2810 if (cqr->status == DASD_CQR_NEED_ERP) {
2811 erp_fn = base->discipline->erp_action(cqr);
2812 if (IS_ERR(erp_fn(cqr)))
2818 if (cqr->status == DASD_CQR_FAILED) {
2819 dasd_log_sense(cqr, &cqr->irb);
2826 if (cqr->status == DASD_CQR_FAILED &&
2827 dasd_handle_autoquiesce(base, cqr, DASD_EER_FATALERROR)) {
2828 cqr->status = DASD_CQR_FILLED;
2829 cqr->retries = 255;
2836 if (cqr->refers) {
2837 __dasd_process_erp(base, cqr);
2842 cqr->endclk = get_tod_clock();
2843 list_move_tail(&cqr->blocklist, final_queue);
2847 static void dasd_return_cqr_cb(struct dasd_ccw_req *cqr, void *data)
2849 dasd_schedule_block_bh(cqr->block);
2854 struct dasd_ccw_req *cqr;
2862 list_for_each_entry(cqr, &block->ccw_queue, blocklist) {
2863 if (cqr->status != DASD_CQR_FILLED)
2866 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2867 cqr->status = DASD_CQR_FAILED;
2868 cqr->intrc = -EPERM;
2874 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2876 cqr->status = DASD_CQR_FAILED;
2877 cqr->intrc = -ENOLINK;
2886 if (!cqr->startdev)
2887 cqr->startdev = block->base;
2890 cqr->callback = dasd_return_cqr_cb;
2892 dasd_add_request_tail(cqr);
2906 struct dasd_ccw_req *cqr;
2918 cqr = list_entry(l, struct dasd_ccw_req, blocklist);
2919 dq = cqr->dq;
2921 list_del_init(&cqr->blocklist);
2922 __dasd_cleanup_cqr(cqr);
2936 static void _dasd_wake_block_flush_cb(struct dasd_ccw_req *cqr, void *data)
2945 static void _dasd_requeue_request(struct dasd_ccw_req *cqr)
2953 if (cqr->refers)
2955 spin_lock_irq(&cqr->dq->lock);
2956 req = (struct request *) cqr->callback_data;
2958 spin_unlock_irq(&cqr->dq->lock);
2966 struct dasd_ccw_req *cqr, *n;
2973 list_for_each_entry_safe(cqr, n, &block->ccw_queue, blocklist) {
2975 if (cqr->status >= DASD_CQR_QUEUED)
2976 rc = dasd_cancel_req(cqr);
2984 cqr->callback = _dasd_wake_block_flush_cb;
2985 for (i = 0; cqr; cqr = cqr->refers, i++)
2986 list_move_tail(&cqr->blocklist, flush_queue);
3003 struct dasd_ccw_req *cqr, *n;
3013 list_for_each_entry_safe(cqr, n, &flush_queue, blocklist) {
3014 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED));
3016 if (cqr->refers) {
3018 __dasd_process_erp(block->base, cqr);
3025 spin_lock_irqsave(&cqr->dq->lock, flags);
3026 cqr->endclk = get_tod_clock();
3027 list_del_init(&cqr->blocklist);
3028 __dasd_cleanup_cqr(cqr);
3029 spin_unlock_irqrestore(&cqr->dq->lock, flags);
3064 struct dasd_ccw_req *cqr;
3106 cqr = basedev->discipline->build_cp(basedev, block, req);
3107 if (IS_ERR(cqr)) {
3108 if (PTR_ERR(cqr) == -EBUSY ||
3109 PTR_ERR(cqr) == -ENOMEM ||
3110 PTR_ERR(cqr) == -EAGAIN) {
3116 PTR_ERR(cqr), req);
3124 cqr->callback_data = req;
3125 cqr->status = DASD_CQR_FILLED;
3126 cqr->dq = dq;
3130 list_add_tail(&cqr->blocklist, &block->ccw_queue);
3131 INIT_LIST_HEAD(&cqr->devlist);
3132 dasd_profile_start(block, cqr, req);
3153 struct dasd_ccw_req *cqr;
3157 cqr = blk_mq_rq_to_pdu(req);
3158 if (!cqr)
3161 spin_lock_irqsave(&cqr->dq->lock, flags);
3162 device = cqr->startdev ? cqr->startdev : block->base;
3164 spin_unlock_irqrestore(&cqr->dq->lock, flags);
3168 " dasd_times_out cqr %p status %x",
3169 cqr, cqr->status);
3173 cqr->retries = -1;
3174 cqr->intrc = -ETIMEDOUT;
3175 if (cqr->status >= DASD_CQR_QUEUED) {
3176 rc = __dasd_cancel_req(cqr);
3177 } else if (cqr->status == DASD_CQR_FILLED ||
3178 cqr->status == DASD_CQR_NEED_ERP) {
3179 cqr->status = DASD_CQR_TERMINATED;
3180 } else if (cqr->status == DASD_CQR_IN_ERP) {
3188 if (tmpcqr != cqr)
3190 /* searchcqr is an ERP request for cqr */
3212 spin_unlock_irqrestore(&cqr->dq->lock, flags);
3687 struct dasd_ccw_req *cqr;
3698 list_for_each_entry(cqr, &device->ccw_queue, devlist)
3699 if ((cqr->status == DASD_CQR_IN_IO) ||
3700 (cqr->status == DASD_CQR_CLEAR_PENDING)) {
3701 cqr->status = DASD_CQR_QUEUED;
3702 cqr->retries++;
3846 struct dasd_ccw_req *cqr)
3854 if (cqr->status == DASD_CQR_IN_IO ||
3855 cqr->status == DASD_CQR_CLEAR_PENDING) {
3856 cqr->status = DASD_CQR_QUEUED;
3857 cqr->retries++;
3890 struct dasd_ccw_req *cqr, *n;
3901 list_for_each_entry_safe(cqr, n, &requeue_queue, blocklist) {
3902 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED));
3904 if (cqr->refers) {
3906 __dasd_process_erp(block->base, cqr);
3913 _dasd_requeue_request(cqr);
3914 list_del_init(&cqr->blocklist);
3915 cqr->block->base->discipline->free_cp(
3916 cqr, (struct request *) cqr->callback_data);
3944 struct dasd_ccw_req *cqr,
3949 dasd_eer_write(device, cqr, reason);
3972 struct dasd_ccw_req *cqr;
3975 cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device,
3978 if (IS_ERR(cqr)) {
3983 return cqr;
3986 ccw = cqr->cpaddr;
3988 ccw->cda = (__u32)virt_to_phys(cqr->data);
3991 cqr->startdev = device;
3992 cqr->memdev = device;
3993 cqr->expires = 10*HZ;
3994 cqr->retries = 256;
3995 cqr->buildclk = get_tod_clock();
3996 cqr->status = DASD_CQR_FILLED;
3997 return cqr;
4005 struct dasd_ccw_req *cqr;
4007 cqr = dasd_generic_build_rdc(device, rdc_buffer_size, magic);
4008 if (IS_ERR(cqr))
4009 return PTR_ERR(cqr);
4011 ret = dasd_sleep_on(cqr);
4013 memcpy(rdc_buffer, cqr->data, rdc_buffer_size);
4014 dasd_sfree_request(cqr, cqr->memdev);