aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/block/dasd_fba.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/block/dasd_fba.c')
-rw-r--r--drivers/s390/block/dasd_fba.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index da16ead8aff2..119b8d2d5f17 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -234,14 +234,13 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req)
234 struct LO_fba_data *LO_data; 234 struct LO_fba_data *LO_data;
235 struct dasd_ccw_req *cqr; 235 struct dasd_ccw_req *cqr;
236 struct ccw1 *ccw; 236 struct ccw1 *ccw;
237 struct bio *bio; 237 struct req_iterator iter;
238 struct bio_vec *bv; 238 struct bio_vec *bv;
239 char *dst; 239 char *dst;
240 int count, cidaw, cplength, datasize; 240 int count, cidaw, cplength, datasize;
241 sector_t recid, first_rec, last_rec; 241 sector_t recid, first_rec, last_rec;
242 unsigned int blksize, off; 242 unsigned int blksize, off;
243 unsigned char cmd; 243 unsigned char cmd;
244 int i;
245 244
246 private = (struct dasd_fba_private *) device->private; 245 private = (struct dasd_fba_private *) device->private;
247 if (rq_data_dir(req) == READ) { 246 if (rq_data_dir(req) == READ) {
@@ -257,8 +256,7 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req)
257 /* Check struct bio and count the number of blocks for the request. */ 256 /* Check struct bio and count the number of blocks for the request. */
258 count = 0; 257 count = 0;
259 cidaw = 0; 258 cidaw = 0;
260 rq_for_each_bio(bio, req) { 259 rq_for_each_segment(bv, req, iter) {
261 bio_for_each_segment(bv, bio, i) {
262 if (bv->bv_len & (blksize - 1)) 260 if (bv->bv_len & (blksize - 1))
263 /* Fba can only do full blocks. */ 261 /* Fba can only do full blocks. */
264 return ERR_PTR(-EINVAL); 262 return ERR_PTR(-EINVAL);
@@ -268,7 +266,6 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req)
268 bv->bv_len)) 266 bv->bv_len))
269 cidaw += bv->bv_len / blksize; 267 cidaw += bv->bv_len / blksize;
270#endif 268#endif
271 }
272 } 269 }
273 /* Paranoia. */ 270 /* Paranoia. */
274 if (count != last_rec - first_rec + 1) 271 if (count != last_rec - first_rec + 1)
@@ -304,7 +301,7 @@ dasd_fba_build_cp(struct dasd_device * device, struct request *req)
304 locate_record(ccw++, LO_data++, rq_data_dir(req), 0, count); 301 locate_record(ccw++, LO_data++, rq_data_dir(req), 0, count);
305 } 302 }
306 recid = first_rec; 303 recid = first_rec;
307 rq_for_each_bio(bio, req) bio_for_each_segment(bv, bio, i) { 304 rq_for_each_segment(bv, req, iter) {
308 dst = page_address(bv->bv_page) + bv->bv_offset; 305 dst = page_address(bv->bv_page) + bv->bv_offset;
309 if (dasd_page_cache) { 306 if (dasd_page_cache) {
310 char *copy = kmem_cache_alloc(dasd_page_cache, 307 char *copy = kmem_cache_alloc(dasd_page_cache,
@@ -359,11 +356,11 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
359{ 356{
360 struct dasd_fba_private *private; 357 struct dasd_fba_private *private;
361 struct ccw1 *ccw; 358 struct ccw1 *ccw;
362 struct bio *bio; 359 struct req_iterator iter;
363 struct bio_vec *bv; 360 struct bio_vec *bv;
364 char *dst, *cda; 361 char *dst, *cda;
365 unsigned int blksize, off; 362 unsigned int blksize, off;
366 int i, status; 363 int status;
367 364
368 if (!dasd_page_cache) 365 if (!dasd_page_cache)
369 goto out; 366 goto out;
@@ -374,7 +371,7 @@ dasd_fba_free_cp(struct dasd_ccw_req *cqr, struct request *req)
374 ccw++; 371 ccw++;
375 if (private->rdc_data.mode.bits.data_chain != 0) 372 if (private->rdc_data.mode.bits.data_chain != 0)
376 ccw++; 373 ccw++;
377 rq_for_each_bio(bio, req) bio_for_each_segment(bv, bio, i) { 374 rq_for_each_segment(bv, req, iter) {
378 dst = page_address(bv->bv_page) + bv->bv_offset; 375 dst = page_address(bv->bv_page) + bv->bv_offset;
379 for (off = 0; off < bv->bv_len; off += blksize) { 376 for (off = 0; off < bv->bv_len; off += blksize) {
380 /* Skip locate record. */ 377 /* Skip locate record. */