Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1243561
  • 博文数量: 298
  • 博客积分: 10050
  • 博客等级: 上将
  • 技术积分: 3277
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-14 13:36
文章分类
文章存档

2015年(7)

2012年(1)

2010年(5)

2009年(55)

2008年(73)

2007年(160)

我的朋友

分类: LINUX

2007-07-09 21:09:57

如果是修改generic_make_request中修改来实现加密这种方法可循,加密后刷新到块设备的同时,buffers里的数据也变成密文了。因为读也只是解密从设备上新读出来的数据。所以需要保持高速缓存中的应当为明文。
这里如何把bh中的密文改回来呢?
在哪个函数中改回来?commit_write方法之后也不定这些bh都已刷新到设备了。

我的想法是 在generic_make_request中,分配新buffer,让new_bh指向它。
new_bh和原来的bh几乎相同,让原bh所指的数据区内容填充new_bh的数据区内容,再new_bh的数据区加密后将new_bh传给__make_request()提交给驱程。
可是不知道这个new_bh的b_end_io方法如何设置?原bh也被加锁过,在new_bh的io完毕后如何处理,是否只要是io完毕,它依然默认用以前设置的end_buffer_io_sync方法。
 
的建议:
写操作时:

new_bh = alloc_buffer_head(GFP_BUFFER);
new_bh->b_page = alloc_page(GFP_BUFFER);

do data copy, data encryption and set various fields of new_bh

new_bh->b_private = old_bh;
new_bh->b_end_io = my_end_write_io;

void my_end_write_io(struct buffer_head *bh, int uptodate)
{
struct buffer_head *old = h->b_private;
__free_page(bh->b_page)
free_buffer_head(bh);
old->b_end_io(old, uptodate);
}



读操作时:

new_bh = alloc_buffer_head(GFP_BUFFER);
new_bh->b_page = alloc_page(GFP_BUFFER);

set various fields of new_bh

new_bh->b_private = old_bh;
new_bh->b_end_io = my_end_read_io;

void my_end_read_io(struct buffer_head *bh, int uptodate)
{
struct buffer_head *old = h->b_private;

do data decryption, copy

__free_page(bh->b_page)
free_buffer_head(bh);
old->b_end_io(old, uptodate);
}


实现可以参考一下create_bounce
 
为啥最近Linuxforum的论坛打开的很慢呢?

 
阅读(1321) | 评论(1) | 转发(0) |
0

上一篇:还是会寂寞

下一篇:加解密技术路线初稿

给主人留下些什么吧!~~