trying to use bio
parent
d7c582b416
commit
11f555de13
28
sftl.c
28
sftl.c
|
@ -187,6 +187,14 @@ static void __exit sftl_exit(void)
|
|||
module_init(sftl_init);
|
||||
module_exit(sftl_exit);
|
||||
|
||||
static void endFunc_tryKM2(struct bio *bb, int err)
|
||||
{
|
||||
if (bb->bi_private)
|
||||
{
|
||||
complete((struct completion*)(bb->bi_private));
|
||||
}
|
||||
}
|
||||
|
||||
static struct sftl_dev *add_device(char *devname)
|
||||
{
|
||||
const fmode_t mode = FMODE_READ | FMODE_WRITE | FMODE_EXCL;
|
||||
|
@ -261,7 +269,25 @@ static struct sftl_dev *add_device(char *devname)
|
|||
add_disk(dev->gd);
|
||||
|
||||
/* Read maps from the device */
|
||||
|
||||
struct bio *bb;
|
||||
DECLARE_COMPLETION_ONSTACK(waithandle);
|
||||
bb = bio_map_kern(bdev->bd_disk->queue, buf, phy_sz, GFP_KERNEL);
|
||||
if (IS_ERR(bb))
|
||||
{
|
||||
vfree(buf);
|
||||
return;
|
||||
}
|
||||
bb->bi_sector = 0;
|
||||
bb->bi_bdev = bdev;
|
||||
bb->bi_private = &waithandle;
|
||||
bb->bi_end_io = endFunc_tryKM2;
|
||||
submit_bio(READ, bb);
|
||||
if (!(bb->bi_flags & (1 << BIO_UPTODATE)))
|
||||
{
|
||||
bio_put(bb);
|
||||
vfree(buf);
|
||||
return;
|
||||
}
|
||||
|
||||
list_add(&dev->list, &sftl_device_list);
|
||||
INFO("%s: translating %s; %d sectors", dev->gd->disk_name, devname, dev->size);
|
||||
|
|
Loading…
Reference in New Issue