wheelz's blog

wheelz's picture

请帮助这个可爱的小女孩


这个可爱的小女孩正在死去。她需要您的帮助。

她患有肺动脉高压,需要二十四小时吸氧来维持呼吸,
北京儿童医院诊断为肺纤维化,国内无法医治。
在和睦家医院亚历山大医生的全力帮助下,怡帆有机会
去美国德州儿童医院接受心肺移植手术,但费用十分昂贵。

请大家关注www.yifanfund.com,以及www.help-yifan.org
如果可能,请转载相关的信息到各处网站。

wheelz's picture

新设计的T-shirt,哈哈

简约一点,在附件里,呵呵。

觉得去年设计的太土了。

hacking-linux-0313.png
hacking-linux-forum.png

wheelz's picture

把页面的计数器,去掉吧

现在这个计数器,会弹出广告窗口,代码也有点可疑。
我建议把它去掉吧。

wheelz's picture

什么漏洞被黑的啊?

kernelchina,
你每天进行系统更新吗?

wheelz's picture

mutt: 指定mbox为外部程序的patch

附件,针对1.5.14的。

一个例子:
set pipe_split=yes
set mbox="|/usr/bin/formail -a 'X-MBox-Append: yes'|/usr/bin/procmail"

wheelz's picture

写了一个mutt的patch

我写了一个mutt-1.5.12的patch,增加了一个mbox2-hook

mutt一直有一个特性令我非常不爽。
就是不能根据每个已读邮件的情况,分别保存到不同的邮件夹。
具体说,inbox的已读邮件,可以根据mbox变量的设定,自动保存到另一个邮件夹。
虽然可以使用mbox-hook来指定任意一个邮件夹的已读邮件保存到另外的地方,
但是mbox-hook只能匹配整个邮件夹,也就是说,
一个邮件夹(包括inbox,即spoolfile)里的所有已读邮件将全部保存到同一个地方。
不能根据每个邮件的情况分别处理。
比如,我希望inbox里的我的所有已读邮件,
根据发信人的不同,分别保存到不同的地方。
现有的mutt配置似乎做不到这一点。
当然,你可以在收邮件的时候,就用procmail把邮件分别收到不同的邮件夹,
然后用mbox-hook来处理。
但是这样一来,我在mutt里面就需要转换不同的邮件夹,来查看新邮件,
我就是希望我的所有的新邮件都收到一个固定的邮件夹,即inbox,这样才方便。
于是,照葫芦画瓢,写了这个patch。

mbox2-hook的语法是

mbox2-hook [!]pattern mailbox

可以用[!]pattern来匹配每个邮件,包括所有的匹配方式,如果匹配成功,
该已读邮件将保存在mailbox这个邮件夹。

可以指定多个mbox2-hook,第一个匹配成功的有效。

当然,并不是在所有的邮件夹中都可以使用此hook,
这个匹配只能用在inbox这个邮件夹,或者使用mbox-hook指定的邮件夹。
也就是说,只在可能存放新邮件的邮件夹。
这也可以理解,因为如果所有的邮件夹都可以使用,那岂不是会形成死循环。

举一个例子:

set mbox="+mbox"
mbox-hook =kernel_list =kernel-archive
mbox2-hook '~f @mycompany\.com' =mycompany

第一句表明,inbox的已读邮件将保存在mbox中,
第二句指示,kernel_list邮件夹的已读邮件则保存在kernel-archive,
第三句指示,不管是inbox,还是kernel_list,
如果是从@mycompany.com发来的邮件,则保存在mycompany邮件夹中。

wheelz's picture

建议做一个Linux kernel mailling list archive

还有netdev的。
国内好像还没有。也不枉叫kernelchina啊。

wheelz's picture

Linus修正一个内核的mmap data corrupt bug

Linus最近在lkml中修正了一个mmap文件内容错误的bug。
http://lwn.net/Articles/215868/
http://kerneltrap.org/node/7534
有说明。

但是lwn.net对问题的描述是错误的。

通常情况下,当VM发现一个mmap页面dirty时,
会调用set_page_dirty()设置该page以及所属的buffer head为dirty。
然后,在适当的时候,会通过writepage()写到磁盘上去。

但是,在系统忙的时候,set_page_dirty()和真正的writepage()之间
可能有很长的时间,在这期间,文件系统的某些内部操作可能会
自行把buffer写到磁盘,并清除buffer head的dirty标志。
但此时,page的dirty标志仍然有效。
等到writepage()执行时,会发现page是dirty的,但buffers是clean的,
因此writepage()不会有任何动作。

问题来了,由于这个page是mmaped,如果在文件系统内部操作和
执行writepage()之间,应用程序直接写data到该page的话,就失去
了跟踪,writepage()仍然会看到所有的buffer是clean的,
因此不会把新的数据写入文件,因此这些数据就丢失了。

Linus的patch是修改了clear_page_dirty_for_io(),
也就是在writepage()的时候,查看一下相关的pte是否dirty,
如果是,就重新调用一次set_page_dirty(),从而使得buffer header重新变成dirty。
同时,并把该page设置为只读(这样,如果程序还写,会触发一次page fault再处理)。

因此,writepage()就会写入新数据了。

wheelz's picture

找到一个很酷的革瓦拉的icon

找到一个很酷的革瓦拉的icon,准备用他作我的icon

wheelz's picture

用yum升级FC5到FC6

FC6出来了,于是决定用yum升级我的FC5.

# rpm -ev fedora-release --nodeps
# rpm -Uvh fedora-release-notes-6-3.noarch.rpm
# rpm -Uvh fedora-release-6-4.noarch.rpm
# yum clean all
# yum -y update

很顺利,因为海淀在线访问教育网很快,我用的是ftp.sjtu.edu.cn的mirror,
很快,半小时就下载880M。

中间有几个dep的问题,把相应的rpm包删除即可。

升级完后,感觉并没有什么特别的,大概是因为我的FC5也是每天更新的。

FC6的scim换回libstdc++.so.6了,因此,我的mlterm又重新编译了一下。

Syndicate content