Re: [PATCH 13/14] d_path: prepend_path() is unlikely to return non-zero

From: Al Viro
Date: Mon Jun 28 2021 - 00:15:21 EST


On Mon, Jun 28, 2021 at 03:28:19AM +0000, Justin He wrote:

> > On which loads? 1 here is "mount/dentry pair is in somebody
> > else's namespace or outside of the subtree we are chrooted
> > into". IOW, what's calling d_path() on your setup?
>
> No special loads, merely collecting the results after kernel boots up.
>
> To narrow down, I tested your branch [1] *without* my '%pD' series:
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git/log/?h=work.d_path
>
> The result is the same after kernel boots up.

IOW, you get 1 in call from d_absolute_path(). And the same commit has
- if (prepend_path(path, &root, &b) > 1)
+ if (unlikely(prepend_path(path, &root, &b) > 1))
there. What's the problem?

If you want to check mispredictions, put printks at the statements
under those if (unlikely(...)) and see how often do they trigger...