Side note: I think I've found a real potential lockup bug in fs/namespace.c, but afaik it could only trigger with the RT patches.
I'm looking at what lxsetattr() does, since you had that lxsetattr-only lockup. I doubt it's really related to lxsetattr(), but whatever. The generic code does that mnt_want_write/mnt_drop_write dance adound the call to setxattr, and that in turn does while (ACCESS_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD) cpu_relax(); with preemption explicitly disabled. It's waitingo for mnt_make_readonly() to go away if it is racing with it. But mnt_make_readonly() doesn't actually explicitly disable preemption while it sets that MNT_WRITE_HOLD bit. Instead, it depends on lock_mount_hash() to disable preemption for it. Which it does, because it is a seq-writelock, which uses a spinlock, which will disable preemption. Except it won't with the RT patches, I guess. So it looks like you could have:\ - mnt_make_readonly() sets that bit - gets preempted with the RT patches - we run mnt_want_write() on all CPU's, which disables preemption and waits for the bit to be cleared - nothing happens. This is clearly not what happens in your lockup, but it does seem to be a potential issue for the RT kernel. Added Al and Thomas to the cc, for fs/namespace.c and RT kernel respectively. Maybe the RT patches already fix this, I didn't actually check. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/