On 05/21/2011 10:11 PM, Al Viro wrote:
> On Fri, May 20, 2011 at 01:44:30PM -0400, Josef Bacik wrote:
>> + if (unlikely(d_need_lookup(dentry))) {
>> + if (nameidata_dentry_drop_rcu(nd, dentry))
>> + return -ECHILD;
>> + dput(dentry);
>> + dentry = NULL;
>> + goto retry;
>
> Yecchhh... How about simple goto unlazy; here instead and doing the rest
> there? Especially since you have the same kind of thing elsewhere in the
> same sucker. It had been bloody painful to untangle that thing; let's not
> add to the rat's nest that still remains...
This is where I was a little confused, which is why I added this code. It
seems that having goto unlazy; will mean that we will come down to this
section
if (unlikely(status <= 0 )) {
if (status < 0) {
dput(dentry);
return status;
}
if (!d_invalidate(dentry)) {
dput(dentry);
dentry = NULL;
need_reval = 1;
goto retry;
}
}
and d_invalidate will unhash us so we won't find our new dentry in the cache
which makes this whole exercise useless. Is there a different way you'd
like
this cleaned up? Thanks,
Josef
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html