blk-sysfs.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Functions related to sysfs handling
  4. */
  5. #include <linux/kernel.h>
  6. #include <linux/slab.h>
  7. #include <linux/module.h>
  8. #include <linux/bio.h>
  9. #include <linux/blkdev.h>
  10. #include <linux/backing-dev.h>
  11. #include <linux/blktrace_api.h>
  12. #include <linux/debugfs.h>
  13. #include "blk.h"
  14. #include "blk-mq.h"
  15. #include "blk-mq-debugfs.h"
  16. #include "blk-mq-sched.h"
  17. #include "blk-rq-qos.h"
  18. #include "blk-wbt.h"
  19. #include "blk-cgroup.h"
  20. #include "blk-throttle.h"
  21. struct queue_sysfs_entry {
  22. struct attribute attr;
  23. ssize_t (*show)(struct gendisk *disk, char *page);
  24. int (*load_module)(struct gendisk *disk, const char *page, size_t count);
  25. ssize_t (*store)(struct gendisk *disk, const char *page, size_t count);
  26. };
  27. static ssize_t
  28. queue_var_show(unsigned long var, char *page)
  29. {
  30. return sprintf(page, "%lu\n", var);
  31. }
  32. static ssize_t
  33. queue_var_store(unsigned long *var, const char *page, size_t count)
  34. {
  35. int err;
  36. unsigned long v;
  37. err = kstrtoul(page, 10, &v);
  38. if (err || v > UINT_MAX)
  39. return -EINVAL;
  40. *var = v;
  41. return count;
  42. }
  43. static ssize_t queue_requests_show(struct gendisk *disk, char *page)
  44. {
  45. return queue_var_show(disk->queue->nr_requests, page);
  46. }
  47. static ssize_t
  48. queue_requests_store(struct gendisk *disk, const char *page, size_t count)
  49. {
  50. unsigned long nr;
  51. int ret, err;
  52. if (!queue_is_mq(disk->queue))
  53. return -EINVAL;
  54. ret = queue_var_store(&nr, page, count);
  55. if (ret < 0)
  56. return ret;
  57. if (nr < BLKDEV_MIN_RQ)
  58. nr = BLKDEV_MIN_RQ;
  59. err = blk_mq_update_nr_requests(disk->queue, nr);
  60. if (err)
  61. return err;
  62. return ret;
  63. }
  64. static ssize_t queue_ra_show(struct gendisk *disk, char *page)
  65. {
  66. return queue_var_show(disk->bdi->ra_pages << (PAGE_SHIFT - 10), page);
  67. }
  68. static ssize_t
  69. queue_ra_store(struct gendisk *disk, const char *page, size_t count)
  70. {
  71. unsigned long ra_kb;
  72. ssize_t ret;
  73. ret = queue_var_store(&ra_kb, page, count);
  74. if (ret < 0)
  75. return ret;
  76. disk->bdi->ra_pages = ra_kb >> (PAGE_SHIFT - 10);
  77. return ret;
  78. }
  79. #define QUEUE_SYSFS_LIMIT_SHOW(_field) \
  80. static ssize_t queue_##_field##_show(struct gendisk *disk, char *page) \
  81. { \
  82. return queue_var_show(disk->queue->limits._field, page); \
  83. }
  84. QUEUE_SYSFS_LIMIT_SHOW(max_segments)
  85. QUEUE_SYSFS_LIMIT_SHOW(max_discard_segments)
  86. QUEUE_SYSFS_LIMIT_SHOW(max_integrity_segments)
  87. QUEUE_SYSFS_LIMIT_SHOW(max_segment_size)
  88. QUEUE_SYSFS_LIMIT_SHOW(logical_block_size)
  89. QUEUE_SYSFS_LIMIT_SHOW(physical_block_size)
  90. QUEUE_SYSFS_LIMIT_SHOW(chunk_sectors)
  91. QUEUE_SYSFS_LIMIT_SHOW(io_min)
  92. QUEUE_SYSFS_LIMIT_SHOW(io_opt)
  93. QUEUE_SYSFS_LIMIT_SHOW(discard_granularity)
  94. QUEUE_SYSFS_LIMIT_SHOW(zone_write_granularity)
  95. QUEUE_SYSFS_LIMIT_SHOW(virt_boundary_mask)
  96. QUEUE_SYSFS_LIMIT_SHOW(dma_alignment)
  97. QUEUE_SYSFS_LIMIT_SHOW(max_open_zones)
  98. QUEUE_SYSFS_LIMIT_SHOW(max_active_zones)
  99. QUEUE_SYSFS_LIMIT_SHOW(atomic_write_unit_min)
  100. QUEUE_SYSFS_LIMIT_SHOW(atomic_write_unit_max)
  101. #define QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES(_field) \
  102. static ssize_t queue_##_field##_show(struct gendisk *disk, char *page) \
  103. { \
  104. return sprintf(page, "%llu\n", \
  105. (unsigned long long)disk->queue->limits._field << \
  106. SECTOR_SHIFT); \
  107. }
  108. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES(max_discard_sectors)
  109. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES(max_hw_discard_sectors)
  110. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES(max_write_zeroes_sectors)
  111. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES(atomic_write_max_sectors)
  112. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES(atomic_write_boundary_sectors)
  113. #define QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_KB(_field) \
  114. static ssize_t queue_##_field##_show(struct gendisk *disk, char *page) \
  115. { \
  116. return queue_var_show(disk->queue->limits._field >> 1, page); \
  117. }
  118. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_KB(max_sectors)
  119. QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_KB(max_hw_sectors)
  120. #define QUEUE_SYSFS_SHOW_CONST(_name, _val) \
  121. static ssize_t queue_##_name##_show(struct gendisk *disk, char *page) \
  122. { \
  123. return sprintf(page, "%d\n", _val); \
  124. }
  125. /* deprecated fields */
  126. QUEUE_SYSFS_SHOW_CONST(discard_zeroes_data, 0)
  127. QUEUE_SYSFS_SHOW_CONST(write_same_max, 0)
  128. QUEUE_SYSFS_SHOW_CONST(poll_delay, -1)
  129. static ssize_t queue_max_discard_sectors_store(struct gendisk *disk,
  130. const char *page, size_t count)
  131. {
  132. unsigned long max_discard_bytes;
  133. struct queue_limits lim;
  134. ssize_t ret;
  135. int err;
  136. ret = queue_var_store(&max_discard_bytes, page, count);
  137. if (ret < 0)
  138. return ret;
  139. if (max_discard_bytes & (disk->queue->limits.discard_granularity - 1))
  140. return -EINVAL;
  141. if ((max_discard_bytes >> SECTOR_SHIFT) > UINT_MAX)
  142. return -EINVAL;
  143. lim = queue_limits_start_update(disk->queue);
  144. lim.max_user_discard_sectors = max_discard_bytes >> SECTOR_SHIFT;
  145. err = queue_limits_commit_update(disk->queue, &lim);
  146. if (err)
  147. return err;
  148. return ret;
  149. }
  150. /*
  151. * For zone append queue_max_zone_append_sectors does not just return the
  152. * underlying queue limits, but actually contains a calculation. Because of
  153. * that we can't simply use QUEUE_SYSFS_LIMIT_SHOW_SECTORS_TO_BYTES here.
  154. */
  155. static ssize_t queue_zone_append_max_show(struct gendisk *disk, char *page)
  156. {
  157. return sprintf(page, "%llu\n",
  158. (u64)queue_max_zone_append_sectors(disk->queue) <<
  159. SECTOR_SHIFT);
  160. }
  161. static ssize_t
  162. queue_max_sectors_store(struct gendisk *disk, const char *page, size_t count)
  163. {
  164. unsigned long max_sectors_kb;
  165. struct queue_limits lim;
  166. ssize_t ret;
  167. int err;
  168. ret = queue_var_store(&max_sectors_kb, page, count);
  169. if (ret < 0)
  170. return ret;
  171. lim = queue_limits_start_update(disk->queue);
  172. lim.max_user_sectors = max_sectors_kb << 1;
  173. err = queue_limits_commit_update(disk->queue, &lim);
  174. if (err)
  175. return err;
  176. return ret;
  177. }
  178. static ssize_t queue_feature_store(struct gendisk *disk, const char *page,
  179. size_t count, blk_features_t feature)
  180. {
  181. struct queue_limits lim;
  182. unsigned long val;
  183. ssize_t ret;
  184. ret = queue_var_store(&val, page, count);
  185. if (ret < 0)
  186. return ret;
  187. lim = queue_limits_start_update(disk->queue);
  188. if (val)
  189. lim.features |= feature;
  190. else
  191. lim.features &= ~feature;
  192. ret = queue_limits_commit_update(disk->queue, &lim);
  193. if (ret)
  194. return ret;
  195. return count;
  196. }
  197. #define QUEUE_SYSFS_FEATURE(_name, _feature) \
  198. static ssize_t queue_##_name##_show(struct gendisk *disk, char *page) \
  199. { \
  200. return sprintf(page, "%u\n", \
  201. !!(disk->queue->limits.features & _feature)); \
  202. } \
  203. static ssize_t queue_##_name##_store(struct gendisk *disk, \
  204. const char *page, size_t count) \
  205. { \
  206. return queue_feature_store(disk, page, count, _feature); \
  207. }
  208. QUEUE_SYSFS_FEATURE(rotational, BLK_FEAT_ROTATIONAL)
  209. QUEUE_SYSFS_FEATURE(add_random, BLK_FEAT_ADD_RANDOM)
  210. QUEUE_SYSFS_FEATURE(iostats, BLK_FEAT_IO_STAT)
  211. QUEUE_SYSFS_FEATURE(stable_writes, BLK_FEAT_STABLE_WRITES);
  212. #define QUEUE_SYSFS_FEATURE_SHOW(_name, _feature) \
  213. static ssize_t queue_##_name##_show(struct gendisk *disk, char *page) \
  214. { \
  215. return sprintf(page, "%u\n", \
  216. !!(disk->queue->limits.features & _feature)); \
  217. }
  218. QUEUE_SYSFS_FEATURE_SHOW(fua, BLK_FEAT_FUA);
  219. QUEUE_SYSFS_FEATURE_SHOW(dax, BLK_FEAT_DAX);
  220. static ssize_t queue_poll_show(struct gendisk *disk, char *page)
  221. {
  222. if (queue_is_mq(disk->queue))
  223. return sysfs_emit(page, "%u\n", blk_mq_can_poll(disk->queue));
  224. return sysfs_emit(page, "%u\n",
  225. !!(disk->queue->limits.features & BLK_FEAT_POLL));
  226. }
  227. static ssize_t queue_zoned_show(struct gendisk *disk, char *page)
  228. {
  229. if (blk_queue_is_zoned(disk->queue))
  230. return sprintf(page, "host-managed\n");
  231. return sprintf(page, "none\n");
  232. }
  233. static ssize_t queue_nr_zones_show(struct gendisk *disk, char *page)
  234. {
  235. return queue_var_show(disk_nr_zones(disk), page);
  236. }
  237. static ssize_t queue_nomerges_show(struct gendisk *disk, char *page)
  238. {
  239. return queue_var_show((blk_queue_nomerges(disk->queue) << 1) |
  240. blk_queue_noxmerges(disk->queue), page);
  241. }
  242. static ssize_t queue_nomerges_store(struct gendisk *disk, const char *page,
  243. size_t count)
  244. {
  245. unsigned long nm;
  246. ssize_t ret = queue_var_store(&nm, page, count);
  247. if (ret < 0)
  248. return ret;
  249. blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, disk->queue);
  250. blk_queue_flag_clear(QUEUE_FLAG_NOXMERGES, disk->queue);
  251. if (nm == 2)
  252. blk_queue_flag_set(QUEUE_FLAG_NOMERGES, disk->queue);
  253. else if (nm)
  254. blk_queue_flag_set(QUEUE_FLAG_NOXMERGES, disk->queue);
  255. return ret;
  256. }
  257. static ssize_t queue_rq_affinity_show(struct gendisk *disk, char *page)
  258. {
  259. bool set = test_bit(QUEUE_FLAG_SAME_COMP, &disk->queue->queue_flags);
  260. bool force = test_bit(QUEUE_FLAG_SAME_FORCE, &disk->queue->queue_flags);
  261. return queue_var_show(set << force, page);
  262. }
  263. static ssize_t
  264. queue_rq_affinity_store(struct gendisk *disk, const char *page, size_t count)
  265. {
  266. ssize_t ret = -EINVAL;
  267. #ifdef CONFIG_SMP
  268. struct request_queue *q = disk->queue;
  269. unsigned long val;
  270. ret = queue_var_store(&val, page, count);
  271. if (ret < 0)
  272. return ret;
  273. if (val == 2) {
  274. blk_queue_flag_set(QUEUE_FLAG_SAME_COMP, q);
  275. blk_queue_flag_set(QUEUE_FLAG_SAME_FORCE, q);
  276. } else if (val == 1) {
  277. blk_queue_flag_set(QUEUE_FLAG_SAME_COMP, q);
  278. blk_queue_flag_clear(QUEUE_FLAG_SAME_FORCE, q);
  279. } else if (val == 0) {
  280. blk_queue_flag_clear(QUEUE_FLAG_SAME_COMP, q);
  281. blk_queue_flag_clear(QUEUE_FLAG_SAME_FORCE, q);
  282. }
  283. #endif
  284. return ret;
  285. }
  286. static ssize_t queue_poll_delay_store(struct gendisk *disk, const char *page,
  287. size_t count)
  288. {
  289. return count;
  290. }
  291. static ssize_t queue_poll_store(struct gendisk *disk, const char *page,
  292. size_t count)
  293. {
  294. if (!(disk->queue->limits.features & BLK_FEAT_POLL))
  295. return -EINVAL;
  296. pr_info_ratelimited("writes to the poll attribute are ignored.\n");
  297. pr_info_ratelimited("please use driver specific parameters instead.\n");
  298. return count;
  299. }
  300. static ssize_t queue_io_timeout_show(struct gendisk *disk, char *page)
  301. {
  302. return sprintf(page, "%u\n", jiffies_to_msecs(disk->queue->rq_timeout));
  303. }
  304. static ssize_t queue_io_timeout_store(struct gendisk *disk, const char *page,
  305. size_t count)
  306. {
  307. unsigned int val;
  308. int err;
  309. err = kstrtou32(page, 10, &val);
  310. if (err || val == 0)
  311. return -EINVAL;
  312. blk_queue_rq_timeout(disk->queue, msecs_to_jiffies(val));
  313. return count;
  314. }
  315. static ssize_t queue_wc_show(struct gendisk *disk, char *page)
  316. {
  317. if (blk_queue_write_cache(disk->queue))
  318. return sprintf(page, "write back\n");
  319. return sprintf(page, "write through\n");
  320. }
  321. static ssize_t queue_wc_store(struct gendisk *disk, const char *page,
  322. size_t count)
  323. {
  324. struct queue_limits lim;
  325. bool disable;
  326. int err;
  327. if (!strncmp(page, "write back", 10)) {
  328. disable = false;
  329. } else if (!strncmp(page, "write through", 13) ||
  330. !strncmp(page, "none", 4)) {
  331. disable = true;
  332. } else {
  333. return -EINVAL;
  334. }
  335. lim = queue_limits_start_update(disk->queue);
  336. if (disable)
  337. lim.flags |= BLK_FLAG_WRITE_CACHE_DISABLED;
  338. else
  339. lim.flags &= ~BLK_FLAG_WRITE_CACHE_DISABLED;
  340. err = queue_limits_commit_update(disk->queue, &lim);
  341. if (err)
  342. return err;
  343. return count;
  344. }
  345. #define QUEUE_RO_ENTRY(_prefix, _name) \
  346. static struct queue_sysfs_entry _prefix##_entry = { \
  347. .attr = { .name = _name, .mode = 0444 }, \
  348. .show = _prefix##_show, \
  349. };
  350. #define QUEUE_RW_ENTRY(_prefix, _name) \
  351. static struct queue_sysfs_entry _prefix##_entry = { \
  352. .attr = { .name = _name, .mode = 0644 }, \
  353. .show = _prefix##_show, \
  354. .store = _prefix##_store, \
  355. };
  356. #define QUEUE_RW_LOAD_MODULE_ENTRY(_prefix, _name) \
  357. static struct queue_sysfs_entry _prefix##_entry = { \
  358. .attr = { .name = _name, .mode = 0644 }, \
  359. .show = _prefix##_show, \
  360. .load_module = _prefix##_load_module, \
  361. .store = _prefix##_store, \
  362. }
  363. QUEUE_RW_ENTRY(queue_requests, "nr_requests");
  364. QUEUE_RW_ENTRY(queue_ra, "read_ahead_kb");
  365. QUEUE_RW_ENTRY(queue_max_sectors, "max_sectors_kb");
  366. QUEUE_RO_ENTRY(queue_max_hw_sectors, "max_hw_sectors_kb");
  367. QUEUE_RO_ENTRY(queue_max_segments, "max_segments");
  368. QUEUE_RO_ENTRY(queue_max_integrity_segments, "max_integrity_segments");
  369. QUEUE_RO_ENTRY(queue_max_segment_size, "max_segment_size");
  370. QUEUE_RW_LOAD_MODULE_ENTRY(elv_iosched, "scheduler");
  371. QUEUE_RO_ENTRY(queue_logical_block_size, "logical_block_size");
  372. QUEUE_RO_ENTRY(queue_physical_block_size, "physical_block_size");
  373. QUEUE_RO_ENTRY(queue_chunk_sectors, "chunk_sectors");
  374. QUEUE_RO_ENTRY(queue_io_min, "minimum_io_size");
  375. QUEUE_RO_ENTRY(queue_io_opt, "optimal_io_size");
  376. QUEUE_RO_ENTRY(queue_max_discard_segments, "max_discard_segments");
  377. QUEUE_RO_ENTRY(queue_discard_granularity, "discard_granularity");
  378. QUEUE_RO_ENTRY(queue_max_hw_discard_sectors, "discard_max_hw_bytes");
  379. QUEUE_RW_ENTRY(queue_max_discard_sectors, "discard_max_bytes");
  380. QUEUE_RO_ENTRY(queue_discard_zeroes_data, "discard_zeroes_data");
  381. QUEUE_RO_ENTRY(queue_atomic_write_max_sectors, "atomic_write_max_bytes");
  382. QUEUE_RO_ENTRY(queue_atomic_write_boundary_sectors,
  383. "atomic_write_boundary_bytes");
  384. QUEUE_RO_ENTRY(queue_atomic_write_unit_max, "atomic_write_unit_max_bytes");
  385. QUEUE_RO_ENTRY(queue_atomic_write_unit_min, "atomic_write_unit_min_bytes");
  386. QUEUE_RO_ENTRY(queue_write_same_max, "write_same_max_bytes");
  387. QUEUE_RO_ENTRY(queue_max_write_zeroes_sectors, "write_zeroes_max_bytes");
  388. QUEUE_RO_ENTRY(queue_zone_append_max, "zone_append_max_bytes");
  389. QUEUE_RO_ENTRY(queue_zone_write_granularity, "zone_write_granularity");
  390. QUEUE_RO_ENTRY(queue_zoned, "zoned");
  391. QUEUE_RO_ENTRY(queue_nr_zones, "nr_zones");
  392. QUEUE_RO_ENTRY(queue_max_open_zones, "max_open_zones");
  393. QUEUE_RO_ENTRY(queue_max_active_zones, "max_active_zones");
  394. QUEUE_RW_ENTRY(queue_nomerges, "nomerges");
  395. QUEUE_RW_ENTRY(queue_rq_affinity, "rq_affinity");
  396. QUEUE_RW_ENTRY(queue_poll, "io_poll");
  397. QUEUE_RW_ENTRY(queue_poll_delay, "io_poll_delay");
  398. QUEUE_RW_ENTRY(queue_wc, "write_cache");
  399. QUEUE_RO_ENTRY(queue_fua, "fua");
  400. QUEUE_RO_ENTRY(queue_dax, "dax");
  401. QUEUE_RW_ENTRY(queue_io_timeout, "io_timeout");
  402. QUEUE_RO_ENTRY(queue_virt_boundary_mask, "virt_boundary_mask");
  403. QUEUE_RO_ENTRY(queue_dma_alignment, "dma_alignment");
  404. /* legacy alias for logical_block_size: */
  405. static struct queue_sysfs_entry queue_hw_sector_size_entry = {
  406. .attr = {.name = "hw_sector_size", .mode = 0444 },
  407. .show = queue_logical_block_size_show,
  408. };
  409. QUEUE_RW_ENTRY(queue_rotational, "rotational");
  410. QUEUE_RW_ENTRY(queue_iostats, "iostats");
  411. QUEUE_RW_ENTRY(queue_add_random, "add_random");
  412. QUEUE_RW_ENTRY(queue_stable_writes, "stable_writes");
  413. #ifdef CONFIG_BLK_WBT
  414. static ssize_t queue_var_store64(s64 *var, const char *page)
  415. {
  416. int err;
  417. s64 v;
  418. err = kstrtos64(page, 10, &v);
  419. if (err < 0)
  420. return err;
  421. *var = v;
  422. return 0;
  423. }
  424. static ssize_t queue_wb_lat_show(struct gendisk *disk, char *page)
  425. {
  426. if (!wbt_rq_qos(disk->queue))
  427. return -EINVAL;
  428. if (wbt_disabled(disk->queue))
  429. return sprintf(page, "0\n");
  430. return sprintf(page, "%llu\n",
  431. div_u64(wbt_get_min_lat(disk->queue), 1000));
  432. }
  433. static ssize_t queue_wb_lat_store(struct gendisk *disk, const char *page,
  434. size_t count)
  435. {
  436. struct request_queue *q = disk->queue;
  437. struct rq_qos *rqos;
  438. ssize_t ret;
  439. s64 val;
  440. ret = queue_var_store64(&val, page);
  441. if (ret < 0)
  442. return ret;
  443. if (val < -1)
  444. return -EINVAL;
  445. rqos = wbt_rq_qos(q);
  446. if (!rqos) {
  447. ret = wbt_init(disk);
  448. if (ret)
  449. return ret;
  450. }
  451. if (val == -1)
  452. val = wbt_default_latency_nsec(q);
  453. else if (val >= 0)
  454. val *= 1000ULL;
  455. if (wbt_get_min_lat(q) == val)
  456. return count;
  457. /*
  458. * Ensure that the queue is idled, in case the latency update
  459. * ends up either enabling or disabling wbt completely. We can't
  460. * have IO inflight if that happens.
  461. */
  462. blk_mq_quiesce_queue(q);
  463. wbt_set_min_lat(q, val);
  464. blk_mq_unquiesce_queue(q);
  465. return count;
  466. }
  467. QUEUE_RW_ENTRY(queue_wb_lat, "wbt_lat_usec");
  468. #endif
  469. /* Common attributes for bio-based and request-based queues. */
  470. static struct attribute *queue_attrs[] = {
  471. &queue_ra_entry.attr,
  472. &queue_max_hw_sectors_entry.attr,
  473. &queue_max_sectors_entry.attr,
  474. &queue_max_segments_entry.attr,
  475. &queue_max_discard_segments_entry.attr,
  476. &queue_max_integrity_segments_entry.attr,
  477. &queue_max_segment_size_entry.attr,
  478. &queue_hw_sector_size_entry.attr,
  479. &queue_logical_block_size_entry.attr,
  480. &queue_physical_block_size_entry.attr,
  481. &queue_chunk_sectors_entry.attr,
  482. &queue_io_min_entry.attr,
  483. &queue_io_opt_entry.attr,
  484. &queue_discard_granularity_entry.attr,
  485. &queue_max_discard_sectors_entry.attr,
  486. &queue_max_hw_discard_sectors_entry.attr,
  487. &queue_discard_zeroes_data_entry.attr,
  488. &queue_atomic_write_max_sectors_entry.attr,
  489. &queue_atomic_write_boundary_sectors_entry.attr,
  490. &queue_atomic_write_unit_min_entry.attr,
  491. &queue_atomic_write_unit_max_entry.attr,
  492. &queue_write_same_max_entry.attr,
  493. &queue_max_write_zeroes_sectors_entry.attr,
  494. &queue_zone_append_max_entry.attr,
  495. &queue_zone_write_granularity_entry.attr,
  496. &queue_rotational_entry.attr,
  497. &queue_zoned_entry.attr,
  498. &queue_nr_zones_entry.attr,
  499. &queue_max_open_zones_entry.attr,
  500. &queue_max_active_zones_entry.attr,
  501. &queue_nomerges_entry.attr,
  502. &queue_iostats_entry.attr,
  503. &queue_stable_writes_entry.attr,
  504. &queue_add_random_entry.attr,
  505. &queue_poll_entry.attr,
  506. &queue_wc_entry.attr,
  507. &queue_fua_entry.attr,
  508. &queue_dax_entry.attr,
  509. &queue_poll_delay_entry.attr,
  510. &queue_virt_boundary_mask_entry.attr,
  511. &queue_dma_alignment_entry.attr,
  512. NULL,
  513. };
  514. /* Request-based queue attributes that are not relevant for bio-based queues. */
  515. static struct attribute *blk_mq_queue_attrs[] = {
  516. &queue_requests_entry.attr,
  517. &elv_iosched_entry.attr,
  518. &queue_rq_affinity_entry.attr,
  519. &queue_io_timeout_entry.attr,
  520. #ifdef CONFIG_BLK_WBT
  521. &queue_wb_lat_entry.attr,
  522. #endif
  523. NULL,
  524. };
  525. static umode_t queue_attr_visible(struct kobject *kobj, struct attribute *attr,
  526. int n)
  527. {
  528. struct gendisk *disk = container_of(kobj, struct gendisk, queue_kobj);
  529. struct request_queue *q = disk->queue;
  530. if ((attr == &queue_max_open_zones_entry.attr ||
  531. attr == &queue_max_active_zones_entry.attr) &&
  532. !blk_queue_is_zoned(q))
  533. return 0;
  534. return attr->mode;
  535. }
  536. static umode_t blk_mq_queue_attr_visible(struct kobject *kobj,
  537. struct attribute *attr, int n)
  538. {
  539. struct gendisk *disk = container_of(kobj, struct gendisk, queue_kobj);
  540. struct request_queue *q = disk->queue;
  541. if (!queue_is_mq(q))
  542. return 0;
  543. if (attr == &queue_io_timeout_entry.attr && !q->mq_ops->timeout)
  544. return 0;
  545. return attr->mode;
  546. }
  547. static struct attribute_group queue_attr_group = {
  548. .attrs = queue_attrs,
  549. .is_visible = queue_attr_visible,
  550. };
  551. static struct attribute_group blk_mq_queue_attr_group = {
  552. .attrs = blk_mq_queue_attrs,
  553. .is_visible = blk_mq_queue_attr_visible,
  554. };
  555. #define to_queue(atr) container_of((atr), struct queue_sysfs_entry, attr)
  556. static ssize_t
  557. queue_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
  558. {
  559. struct queue_sysfs_entry *entry = to_queue(attr);
  560. struct gendisk *disk = container_of(kobj, struct gendisk, queue_kobj);
  561. ssize_t res;
  562. if (!entry->show)
  563. return -EIO;
  564. mutex_lock(&disk->queue->sysfs_lock);
  565. res = entry->show(disk, page);
  566. mutex_unlock(&disk->queue->sysfs_lock);
  567. return res;
  568. }
  569. static ssize_t
  570. queue_attr_store(struct kobject *kobj, struct attribute *attr,
  571. const char *page, size_t length)
  572. {
  573. struct queue_sysfs_entry *entry = to_queue(attr);
  574. struct gendisk *disk = container_of(kobj, struct gendisk, queue_kobj);
  575. struct request_queue *q = disk->queue;
  576. ssize_t res;
  577. if (!entry->store)
  578. return -EIO;
  579. /*
  580. * If the attribute needs to load a module, do it before freezing the
  581. * queue to ensure that the module file can be read when the request
  582. * queue is the one for the device storing the module file.
  583. */
  584. if (entry->load_module) {
  585. res = entry->load_module(disk, page, length);
  586. if (res)
  587. return res;
  588. }
  589. blk_mq_freeze_queue(q);
  590. mutex_lock(&q->sysfs_lock);
  591. res = entry->store(disk, page, length);
  592. mutex_unlock(&q->sysfs_lock);
  593. blk_mq_unfreeze_queue(q);
  594. return res;
  595. }
  596. static const struct sysfs_ops queue_sysfs_ops = {
  597. .show = queue_attr_show,
  598. .store = queue_attr_store,
  599. };
  600. static const struct attribute_group *blk_queue_attr_groups[] = {
  601. &queue_attr_group,
  602. &blk_mq_queue_attr_group,
  603. NULL
  604. };
  605. static void blk_queue_release(struct kobject *kobj)
  606. {
  607. /* nothing to do here, all data is associated with the parent gendisk */
  608. }
  609. static const struct kobj_type blk_queue_ktype = {
  610. .default_groups = blk_queue_attr_groups,
  611. .sysfs_ops = &queue_sysfs_ops,
  612. .release = blk_queue_release,
  613. };
  614. static void blk_debugfs_remove(struct gendisk *disk)
  615. {
  616. struct request_queue *q = disk->queue;
  617. mutex_lock(&q->debugfs_mutex);
  618. blk_trace_shutdown(q);
  619. debugfs_remove_recursive(q->debugfs_dir);
  620. q->debugfs_dir = NULL;
  621. q->sched_debugfs_dir = NULL;
  622. q->rqos_debugfs_dir = NULL;
  623. mutex_unlock(&q->debugfs_mutex);
  624. }
  625. /**
  626. * blk_register_queue - register a block layer queue with sysfs
  627. * @disk: Disk of which the request queue should be registered with sysfs.
  628. */
  629. int blk_register_queue(struct gendisk *disk)
  630. {
  631. struct request_queue *q = disk->queue;
  632. int ret;
  633. mutex_lock(&q->sysfs_dir_lock);
  634. kobject_init(&disk->queue_kobj, &blk_queue_ktype);
  635. ret = kobject_add(&disk->queue_kobj, &disk_to_dev(disk)->kobj, "queue");
  636. if (ret < 0)
  637. goto out_put_queue_kobj;
  638. if (queue_is_mq(q)) {
  639. ret = blk_mq_sysfs_register(disk);
  640. if (ret)
  641. goto out_put_queue_kobj;
  642. }
  643. mutex_lock(&q->sysfs_lock);
  644. mutex_lock(&q->debugfs_mutex);
  645. q->debugfs_dir = debugfs_create_dir(disk->disk_name, blk_debugfs_root);
  646. if (queue_is_mq(q))
  647. blk_mq_debugfs_register(q);
  648. mutex_unlock(&q->debugfs_mutex);
  649. ret = disk_register_independent_access_ranges(disk);
  650. if (ret)
  651. goto out_debugfs_remove;
  652. if (q->elevator) {
  653. ret = elv_register_queue(q, false);
  654. if (ret)
  655. goto out_unregister_ia_ranges;
  656. }
  657. ret = blk_crypto_sysfs_register(disk);
  658. if (ret)
  659. goto out_elv_unregister;
  660. blk_queue_flag_set(QUEUE_FLAG_REGISTERED, q);
  661. wbt_enable_default(disk);
  662. /* Now everything is ready and send out KOBJ_ADD uevent */
  663. kobject_uevent(&disk->queue_kobj, KOBJ_ADD);
  664. if (q->elevator)
  665. kobject_uevent(&q->elevator->kobj, KOBJ_ADD);
  666. mutex_unlock(&q->sysfs_lock);
  667. mutex_unlock(&q->sysfs_dir_lock);
  668. /*
  669. * SCSI probing may synchronously create and destroy a lot of
  670. * request_queues for non-existent devices. Shutting down a fully
  671. * functional queue takes measureable wallclock time as RCU grace
  672. * periods are involved. To avoid excessive latency in these
  673. * cases, a request_queue starts out in a degraded mode which is
  674. * faster to shut down and is made fully functional here as
  675. * request_queues for non-existent devices never get registered.
  676. */
  677. blk_queue_flag_set(QUEUE_FLAG_INIT_DONE, q);
  678. percpu_ref_switch_to_percpu(&q->q_usage_counter);
  679. return ret;
  680. out_elv_unregister:
  681. elv_unregister_queue(q);
  682. out_unregister_ia_ranges:
  683. disk_unregister_independent_access_ranges(disk);
  684. out_debugfs_remove:
  685. blk_debugfs_remove(disk);
  686. mutex_unlock(&q->sysfs_lock);
  687. if (queue_is_mq(q))
  688. blk_mq_sysfs_unregister(disk);
  689. out_put_queue_kobj:
  690. kobject_put(&disk->queue_kobj);
  691. mutex_unlock(&q->sysfs_dir_lock);
  692. return ret;
  693. }
  694. /**
  695. * blk_unregister_queue - counterpart of blk_register_queue()
  696. * @disk: Disk of which the request queue should be unregistered from sysfs.
  697. *
  698. * Note: the caller is responsible for guaranteeing that this function is called
  699. * after blk_register_queue() has finished.
  700. */
  701. void blk_unregister_queue(struct gendisk *disk)
  702. {
  703. struct request_queue *q = disk->queue;
  704. if (WARN_ON(!q))
  705. return;
  706. /* Return early if disk->queue was never registered. */
  707. if (!blk_queue_registered(q))
  708. return;
  709. /*
  710. * Since sysfs_remove_dir() prevents adding new directory entries
  711. * before removal of existing entries starts, protect against
  712. * concurrent elv_iosched_store() calls.
  713. */
  714. mutex_lock(&q->sysfs_lock);
  715. blk_queue_flag_clear(QUEUE_FLAG_REGISTERED, q);
  716. mutex_unlock(&q->sysfs_lock);
  717. mutex_lock(&q->sysfs_dir_lock);
  718. /*
  719. * Remove the sysfs attributes before unregistering the queue data
  720. * structures that can be modified through sysfs.
  721. */
  722. if (queue_is_mq(q))
  723. blk_mq_sysfs_unregister(disk);
  724. blk_crypto_sysfs_unregister(disk);
  725. mutex_lock(&q->sysfs_lock);
  726. elv_unregister_queue(q);
  727. disk_unregister_independent_access_ranges(disk);
  728. mutex_unlock(&q->sysfs_lock);
  729. /* Now that we've deleted all child objects, we can delete the queue. */
  730. kobject_uevent(&disk->queue_kobj, KOBJ_REMOVE);
  731. kobject_del(&disk->queue_kobj);
  732. mutex_unlock(&q->sysfs_dir_lock);
  733. blk_debugfs_remove(disk);
  734. kobject_put(&disk->queue_kobj);
  735. }