Date: Wed, 20 Jun 2018 08:05:12 -0700 From: Conrad Meyer <cem@freebsd.org> To: "Bjoern A. Zeeb" <bz@freebsd.org> Cc: src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r335437 - in head: share/man/man4 sys/kern Message-ID: <CAG6CVpX=0VwOjLg-52bCfF=NTzWvv8Ku6ZENjm-GZU-ou1jzgQ@mail.gmail.com> In-Reply-To: <201806200834.w5K8YThd082989@repo.freebsd.org> References: <201806200834.w5K8YThd082989@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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@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 >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAG6CVpX=0VwOjLg-52bCfF=NTzWvv8Ku6ZENjm-GZU-ou1jzgQ>