X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=kernel%2Fdrivers%2Fstaging%2Flustre%2Flustre%2Fllite%2Flloop.c;fp=kernel%2Fdrivers%2Fstaging%2Flustre%2Flustre%2Fllite%2Flloop.c;h=fed50d538a414ca4534d36eaea57e9649db8d4d5;hb=e09b41010ba33a20a87472ee821fa407a5b8da36;hp=413a8408e3f5b97cb74518a82aaeb3e25d2b8d0d;hpb=f93b97fd65072de626c074dbe099a1fff05ce060;p=kvmfornfv.git diff --git a/kernel/drivers/staging/lustre/lustre/llite/lloop.c b/kernel/drivers/staging/lustre/lustre/llite/lloop.c index 413a8408e..fed50d538 100644 --- a/kernel/drivers/staging/lustre/lustre/llite/lloop.c +++ b/kernel/drivers/staging/lustre/lustre/llite/lloop.c @@ -162,7 +162,7 @@ static int max_loop = MAX_LOOP_DEFAULT; static struct lloop_device *loop_dev; static struct gendisk **disks; static struct mutex lloop_mutex; -static void *ll_iocontrol_magic = NULL; +static void *ll_iocontrol_magic; static loff_t get_loop_size(struct lloop_device *lo, struct file *file) { @@ -315,7 +315,6 @@ static unsigned int loop_get_bio(struct lloop_device *lo, struct bio **req) if (page_count + (*bio)->bi_vcnt > LLOOP_MAX_SEGMENTS) break; - page_count += (*bio)->bi_vcnt; count++; bio = &(*bio)->bi_next; @@ -334,12 +333,14 @@ static unsigned int loop_get_bio(struct lloop_device *lo, struct bio **req) return count; } -static void loop_make_request(struct request_queue *q, struct bio *old_bio) +static blk_qc_t loop_make_request(struct request_queue *q, struct bio *old_bio) { struct lloop_device *lo = q->queuedata; int rw = bio_rw(old_bio); int inactive; + blk_queue_split(q, &old_bio, q->bio_split); + if (!lo) goto err; @@ -363,20 +364,23 @@ static void loop_make_request(struct request_queue *q, struct bio *old_bio) goto err; } loop_add_bio(lo, old_bio); - return; + return BLK_QC_T_NONE; err: - cfs_bio_io_error(old_bio, old_bio->bi_iter.bi_size); + bio_io_error(old_bio); + return BLK_QC_T_NONE; } - static inline void loop_handle_bio(struct lloop_device *lo, struct bio *bio) { int ret; + ret = do_bio_lustrebacked(lo, bio); while (bio) { struct bio *tmp = bio->bi_next; + bio->bi_next = NULL; - cfs_bio_endio(bio, bio->bi_iter.bi_size, ret); + bio->bi_error = ret; + bio_endio(bio); bio = tmp; } } @@ -427,6 +431,7 @@ static int loop_thread(void *data) wait_event(lo->lo_bh_wait, loop_active(lo)); if (!atomic_read(&lo->lo_pending)) { int exiting = 0; + spin_lock_irq(&lo->lo_lock); exiting = (lo->lo_state == LLOOP_RUNDOWN); spin_unlock_irq(&lo->lo_lock); @@ -840,9 +845,9 @@ out_mem4: out_mem3: while (i--) put_disk(disks[i]); - OBD_FREE(disks, max_loop * sizeof(*disks)); + kfree(disks); out_mem2: - OBD_FREE(loop_dev, max_loop * sizeof(*loop_dev)); + kfree(loop_dev); out_mem1: unregister_blkdev(lloop_major, "lloop"); ll_iocontrol_unregister(ll_iocontrol_magic); @@ -863,8 +868,8 @@ static void lloop_exit(void) unregister_blkdev(lloop_major, "lloop"); - OBD_FREE(disks, max_loop * sizeof(*disks)); - OBD_FREE(loop_dev, max_loop * sizeof(*loop_dev)); + kfree(disks); + kfree(loop_dev); } module_init(lloop_init);