On Tue, Apr 19, 2011 at 04:54:32PM +0200, Welterlen Benoit wrote:
> I have a bug with OCFS through configfs : to illustrate this, try :
> 
> while true ; do ls -l /sys/kernel/config/cluster/ocfs2/heartbeat ; done&
> 
> while true ; do echo 31>  
> /sys/kernel/config/cluster/ocfs2/heartbeat/dead_threshold ; done&

        Interesting!

> RIP  [<ffffffffa01fd214>] configfs_readdir+0xf4/0x230 [configfs]
<snip>
>   #8 [ffff880c6c8b3ee0] vfs_readdir at ffffffff8116c120
>   #9 [ffff880c6c8b3f30] sys_getdents at ffffffff8116c2a9

        I presume this is in the process that is ls(1)ing the directory?

> I've looked into the source code, but I found that a lock is useless :
> /* Only sets a new threshold if there are no active regions.
>   *
>   * No locking or otherwise interesting code is required for reading
>   * o2hb_dead_threshold as it can't change once regions are active and
>   * it's not interesting to anyone until then anyway. */
> static void o2hb_dead_threshold_set(unsigned int threshold)
> {
>          if (threshold > O2HB_MIN_DEAD_THRESHOLD) {
>                  spin_lock(&o2hb_live_lock);
>                  if (list_empty(&o2hb_all_regions))
>                          o2hb_dead_threshold = threshold;
>                  spin_unlock(&o2hb_live_lock);
>          }
> }

        You're too late here.  This is in the echo process (bash,
really).  getdents() isn't happening.
        The problem is almost certainly in configfs.  It's a race
between setup and teardown of the virtual attribute files.  If anyone
else has a cycle to look at it, great, otherwise I'll try to get to it
later this week.

Joel
-- 

"In a crisis, don't hide behind anything or anybody. They're going
 to find you anyway."
        - Paul "Bear" Bryant

                        http://www.jlbec.org/
                        jl...@evilplan.org

_______________________________________________
Ocfs2-users mailing list
Ocfs2-users@oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-users

Reply via email to