|
@@ -228,3 +228,66 @@ queue_store_##name(struct request_queue *q, const char *page, size_t count) \
|
|
|
{ \
|
|
|
unsigned long val; \
|
|
|
ssize_t ret; \
|
|
|
+ ret = queue_var_store(&val, page, count); \
|
|
|
+ if (ret < 0) \
|
|
|
+ return ret; \
|
|
|
+ if (neg) \
|
|
|
+ val = !val; \
|
|
|
+ \
|
|
|
+ spin_lock_irq(q->queue_lock); \
|
|
|
+ if (val) \
|
|
|
+ queue_flag_set(QUEUE_FLAG_##flag, q); \
|
|
|
+ else \
|
|
|
+ queue_flag_clear(QUEUE_FLAG_##flag, q); \
|
|
|
+ spin_unlock_irq(q->queue_lock); \
|
|
|
+ return ret; \
|
|
|
+}
|
|
|
+
|
|
|
+QUEUE_SYSFS_BIT_FNS(nonrot, NONROT, 1);
|
|
|
+QUEUE_SYSFS_BIT_FNS(random, ADD_RANDOM, 0);
|
|
|
+QUEUE_SYSFS_BIT_FNS(iostats, IO_STAT, 0);
|
|
|
+#undef QUEUE_SYSFS_BIT_FNS
|
|
|
+
|
|
|
+static ssize_t queue_nomerges_show(struct request_queue *q, char *page)
|
|
|
+{
|
|
|
+ return queue_var_show((blk_queue_nomerges(q) << 1) |
|
|
|
+ blk_queue_noxmerges(q), page);
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t queue_nomerges_store(struct request_queue *q, const char *page,
|
|
|
+ size_t count)
|
|
|
+{
|
|
|
+ unsigned long nm;
|
|
|
+ ssize_t ret = queue_var_store(&nm, page, count);
|
|
|
+
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ spin_lock_irq(q->queue_lock);
|
|
|
+ queue_flag_clear(QUEUE_FLAG_NOMERGES, q);
|
|
|
+ queue_flag_clear(QUEUE_FLAG_NOXMERGES, q);
|
|
|
+ if (nm == 2)
|
|
|
+ queue_flag_set(QUEUE_FLAG_NOMERGES, q);
|
|
|
+ else if (nm)
|
|
|
+ queue_flag_set(QUEUE_FLAG_NOXMERGES, q);
|
|
|
+ spin_unlock_irq(q->queue_lock);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t queue_rq_affinity_show(struct request_queue *q, char *page)
|
|
|
+{
|
|
|
+ bool set = test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags);
|
|
|
+ bool force = test_bit(QUEUE_FLAG_SAME_FORCE, &q->queue_flags);
|
|
|
+
|
|
|
+ return queue_var_show(set << force, page);
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t
|
|
|
+queue_rq_affinity_store(struct request_queue *q, const char *page, size_t count)
|
|
|
+{
|
|
|
+ ssize_t ret = -EINVAL;
|
|
|
+#if defined(CONFIG_USE_GENERIC_SMP_HELPERS)
|
|
|
+ unsigned long val;
|
|
|
+
|
|
|
+ ret = queue_var_store(&val, page, count);
|