[dm-devel] [PATCH 17/29] Correctly set max_fds in case of failure

Hannes Reinecke hare at suse.de
Mon Jul 15 13:00:18 UTC 2013


If we fail to get the system limit for max_fds we should assume
a safe value of 4096.

Signed-off-by: Hannes Reinecke <hare at suse.de>
---
 libmultipath/dict.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/libmultipath/dict.c b/libmultipath/dict.c
index 6a58fa2..4b840de 100644
--- a/libmultipath/dict.c
+++ b/libmultipath/dict.c
@@ -290,18 +290,27 @@ static int
 max_fds_handler(vector strvec)
 {
 	char * buff;
-	int r = 0;
+	int r = 0, max_fds;
 
 	buff = set_value(strvec);
 
 	if (!buff)
 		return 1;
 
+	r = get_sys_max_fds(&max_fds);
+	if (r) {
+		/* Assume safe limit */
+		max_fds = 4096;
+	}
 	if (strlen(buff) == 3 &&
 	    !strcmp(buff, "max"))
-		r = get_sys_max_fds(&conf->max_fds);
+		conf->max_fds = max_fds;
 	else
 		conf->max_fds = atoi(buff);
+
+	if (conf->max_fds > max_fds)
+		conf->max_fds = max_fds;
+
 	FREE(buff);
 
 	return r;
@@ -2571,7 +2580,7 @@ snprint_max_fds (char * buff, int len, void * data)
 		return 0;
 
 	r = get_sys_max_fds(&max_fds);
-	if (!r && max_fds == conf->max_fds)
+	if (!r && conf->max_fds >= max_fds)
 		return snprintf(buff, len, "\"max\"");
 	else
 		return snprintf(buff, len, "%d", conf->max_fds);
-- 
1.7.10.4




More information about the dm-devel mailing list