操作页中某几位 && 块设备 max_sectors

环境 : 2.6.18内核

 

1

调用blk_queue_max_sectors函数,可以设置我们自己的块设备queue的最大sectors,(将来bio_add_page)时,需要用到这个值,最近突然发现调用这个函数时,max_sector的上限是BLK_DEF_MAX_SECTORS(1024)。

       这同时印证了 ldd 将bio一节时,说bio 容纳的最大页数是128页

 

2

操作页中某几位小函数实现:

 

#define UNSIGN_LONG_SHIFT 6

#define UNSIGN_LONG_MASK (1 << UNSIGN_LONG_SHIFT -1)

#define UNIT_PER_GRANU_BIT      2       /* is pow of 3, 2^l = 8bit */

#define OFFSET_IN_UNIT  (UNSIGN_LONG_SHIFT - UNIT_PER_GRANU_BIT)

#define UNIT_PER_GRANU  (1 << UNIT_PER_GRANU_BIT)

#define UNIT_PER_MASK   (((INDEX_TYPE)1 << UNIT_PER_GRANU) - 1)

#define INDEX_TYPE      __u64

 

int get_unit_per_granu(void *p, __u32 offset)

{

        __u32 shift = ((offset << UNIT_PER_GRANU_BIT)& UNSIGN_LONG_MASK);

        INDEX_TYPE *pone = (INDEX_TYPE *)p + (offset >> OFFSET_IN_UNIT);

 

        return (*pone >> shift) & UNIT_PER_MASK;

}

 

void set_unit_per_granu(void *p, __u32 offset, __u32 value)

{

        __u32 shift = ((offset << UNIT_PER_GRANU_BIT)& UNSIGN_LONG_MASK);

        INDEX_TYPE *pone = (INDEX_TYPE *)p + (offset >> OFFSET_IN_UNIT);

        INDEX_TYPE inval = (INDEX_TYPE)value;

        INDEX_TYPE mask = UNIT_PER_MASK << shift;

 

        *pone &= ~mask;

        *pone |= mask & (inval << shift);

}

 

void set_unit_per_granu_bit(void *p, __u32 offset, __u32 bit)

{

        __u32 shift = ((offset << UNIT_PER_GRANU_BIT)& UNSIGN_LONG_MASK);

        INDEX_TYPE *pone = (INDEX_TYPE *)p + (offset >> OFFSET_IN_UNIT);

 

        set_bit((shift + bit), pone);

}

 

void clear_unit_per_granu_bit(void *p, __u32 offset, __u32 bit)

{

        __u32 shift = ((offset << UNIT_PER_GRANU_BIT)& UNSIGN_LONG_MASK);

        INDEX_TYPE *pone = (INDEX_TYPE *)p + (offset >> OFFSET_IN_UNIT);

 

        clear_bit((shift + bit), pone);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值