orangefs: Support readahead_readcnt parameter.
authorMartin Brandenburg <martin@omnibond.com>
Thu, 26 Jan 2017 15:25:30 +0000 (10:25 -0500)
committerMike Marshall <hubcap@omnibond.com>
Fri, 3 Feb 2017 19:38:28 +0000 (14:38 -0500)
Signed-off-by: Martin Brandenburg <martin@omnibond.com>
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
fs/orangefs/orangefs-sysfs.c
fs/orangefs/upcall.h

index 084954448f1868840cbf3291cbb226206c2ffd51..afd2f523b2837988ae30975c231d83a21869c533 100644 (file)
  * Description:
  *                     Readahead cache buffer count and size.
  *
+ * What:               /sys/fs/orangefs/readahead_readcnt
+ * Date:               Jan 2017
+ * Contact:            Martin Brandenburg <martin@omnibond.com>
+ * Description:
+ *                     Number of buffers (in multiples of readahead_size)
+ *                     which can be read ahead for a single file at once.
+ *
  * What:               /sys/fs/orangefs/acache/...
  * Date:               Jun 2015
  * Contact:            Martin Brandenburg <martin@omnibond.com>
@@ -329,7 +336,8 @@ static ssize_t sysfs_service_op_show(struct kobject *kobj,
                if (!(orangefs_features & ORANGEFS_FEATURE_READAHEAD) &&
                    (!strcmp(attr->attr.name, "readahead_count") ||
                    !strcmp(attr->attr.name, "readahead_size") ||
-                   !strcmp(attr->attr.name, "readahead_count_size"))) {
+                   !strcmp(attr->attr.name, "readahead_count_size") ||
+                   !strcmp(attr->attr.name, "readahead_readcnt"))) {
                        rc = -EINVAL;
                        goto out;
                }
@@ -360,6 +368,11 @@ static ssize_t sysfs_service_op_show(struct kobject *kobj,
                                 "readahead_count_size"))
                        new_op->upcall.req.param.op =
                                ORANGEFS_PARAM_REQUEST_OP_READAHEAD_COUNT_SIZE;
+
+               else if (!strcmp(attr->attr.name,
+                                "readahead_readcnt"))
+                       new_op->upcall.req.param.op =
+                               ORANGEFS_PARAM_REQUEST_OP_READAHEAD_READCNT;
        } else if (!strcmp(kobj->name, ACACHE_KOBJ_ID)) {
                if (!strcmp(attr->attr.name, "timeout_msecs"))
                        new_op->upcall.req.param.op =
@@ -542,7 +555,8 @@ static ssize_t sysfs_service_op_store(struct kobject *kobj,
                if (!(orangefs_features & ORANGEFS_FEATURE_READAHEAD) &&
                    (!strcmp(attr->attr.name, "readahead_count") ||
                    !strcmp(attr->attr.name, "readahead_size") ||
-                   !strcmp(attr->attr.name, "readahead_count_size"))) {
+                   !strcmp(attr->attr.name, "readahead_count_size") ||
+                   !strcmp(attr->attr.name, "readahead_readcnt"))) {
                        rc = -EINVAL;
                        goto out;
                }
@@ -609,6 +623,15 @@ static ssize_t sysfs_service_op_store(struct kobject *kobj,
                        new_op->upcall.req.param.u.value32[0] = val1;
                        new_op->upcall.req.param.u.value32[1] = val2;
                        goto value_set;
+               } else if (!strcmp(attr->attr.name,
+                                  "readahead_readcnt")) {
+                       if ((val >= 0)) {
+                               new_op->upcall.req.param.op =
+                               ORANGEFS_PARAM_REQUEST_OP_READAHEAD_READCNT;
+                       } else {
+                               rc = 0;
+                               goto out;
+                       }
                }
 
        } else if (!strcmp(kobj->name, ACACHE_KOBJ_ID)) {
@@ -812,6 +835,10 @@ static struct orangefs_attribute readahead_count_size_attribute =
        __ATTR(readahead_count_size, 0664, sysfs_service_op_show,
               sysfs_service_op_store);
 
+static struct orangefs_attribute readahead_readcnt_attribute =
+       __ATTR(readahead_readcnt, 0664, sysfs_service_op_show,
+              sysfs_service_op_store);
+
 static struct orangefs_attribute perf_counter_reset_attribute =
        __ATTR(perf_counter_reset,
               0664,
@@ -838,6 +865,7 @@ static struct attribute *orangefs_default_attrs[] = {
        &readahead_count_attribute.attr,
        &readahead_size_attribute.attr,
        &readahead_count_size_attribute.attr,
+       &readahead_readcnt_attribute.attr,
        &perf_counter_reset_attribute.attr,
        &perf_history_size_attribute.attr,
        &perf_time_interval_secs_attribute.attr,
index af0b0e36d5595f5b996fd0d041e763976aacc931..b8249f8fdd8027b8552e4b019203b4ea2dd6ea2a 100644 (file)
@@ -182,6 +182,7 @@ enum orangefs_param_request_op {
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_SIZE = 26,
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_COUNT = 27,
        ORANGEFS_PARAM_REQUEST_OP_READAHEAD_COUNT_SIZE = 28,
+       ORANGEFS_PARAM_REQUEST_OP_READAHEAD_READCNT = 29,
 };
 
 struct orangefs_param_request_s {