Lines Matching defs:cqr
701 * Add profiling information for cqr before execution.
704 struct dasd_ccw_req *cqr,
739 device = cqr->startdev;
758 * Add profiling information for cqr after execution.
816 struct dasd_ccw_req *cqr,
826 device = cqr->startdev;
833 if (!cqr->buildclk || !cqr->startclk ||
834 !cqr->stopclk || !cqr->endclk ||
838 strtime = ((cqr->startclk - cqr->buildclk) >> 12);
839 irqtime = ((cqr->stopclk - cqr->startclk) >> 12);
840 endtime = ((cqr->endclk - cqr->stopclk) >> 12);
841 tottime = ((cqr->endclk - cqr->buildclk) >> 12);
860 cqr->startdev != block->base,
861 cqr->cpmode == 1,
878 cqr->startdev != block->base,
879 cqr->cpmode == 1,
896 cqr->startdev != block->base,
897 cqr->cpmode == 1,
1157 #define dasd_profile_start(block, cqr, req) do {} while (0)
1158 #define dasd_profile_end(block, cqr, req) do {} while (0)
1235 struct dasd_ccw_req *cqr)
1245 if (!cqr)
1246 size += (sizeof(*cqr) + 7L) & -8L;
1253 if (!cqr) {
1254 cqr = (void *) data;
1255 data += (sizeof(*cqr) + 7L) & -8L;
1257 memset(cqr, 0, sizeof(*cqr));
1258 cqr->mem_chunk = chunk;
1260 cqr->cpaddr = data;
1262 memset(cqr->cpaddr, 0, cplength * sizeof(struct ccw1));
1265 cqr->data = data;
1266 memset(cqr->data, 0, datasize);
1268 cqr->magic = magic;
1269 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
1271 return cqr;
1279 struct dasd_ccw_req *cqr;
1284 cqr_size = (sizeof(*cqr) + 7L) & -8L;
1292 cqr = dasd_alloc_chunk(&device->ese_chunks, size);
1294 if (!cqr)
1296 memset(cqr, 0, sizeof(*cqr));
1297 data = (char *)cqr + cqr_size;
1298 cqr->cpaddr = NULL;
1300 cqr->cpaddr = data;
1302 memset(cqr->cpaddr, 0, cplength * sizeof(struct ccw1));
1304 cqr->data = NULL;
1306 cqr->data = data;
1307 memset(cqr->data, 0, datasize);
1310 cqr->magic = magic;
1311 set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
1314 return cqr;
1318 void dasd_sfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
1323 dasd_free_chunk(&device->ccw_chunks, cqr->mem_chunk);
1329 void dasd_ffree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
1334 dasd_free_chunk(&device->ese_chunks, cqr);
1341 * Check discipline magic in cqr.
1343 static inline int dasd_check_cqr(struct dasd_ccw_req *cqr)
1347 if (cqr == NULL)
1349 device = cqr->startdev;
1350 if (strncmp((char *) &cqr->magic, device->discipline->ebcname, 4)) {
1354 cqr->magic,
1367 int dasd_term_IO(struct dasd_ccw_req *cqr)
1373 /* Check the cqr */
1374 rc = dasd_check_cqr(cqr);
1378 device = (struct dasd_device *) cqr->startdev;
1379 while ((retries < 5) && (cqr->status == DASD_CQR_IN_IO)) {
1380 rc = ccw_device_clear(device->cdev, (long) cqr);
1383 cqr->status = DASD_CQR_CLEAR_PENDING;
1384 cqr->stopclk = get_tod_clock();
1385 cqr->starttime = 0;
1387 "terminate cqr %p successful",
1388 cqr);
1399 cqr->status = DASD_CQR_CLEARED;
1400 cqr->stopclk = get_tod_clock();
1401 cqr->starttime = 0;
1403 cqr->retries = -1;
1428 int dasd_start_IO(struct dasd_ccw_req *cqr)
1434 /* Check the cqr */
1435 rc = dasd_check_cqr(cqr);
1437 cqr->intrc = rc;
1440 device = (struct dasd_device *) cqr->startdev;
1441 if (((cqr->block &&
1442 test_bit(DASD_FLAG_LOCK_STOLEN, &cqr->block->base->flags)) ||
1444 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
1446 "because of stolen lock", cqr);
1447 cqr->status = DASD_CQR_ERROR;
1448 cqr->intrc = -EPERM;
1451 if (cqr->retries < 0) {
1453 sprintf(errorstring, "14 %p", cqr);
1456 cqr->status = DASD_CQR_ERROR;
1459 cqr->startclk = get_tod_clock();
1460 cqr->starttime = jiffies;
1461 cqr->retries--;
1462 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
1463 cqr->lpm &= dasd_path_get_opm(device);
1464 if (!cqr->lpm)
1465 cqr->lpm = dasd_path_get_opm(device);
1471 if (cqr->block)
1472 cqr->trkcount = atomic_read(&cqr->block->trkcount);
1474 if (cqr->cpmode == 1) {
1475 rc = ccw_device_tm_start(device->cdev, cqr->cpaddr,
1476 (long) cqr, cqr->lpm);
1478 rc = ccw_device_start(device->cdev, cqr->cpaddr,
1479 (long) cqr, cqr->lpm, 0);
1483 cqr->status = DASD_CQR_IN_IO;
1497 if (test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
1500 cqr->lpm);
1501 } else if (cqr->lpm != dasd_path_get_opm(device)) {
1502 cqr->lpm = dasd_path_get_opm(device);
1540 cqr->intrc = rc;
1590 struct dasd_ccw_req *cqr;
1595 cqr = (struct dasd_ccw_req *) intparm;
1596 if (cqr->status != DASD_CQR_IN_IO) {
1599 "%02x", cqr->status);
1610 if (!cqr->startdev ||
1611 device != cqr->startdev ||
1612 strncmp(cqr->startdev->discipline->ebcname,
1613 (char *) &cqr->magic, 4)) {
1621 cqr->status = DASD_CQR_QUEUED;
1687 struct dasd_ccw_req *cqr, *next, *fcqr;
1696 cqr = (struct dasd_ccw_req *) intparm;
1700 if (cqr && cqr->status == DASD_CQR_CLEAR_PENDING) {
1701 device = cqr->startdev;
1702 cqr->status = DASD_CQR_CLEARED;
1724 if (!cqr ||
1727 if (cqr)
1728 memcpy(&cqr->irb, irb, sizeof(*irb));
1747 test_bit(DASD_CQR_SUPPRESS_FP, &cqr->flags);
1749 test_bit(DASD_CQR_SUPPRESS_NRF, &cqr->flags);
1756 dasd_generic_space_exhaust(device, cqr);
1757 device->discipline->ext_pool_exhaust(device, cqr);
1766 device->discipline->dump_sense(device, cqr, irb);
1767 device->discipline->check_for_device_change(device, cqr, irb);
1781 if (!cqr)
1784 device = (struct dasd_device *) cqr->startdev;
1786 strncmp(device->discipline->ebcname, (char *) &cqr->magic, 4)) {
1792 if (dasd_ese_needs_format(cqr->block, irb)) {
1793 req = dasd_get_callback_data(cqr);
1795 cqr->status = DASD_CQR_ERROR;
1799 device->discipline->ese_read(cqr, irb);
1800 cqr->status = DASD_CQR_SUCCESS;
1801 cqr->stopclk = now;
1806 fcqr = device->discipline->ese_format(device, cqr, irb);
1809 cqr->status = DASD_CQR_ERROR;
1816 cqr->status = DASD_CQR_QUEUED;
1821 cqr->status = DASD_CQR_QUEUED;
1829 if (cqr->status == DASD_CQR_CLEAR_PENDING &&
1831 cqr->status = DASD_CQR_CLEARED;
1839 if (cqr->status != DASD_CQR_IN_IO) {
1841 "status %02x", dev_name(&cdev->dev), cqr->status);
1850 cqr->status = DASD_CQR_SUCCESS;
1851 cqr->stopclk = now;
1853 if (cqr->devlist.next != &device->ccw_queue) {
1854 next = list_entry(cqr->devlist.next,
1862 if (cqr->cpmode && dasd_check_hpf_error(irb) &&
1869 if (!test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags) &&
1870 cqr->retries > 0) {
1871 if (cqr->lpm == dasd_path_get_opm(device))
1875 cqr->retries);
1876 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags))
1877 cqr->lpm = dasd_path_get_opm(device);
1878 cqr->status = DASD_CQR_QUEUED;
1879 next = cqr;
1881 cqr->status = DASD_CQR_ERROR;
1927 struct dasd_ccw_req *cqr;
1936 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1937 if (cqr->status == DASD_CQR_QUEUED &&
1938 ref_cqr->block == cqr->block) {
1939 cqr->status = DASD_CQR_CLEARED;
1952 struct dasd_ccw_req *cqr;
1956 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1959 if (cqr->status == DASD_CQR_QUEUED ||
1960 cqr->status == DASD_CQR_IN_IO ||
1961 cqr->status == DASD_CQR_CLEAR_PENDING)
1963 if (cqr->status == DASD_CQR_ERROR) {
1964 __dasd_device_recovery(device, cqr);
1967 list_move_tail(&cqr->devlist, final_queue);
1972 struct dasd_ccw_req *cqr)
1976 switch (cqr->status) {
1978 cqr->status = DASD_CQR_DONE;
1981 cqr->status = DASD_CQR_NEED_ERP;
1984 cqr->status = DASD_CQR_TERMINATED;
1987 /* internal error 12 - wrong cqr status*/
1988 snprintf(errorstring, ERRORLENGTH, "12 %p %x02", cqr, cqr->status);
1994 if (cqr->callback)
1995 cqr->callback(cqr, cqr->callback_data);
2006 struct dasd_ccw_req *cqr;
2010 cqr = list_entry(l, struct dasd_ccw_req, devlist);
2011 list_del_init(&cqr->devlist);
2012 block = cqr->block;
2014 __dasd_process_cqr(device, cqr);
2017 __dasd_process_cqr(device, cqr);
2029 struct dasd_ccw_req *cqr;
2033 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
2034 if ((cqr->status == DASD_CQR_IN_IO && cqr->expires != 0) &&
2035 (time_after_eq(jiffies, cqr->expires + cqr->starttime))) {
2041 cqr->retries++;
2043 if (device->discipline->term_IO(cqr) != 0) {
2046 "cqr %p timed out (%lus) but cannot be "
2048 cqr, (cqr->expires/HZ));
2049 cqr->expires += 5*HZ;
2053 "cqr %p timed out (%lus), %i retries "
2054 "remaining\n", cqr, (cqr->expires/HZ),
2055 cqr->retries);
2064 struct dasd_ccw_req *cqr)
2081 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
2097 struct dasd_ccw_req *cqr;
2102 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
2103 if (cqr->status != DASD_CQR_QUEUED)
2106 if (__dasd_device_is_unusable(device, cqr)) {
2107 cqr->intrc = -EAGAIN;
2108 cqr->status = DASD_CQR_CLEARED;
2113 rc = device->discipline->start_IO(cqr);
2115 dasd_device_set_timer(device, cqr->expires);
2153 struct dasd_ccw_req *cqr, *n;
2160 list_for_each_entry_safe(cqr, n, &device->ccw_queue, devlist) {
2162 switch (cqr->status) {
2164 rc = device->discipline->term_IO(cqr);
2169 "failed for request %p\n", cqr);
2175 cqr->stopclk = get_tod_clock();
2176 cqr->status = DASD_CQR_CLEARED;
2181 list_move_tail(&cqr->devlist, &flush_queue);
2190 list_for_each_entry_safe(cqr, n, &flush_queue, devlist)
2192 (cqr->status != DASD_CQR_CLEAR_PENDING));
2261 void dasd_add_request_head(struct dasd_ccw_req *cqr)
2266 device = cqr->startdev;
2268 cqr->status = DASD_CQR_QUEUED;
2269 list_add(&cqr->devlist, &device->ccw_queue);
2280 void dasd_add_request_tail(struct dasd_ccw_req *cqr)
2285 device = cqr->startdev;
2287 cqr->status = DASD_CQR_QUEUED;
2288 list_add_tail(&cqr->devlist, &device->ccw_queue);
2298 void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data)
2300 spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev));
2301 cqr->callback_data = DASD_SLEEPON_END_TAG;
2302 spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev));
2307 static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr)
2312 device = cqr->startdev;
2314 rc = (cqr->callback_data == DASD_SLEEPON_END_TAG);
2322 static int __dasd_sleep_on_erp(struct dasd_ccw_req *cqr)
2327 if (cqr->status == DASD_CQR_FILLED)
2329 device = cqr->startdev;
2330 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) {
2331 if (cqr->status == DASD_CQR_TERMINATED) {
2332 device->discipline->handle_terminated_request(cqr);
2335 if (cqr->status == DASD_CQR_NEED_ERP) {
2336 erp_fn = device->discipline->erp_action(cqr);
2337 erp_fn(cqr);
2340 if (cqr->status == DASD_CQR_FAILED)
2341 dasd_log_sense(cqr, &cqr->irb);
2342 if (cqr->refers) {
2343 __dasd_process_erp(device, cqr);
2350 static int __dasd_sleep_on_loop_condition(struct dasd_ccw_req *cqr)
2352 if (test_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags)) {
2353 if (cqr->refers) /* erp is not done yet */
2355 return ((cqr->status != DASD_CQR_DONE) &&
2356 (cqr->status != DASD_CQR_FAILED));
2358 return (cqr->status == DASD_CQR_FILLED);
2366 struct dasd_ccw_req *cqr;
2372 for (cqr = maincqr; __dasd_sleep_on_loop_condition(cqr);
2373 cqr = list_first_entry(&ccw_queue,
2376 if (__dasd_sleep_on_erp(cqr))
2378 if (cqr->status != DASD_CQR_FILLED) /* could be failed */
2381 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2382 cqr->status = DASD_CQR_FAILED;
2383 cqr->intrc = -EPERM;
2388 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2390 cqr->status = DASD_CQR_FAILED;
2391 cqr->intrc = -ENOLINK;
2399 cqr->status = DASD_CQR_FAILED;
2400 cqr->intrc = -ENODEV;
2407 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
2412 cqr->status = DASD_CQR_FAILED;
2419 if (!cqr->callback)
2420 cqr->callback = dasd_wakeup_cb;
2422 cqr->callback_data = DASD_SLEEPON_START_TAG;
2423 dasd_add_request_tail(cqr);
2426 generic_waitq, _wait_for_wakeup(cqr));
2428 dasd_cancel_req(cqr);
2431 _wait_for_wakeup(cqr));
2432 cqr->status = DASD_CQR_FAILED;
2437 wait_event(generic_waitq, _wait_for_wakeup(cqr));
2455 struct dasd_ccw_req *cqr;
2457 list_for_each_entry(cqr, ccw_queue, blocklist) {
2458 if (cqr->callback_data != DASD_SLEEPON_END_TAG)
2468 struct dasd_ccw_req *cqr, *n;
2473 list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) {
2474 device = cqr->startdev;
2475 if (cqr->status != DASD_CQR_FILLED) /*could be failed*/
2479 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2480 cqr->status = DASD_CQR_FAILED;
2481 cqr->intrc = -EPERM;
2486 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2488 cqr->status = DASD_CQR_FAILED;
2489 cqr->intrc = -EAGAIN;
2498 cqr->status = DASD_CQR_FAILED;
2499 cqr->intrc = rc;
2505 if (!cqr->callback)
2506 cqr->callback = dasd_wakeup_cb;
2507 cqr->callback_data = DASD_SLEEPON_START_TAG;
2508 dasd_add_request_tail(cqr);
2514 list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) {
2521 sense = dasd_get_sense(&cqr->irb);
2523 test_bit(DASD_CQR_SUPPRESS_FP, &cqr->flags))
2525 if (scsw_cstat(&cqr->irb.scsw) == 0x40 &&
2526 test_bit(DASD_CQR_SUPPRESS_IL, &cqr->flags))
2534 if (cqr->startdev != cqr->basedev && !cqr->refers &&
2535 (cqr->status == DASD_CQR_TERMINATED ||
2536 cqr->status == DASD_CQR_NEED_ERP))
2540 if (__dasd_sleep_on_erp(cqr))
2552 int dasd_sleep_on(struct dasd_ccw_req *cqr)
2554 return _dasd_sleep_on(cqr, 0);
2580 int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr)
2582 return _dasd_sleep_on(cqr, 1);
2594 struct dasd_ccw_req *cqr;
2599 cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, devlist);
2600 rc = device->discipline->term_IO(cqr);
2607 cqr->retries++;
2611 int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr)
2616 device = cqr->startdev;
2618 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2619 cqr->status = DASD_CQR_FAILED;
2620 cqr->intrc = -EPERM;
2629 cqr->callback = dasd_wakeup_cb;
2630 cqr->callback_data = DASD_SLEEPON_START_TAG;
2631 cqr->status = DASD_CQR_QUEUED;
2634 * first the terminated cqr needs to be finished
2636 list_add(&cqr->devlist, device->ccw_queue.next);
2643 wait_event(generic_waitq, _wait_for_wakeup(cqr));
2645 if (cqr->status == DASD_CQR_DONE)
2647 else if (cqr->intrc)
2648 rc = cqr->intrc;
2670 static int __dasd_cancel_req(struct dasd_ccw_req *cqr)
2672 struct dasd_device *device = cqr->startdev;
2675 switch (cqr->status) {
2678 cqr->status = DASD_CQR_CLEARED;
2682 rc = device->discipline->term_IO(cqr);
2686 cqr, rc);
2688 cqr->stopclk = get_tod_clock();
2698 int dasd_cancel_req(struct dasd_ccw_req *cqr)
2700 struct dasd_device *device = cqr->startdev;
2705 rc = __dasd_cancel_req(cqr);
2758 struct dasd_ccw_req *cqr)
2762 if (cqr->status == DASD_CQR_DONE)
2766 erp_fn = device->discipline->erp_postaction(cqr);
2767 erp_fn(cqr);
2770 static void __dasd_cleanup_cqr(struct dasd_ccw_req *cqr)
2777 req = (struct request *) cqr->callback_data;
2778 dasd_profile_end(cqr->block, cqr, req);
2780 proc_bytes = cqr->proc_bytes;
2781 status = cqr->block->base->discipline->free_cp(cqr, req);
2785 switch (cqr->intrc) {
2832 struct dasd_ccw_req *cqr;
2840 cqr = list_entry(l, struct dasd_ccw_req, blocklist);
2841 if (cqr->status != DASD_CQR_DONE &&
2842 cqr->status != DASD_CQR_FAILED &&
2843 cqr->status != DASD_CQR_NEED_ERP &&
2844 cqr->status != DASD_CQR_TERMINATED)
2847 if (cqr->status == DASD_CQR_TERMINATED) {
2848 base->discipline->handle_terminated_request(cqr);
2853 if (cqr->status == DASD_CQR_NEED_ERP) {
2854 erp_fn = base->discipline->erp_action(cqr);
2855 if (IS_ERR(erp_fn(cqr)))
2861 if (cqr->status == DASD_CQR_FAILED) {
2862 dasd_log_sense(cqr, &cqr->irb);
2867 cqr->status == DASD_CQR_FAILED) {
2868 dasd_eer_write(base, cqr, DASD_EER_FATALERROR);
2871 cqr->status = DASD_CQR_FILLED;
2872 cqr->retries = 255;
2881 if (cqr->refers) {
2882 __dasd_process_erp(base, cqr);
2887 cqr->endclk = get_tod_clock();
2888 list_move_tail(&cqr->blocklist, final_queue);
2892 static void dasd_return_cqr_cb(struct dasd_ccw_req *cqr, void *data)
2894 dasd_schedule_block_bh(cqr->block);
2899 struct dasd_ccw_req *cqr;
2907 list_for_each_entry(cqr, &block->ccw_queue, blocklist) {
2908 if (cqr->status != DASD_CQR_FILLED)
2911 !test_bit(DASD_CQR_ALLOW_SLOCK, &cqr->flags)) {
2912 cqr->status = DASD_CQR_FAILED;
2913 cqr->intrc = -EPERM;
2919 test_bit(DASD_CQR_FLAGS_FAILFAST, &cqr->flags) &&
2921 cqr->status = DASD_CQR_FAILED;
2922 cqr->intrc = -ENOLINK;
2931 if (!cqr->startdev)
2932 cqr->startdev = block->base;
2935 cqr->callback = dasd_return_cqr_cb;
2937 dasd_add_request_tail(cqr);
2951 struct dasd_ccw_req *cqr;
2963 cqr = list_entry(l, struct dasd_ccw_req, blocklist);
2964 dq = cqr->dq;
2966 list_del_init(&cqr->blocklist);
2967 __dasd_cleanup_cqr(cqr);
2981 static void _dasd_wake_block_flush_cb(struct dasd_ccw_req *cqr, void *data)
2990 static void _dasd_requeue_request(struct dasd_ccw_req *cqr)
2998 if (cqr->refers)
3000 spin_lock_irq(&cqr->dq->lock);
3001 req = (struct request *) cqr->callback_data;
3003 spin_unlock_irq(&cqr->dq->lock);
3011 struct dasd_ccw_req *cqr, *n;
3018 list_for_each_entry_safe(cqr, n, &block->ccw_queue, blocklist) {
3020 if (cqr->status >= DASD_CQR_QUEUED)
3021 rc = dasd_cancel_req(cqr);
3029 cqr->callback = _dasd_wake_block_flush_cb;
3030 for (i = 0; cqr; cqr = cqr->refers, i++)
3031 list_move_tail(&cqr->blocklist, flush_queue);
3048 struct dasd_ccw_req *cqr, *n;
3058 list_for_each_entry_safe(cqr, n, &flush_queue, blocklist) {
3059 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED));
3061 if (cqr->refers) {
3063 __dasd_process_erp(block->base, cqr);
3070 spin_lock_irqsave(&cqr->dq->lock, flags);
3071 cqr->endclk = get_tod_clock();
3072 list_del_init(&cqr->blocklist);
3073 __dasd_cleanup_cqr(cqr);
3074 spin_unlock_irqrestore(&cqr->dq->lock, flags);
3109 struct dasd_ccw_req *cqr;
3151 cqr = basedev->discipline->build_cp(basedev, block, req);
3152 if (IS_ERR(cqr)) {
3153 if (PTR_ERR(cqr) == -EBUSY ||
3154 PTR_ERR(cqr) == -ENOMEM ||
3155 PTR_ERR(cqr) == -EAGAIN) {
3161 PTR_ERR(cqr), req);
3169 cqr->callback_data = req;
3170 cqr->status = DASD_CQR_FILLED;
3171 cqr->dq = dq;
3175 list_add_tail(&cqr->blocklist, &block->ccw_queue);
3176 INIT_LIST_HEAD(&cqr->devlist);
3177 dasd_profile_start(block, cqr, req);
3198 struct dasd_ccw_req *cqr;
3202 cqr = blk_mq_rq_to_pdu(req);
3203 if (!cqr)
3206 spin_lock_irqsave(&cqr->dq->lock, flags);
3207 device = cqr->startdev ? cqr->startdev : block->base;
3209 spin_unlock_irqrestore(&cqr->dq->lock, flags);
3213 " dasd_times_out cqr %p status %x",
3214 cqr, cqr->status);
3218 cqr->retries = -1;
3219 cqr->intrc = -ETIMEDOUT;
3220 if (cqr->status >= DASD_CQR_QUEUED) {
3221 rc = __dasd_cancel_req(cqr);
3222 } else if (cqr->status == DASD_CQR_FILLED ||
3223 cqr->status == DASD_CQR_NEED_ERP) {
3224 cqr->status = DASD_CQR_TERMINATED;
3225 } else if (cqr->status == DASD_CQR_IN_ERP) {
3233 if (tmpcqr != cqr)
3235 /* searchcqr is an ERP request for cqr */
3257 spin_unlock_irqrestore(&cqr->dq->lock, flags);
3791 struct dasd_ccw_req *cqr;
3802 list_for_each_entry(cqr, &device->ccw_queue, devlist)
3803 if ((cqr->status == DASD_CQR_IN_IO) ||
3804 (cqr->status == DASD_CQR_CLEAR_PENDING)) {
3805 cqr->status = DASD_CQR_QUEUED;
3806 cqr->retries++;
3951 struct dasd_ccw_req *cqr)
3958 if (cqr->status == DASD_CQR_IN_IO ||
3959 cqr->status == DASD_CQR_CLEAR_PENDING) {
3960 cqr->status = DASD_CQR_QUEUED;
3961 cqr->retries++;
3994 struct dasd_ccw_req *cqr, *n;
4005 list_for_each_entry_safe(cqr, n, &requeue_queue, blocklist) {
4006 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED));
4008 if (cqr->refers) {
4010 __dasd_process_erp(block->base, cqr);
4017 _dasd_requeue_request(cqr);
4018 list_del_init(&cqr->blocklist);
4019 cqr->block->base->discipline->free_cp(
4020 cqr, (struct request *) cqr->callback_data);
4110 struct dasd_ccw_req *cqr;
4113 cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device,
4116 if (IS_ERR(cqr)) {
4121 return cqr;
4124 ccw = cqr->cpaddr;
4126 ccw->cda = (__u32)(addr_t) cqr->data;
4129 cqr->startdev = device;
4130 cqr->memdev = device;
4131 cqr->expires = 10*HZ;
4132 cqr->retries = 256;
4133 cqr->buildclk = get_tod_clock();
4134 cqr->status = DASD_CQR_FILLED;
4135 return cqr;
4143 struct dasd_ccw_req *cqr;
4145 cqr = dasd_generic_build_rdc(device, rdc_buffer_size, magic);
4146 if (IS_ERR(cqr))
4147 return PTR_ERR(cqr);
4149 ret = dasd_sleep_on(cqr);
4151 memcpy(rdc_buffer, cqr->data, rdc_buffer_size);
4152 dasd_sfree_request(cqr, cqr->memdev);