svn commit: trunk/busybox/miscutils

landley at busybox.net landley at busybox.net
Fri May 19 17:24:29 UTC 2006


Author: landley
Date: 2006-05-19 10:24:26 -0700 (Fri, 19 May 2006)
New Revision: 15136

Log:
Patch from tito to replace shared memory usage with mlock(), slightly tweaked
by me.


Modified:
   trunk/busybox/miscutils/hdparm.c


Changeset:
Modified: trunk/busybox/miscutils/hdparm.c
===================================================================
--- trunk/busybox/miscutils/hdparm.c	2006-05-19 16:14:31 UTC (rev 15135)
+++ trunk/busybox/miscutils/hdparm.c	2006-05-19 17:24:26 UTC (rev 15136)
@@ -25,6 +25,7 @@
 #include <sys/time.h>
 #include <sys/times.h>
 #include <sys/mount.h>
+#include <sys/mman.h>
 #include <getopt.h>
 #include "busybox.h"
 #include <linux/types.h>
@@ -1406,37 +1407,21 @@
 	flag = 1 time_device
 */
 {
-	char *buf;
 	struct itimerval e1, e2;
-	int shmid;
 	double elapsed, elapsed2;
 	unsigned int max_iterations = 1024, total_MB, iterations;
 	unsigned long long blksize;
+	RESERVE_CONFIG_BUFFER(buf, TIMING_BUF_BYTES);
 
+	if (mlock(buf, TIMING_BUF_BYTES)) {
+		bb_perror_msg("mlock");
+		goto quit2;
+	}
+
 	if (0 == do_blkgetsize(fd, &blksize)) {
 		max_iterations = blksize / (2 * 1024) / TIMING_BUF_MB;
 	}
 
-	if ((shmid = shmget(IPC_PRIVATE, TIMING_BUF_BYTES, 0600)) == -1)
-	{
-		bb_perror_msg("shmget"); /*"could not allocate sharedmem buf"*/
-		return;
-	}
-	if (shmctl(shmid, SHM_LOCK, NULL) == -1)
-	{
-		bb_perror_msg("shmctl"); /*"could not lock sharedmem buf"*/
-		(void) shmctl(shmid, IPC_RMID, NULL);
-		return;
-	}
-	if ((buf = shmat(shmid, (char *) 0, 0)) == (char *) -1)
-	{
-		bb_perror_msg("shmat"); /*"could not attach sharedmem buf"*/
-		(void) shmctl(shmid, IPC_RMID, NULL);
-		return;
-	}
-	if (shmctl(shmid, IPC_RMID, NULL) == -1)
-		bb_perror_msg("shmctl");
-
 	/* Clear out the device request queues & give them time to complete */
 	sync();
 	sleep(3);
@@ -1505,8 +1490,9 @@
 		print_timing(total_MB, elapsed);
 	}
 quit:
-	if (-1 == shmdt(buf))
-		bb_perror_msg("shmdt"); /*"could not detach sharedmem buf"*/
+	munlock(buf, TIMING_BUF_BYTES);
+quit2:
+	RELEASE_CONFIG_BUFFER(buf);
 }
 
 static void on_off (unsigned int value)




More information about the busybox-cvs mailing list