svn commit: r335437 - in head: share/man/man4 sys/kern

Conrad Meyer cem at freebsd.org
Wed Jun 20 15:05:21 UTC 2018


Hi Bjoern,

It might be nice to be explicit that the vnode was not in the
namecache (in the ddb output) rather than failing silently.  The name
of the ddb method does not suggest that only entries in the namecache
may be found, and users (developers :)) do not always read manual
pages thoroughly.

All the best,
Conrad


On Wed, Jun 20, 2018 at 1:34 AM, Bjoern A. Zeeb <bz at freebsd.org> wrote:
> Author: bz
> Date: Wed Jun 20 08:34:29 2018
> New Revision: 335437
> URL: https://svnweb.freebsd.org/changeset/base/335437
>
> Log:
>   Sometimes it is helpful to get the path for a vnode.
>   Implement a ddb function walking the namecache to do this.
>
>   Reviewed by:          jhb, mjg
>   Inspired by:          gdb macro from jhb (old version)
>   Sponsored by:         iXsystems, Inc.
>   Differential Revision:        https://reviews.freebsd.org/D14898
>
> Modified:
>   head/share/man/man4/ddb.4
>   head/sys/kern/vfs_cache.c
>
> Modified: head/share/man/man4/ddb.4
> ==============================================================================
> --- head/share/man/man4/ddb.4   Wed Jun 20 07:02:19 2018        (r335436)
> +++ head/share/man/man4/ddb.4   Wed Jun 20 08:34:29 2018        (r335437)
> @@ -60,7 +60,7 @@
>  .\"
>  .\" $FreeBSD$
>  .\"
> -.Dd August 24, 2017
> +.Dd June 20, 2018
>  .Dt DDB 4
>  .Os
>  .Sh NAME
> @@ -1121,6 +1121,11 @@ header file.
>  .Pp
>  .It Ic show Cm vnodebufs Ar addr
>  Shows clean/dirty buffer lists of the vnode located at
> +.Ar addr .
> +.\"
> +.Pp
> +.It Ic show Cm vpath Ar addr
> +Walk the namecache to lookup the pathname of the vnode located at
>  .Ar addr .
>  .\"
>  .Pp
>
> Modified: head/sys/kern/vfs_cache.c
> ==============================================================================
> --- head/sys/kern/vfs_cache.c   Wed Jun 20 07:02:19 2018        (r335436)
> +++ head/sys/kern/vfs_cache.c   Wed Jun 20 08:34:29 2018        (r335437)
> @@ -37,6 +37,7 @@
>  #include <sys/cdefs.h>
>  __FBSDID("$FreeBSD$");
>
> +#include "opt_ddb.h"
>  #include "opt_ktrace.h"
>
>  #include <sys/param.h>
> @@ -62,6 +63,10 @@ __FBSDID("$FreeBSD$");
>  #include <sys/ktrace.h>
>  #endif
>
> +#ifdef DDB
> +#include <ddb/ddb.h>
> +#endif
> +
>  #include <vm/uma.h>
>
>  SDT_PROVIDER_DECLARE(vfs);
> @@ -2529,3 +2534,54 @@ out:
>         free(fbuf, M_TEMP);
>         return (error);
>  }
> +
> +#ifdef DDB
> +static void
> +db_print_vpath(struct vnode *vp)
> +{
> +
> +       while (vp != NULL) {
> +               db_printf("%p: ", vp);
> +               if (vp == rootvnode) {
> +                       db_printf("/");
> +                       vp = NULL;
> +               } else {
> +                       if (vp->v_vflag & VV_ROOT) {
> +                               db_printf("<mount point>");
> +                               vp = vp->v_mount->mnt_vnodecovered;
> +                       } else {
> +                               struct namecache *ncp;
> +                               char *ncn;
> +                               int i;
> +
> +                               ncp = TAILQ_FIRST(&vp->v_cache_dst);
> +                               if (ncp != NULL) {
> +                                       ncn = ncp->nc_name;
> +                                       for (i = 0; i < ncp->nc_nlen; i++)
> +                                               db_printf("%c", *ncn++);
> +                                       vp = ncp->nc_dvp;
> +                               } else {
> +                                       vp = NULL;
> +                               }
> +                       }
> +               }
> +               db_printf("\n");
> +       }
> +
> +       return;
> +}
> +
> +DB_SHOW_COMMAND(vpath, db_show_vpath)
> +{
> +       struct vnode *vp;
> +
> +       if (!have_addr) {
> +               db_printf("usage: show vpath <struct vnode *>\n");
> +               return;
> +       }
> +
> +       vp = (struct vnode *)addr;
> +       db_print_vpath(vp);
> +}
> +
> +#endif
>


More information about the svn-src-head mailing list