From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Jenkins Date: Sat, 25 Oct 2008 16:01:21 +0000 Subject: [PATCH] udevd: Use a tighter loop in compare_devpath() Message-Id: <490342D1.9090906@tuffmail.co.uk> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org 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 diff --git a/udev/udevd.c b/udev/udevd.c index 4306597..381d560 100644 @@ -303,26 +285,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; }