trying to use bio

master
Vitaliy Filippov 2013-05-14 13:56:45 +04:00
parent d7c582b416
commit 11f555de13
1 changed files with 27 additions and 1 deletions

28
sftl.c
View File

@ -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);