Linux.ChinaUnix.net
ChinaUnix | Linux首页 | 新闻 | 博客 | 文章 | 专栏 | 新手 | 方案 | 图书 | 下载 | 人才 | 手册 | wiki | 搜索     
Linux论坛
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


奥运快报: 
奥运热点:
 

Kernel Bug-Vulnerability-Comment library
首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
sisi8408 (linux八哥)
风云使者




UID:509266
注册:2006-12-22
最后登录: 2008-07-28
帖子:617
精华:0

可用积分:567 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[资料] [站内短信] [Blog]


顶部
31楼 发表于 2007-8-24 09:41 


int ocfs2_node_map_iterate(struct ocfs2_super *osb,
                           struct ocfs2_node_map *map,
                           int idx)
{
        int i = idx;

        idx = O2NM_INVALID_NODE_NUM;
        spin_lock(&osb->node_map_lock);
        if ((i != O2NM_INVALID_NODE_NUM) &&
            (i >= 0) &&
            (i < map->num_nodes)) {
            /*
         * linux-2.6.20.7/fs/ocfs2/heartbeat.c
         *
         * ¥1
         *
         * oversight bitops of arch version by linux
             */
                while (i < map->num_nodes) {
                        if (test_bit(i, map->map)) {
                                idx = i;
                                break;
                        }
                        i++;
                }
        }
        spin_unlock(&osb->node_map_lock);
        return idx;
}




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

东直门外大街
张字85号
丁字96号

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
sisi8408 (linux八哥)
风云使者




UID:509266
注册:2006-12-22
最后登录: 2008-07-28
帖子:617
精华:0

可用积分:567 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[资料] [站内短信] [Blog]


顶部
32楼 发表于 2007-8-24 09:45 


int vfs_rmdir(struct inode *dir, struct dentry *dentry)
{
        int error = may_delete(dir, dentry, 1);

        if (error)
                return error;

        if (!dir->i_op || !dir->i_op->rmdir)
                return -EPERM;

        DQUOT_INIT(dir);

        mutex_lock(&dentry->d_inode->i_mutex);
        dentry_unhash(dentry);
        if (d_mountpoint(dentry))
                error = -EBUSY;
        else {
                error = security_inode_rmdir(dir, dentry);
                if (!error) {
                        error = dir->i_op->rmdir(dir, dentry);
                        if (!error)
                                dentry->d_inode->i_flags |= S_DEAD;
                }
        }
        mutex_unlock(&dentry->d_inode->i_mutex);
        if (!error) {

/*
* linux-2.6.20.7/fs/namei.c
*
* potentially trigger-1
*/
                d_delete(dentry);
        }
        dput(dentry);

        return error;
}



void d_delete(struct dentry * dentry)
{
        int isdir = 0;
        /*
         * Are we the only user?
         */
        spin_lock(&dcache_lock);
        spin_lock(&dentry->d_lock);
        isdir = S_ISDIR(dentry->d_inode->i_mode);
       
        if (atomic_read(&dentry->d_count) == 1) {
                dentry_iput(dentry);
                fsnotify_nameremove(dentry, isdir);

                /* remove this and other inotify debug checks after 2.6.18 */
                dentry->d_flags &= ~DCACHE_INOTIFY_PARENT_WATCHED;

/*
* linux-2.6.20.7/fs/dcache.c
*
* potentially trigger-2
*/
                return;
        }

        if (!d_unhashed(dentry))
                __d_drop(dentry);

        spin_unlock(&dentry->d_lock);
        spin_unlock(&dcache_lock);

        fsnotify_nameremove(dentry, isdir);
}



void dput(struct dentry *dentry)
{
        if (!dentry)
                return;

repeat:
        if (atomic_read(&dentry->d_count) == 1)
                might_sleep();
       
        if (!atomic_dec_and_lock(&dentry->d_count, &dcache_lock))
                return;

/*
* linux-2.6.20.7/fs/dcache.c
*
* ¥6
* potentially race @ here
*/
        spin_lock(&dentry->d_lock);
       
        if (atomic_read(&dentry->d_count)) {
                spin_unlock(&dentry->d_lock);
                spin_unlock(&dcache_lock);
                return;
        }

        /*
         * AV: ->d_delete() is _NOT_ allowed to block now.
         */
        if (dentry->d_op && dentry->d_op->d_delete) {
                if (dentry->d_op->d_delete(dentry))
                        goto unhash_it;
        }

        /* Unreachable? Get rid of it */
        if (d_unhashed(dentry))
                goto kill_it;
       
        if (list_empty(&dentry->d_lru)) {
                  dentry->d_flags |= DCACHE_REFERENCED;
                  list_add(&dentry->d_lru, &dentry_unused);
                  dentry_stat.nr_unused++;
          }
        spin_unlock(&dentry->d_lock);
        spin_unlock(&dcache_lock);
        return;

unhash_it:
        __d_drop(dentry);

kill_it: {
                struct dentry *parent;

                /* If dentry was on d_lru list,
                 * delete it from there
                 */
                  if (!list_empty(&dentry->d_lru)) {
                          list_del(&dentry->d_lru);
                          dentry_stat.nr_unused--;
                  }
                  list_del(&dentry->d_u.d_child);
                dentry_stat.nr_dentry--;        /* For d_free, below */
               
                /* drops the locks,
                 * at that point nobody can reach this dentry
                 */
                dentry_iput(dentry);
               
                parent = dentry->d_parent;
                d_free(dentry);
               
                if (dentry == parent)
                        return;
                dentry = parent;
                goto repeat;
        }
}




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

东直门外大街
张字85号
丁字96号

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-09-05
帖子:5754
精华:14

可用积分:6848 (富足长乐)
信誉积分:100
专家积分:58 (本版:0)
空间积分:0
推广积分:0

来自:东城
状态:...保密...

[资料] [站内短信] [Blog]


顶部
33楼 发表于 2007-8-24 10:45 
你说的问题(BUG)怎么存在了?请详细解释好吗。

void dput(struct dentry *dentry)
{
        if (!dentry)
                return;

repeat:
        if (atomic_read(&dentry->d_count) == 1)
                might_sleep();
      
        if (!atomic_dec_and_lock(&dentry->d_count, &dcache_lock))
                return;

/*
* linux-2.6.20.7/fs/dcache.c
*
* ¥6
* potentially race @ here
*/
        spin_lock(&dentry->d_lock);
      
        if (atomic_read(&dentry->d_count)) {
                spin_unlock(&dentry->d_lock);
                spin_unlock(&dcache_lock);
                return;
        }

        /*
         * AV: ->d_delete() is _NOT_ allowed to block now.
         */
        if (dentry->d_op && dentry->d_op->d_delete) {
                if (dentry->d_op->d_delete(dentry))
                        goto unhash_it;
        }

        /* Unreachable? Get rid of it */
        if (d_unhashed(dentry))
                goto kill_it;
      
        if (list_empty(&dentry->d_lru)) {
                  dentry->d_flags |= DCACHE_REFERENCED;
                  list_add(&dentry->d_lru, &dentry_unused);
                  dentry_stat.nr_unused++;
          }
        spin_unlock(&dentry->d_lock);
        spin_unlock(&dcache_lock);
        return;

unhash_it:
        __d_drop(dentry);

kill_it: {
                struct dentry *parent;

                /* If dentry was on d_lru list,
                 * delete it from there
                 */
                  if (!list_empty(&dentry->d_lru)) {
                          list_del(&dentry->d_lru);
                          dentry_stat.nr_unused--;
                  }
                  list_del(&dentry->d_u.d_child);
                dentry_stat.nr_dentry--;        /* For d_free, below */
               
                /* drops the locks,
                 * at that point nobody can reach this dentry
                 */
                dentry_iput(dentry);
               
                parent = dentry->d_parent;
                d_free(dentry);
               
                if (dentry == parent)
                        return;
                dentry = parent;
                goto repeat;
        }
}




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
sisi8408 (linux八哥)
风云使者




UID:509266
注册:2006-12-22
最后登录: 2008-07-28
帖子:617
精华:0

可用积分:567 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[资料] [站内短信] [Blog]


顶部
34楼 发表于 2007-8-24 11:22 
回复 #33 思一克 的帖子



        if (!error) {
                d_delete(dentry);
/*
*  d_delete return potentially without releasing dcache_lock & dentry->d_lock
*/
        }
/*
* however dput at least try to get dentry->d_lock
*/
        dput(dentry);


/*
* yeah, these codes used everyday after bootstrap,
* why not heard bloat???
*/




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

东直门外大街
张字85号
丁字96号

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-09-05
帖子:5754
精华:14

可用积分:6848 (富足长乐)
信誉积分:100
专家积分:58 (本版:0)
空间积分:0
推广积分:0

来自:东城
状态:...保密...

[资料] [站内短信] [Blog]


顶部
35楼 发表于 2007-8-24 11:46 
你怎么知道d_delete return potentially without releasing dcache_lock & dentry->d_lock?

我看的是2。6。13版本。和你的应该差不多。

QUOTE:
原帖由 sisi8408 于 2007-8-24 11:22 发表

        if (!error) {
                d_delete(dentry);
/*
*  d_delete return potentially without releasing dcache_lock & dentry->d_lock
*/
        }
/*
* however dput at least try to ...




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-09-05
帖子:5754
精华:14

可用积分:6848 (富足长乐)
信誉积分:100
专家积分:58 (本版:0)
空间积分:0
推广积分:0

来自:东城
状态:...保密...

[资料] [站内短信] [Blog]


顶部
36楼 发表于 2007-8-24 11:57 
我觉得你提出的BUG中的大多数都是不存在的。尤其是在各版本都稳定了的代码中。

QUOTE:
原帖由 思一克 于 2007-8-24 11:46 发表
你怎么知道d_delete return potentially without releasing dcache_lock & dentry->d_lock?

我看的是2。6。13版本。和你的应该差不多。





您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
sisi8408 (linux八哥)
风云使者




UID:509266
注册:2006-12-22
最后登录: 2008-07-28
帖子:617
精华:0

可用积分:567 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[资料] [站内短信] [Blog]


顶部
37楼 发表于 2007-8-24 12:56 
天太热,BUG可能躲荫了。
喝杯清茶,回头再看,随手写来,表达个想法,不必当真,呵呵。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

东直门外大街
张字85号
丁字96号

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-09-05
帖子:5754
精华:14

可用积分:6848 (富足长乐)
信誉积分:100
专家积分:58 (本版:0)
空间积分:0
推广积分:0

来自:东城
状态:...保密...

[资料] [站内短信] [Blog]


顶部
38楼 发表于 2007-8-24 13:00 
没有当真。

d_delete中的dentry_iput()会spin_unlock ( ... d_lock)的。

还有,我说的是在版本稳定的代码中不大可能有你说的BUG。但是在驱动中,htimer中你你说的可能是有的。我的6.2.13中没有你贴出的那部分代码,所以没有法看。driver中的我又不懂。

QUOTE:
原帖由 sisi8408 于 2007-8-24 12:56 发表
天太热,BUG可能躲荫了。
喝杯清茶,回头再看,随手写来,表达个想法,不必当真,呵呵。




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
sisi8408 (linux八哥)
风云使者




UID:509266
注册:2006-12-22
最后登录: 2008-07-28
帖子:617
精华:0

可用积分:567 (稍有积蓄)
信誉积分:100
专家积分:0 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

[资料] [站内短信] [Blog]


顶部
39楼 发表于 2007-8-24 13:11 
如果skipjack用的版本疮上了,这里提个醒,不算太罗唆。

哪个版本稳定呐?不好说,看的人多一点,可能稍好吧。

BUG,俺叫他八哥,一种好听的鸟,养着乐的。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

东直门外大街
张字85号
丁字96号

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 思一克   帅哥
版主-法师




UID:88701
注册:2003-8-25
最后登录: 2008-09-05
帖子:5754
精华:14

可用积分:6848 (富足长乐)
信誉积分:100
专家积分:58 (本版:0)
空间积分:0
推广积分:0

来自:东城
状态:...保密...

[资料] [站内短信] [Blog]


顶部
40楼 发表于 2007-8-24 13:22 
现在都到2。6。2X了,那么2.6.1X的就是稳定的。
还有,许多内河代码(函数)在版本升级后并没有变化。这部分也是稳定的。要找出其中的BUG是很难的。否则系统就不会运行的那样稳定可靠了。

驱动中BUG应该多些。

QUOTE:
原帖由 sisi8408 于 2007-8-24 13:11 发表
如果skipjack用的版本疮上了,这里提个醒,不算太罗唆。

哪个版本稳定呐?不好说,看的人多一点,可能稍好吧。

BUG,俺叫他八哥,一种好听的鸟,养着乐的。




您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

Email: johnye@webizmail.com
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘

首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »

 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - Linux时代 - Archiver - WAP - TOP

Processed in 0.105159 second(s), 5 queries , Gzip enabled