Hi Chip,
I am trying to understand what might be going on and why this fix
might be needed, and I'm not making much progress.
You suggest that d_move (or it's caller) must be able to deal with
the target being an "root" dentry (x->d_parent == x). However I
cannot see that this could possibly happen.
(looking at 2.2.18pre21 which should be much the same as any othe
2.2 knfsd..)
The only place that knfsd calls d_move is in d_splice.
Here the "dentry" argument is "target" (just to confuse the innocent)
and this is almost certainly an "root" entry passed in from "splice".
However the "target" argument is "tdentry" which was just created
with d_alloc which has given a parent which is certainly non-NULL,
otherwise we would have an oops much earlier.
So the parent of the "target" is "parent", which is certainly
different from "tdentry", so d_move is *not* being asked to
move something onto a "root" dentry, so the change is not needed.
Did I miss something in the above, or can you in some other way
convince me that d_move needs to handle is_root targets.
Thanks,
NeilBrown
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/