- 论坛徽章:
- 0
|
LDD3中16章,块设备驱动,example中,关于__bio_kmap_atomic不理解 :
/*
* Transfer a single BIO.
*/
static int sbull_xfer_bio(struct sbull_dev *dev, struct bio *bio)
{
int i;
struct bio_vec *bvec;
sector_t sector = bio->bi_sector;
/* Do each segment independently. */
bio_for_each_segment(bvec, bio, i) {
char *buffer = __bio_kmap_atomic(bio, i, KM_USER0);
sbull_transfer(dev, sector, bio_cur_sectors(bio),
buffer, bio_data_dir(bio) == WRITE);
sector += bio_cur_sectors(bio);
__bio_kunmap_atomic(bio, KM_USER0);
}
return 0; /* Always "succeed" */
}
这里对bio的bv_page进行重新映射是为什么,这里的bio中的bv_page不可以直接在内核中访问么?
是因为bio的bv_page是在用户空间映射的,在内存空间需要重新映射么?
|
|