udevd: use a tighter loop for compare_devpath()

This crops up in my threaded udevd profiles from time to time.
It's not consistent - probably due to variations in the number
of concurrent events - but it can hit 4% user time and higher.

The change halves the user time spent in compare_devpath().

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
This commit is contained in:
Alan Jenkins
2008-10-25 19:41:52 +02:00
committed by Kay Sievers
parent 3e5c759543
commit e25fa4faf5
+13 -15
View File
@@ -310,26 +310,24 @@ static int mem_size_mb(void)
static int compare_devpath(const char *running, const char *waiting)
{
int i;
int i = 0;
for (i = 0; i < UTIL_PATH_SIZE; i++) {
/* identical device event found */
if (running[i] == '\0' && waiting[i] == '\0')
return 1;
while (running[i] == waiting[i] && running[i] != '\0')
i++;
/* parent device event found */
if (running[i] == '\0' && waiting[i] == '/')
return 2;
/* identical device event found */
if (running[i] == '\0' && waiting[i] == '\0')
return 1;
/* child device event found */
if (running[i] == '/' && waiting[i] == '\0')
return 3;
/* parent device event found */
if (running[i] == '\0' && waiting[i] == '/')
return 2;
/* no matching event */
if (running[i] != waiting[i])
break;
}
/* child device event found */
if (running[i] == '/' && waiting[i] == '\0')
return 3;
/* no matching event */
return 0;
}