+ if (val < 0)
+ return -ERANGE;
+
+ /* 1GB is the limit */
+ if (val > (1ULL << 30))
+ return -ERANGE;
+
+ if (val > 0) {
+ if (val < LOV_MIN_STRIPE_SIZE) {
+ LCONSOLE_INFO("Increasing provided stripe size to "
+ "a minimum value %u\n",
+ LOV_MIN_STRIPE_SIZE);
+ val = LOV_MIN_STRIPE_SIZE;
+ } else if (val & (LOV_MIN_STRIPE_SIZE - 1)) {
+ val &= ~(LOV_MIN_STRIPE_SIZE - 1);
+ LCONSOLE_WARN("Changing provided stripe size to %llu "
+ "(a multiple of minimum %u)\n",
+ val, LOV_MIN_STRIPE_SIZE);
+ }
+ }
+
+ lod->lod_dom_max_stripesize = val;
+
+ return count;
+}
+
+LUSTRE_RW_ATTR(dom_stripesize);
+
+static ssize_t stripesize_show(struct kobject *kobj, struct attribute *attr,
+ char *buf)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct lod_device *lod = dt2lod_dev(dt);
+
+ return snprintf(buf, PAGE_SIZE, "%llu\n",
+ lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_size);
+}
+
+static ssize_t stripesize_store(struct kobject *kobj, struct attribute *attr,
+ const char *buffer, size_t count)
+{
+ struct dt_device *dt = container_of(kobj, struct dt_device,
+ dd_kobj);
+ struct lod_device *lod = dt2lod_dev(dt);
+ char tbuf[22] = "";
+ s64 val;
+ int rc;
+
+ if (count > (sizeof(tbuf) - 1))
+ return -EINVAL;
+
+ memcpy(tbuf, buffer, count);
+
+ rc = lu_str_to_s64(tbuf, count, &val, '1');
+ if (rc)
+ return rc;
+
+ if (val < 0)
+ return -ERANGE;
+