|
@@ -102,14 +102,15 @@ static inline void put_parallel(struct parallel_io *p)
|
|
}
|
|
}
|
|
|
|
|
|
static struct bio *
|
|
static struct bio *
|
|
-bl_submit_bio(int rw, struct bio *bio)
|
|
|
|
|
|
+bl_submit_bio(struct bio *bio)
|
|
{
|
|
{
|
|
if (bio) {
|
|
if (bio) {
|
|
get_parallel(bio->bi_private);
|
|
get_parallel(bio->bi_private);
|
|
dprintk("%s submitting %s bio %u@%llu\n", __func__,
|
|
dprintk("%s submitting %s bio %u@%llu\n", __func__,
|
|
- rw == READ ? "read" : "write", bio->bi_iter.bi_size,
|
|
|
|
|
|
+ bio->bi_rw == READ ? "read" : "write",
|
|
|
|
+ bio->bi_iter.bi_size,
|
|
(unsigned long long)bio->bi_iter.bi_sector);
|
|
(unsigned long long)bio->bi_iter.bi_sector);
|
|
- submit_bio(rw, bio);
|
|
|
|
|
|
+ submit_bio(bio);
|
|
}
|
|
}
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
@@ -158,7 +159,7 @@ do_add_page_to_bio(struct bio *bio, int npg, int rw, sector_t isect,
|
|
if (disk_addr < map->start || disk_addr >= map->start + map->len) {
|
|
if (disk_addr < map->start || disk_addr >= map->start + map->len) {
|
|
if (!dev->map(dev, disk_addr, map))
|
|
if (!dev->map(dev, disk_addr, map))
|
|
return ERR_PTR(-EIO);
|
|
return ERR_PTR(-EIO);
|
|
- bio = bl_submit_bio(rw, bio);
|
|
|
|
|
|
+ bio = bl_submit_bio(bio);
|
|
}
|
|
}
|
|
disk_addr += map->disk_offset;
|
|
disk_addr += map->disk_offset;
|
|
disk_addr -= map->start;
|
|
disk_addr -= map->start;
|
|
@@ -174,9 +175,10 @@ retry:
|
|
disk_addr >> SECTOR_SHIFT, end_io, par);
|
|
disk_addr >> SECTOR_SHIFT, end_io, par);
|
|
if (!bio)
|
|
if (!bio)
|
|
return ERR_PTR(-ENOMEM);
|
|
return ERR_PTR(-ENOMEM);
|
|
|
|
+ bio->bi_rw = rw;
|
|
}
|
|
}
|
|
if (bio_add_page(bio, page, *len, offset) < *len) {
|
|
if (bio_add_page(bio, page, *len, offset) < *len) {
|
|
- bio = bl_submit_bio(rw, bio);
|
|
|
|
|
|
+ bio = bl_submit_bio(bio);
|
|
goto retry;
|
|
goto retry;
|
|
}
|
|
}
|
|
return bio;
|
|
return bio;
|
|
@@ -252,7 +254,7 @@ bl_read_pagelist(struct nfs_pgio_header *header)
|
|
for (i = pg_index; i < header->page_array.npages; i++) {
|
|
for (i = pg_index; i < header->page_array.npages; i++) {
|
|
if (extent_length <= 0) {
|
|
if (extent_length <= 0) {
|
|
/* We've used up the previous extent */
|
|
/* We've used up the previous extent */
|
|
- bio = bl_submit_bio(READ, bio);
|
|
|
|
|
|
+ bio = bl_submit_bio(bio);
|
|
|
|
|
|
/* Get the next one */
|
|
/* Get the next one */
|
|
if (!ext_tree_lookup(bl, isect, &be, false)) {
|
|
if (!ext_tree_lookup(bl, isect, &be, false)) {
|
|
@@ -273,7 +275,7 @@ bl_read_pagelist(struct nfs_pgio_header *header)
|
|
}
|
|
}
|
|
|
|
|
|
if (is_hole(&be)) {
|
|
if (is_hole(&be)) {
|
|
- bio = bl_submit_bio(READ, bio);
|
|
|
|
|
|
+ bio = bl_submit_bio(bio);
|
|
/* Fill hole w/ zeroes w/o accessing device */
|
|
/* Fill hole w/ zeroes w/o accessing device */
|
|
dprintk("%s Zeroing page for hole\n", __func__);
|
|
dprintk("%s Zeroing page for hole\n", __func__);
|
|
zero_user_segment(pages[i], pg_offset, pg_len);
|
|
zero_user_segment(pages[i], pg_offset, pg_len);
|
|
@@ -306,7 +308,7 @@ bl_read_pagelist(struct nfs_pgio_header *header)
|
|
header->res.count = (isect << SECTOR_SHIFT) - header->args.offset;
|
|
header->res.count = (isect << SECTOR_SHIFT) - header->args.offset;
|
|
}
|
|
}
|
|
out:
|
|
out:
|
|
- bl_submit_bio(READ, bio);
|
|
|
|
|
|
+ bl_submit_bio(bio);
|
|
blk_finish_plug(&plug);
|
|
blk_finish_plug(&plug);
|
|
put_parallel(par);
|
|
put_parallel(par);
|
|
return PNFS_ATTEMPTED;
|
|
return PNFS_ATTEMPTED;
|
|
@@ -398,7 +400,7 @@ bl_write_pagelist(struct nfs_pgio_header *header, int sync)
|
|
for (i = pg_index; i < header->page_array.npages; i++) {
|
|
for (i = pg_index; i < header->page_array.npages; i++) {
|
|
if (extent_length <= 0) {
|
|
if (extent_length <= 0) {
|
|
/* We've used up the previous extent */
|
|
/* We've used up the previous extent */
|
|
- bio = bl_submit_bio(WRITE, bio);
|
|
|
|
|
|
+ bio = bl_submit_bio(bio);
|
|
/* Get the next one */
|
|
/* Get the next one */
|
|
if (!ext_tree_lookup(bl, isect, &be, true)) {
|
|
if (!ext_tree_lookup(bl, isect, &be, true)) {
|
|
header->pnfs_error = -EINVAL;
|
|
header->pnfs_error = -EINVAL;
|
|
@@ -427,7 +429,7 @@ bl_write_pagelist(struct nfs_pgio_header *header, int sync)
|
|
|
|
|
|
header->res.count = header->args.count;
|
|
header->res.count = header->args.count;
|
|
out:
|
|
out:
|
|
- bl_submit_bio(WRITE, bio);
|
|
|
|
|
|
+ bl_submit_bio(bio);
|
|
blk_finish_plug(&plug);
|
|
blk_finish_plug(&plug);
|
|
put_parallel(par);
|
|
put_parallel(par);
|
|
return PNFS_ATTEMPTED;
|
|
return PNFS_ATTEMPTED;
|