aaeff91
diff --git a/tools/nfsrahead/main.c b/tools/nfsrahead/main.c
aaeff91
index b3af3aa..5fae941 100644
aaeff91
--- a/tools/nfsrahead/main.c
aaeff91
+++ b/tools/nfsrahead/main.c
aaeff91
@@ -26,27 +26,31 @@ struct device_info {
aaeff91
 };
aaeff91
 
aaeff91
 /* Convert a string in the format n:m to a device number */
aaeff91
-static dev_t dev_from_arg(const char *device_number)
aaeff91
+static int fill_device_number(struct device_info *info)
aaeff91
 {
aaeff91
-	char *s = strdup(device_number), *p;
aaeff91
+	char *s = strdup(info->device_number), *p;
aaeff91
 	char *maj_s, *min_s;
aaeff91
 	unsigned int maj, min;
aaeff91
-	dev_t dev;
aaeff91
+	int err = -EINVAL;
aaeff91
 
aaeff91
 	maj_s = p = s;
aaeff91
-	for ( ; *p != ':'; p++)
aaeff91
+	for ( ; *p != ':' && *p != '\0'; p++)
aaeff91
 		;
aaeff91
 
aaeff91
+	if (*p == '\0')
aaeff91
+		goto out_free;
aaeff91
+
aaeff91
+	err = 0;
aaeff91
 	*p = '\0';
aaeff91
 	min_s = p + 1;
aaeff91
 
aaeff91
 	maj = strtol(maj_s, NULL, 10);
aaeff91
 	min = strtol(min_s, NULL, 10);
aaeff91
 
aaeff91
-	dev = makedev(maj, min);
aaeff91
-
aaeff91
+	info->dev = makedev(maj, min);
aaeff91
+out_free:
aaeff91
 	free(s);
aaeff91
-	return dev;
aaeff91
+	return err;
aaeff91
 }
aaeff91
 
aaeff91
 #define sfree(ptr) if (ptr) free(ptr)
aaeff91
@@ -55,7 +59,7 @@ static dev_t dev_from_arg(const char *device_number)
aaeff91
 static void init_device_info(struct device_info *di, const char *device_number)
aaeff91
 {
aaeff91
 	di->device_number = strdup(device_number);
aaeff91
-	di->dev = dev_from_arg(device_number);
aaeff91
+	di->dev = 0;
aaeff91
 	di->mountpoint = NULL;
aaeff91
 	di->fstype = NULL;
aaeff91
 }
aaeff91
@@ -76,11 +80,15 @@ static int get_mountinfo(const char *device_number, struct device_info *device_i
aaeff91
 	char *target;
aaeff91
 
aaeff91
 	init_device_info(device_info, device_number);
aaeff91
+	if ((ret = fill_device_number(device_info)) < 0)
aaeff91
+		goto out_free_device_info;
aaeff91
 
aaeff91
 	mnttbl = mnt_new_table();
aaeff91
 
aaeff91
-	if ((ret = mnt_table_parse_file(mnttbl, mountinfo_path)) < 0)
aaeff91
+	if ((ret = mnt_table_parse_file(mnttbl, mountinfo_path)) < 0) {
aaeff91
+		xlog(D_GENERAL, "Failed to parse %s\n", mountinfo_path);
aaeff91
 		goto out_free_tbl;
aaeff91
+	}
aaeff91
 
aaeff91
 	if ((fs = mnt_table_find_devno(mnttbl, device_info->dev, MNT_ITER_FORWARD)) == NULL) {
aaeff91
 		ret = ENOENT;
aaeff91
@@ -101,6 +109,7 @@ out_free_fs:
aaeff91
 	mnt_free_fs(fs);
aaeff91
 out_free_tbl:
aaeff91
 	mnt_free_table(mnttbl);
aaeff91
+out_free_device_info:
aaeff91
 	free(device_info->device_number);
aaeff91
 	device_info->device_number = NULL;
aaeff91
 	return ret;
aaeff91
@@ -123,19 +132,20 @@ static int conf_get_readahead(const char *kind) {
aaeff91
 	
aaeff91
 	return readahead;
aaeff91
 }
aaeff91
-#define L_DEFAULT (L_WARNING | L_ERROR | L_FATAL)
aaeff91
 
aaeff91
 int main(int argc, char **argv)
aaeff91
 {
aaeff91
 	int ret = 0, retry;
aaeff91
 	struct device_info device;
aaeff91
-	unsigned int readahead = 128, verbose = 0, log_stderr = 0;
aaeff91
+	unsigned int readahead = 128, log_level, log_stderr = 0;
aaeff91
 	char opt;
aaeff91
 
aaeff91
+
aaeff91
+	log_level = D_ALL & ~D_GENERAL;
aaeff91
 	while((opt = getopt(argc, argv, "dF")) != -1) {
aaeff91
 		switch (opt) {
aaeff91
 		case 'd':
aaeff91
-			verbose = 1;
aaeff91
+			log_level = D_ALL;
aaeff91
 			break;
aaeff91
 		case 'F':
aaeff91
 			log_stderr = 1;
aaeff91
@@ -147,7 +157,7 @@ int main(int argc, char **argv)
aaeff91
 
aaeff91
 	xlog_stderr(log_stderr);
aaeff91
 	xlog_syslog(~log_stderr);
aaeff91
-	xlog_config(L_DEFAULT | (L_NOTICE & verbose), 1);
aaeff91
+	xlog_config(log_level, 1);
aaeff91
 	xlog_open(CONF_NAME);
aaeff91
 
aaeff91
 	// xlog_err causes the system to exit
aaeff91
@@ -159,12 +169,12 @@ int main(int argc, char **argv)
aaeff91
 			break;
aaeff91
 
aaeff91
 	if (ret != 0) {
aaeff91
-		xlog(L_ERROR, "unable to find device %s\n", argv[optind]);
aaeff91
+		xlog(D_GENERAL, "unable to find device %s\n", argv[optind]);
aaeff91
 		goto out;
aaeff91
 	}
aaeff91
 
aaeff91
 	if (strncmp("nfs", device.fstype, 3) != 0) {
aaeff91
-		xlog(L_NOTICE,
aaeff91
+		xlog(D_GENERAL,
aaeff91
 			"not setting readahead for non supported fstype %s on device %s\n",
aaeff91
 			device.fstype, argv[optind]);
aaeff91
 		ret = -EINVAL;
aaeff91
@@ -173,7 +183,7 @@ int main(int argc, char **argv)
aaeff91
 
aaeff91
 	readahead = conf_get_readahead(device.fstype);
aaeff91
 
aaeff91
-	xlog(L_WARNING, "setting %s readahead to %d\n", device.mountpoint, readahead);
aaeff91
+	xlog(D_FAC7, "setting %s readahead to %d\n", device.mountpoint, readahead);
aaeff91
 
aaeff91
 	printf("%d\n", readahead);
aaeff91