block: don't allow enabling a cache on devices that don't support it
[platform/kernel/linux-starfive.git] / block / blk-sysfs.c
index e71b3b4..a582ea0 100644 (file)
@@ -528,21 +528,16 @@ static ssize_t queue_wc_show(struct request_queue *q, char *page)
 static ssize_t queue_wc_store(struct request_queue *q, const char *page,
                              size_t count)
 {
-       int set = -1;
-
-       if (!strncmp(page, "write back", 10))
-               set = 1;
-       else if (!strncmp(page, "write through", 13) ||
-                !strncmp(page, "none", 4))
-               set = 0;
-
-       if (set == -1)
-               return -EINVAL;
-
-       if (set)
+       if (!strncmp(page, "write back", 10)) {
+               if (!test_bit(QUEUE_FLAG_HW_WC, &q->queue_flags))
+                       return -EINVAL;
                blk_queue_flag_set(QUEUE_FLAG_WC, q);
-       else
+       } else if (!strncmp(page, "write through", 13) ||
+                !strncmp(page, "none", 4)) {
                blk_queue_flag_clear(QUEUE_FLAG_WC, q);
+       } else {
+               return -EINVAL;
+       }
 
        return count;
 }