[SCSI] Merge branch 'linus'
Conflicts: drivers/message/fusion/mptsas.c fixed up conflict between req->data_len accessors and mptsas driver updates. Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
@@ -921,26 +921,6 @@ int osd_req_add_set_attr_list(struct osd_request *or,
|
||||
}
|
||||
EXPORT_SYMBOL(osd_req_add_set_attr_list);
|
||||
|
||||
static int _append_map_kern(struct request *req,
|
||||
void *buff, unsigned len, gfp_t flags)
|
||||
{
|
||||
struct bio *bio;
|
||||
int ret;
|
||||
|
||||
bio = bio_map_kern(req->q, buff, len, flags);
|
||||
if (IS_ERR(bio)) {
|
||||
OSD_ERR("Failed bio_map_kern(%p, %d) => %ld\n", buff, len,
|
||||
PTR_ERR(bio));
|
||||
return PTR_ERR(bio);
|
||||
}
|
||||
ret = blk_rq_append_bio(req->q, req, bio);
|
||||
if (ret) {
|
||||
OSD_ERR("Failed blk_rq_append_bio(%p) => %d\n", bio, ret);
|
||||
bio_put(bio);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int _req_append_segment(struct osd_request *or,
|
||||
unsigned padding, struct _osd_req_data_segment *seg,
|
||||
struct _osd_req_data_segment *last_seg, struct _osd_io_info *io)
|
||||
@@ -956,14 +936,14 @@ static int _req_append_segment(struct osd_request *or,
|
||||
else
|
||||
pad_buff = io->pad_buff;
|
||||
|
||||
ret = _append_map_kern(io->req, pad_buff, padding,
|
||||
ret = blk_rq_map_kern(io->req->q, io->req, pad_buff, padding,
|
||||
or->alloc_flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
io->total_bytes += padding;
|
||||
}
|
||||
|
||||
ret = _append_map_kern(io->req, seg->buff, seg->total_bytes,
|
||||
ret = blk_rq_map_kern(io->req->q, io->req, seg->buff, seg->total_bytes,
|
||||
or->alloc_flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1324,6 +1304,21 @@ static int _osd_req_finalize_data_integrity(struct osd_request *or,
|
||||
/*
|
||||
* osd_finalize_request and helpers
|
||||
*/
|
||||
static struct request *_make_request(struct request_queue *q, bool has_write,
|
||||
struct _osd_io_info *oii, gfp_t flags)
|
||||
{
|
||||
if (oii->bio)
|
||||
return blk_make_request(q, oii->bio, flags);
|
||||
else {
|
||||
struct request *req;
|
||||
|
||||
req = blk_get_request(q, has_write ? WRITE : READ, flags);
|
||||
if (unlikely(!req))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
return req;
|
||||
}
|
||||
}
|
||||
|
||||
static int _init_blk_request(struct osd_request *or,
|
||||
bool has_in, bool has_out)
|
||||
@@ -1332,11 +1327,13 @@ static int _init_blk_request(struct osd_request *or,
|
||||
struct scsi_device *scsi_device = or->osd_dev->scsi_device;
|
||||
struct request_queue *q = scsi_device->request_queue;
|
||||
struct request *req;
|
||||
int ret = -ENOMEM;
|
||||
int ret;
|
||||
|
||||
req = blk_get_request(q, has_out, flags);
|
||||
if (!req)
|
||||
req = _make_request(q, has_out, has_out ? &or->out : &or->in, flags);
|
||||
if (IS_ERR(req)) {
|
||||
ret = PTR_ERR(req);
|
||||
goto out;
|
||||
}
|
||||
|
||||
or->request = req;
|
||||
req->cmd_type = REQ_TYPE_BLOCK_PC;
|
||||
@@ -1351,9 +1348,10 @@ static int _init_blk_request(struct osd_request *or,
|
||||
or->out.req = req;
|
||||
if (has_in) {
|
||||
/* allocate bidi request */
|
||||
req = blk_get_request(q, READ, flags);
|
||||
if (!req) {
|
||||
req = _make_request(q, false, &or->in, flags);
|
||||
if (IS_ERR(req)) {
|
||||
OSD_DEBUG("blk_get_request for bidi failed\n");
|
||||
ret = PTR_ERR(req);
|
||||
goto out;
|
||||
}
|
||||
req->cmd_type = REQ_TYPE_BLOCK_PC;
|
||||
@@ -1398,26 +1396,6 @@ int osd_finalize_request(struct osd_request *or,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (or->out.bio) {
|
||||
ret = blk_rq_append_bio(or->request->q, or->out.req,
|
||||
or->out.bio);
|
||||
if (ret) {
|
||||
OSD_DEBUG("blk_rq_append_bio out failed\n");
|
||||
return ret;
|
||||
}
|
||||
OSD_DEBUG("out bytes=%llu (bytes_req=%u)\n",
|
||||
_LLU(or->out.total_bytes), or->out.req->data_len);
|
||||
}
|
||||
if (or->in.bio) {
|
||||
ret = blk_rq_append_bio(or->request->q, or->in.req, or->in.bio);
|
||||
if (ret) {
|
||||
OSD_DEBUG("blk_rq_append_bio in failed\n");
|
||||
return ret;
|
||||
}
|
||||
OSD_DEBUG("in bytes=%llu (bytes_req=%u)\n",
|
||||
_LLU(or->in.total_bytes), or->in.req->data_len);
|
||||
}
|
||||
|
||||
or->out.pad_buff = sg_out_pad_buffer;
|
||||
or->in.pad_buff = sg_in_pad_buffer;
|
||||
|
||||
|
Reference in New Issue
Block a user