$NetBSD: patch-ad,v 1.16 2017/08/30 10:41:24 kamil Exp $ --- dialects/n+obsd/dnode.c.orig 2007-04-24 16:22:06.000000000 +0000 +++ dialects/n+obsd/dnode.c @@ -38,6 +38,9 @@ static char *rcsid = "$Id: dnode.c,v 1.3 #include "lsof.h" +#if __NetBSD_Version__ > 399001800 +#define NOLOCKF +#endif #if defined(HAS_DINODE_U) #define DINODE_U dinode_u @@ -194,12 +197,17 @@ process_node(va) unsigned char ns; unsigned char rdevs; char *ep, *ty; +#ifndef NOLOCKF struct lockf lf, *lff, *lfp; +#endif struct inode i; struct mfsnode m; +#if defined(HASTMPFS) + struct tmpfs_node tmp; +#endif /* defined(HASTMPFS) */ struct nfsnode n; enum nodetype {NONODE, CDFSNODE, DOSNODE, EXT2NODE, FDESCNODE, INODE, - KERNFSNODE, MFSNODE, NFSNODE, PFSNODE, PTYFSNODE} nty; + KERNFSNODE, MFSNODE, NFSNODE, PFSNODE, PTYFSNODE, TMPFSNODE} nty; enum vtype type; struct vnode *v, vb; struct l_vfs *vfs; @@ -276,6 +284,11 @@ process_node(va) #if defined(HASPTYFS) struct ptyfsnode pt; +#if __NetBSD_Version__ >= 499006200 +#define specinfo specnode +#define vu_specinfo vu_specnode +#define si_rdev sn_rdev +#endif struct specinfo si; #endif /* defined(HASPTYFS) */ @@ -414,7 +427,7 @@ process_overlaid_node: */ if (!v->v_data || kread((KA_T)v->v_data, (char *)&kn, sizeof(kn))) { - if (v->v_type != VDIR || !(v->v_flag && VROOT)) { + if (v->v_type != VDIR || !(v->VNODE_VFLAG && NCACHE_VROOT)) { (void) snpf(Namech, Namechl, "can't read kernfs_node at: %s", print_kptr((KA_T)v->v_data, (char *)NULL, 0)); @@ -449,7 +462,7 @@ process_overlaid_node: * size are fixed; otherwise, safely stat() the file to get the * inode number and size. */ - if (v->v_type == VDIR && (v->v_flag & VROOT)) { + if (v->v_type == VDIR && (v->VNODE_VFLAG & NCACHE_VROOT)) { (void) snpf(Namech, Namechl, "%s", _PATH_KERNFS); ksb.st_ino = (ino_t)2; ksb.st_size = DEV_BSIZE; @@ -471,6 +484,19 @@ process_overlaid_node: nty = MFSNODE; break; +#if defined(HASTMPFS) + case VT_TMPFS: + if (!v->v_data + || kread((KA_T)v->v_data, (char *)&tmp, sizeof(tmp))) { + (void) snpf(Namech, Namechl, "can't read tmpfs_node at: %s", + print_kptr((KA_T)v->v_data, (char *)NULL, 0)); + enter_nm(Namech); + return; + } + nty = TMPFSNODE; + break; +#endif /* defined(HASTMPFS) */ + #if defined(HASMSDOSFS) case VT_MSDOSFS: if (!v->v_data @@ -619,6 +645,7 @@ process_overlaid_node: } +#ifndef NOLOCKF if ((lff = i.i_lockf)) { /* @@ -667,6 +694,7 @@ process_overlaid_node: break; } while ((lfp = lf.lf_next) && lfp != lff); } +#endif break; default: if (v->v_type == VBAD || v->v_type == VNON) @@ -900,6 +928,13 @@ process_overlaid_node: break; #endif /* defined(HASPTYFS) */ +#if defined(HASTMPFS) + case TMPFSNODE: + Lf->inode = (INODETYPE)tmp.tn_id; + Lf->inp_ty = 1; + break; +#endif /* defined(HASTMPFS) */ + } /* @@ -1019,6 +1054,13 @@ process_overlaid_node: Lf->sz_def = 1; break; +#if defined(HASTMPFS) + case TMPFSNODE: + Lf->sz = (SZOFFTYPE)tmp.tn_size; + Lf->sz_def = 1; + break; +#endif /* defined(HASTMPFS) */ + #if defined(HASEXT2FS) case EXT2NODE: # if defined(HASI_E2FS_PTR) @@ -1221,6 +1263,9 @@ process_overlaid_node: Lf->dev_def = Lf->rdev_def = 0; (void) snpf(Namech, Namechl, "%#x", m.mfs_baseoff); enter_dev_ch("memory"); + } else if (nty == TMPFSNODE) { + Lf->dev_def = Lf->rdev_def = 0; + enter_dev_ch("memory"); } #if defined(HASPROCFS) @@ -1262,11 +1307,15 @@ process_overlaid_node: (void) snpf(ep, sz, "/%d/fpregs", p.pfs_pid); ty = "PFPR"; break; + +# if defined(Pctl) case Pctl: ep = endnm(&sz); (void) snpf(ep, sz, "/%d/ctl", p.pfs_pid); ty = "PCTL"; break; +# endif /* defined(Pctl) */ + case Pstatus: ep = endnm(&sz); (void) snpf(ep, sz, "/%d/status", p.pfs_pid);