NOTE: We can use a suffix (k, K, m, M, g or G) to indicate values in kilo,
 mega or gigabytes.
+NOTE: We can write "-1" to reset the *.limit_in_bytes(unlimited).
 
 # cat /cgroups/0/memory.limit_in_bytes
 4194304
 
        struct res_counter *parent;
 };
 
+#define RESOURCE_MAX (unsigned long long)LLONG_MAX
+
 /**
  * Helpers to interact with userspace
  * res_counter_read_u64() - returns the value of the specified member.
 
 void res_counter_init(struct res_counter *counter, struct res_counter *parent)
 {
        spin_lock_init(&counter->lock);
-       counter->limit = (unsigned long long)LLONG_MAX;
+       counter->limit = RESOURCE_MAX;
        counter->parent = parent;
 }
 
                                        unsigned long long *res)
 {
        char *end;
+
+       /* return RESOURCE_MAX(unlimited) if "-1" is specified */
+       if (*buf == '-') {
+               *res = simple_strtoull(buf + 1, &end, 10);
+               if (*res != 1 || *end != '\0')
+                       return -EINVAL;
+               *res = RESOURCE_MAX;
+               return 0;
+       }
+
        /* FIXME - make memparse() take const char* args */
        *res = memparse((char *)buf, &end);
        if (*end != '\0')