static void htifblk_request(struct request_queue *q) { struct htifblk_device *dev; struct request *req; int ret; dev = q->queuedata; if (dev->req != NULL) return; while ((req = blk_fetch_request(q)) != NULL) { if (req->cmd_type == REQ_TYPE_FS) { ret = htifblk_segment(dev, req); if (unlikely(ret)) { WARN_ON(__blk_end_request_cur(req, ret)); continue; } blk_stop_queue(q); break; } else { blk_dump_rq_flags(req, DRIVER_NAME ": ignored non-fs request"); __blk_end_request_all(req, -EIO); continue; } } }
static void htifblk_request(struct request_queue *q) { struct htifblk_device *dev; struct request *req; unsigned long flags; int ret; dev = q->queuedata; spin_lock_irqsave(q->queue_lock, flags); if (dev->req != NULL) goto out; while ((req = blk_fetch_request(q)) != NULL) { if (req->cmd_type == REQ_TYPE_FS) { ret = htifblk_segment(dev, req); if (unlikely(ret)) { WARN_ON(__blk_end_request_cur(req, ret)); continue; } blk_stop_queue(q); break; } else { blk_dump_rq_flags(req, DRIVER_NAME ": ignored non-fs request"); __blk_end_request_all(req, -EIO); continue; } } out: spin_unlock_irqrestore(q->queue_lock, flags); }