snprintf(disk->disk_name, 32, "xsegbd%u", xsegbd_dev->id);
ret = 0;
-
+
/* allow a non-zero sector_size parameter to override the disk size */
if (sector_size)
xsegbd_dev->sectors = sector_size;
if (xsegbd_dev->gd) {
if (xsegbd_dev->gd->flags & GENHD_FL_UP)
del_gendisk(xsegbd_dev->gd);
-
+
xsegbd_mapclose(xsegbd_dev);
}
-
+
spin_lock(&xsegbd_devices_lock);
BUG_ON(xsegbd_devices[xsegbd_dev->src_portno] != xsegbd_dev);
xsegbd_devices[xsegbd_dev->src_portno] = NULL;
xsegbd_dev->src_portno);
if (blkreq_idx == Noneidx)
break;
-
+
if (blkreq_idx >= xsegbd_dev->nr_requests) {
XSEGLOG("blkreq_idx >= xsegbd_dev->nr_requests");
BUG_ON(1);
break;
}
-
+
spin_lock_irqsave(&xsegbd_dev->rqlock, flags);
blkreq = blk_fetch_request(rq);
if (!blkreq){
pending->dev = xsegbd_dev;
pending->request = blkreq;
pending->comp = NULL;
-
+
xreq->size = datalen;
xreq->offset = blk_rq_pos(blkreq) << 9;
xreq->priv = (uint64_t) blkreq_idx;
blkreq_idx = xq_pop_head(&xsegbd_dev->blk_queue_pending, 1);
if (blkreq_idx == Noneidx)
goto out_put;
-
+
pending = &xsegbd_dev->blk_req_pending[blkreq_idx];
pending->dev = xsegbd_dev;
pending->request = NULL;
pending->comp = ∁
-
+
xreq->priv = (uint64_t) blkreq_idx;
target = xseg_get_target(xsegbd_dev->xseg, xreq);
blkreq_idx = xq_pop_head(&xsegbd_dev->blk_queue_pending, 1);
if (blkreq_idx == Noneidx)
goto out_put;
-
+
pending = &xsegbd_dev->blk_req_pending[blkreq_idx];
pending->dev = xsegbd_dev;
pending->request = NULL;
pending->comp = ∁
-
+
xreq->priv = (uint64_t) blkreq_idx;
target = xseg_get_target(xsegbd_dev->xseg, xreq);
if (xsegbd_dev != pending->dev) {
//FIXME maybe put request?
XSEGLOG("xsegbd_dev != pending->dev");
- BUG_ON(1);
+ WARN_ON(1);
continue;
}
pending->dev = NULL;
if (!blkreq){
//FIXME maybe put request?
XSEGLOG("blkreq does not exist");
- BUG_ON(1);
+ WARN_ON(1);
continue;
}
err = 0;
if (!rq_data_dir(blkreq)){
xseg_to_blk(xsegbd_dev->xseg, xreq, blkreq);
- }
+ }
blk_end:
blk_end_request_all(blkreq, err);
-
+
ridx = xq_append_head(&xsegbd_dev->blk_queue_pending,
blkreq_idx, xsegbd_dev->src_portno);
if (ridx == Noneidx) {