svn commit: r186321 - in stable/7/sys: . contrib/pf dev/cxgb kern
Konstantin Belousov
kib at FreeBSD.org
Fri Dec 19 06:47:39 PST 2008
Author: kib
Date: Fri Dec 19 14:47:38 2008
New Revision: 186321
URL: http://svn.freebsd.org/changeset/base/186321
Log:
MFC r185764:
Do drop vm map lock earlier in the sysctl_kern_proc_vmmap(), to avoid
locking a vnode while having vm map locked.
Approved by: re (kensmith)
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/cxgb/ (props changed)
stable/7/sys/kern/kern_proc.c
Modified: stable/7/sys/kern/kern_proc.c
==============================================================================
--- stable/7/sys/kern/kern_proc.c Fri Dec 19 14:33:29 2008 (r186320)
+++ stable/7/sys/kern/kern_proc.c Fri Dec 19 14:47:38 2008 (r186321)
@@ -1413,13 +1413,32 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_A
lobj = tobj;
}
+ kve->kve_start = (void*)entry->start;
+ kve->kve_end = (void*)entry->end;
+ kve->kve_offset = (off_t)entry->offset;
+
+ if (entry->protection & VM_PROT_READ)
+ kve->kve_protection |= KVME_PROT_READ;
+ if (entry->protection & VM_PROT_WRITE)
+ kve->kve_protection |= KVME_PROT_WRITE;
+ if (entry->protection & VM_PROT_EXECUTE)
+ kve->kve_protection |= KVME_PROT_EXEC;
+
+ if (entry->eflags & MAP_ENTRY_COW)
+ kve->kve_flags |= KVME_FLAG_COW;
+ if (entry->eflags & MAP_ENTRY_NEEDS_COPY)
+ kve->kve_flags |= KVME_FLAG_NEEDS_COPY;
+
+ last_timestamp = map->timestamp;
+ vm_map_unlock_read(map);
+
kve->kve_fileid = 0;
kve->kve_fsid = 0;
freepath = NULL;
fullpath = "";
if (lobj) {
vp = NULL;
- switch(lobj->type) {
+ switch (lobj->type) {
case OBJT_DEFAULT:
kve->kve_type = KVME_TYPE_DEFAULT;
break;
@@ -1470,28 +1489,10 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_A
kve->kve_shadow_count = 0;
}
- kve->kve_start = (void*)entry->start;
- kve->kve_end = (void*)entry->end;
- kve->kve_offset = (off_t)entry->offset;
-
- if (entry->protection & VM_PROT_READ)
- kve->kve_protection |= KVME_PROT_READ;
- if (entry->protection & VM_PROT_WRITE)
- kve->kve_protection |= KVME_PROT_WRITE;
- if (entry->protection & VM_PROT_EXECUTE)
- kve->kve_protection |= KVME_PROT_EXEC;
-
- if (entry->eflags & MAP_ENTRY_COW)
- kve->kve_flags |= KVME_FLAG_COW;
- if (entry->eflags & MAP_ENTRY_NEEDS_COPY)
- kve->kve_flags |= KVME_FLAG_NEEDS_COPY;
-
strlcpy(kve->kve_path, fullpath, sizeof(kve->kve_path));
if (freepath != NULL)
free(freepath, M_TEMP);
- last_timestamp = map->timestamp;
- vm_map_unlock_read(map);
error = SYSCTL_OUT(req, kve, sizeof(*kve));
vm_map_lock_read(map);
if (error)
@@ -1578,13 +1579,32 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR
lobj = tobj;
}
+ kve->kve_start = entry->start;
+ kve->kve_end = entry->end;
+ kve->kve_offset = entry->offset;
+
+ if (entry->protection & VM_PROT_READ)
+ kve->kve_protection |= KVME_PROT_READ;
+ if (entry->protection & VM_PROT_WRITE)
+ kve->kve_protection |= KVME_PROT_WRITE;
+ if (entry->protection & VM_PROT_EXECUTE)
+ kve->kve_protection |= KVME_PROT_EXEC;
+
+ if (entry->eflags & MAP_ENTRY_COW)
+ kve->kve_flags |= KVME_FLAG_COW;
+ if (entry->eflags & MAP_ENTRY_NEEDS_COPY)
+ kve->kve_flags |= KVME_FLAG_NEEDS_COPY;
+
+ last_timestamp = map->timestamp;
+ vm_map_unlock_read(map);
+
kve->kve_fileid = 0;
kve->kve_fsid = 0;
freepath = NULL;
fullpath = "";
if (lobj) {
vp = NULL;
- switch(lobj->type) {
+ switch (lobj->type) {
case OBJT_DEFAULT:
kve->kve_type = KVME_TYPE_DEFAULT;
break;
@@ -1635,28 +1655,10 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR
kve->kve_shadow_count = 0;
}
- kve->kve_start = entry->start;
- kve->kve_end = entry->end;
- kve->kve_offset = entry->offset;
-
- if (entry->protection & VM_PROT_READ)
- kve->kve_protection |= KVME_PROT_READ;
- if (entry->protection & VM_PROT_WRITE)
- kve->kve_protection |= KVME_PROT_WRITE;
- if (entry->protection & VM_PROT_EXECUTE)
- kve->kve_protection |= KVME_PROT_EXEC;
-
- if (entry->eflags & MAP_ENTRY_COW)
- kve->kve_flags |= KVME_FLAG_COW;
- if (entry->eflags & MAP_ENTRY_NEEDS_COPY)
- kve->kve_flags |= KVME_FLAG_NEEDS_COPY;
-
strlcpy(kve->kve_path, fullpath, sizeof(kve->kve_path));
if (freepath != NULL)
free(freepath, M_TEMP);
- last_timestamp = map->timestamp;
- vm_map_unlock_read(map);
/* Pack record size down */
kve->kve_structsize = offsetof(struct kinfo_vmentry, kve_path) +
strlen(kve->kve_path) + 1;
More information about the svn-src-stable
mailing list