Chandra Seetharaman wrote: Did you see may later revisions on this or Ed's updated handler? In the current kernel we do not need to allocate or manage our own bios. That was a old old hack from when the request did not have a end io. The hack is probably only needed for old distros. It is not needed upstream. For dm based hw handlers you want to do something more like this: http://www.cs.wisc.edu/~michaelc/block/dm/v4/ > static struct bio *get_rdac_bio(struct path *path, unsigned data_size, > bio_end_io_t endio, int rw, struct rdac_handler *h) > { > struct bio *bio; > struct page *page; > struct rdac_private *p; > > bio = bio_alloc(GFP_ATOMIC, 1); > if (!bio) > return NULL; > > if (rw == WRITE) > bio->bi_rw |= (1 << BIO_RW); > bio->bi_bdev = path->dev->bdev; > bio->bi_sector = 0; > bio->bi_end_io = endio; > > p = kmalloc(sizeof(*p), GFP_ATOMIC); > if (!p) > goto bio; > > p->path = path; > p->h = h; > bio->bi_private = p; > page = alloc_page(GFP_ATOMIC); > if (!page) > goto free_private; > > if (bio_add_page(bio, page, data_size, 0) == data_size) > return bio; > > __free_page(page); > free_private: > kfree(p); > bio: > bio_put(bio); > return NULL; > } > > static void rdac_pg_init(struct hw_handler *hwh, unsigned bypassed, > struct path *path) > { > struct rdac_handler *h = hwh->context; > > switch (h->lun) { > case UNINITIALIZED_LUN: > submit_c8_inquiry(h, path); > break; > case UNSUPPORTED_LUN: > dm_pg_init_complete(path, MP_FAIL_PATH); > break; > default: > submit_c9_inquiry(h, path); > } > } > Why not just have userspace check and pass the LUN to the create function? This is not a review comment to do it. I am just asking if it is difficult to gather info in userspace and pass it down? -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel