|
@@ -184,3 +184,47 @@ static ssize_t queue_write_same_max_show(struct request_queue *q, char *page)
|
|
|
{
|
|
|
return sprintf(page, "%llu\n",
|
|
|
(unsigned long long)q->limits.max_write_same_sectors << 9);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static ssize_t
|
|
|
+queue_max_sectors_store(struct request_queue *q, const char *page, size_t count)
|
|
|
+{
|
|
|
+ unsigned long max_sectors_kb,
|
|
|
+ max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1,
|
|
|
+ page_kb = 1 << (PAGE_CACHE_SHIFT - 10);
|
|
|
+ ssize_t ret = queue_var_store(&max_sectors_kb, page, count);
|
|
|
+
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ if (max_sectors_kb > max_hw_sectors_kb || max_sectors_kb < page_kb)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ spin_lock_irq(q->queue_lock);
|
|
|
+ q->limits.max_sectors = max_sectors_kb << 1;
|
|
|
+ spin_unlock_irq(q->queue_lock);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t queue_max_hw_sectors_show(struct request_queue *q, char *page)
|
|
|
+{
|
|
|
+ int max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1;
|
|
|
+
|
|
|
+ return queue_var_show(max_hw_sectors_kb, (page));
|
|
|
+}
|
|
|
+
|
|
|
+#define QUEUE_SYSFS_BIT_FNS(name, flag, neg) \
|
|
|
+static ssize_t \
|
|
|
+queue_show_##name(struct request_queue *q, char *page) \
|
|
|
+{ \
|
|
|
+ int bit; \
|
|
|
+ bit = test_bit(QUEUE_FLAG_##flag, &q->queue_flags); \
|
|
|
+ return queue_var_show(neg ? !bit : bit, page); \
|
|
|
+} \
|
|
|
+static ssize_t \
|
|
|
+queue_store_##name(struct request_queue *q, const char *page, size_t count) \
|
|
|
+{ \
|
|
|
+ unsigned long val; \
|
|
|
+ ssize_t ret; \
|