On Tue, Jun 03, 2014 at 11:36:55PM +0900, J. R. Okajima wrote: > > Hello Al Viro, > > I have a question about spin_unlock(dentry) after lock_parent(dentry). > In lock_parent(dentry), spin_unlock(dentry) is called. And > spin_lock(dentry) is called again when (parent != dentry) is > true. Otherwise, dentry left spin_unlock-ed and lock_parent() returns > NULL. Nope. You are misreading it. Note that in *all* cases the parent is locked. And NULL is returned exactly in the case when that parent is equal to dentry itself. IOW, in all cases, lock_parent(d) returns with d locked and after p = lock_parent(d) either 1) d->d_parent == d and p == NULL, or 2) d->d_parent == p, p != d and p is locked as well. That holds whether we had succeeded with trylock or had to drop and regain the lock on d. > Even in the case of lock_parent() returns NULL, shrink_dentry_list() > calls spin_unlock(dentry). Is it balanced and correct? Yes. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html