diff --git a/src/resources.cpp b/src/resources.cpp index 5759c2d2..6f31429a 100644 --- a/src/resources.cpp +++ b/src/resources.cpp @@ -42,25 +42,29 @@ namespace mergerfs int maxout_rlimit(int resource) { + int rv; struct rlimit rlim; - if(geteuid() == 0) - { - rlim.rlim_cur = RLIM_INFINITY; - rlim.rlim_max = RLIM_INFINITY; - } - else - { - int rv; + rlim.rlim_cur = RLIM_INFINITY; + rlim.rlim_max = RLIM_INFINITY; + rv = ::setrlimit(resource,&rlim); + if(rv == 0) + return 0; - rv = ::getrlimit(resource,&rlim); - if(rv == -1) - return -1; + rv = ::getrlimit(resource,&rlim); + if(rv == -1) + return -1; - rlim.rlim_cur = rlim.rlim_max; + rv = 0; + rlim.rlim_cur = rlim.rlim_max; + while(rv == 0) + { + rv = ::setrlimit(resource,&rlim); + rlim.rlim_max *= 2; + rlim.rlim_cur = rlim.rlim_max; } - return ::setrlimit(resource,&rlim); + return rv; } int