pkgsrc/sysutils/lsof/patches/patch-ad

125 lines
3.2 KiB
Text

$NetBSD: patch-ad,v 1.14 2007/11/21 11:01:55 apb Exp $
--- dialects/n+obsd/dnode.c.orig 2007-04-24 18:22:06.000000000 +0200
+++ 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;
@@ -414,7 +422,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 +457,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 +479,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 +640,7 @@ process_overlaid_node:
}
+#ifndef NOLOCKF
if ((lff = i.i_lockf)) {
/*
@@ -667,6 +689,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 +923,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 +1049,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 +1258,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)