svn commit: r186563 - in head/sys: compat/linprocfs fs/procfs kern

Konstantin Belousov kib at FreeBSD.org
Mon Dec 29 12:45:11 UTC 2008


Author: kib
Date: Mon Dec 29 12:45:11 2008
New Revision: 186563
URL: http://svn.freebsd.org/changeset/base/186563

Log:
  vm_map_lock_read() does not increment map->timestamp, so we should
  compare map->timestamp with saved timestamp after map read lock is
  reacquired, not with saved timestamp + 1. The only consequence of the +1
  was unconditional lookup of the next map entry, though.
  
  Tested by:	pho
  Approved by:	des
  MFC after:	2 weeks

Modified:
  head/sys/compat/linprocfs/linprocfs.c
  head/sys/fs/procfs/procfs_map.c
  head/sys/kern/kern_proc.c

Modified: head/sys/compat/linprocfs/linprocfs.c
==============================================================================
--- head/sys/compat/linprocfs/linprocfs.c	Mon Dec 29 12:41:32 2008	(r186562)
+++ head/sys/compat/linprocfs/linprocfs.c	Mon Dec 29 12:45:11 2008	(r186563)
@@ -980,7 +980,7 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
 			error = 0;
 			break;
 		}
-		if (last_timestamp + 1 != map->timestamp) {
+		if (last_timestamp != map->timestamp) {
 			/*
 			 * Look again for the entry because the map was
 			 * modified while it was unlocked.  Specifically,

Modified: head/sys/fs/procfs/procfs_map.c
==============================================================================
--- head/sys/fs/procfs/procfs_map.c	Mon Dec 29 12:41:32 2008	(r186562)
+++ head/sys/fs/procfs/procfs_map.c	Mon Dec 29 12:45:11 2008	(r186563)
@@ -224,7 +224,7 @@ procfs_doprocmap(PFS_FILL_ARGS)
 			error = 0;
 			break;
 		}
-		if (last_timestamp + 1 != map->timestamp) {
+		if (last_timestamp != map->timestamp) {
 			/*
 			 * Look again for the entry because the map was
 			 * modified while it was unlocked.  Specifically,

Modified: head/sys/kern/kern_proc.c
==============================================================================
--- head/sys/kern/kern_proc.c	Mon Dec 29 12:41:32 2008	(r186562)
+++ head/sys/kern/kern_proc.c	Mon Dec 29 12:45:11 2008	(r186563)
@@ -1500,7 +1500,7 @@ sysctl_kern_proc_ovmmap(SYSCTL_HANDLER_A
 		vm_map_lock_read(map);
 		if (error)
 			break;
-		if (last_timestamp + 1 != map->timestamp) {
+		if (last_timestamp != map->timestamp) {
 			vm_map_lookup_entry(map, addr - 1, &tmp_entry);
 			entry = tmp_entry;
 		}
@@ -1677,7 +1677,7 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_AR
 		vm_map_lock_read(map);
 		if (error)
 			break;
-		if (last_timestamp + 1 != map->timestamp) {
+		if (last_timestamp != map->timestamp) {
 			vm_map_lookup_entry(map, addr - 1, &tmp_entry);
 			entry = tmp_entry;
 		}


More information about the svn-src-all mailing list