FreeBSD Bugzilla – Attachment 8367 Details for
Bug 17555
fstat(1) doesn't show memory-mapped files
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 2.40 KB, created by
iedowse
on 2000-03-22 20:20:01 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
iedowse
Created:
2000-03-22 20:20:01 UTC
Size:
2.40 KB
patch
obsolete
>--- fstat.c.orig Wed Mar 22 19:33:17 2000 >+++ fstat.c Wed Mar 22 19:56:18 2000 >@@ -74,6 +74,10 @@ > #include <nfs/nfsnode.h> > > >+#include <vm/vm.h> >+#include <vm/vm_map.h> >+#include <vm/vm_object.h> >+ > #include <net/route.h> > #include <netinet/in.h> > #include <netinet/in_systm.h> >@@ -100,6 +104,7 @@ > #define CDIR -2 > #define RDIR -3 > #define TRACE -4 >+#define MMAP -5 > > DEVS *devs; > >@@ -132,6 +137,7 @@ > kvm_t *kd; > > void dofiles __P((struct kinfo_proc *kp)); >+void dommap __P((struct kinfo_proc *kp)); > void vtrans __P((struct vnode *vp, int i, int flag)); > int ufs_filestat __P((struct vnode *vp, struct filestat *fsp)); > int nfs_filestat __P((struct vnode *vp, struct filestat *fsp)); >@@ -246,6 +252,7 @@ > if (p->kp_proc.p_stat == SZOMB) > continue; > dofiles(p); >+ dommap(p); > } > exit(0); > } >@@ -267,6 +274,9 @@ > case TRACE: \ > printf(" tr"); \ > break; \ >+ case MMAP: \ >+ printf(" mmap"); \ >+ break; \ > default: \ > printf(" %4d", i); \ > break; \ >@@ -356,6 +366,65 @@ > dprintf(stderr, > "unknown file type %d for file %d of pid %d\n", > file.f_type, i, Pid); >+ } >+ } >+} >+ >+void >+dommap(kp) >+ struct kinfo_proc *kp; >+{ >+ struct proc *p = &kp->kp_proc; >+ struct vmspace vmspace; >+ vm_map_t map; >+ struct vm_map_entry entry; >+ vm_map_entry_t entryp; >+ struct vm_object object; >+ vm_object_t objp; >+ int prot, fflags; >+ >+ if (!KVM_READ(p->p_vmspace, &vmspace, sizeof(vmspace))) { >+ dprintf(stderr, "can't read vmspace at %p for pid %d\n", >+ (void *)p->p_vmspace, Pid); >+ return; >+ } >+ >+ map = &vmspace.vm_map; >+ >+ for (entryp = map->header.next; entryp != &p->p_vmspace->vm_map.header; >+ entryp = entry.next) { >+ if (!KVM_READ(entryp, &entry, sizeof(entry))) { >+ dprintf(stderr, >+ "can't read vm_map_entry at %p for pid %d\n", >+ (void *)entryp, Pid); >+ return; >+ } >+ >+ if (entry.eflags & MAP_ENTRY_IS_SUB_MAP) >+ continue; >+ >+ if ((objp = entry.object.vm_object) == NULL) >+ continue; >+ >+ for (; objp; objp = object.backing_object) { >+ if (!KVM_READ(objp, &object, sizeof(object))) { >+ dprintf(stderr, >+ "can't read vm_object at %p for pid %d\n", >+ (void *)objp, Pid); >+ return; >+ } >+ } >+ >+ prot = entry.protection; >+ fflags = (prot & VM_PROT_READ ? FREAD : 0) | >+ (prot & VM_PROT_WRITE ? FWRITE : 0); >+ >+ switch (object.type) { >+ case OBJT_VNODE: >+ vtrans((struct vnode *)object.handle, MMAP, fflags); >+ break; >+ default: >+ break; > } > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 17555
:
8366
| 8367