blk-sysfs.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931
  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/blk-mq.h>
  13. #include <linux/debugfs.h>
  14. #include "blk.h"
  15. #include "blk-mq.h"
  16. #include "blk-mq-debugfs.h"
  17. #include "blk-mq-sched.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 request_queue *, char *);
  24. ssize_t (*store)(struct request_queue *, const char *, size_t);
  25. };
  26. static ssize_t
  27. queue_var_show(unsigned long var, char *page)
  28. {
  29. return sprintf(page, "%lu\n", var);
  30. }
  31. static ssize_t
  32. queue_var_store(unsigned long *var, const char *page, size_t count)
  33. {
  34. int err;
  35. unsigned long v;
  36. err = kstrtoul(page, 10, &v);
  37. if (err || v > UINT_MAX)
  38. return -EINVAL;
  39. *var = v;
  40. return count;
  41. }
  42. static ssize_t queue_var_store64(s64 *var, const char *page)
  43. {
  44. int err;
  45. s64 v;
  46. err = kstrtos64(page, 10, &v);
  47. if (err < 0)
  48. return err;
  49. *var = v;
  50. return 0;
  51. }
  52. static ssize_t queue_requests_show(struct request_queue *q, char *page)
  53. {
  54. return queue_var_show(q->nr_requests, page);
  55. }
  56. static ssize_t
  57. queue_requests_store(struct request_queue *q, const char *page, size_t count)
  58. {
  59. unsigned long nr;
  60. int ret, err;
  61. if (!queue_is_mq(q))
  62. return -EINVAL;
  63. ret = queue_var_store(&nr, page, count);
  64. if (ret < 0)
  65. return ret;
  66. if (nr < BLKDEV_MIN_RQ)
  67. nr = BLKDEV_MIN_RQ;
  68. err = blk_mq_update_nr_requests(q, nr);
  69. if (err)
  70. return err;
  71. return ret;
  72. }
  73. static ssize_t queue_ra_show(struct request_queue *q, char *page)
  74. {
  75. unsigned long ra_kb;
  76. if (!q->disk)
  77. return -EINVAL;
  78. ra_kb = q->disk->bdi->ra_pages << (PAGE_SHIFT - 10);
  79. return queue_var_show(ra_kb, page);
  80. }
  81. static ssize_t
  82. queue_ra_store(struct request_queue *q, const char *page, size_t count)
  83. {
  84. unsigned long ra_kb;
  85. ssize_t ret;
  86. if (!q->disk)
  87. return -EINVAL;
  88. ret = queue_var_store(&ra_kb, page, count);
  89. if (ret < 0)
  90. return ret;
  91. q->disk->bdi->ra_pages = ra_kb >> (PAGE_SHIFT - 10);
  92. return ret;
  93. }
  94. static ssize_t queue_max_sectors_show(struct request_queue *q, char *page)
  95. {
  96. int max_sectors_kb = queue_max_sectors(q) >> 1;
  97. return queue_var_show(max_sectors_kb, page);
  98. }
  99. static ssize_t queue_max_segments_show(struct request_queue *q, char *page)
  100. {
  101. return queue_var_show(queue_max_segments(q), page);
  102. }
  103. static ssize_t queue_max_discard_segments_show(struct request_queue *q,
  104. char *page)
  105. {
  106. return queue_var_show(queue_max_discard_segments(q), page);
  107. }
  108. static ssize_t queue_max_integrity_segments_show(struct request_queue *q, char *page)
  109. {
  110. return queue_var_show(q->limits.max_integrity_segments, page);
  111. }
  112. static ssize_t queue_max_segment_size_show(struct request_queue *q, char *page)
  113. {
  114. return queue_var_show(queue_max_segment_size(q), page);
  115. }
  116. static ssize_t queue_logical_block_size_show(struct request_queue *q, char *page)
  117. {
  118. return queue_var_show(queue_logical_block_size(q), page);
  119. }
  120. static ssize_t queue_physical_block_size_show(struct request_queue *q, char *page)
  121. {
  122. return queue_var_show(queue_physical_block_size(q), page);
  123. }
  124. static ssize_t queue_chunk_sectors_show(struct request_queue *q, char *page)
  125. {
  126. return queue_var_show(q->limits.chunk_sectors, page);
  127. }
  128. static ssize_t queue_io_min_show(struct request_queue *q, char *page)
  129. {
  130. return queue_var_show(queue_io_min(q), page);
  131. }
  132. static ssize_t queue_io_opt_show(struct request_queue *q, char *page)
  133. {
  134. return queue_var_show(queue_io_opt(q), page);
  135. }
  136. static ssize_t queue_discard_granularity_show(struct request_queue *q, char *page)
  137. {
  138. return queue_var_show(q->limits.discard_granularity, page);
  139. }
  140. static ssize_t queue_discard_max_hw_show(struct request_queue *q, char *page)
  141. {
  142. return sprintf(page, "%llu\n",
  143. (unsigned long long)q->limits.max_hw_discard_sectors << 9);
  144. }
  145. static ssize_t queue_discard_max_show(struct request_queue *q, char *page)
  146. {
  147. return sprintf(page, "%llu\n",
  148. (unsigned long long)q->limits.max_discard_sectors << 9);
  149. }
  150. static ssize_t queue_discard_max_store(struct request_queue *q,
  151. const char *page, size_t count)
  152. {
  153. unsigned long max_discard;
  154. ssize_t ret = queue_var_store(&max_discard, page, count);
  155. if (ret < 0)
  156. return ret;
  157. if (max_discard & (q->limits.discard_granularity - 1))
  158. return -EINVAL;
  159. max_discard >>= 9;
  160. if (max_discard > UINT_MAX)
  161. return -EINVAL;
  162. if (max_discard > q->limits.max_hw_discard_sectors)
  163. max_discard = q->limits.max_hw_discard_sectors;
  164. q->limits.max_discard_sectors = max_discard;
  165. return ret;
  166. }
  167. static ssize_t queue_discard_zeroes_data_show(struct request_queue *q, char *page)
  168. {
  169. return queue_var_show(0, page);
  170. }
  171. static ssize_t queue_write_same_max_show(struct request_queue *q, char *page)
  172. {
  173. return queue_var_show(0, page);
  174. }
  175. static ssize_t queue_write_zeroes_max_show(struct request_queue *q, char *page)
  176. {
  177. return sprintf(page, "%llu\n",
  178. (unsigned long long)q->limits.max_write_zeroes_sectors << 9);
  179. }
  180. static ssize_t queue_zone_write_granularity_show(struct request_queue *q,
  181. char *page)
  182. {
  183. return queue_var_show(queue_zone_write_granularity(q), page);
  184. }
  185. static ssize_t queue_zone_append_max_show(struct request_queue *q, char *page)
  186. {
  187. unsigned long long max_sectors = q->limits.max_zone_append_sectors;
  188. return sprintf(page, "%llu\n", max_sectors << SECTOR_SHIFT);
  189. }
  190. static ssize_t
  191. queue_max_sectors_store(struct request_queue *q, const char *page, size_t count)
  192. {
  193. unsigned long max_sectors_kb,
  194. max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1,
  195. page_kb = 1 << (PAGE_SHIFT - 10);
  196. ssize_t ret = queue_var_store(&max_sectors_kb, page, count);
  197. if (ret < 0)
  198. return ret;
  199. max_hw_sectors_kb = min_not_zero(max_hw_sectors_kb, (unsigned long)
  200. q->limits.max_dev_sectors >> 1);
  201. if (max_sectors_kb > max_hw_sectors_kb || max_sectors_kb < page_kb)
  202. return -EINVAL;
  203. spin_lock_irq(&q->queue_lock);
  204. q->limits.max_sectors = max_sectors_kb << 1;
  205. if (q->disk)
  206. q->disk->bdi->io_pages = max_sectors_kb >> (PAGE_SHIFT - 10);
  207. spin_unlock_irq(&q->queue_lock);
  208. return ret;
  209. }
  210. static ssize_t queue_max_hw_sectors_show(struct request_queue *q, char *page)
  211. {
  212. int max_hw_sectors_kb = queue_max_hw_sectors(q) >> 1;
  213. return queue_var_show(max_hw_sectors_kb, page);
  214. }
  215. static ssize_t queue_virt_boundary_mask_show(struct request_queue *q, char *page)
  216. {
  217. return queue_var_show(q->limits.virt_boundary_mask, page);
  218. }
  219. static ssize_t queue_dma_alignment_show(struct request_queue *q, char *page)
  220. {
  221. return queue_var_show(queue_dma_alignment(q), page);
  222. }
  223. #define QUEUE_SYSFS_BIT_FNS(name, flag, neg) \
  224. static ssize_t \
  225. queue_##name##_show(struct request_queue *q, char *page) \
  226. { \
  227. int bit; \
  228. bit = test_bit(QUEUE_FLAG_##flag, &q->queue_flags); \
  229. return queue_var_show(neg ? !bit : bit, page); \
  230. } \
  231. static ssize_t \
  232. queue_##name##_store(struct request_queue *q, const char *page, size_t count) \
  233. { \
  234. unsigned long val; \
  235. ssize_t ret; \
  236. ret = queue_var_store(&val, page, count); \
  237. if (ret < 0) \
  238. return ret; \
  239. if (neg) \
  240. val = !val; \
  241. \
  242. if (val) \
  243. blk_queue_flag_set(QUEUE_FLAG_##flag, q); \
  244. else \
  245. blk_queue_flag_clear(QUEUE_FLAG_##flag, q); \
  246. return ret; \
  247. }
  248. QUEUE_SYSFS_BIT_FNS(nonrot, NONROT, 1);
  249. QUEUE_SYSFS_BIT_FNS(random, ADD_RANDOM, 0);
  250. QUEUE_SYSFS_BIT_FNS(iostats, IO_STAT, 0);
  251. QUEUE_SYSFS_BIT_FNS(stable_writes, STABLE_WRITES, 0);
  252. #undef QUEUE_SYSFS_BIT_FNS
  253. static ssize_t queue_zoned_show(struct request_queue *q, char *page)
  254. {
  255. switch (blk_queue_zoned_model(q)) {
  256. case BLK_ZONED_HA:
  257. return sprintf(page, "host-aware\n");
  258. case BLK_ZONED_HM:
  259. return sprintf(page, "host-managed\n");
  260. default:
  261. return sprintf(page, "none\n");
  262. }
  263. }
  264. static ssize_t queue_nr_zones_show(struct request_queue *q, char *page)
  265. {
  266. return queue_var_show(disk_nr_zones(q->disk), page);
  267. }
  268. static ssize_t queue_max_open_zones_show(struct request_queue *q, char *page)
  269. {
  270. return queue_var_show(bdev_max_open_zones(q->disk->part0), page);
  271. }
  272. static ssize_t queue_max_active_zones_show(struct request_queue *q, char *page)
  273. {
  274. return queue_var_show(bdev_max_active_zones(q->disk->part0), page);
  275. }
  276. static ssize_t queue_nomerges_show(struct request_queue *q, char *page)
  277. {
  278. return queue_var_show((blk_queue_nomerges(q) << 1) |
  279. blk_queue_noxmerges(q), page);
  280. }
  281. static ssize_t queue_nomerges_store(struct request_queue *q, const char *page,
  282. size_t count)
  283. {
  284. unsigned long nm;
  285. ssize_t ret = queue_var_store(&nm, page, count);
  286. if (ret < 0)
  287. return ret;
  288. blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, q);
  289. blk_queue_flag_clear(QUEUE_FLAG_NOXMERGES, q);
  290. if (nm == 2)
  291. blk_queue_flag_set(QUEUE_FLAG_NOMERGES, q);
  292. else if (nm)
  293. blk_queue_flag_set(QUEUE_FLAG_NOXMERGES, q);
  294. return ret;
  295. }
  296. static ssize_t queue_rq_affinity_show(struct request_queue *q, char *page)
  297. {
  298. bool set = test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags);
  299. bool force = test_bit(QUEUE_FLAG_SAME_FORCE, &q->queue_flags);
  300. return queue_var_show(set << force, page);
  301. }
  302. static ssize_t
  303. queue_rq_affinity_store(struct request_queue *q, const char *page, size_t count)
  304. {
  305. ssize_t ret = -EINVAL;
  306. #ifdef CONFIG_SMP
  307. unsigned long val;
  308. ret = queue_var_store(&val, page, count);
  309. if (ret < 0)
  310. return ret;
  311. if (val == 2) {
  312. blk_queue_flag_set(QUEUE_FLAG_SAME_COMP, q);
  313. blk_queue_flag_set(QUEUE_FLAG_SAME_FORCE, q);
  314. } else if (val == 1) {
  315. blk_queue_flag_set(QUEUE_FLAG_SAME_COMP, q);
  316. blk_queue_flag_clear(QUEUE_FLAG_SAME_FORCE, q);
  317. } else if (val == 0) {
  318. blk_queue_flag_clear(QUEUE_FLAG_SAME_COMP, q);
  319. blk_queue_flag_clear(QUEUE_FLAG_SAME_FORCE, q);
  320. }
  321. #endif
  322. return ret;
  323. }
  324. static ssize_t queue_poll_delay_show(struct request_queue *q, char *page)
  325. {
  326. int val;
  327. if (q->poll_nsec == BLK_MQ_POLL_CLASSIC)
  328. val = BLK_MQ_POLL_CLASSIC;
  329. else
  330. val = q->poll_nsec / 1000;
  331. return sprintf(page, "%d\n", val);
  332. }
  333. static ssize_t queue_poll_delay_store(struct request_queue *q, const char *page,
  334. size_t count)
  335. {
  336. int err, val;
  337. if (!q->mq_ops || !q->mq_ops->poll)
  338. return -EINVAL;
  339. err = kstrtoint(page, 10, &val);
  340. if (err < 0)
  341. return err;
  342. if (val == BLK_MQ_POLL_CLASSIC)
  343. q->poll_nsec = BLK_MQ_POLL_CLASSIC;
  344. else if (val >= 0)
  345. q->poll_nsec = val * 1000;
  346. else
  347. return -EINVAL;
  348. return count;
  349. }
  350. static ssize_t queue_poll_show(struct request_queue *q, char *page)
  351. {
  352. return queue_var_show(test_bit(QUEUE_FLAG_POLL, &q->queue_flags), page);
  353. }
  354. static ssize_t queue_poll_store(struct request_queue *q, const char *page,
  355. size_t count)
  356. {
  357. if (!test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
  358. return -EINVAL;
  359. pr_info_ratelimited("writes to the poll attribute are ignored.\n");
  360. pr_info_ratelimited("please use driver specific parameters instead.\n");
  361. return count;
  362. }
  363. static ssize_t queue_io_timeout_show(struct request_queue *q, char *page)
  364. {
  365. return sprintf(page, "%u\n", jiffies_to_msecs(q->rq_timeout));
  366. }
  367. static ssize_t queue_io_timeout_store(struct request_queue *q, const char *page,
  368. size_t count)
  369. {
  370. unsigned int val;
  371. int err;
  372. err = kstrtou32(page, 10, &val);
  373. if (err || val == 0)
  374. return -EINVAL;
  375. blk_queue_rq_timeout(q, msecs_to_jiffies(val));
  376. return count;
  377. }
  378. static ssize_t queue_wb_lat_show(struct request_queue *q, char *page)
  379. {
  380. if (!wbt_rq_qos(q))
  381. return -EINVAL;
  382. return sprintf(page, "%llu\n", div_u64(wbt_get_min_lat(q), 1000));
  383. }
  384. static ssize_t queue_wb_lat_store(struct request_queue *q, const char *page,
  385. size_t count)
  386. {
  387. struct rq_qos *rqos;
  388. ssize_t ret;
  389. s64 val;
  390. ret = queue_var_store64(&val, page);
  391. if (ret < 0)
  392. return ret;
  393. if (val < -1)
  394. return -EINVAL;
  395. rqos = wbt_rq_qos(q);
  396. if (!rqos) {
  397. ret = wbt_init(q);
  398. if (ret)
  399. return ret;
  400. }
  401. if (val == -1)
  402. val = wbt_default_latency_nsec(q);
  403. else if (val >= 0)
  404. val *= 1000ULL;
  405. if (wbt_get_min_lat(q) == val)
  406. return count;
  407. /*
  408. * Ensure that the queue is idled, in case the latency update
  409. * ends up either enabling or disabling wbt completely. We can't
  410. * have IO inflight if that happens.
  411. */
  412. blk_mq_freeze_queue(q);
  413. blk_mq_quiesce_queue(q);
  414. wbt_set_min_lat(q, val);
  415. blk_mq_unquiesce_queue(q);
  416. blk_mq_unfreeze_queue(q);
  417. return count;
  418. }
  419. static ssize_t queue_wc_show(struct request_queue *q, char *page)
  420. {
  421. if (test_bit(QUEUE_FLAG_WC, &q->queue_flags))
  422. return sprintf(page, "write back\n");
  423. return sprintf(page, "write through\n");
  424. }
  425. static ssize_t queue_wc_store(struct request_queue *q, const char *page,
  426. size_t count)
  427. {
  428. if (!strncmp(page, "write back", 10)) {
  429. if (!test_bit(QUEUE_FLAG_HW_WC, &q->queue_flags))
  430. return -EINVAL;
  431. blk_queue_flag_set(QUEUE_FLAG_WC, q);
  432. } else if (!strncmp(page, "write through", 13) ||
  433. !strncmp(page, "none", 4)) {
  434. blk_queue_flag_clear(QUEUE_FLAG_WC, q);
  435. } else {
  436. return -EINVAL;
  437. }
  438. return count;
  439. }
  440. static ssize_t queue_fua_show(struct request_queue *q, char *page)
  441. {
  442. return sprintf(page, "%u\n", test_bit(QUEUE_FLAG_FUA, &q->queue_flags));
  443. }
  444. static ssize_t queue_dax_show(struct request_queue *q, char *page)
  445. {
  446. return queue_var_show(blk_queue_dax(q), page);
  447. }
  448. #define QUEUE_RO_ENTRY(_prefix, _name) \
  449. static struct queue_sysfs_entry _prefix##_entry = { \
  450. .attr = { .name = _name, .mode = 0444 }, \
  451. .show = _prefix##_show, \
  452. };
  453. #define QUEUE_RW_ENTRY(_prefix, _name) \
  454. static struct queue_sysfs_entry _prefix##_entry = { \
  455. .attr = { .name = _name, .mode = 0644 }, \
  456. .show = _prefix##_show, \
  457. .store = _prefix##_store, \
  458. };
  459. QUEUE_RW_ENTRY(queue_requests, "nr_requests");
  460. QUEUE_RW_ENTRY(queue_ra, "read_ahead_kb");
  461. QUEUE_RW_ENTRY(queue_max_sectors, "max_sectors_kb");
  462. QUEUE_RO_ENTRY(queue_max_hw_sectors, "max_hw_sectors_kb");
  463. QUEUE_RO_ENTRY(queue_max_segments, "max_segments");
  464. QUEUE_RO_ENTRY(queue_max_integrity_segments, "max_integrity_segments");
  465. QUEUE_RO_ENTRY(queue_max_segment_size, "max_segment_size");
  466. QUEUE_RW_ENTRY(elv_iosched, "scheduler");
  467. QUEUE_RO_ENTRY(queue_logical_block_size, "logical_block_size");
  468. QUEUE_RO_ENTRY(queue_physical_block_size, "physical_block_size");
  469. QUEUE_RO_ENTRY(queue_chunk_sectors, "chunk_sectors");
  470. QUEUE_RO_ENTRY(queue_io_min, "minimum_io_size");
  471. QUEUE_RO_ENTRY(queue_io_opt, "optimal_io_size");
  472. QUEUE_RO_ENTRY(queue_max_discard_segments, "max_discard_segments");
  473. QUEUE_RO_ENTRY(queue_discard_granularity, "discard_granularity");
  474. QUEUE_RO_ENTRY(queue_discard_max_hw, "discard_max_hw_bytes");
  475. QUEUE_RW_ENTRY(queue_discard_max, "discard_max_bytes");
  476. QUEUE_RO_ENTRY(queue_discard_zeroes_data, "discard_zeroes_data");
  477. QUEUE_RO_ENTRY(queue_write_same_max, "write_same_max_bytes");
  478. QUEUE_RO_ENTRY(queue_write_zeroes_max, "write_zeroes_max_bytes");
  479. QUEUE_RO_ENTRY(queue_zone_append_max, "zone_append_max_bytes");
  480. QUEUE_RO_ENTRY(queue_zone_write_granularity, "zone_write_granularity");
  481. QUEUE_RO_ENTRY(queue_zoned, "zoned");
  482. QUEUE_RO_ENTRY(queue_nr_zones, "nr_zones");
  483. QUEUE_RO_ENTRY(queue_max_open_zones, "max_open_zones");
  484. QUEUE_RO_ENTRY(queue_max_active_zones, "max_active_zones");
  485. QUEUE_RW_ENTRY(queue_nomerges, "nomerges");
  486. QUEUE_RW_ENTRY(queue_rq_affinity, "rq_affinity");
  487. QUEUE_RW_ENTRY(queue_poll, "io_poll");
  488. QUEUE_RW_ENTRY(queue_poll_delay, "io_poll_delay");
  489. QUEUE_RW_ENTRY(queue_wc, "write_cache");
  490. QUEUE_RO_ENTRY(queue_fua, "fua");
  491. QUEUE_RO_ENTRY(queue_dax, "dax");
  492. QUEUE_RW_ENTRY(queue_io_timeout, "io_timeout");
  493. QUEUE_RW_ENTRY(queue_wb_lat, "wbt_lat_usec");
  494. QUEUE_RO_ENTRY(queue_virt_boundary_mask, "virt_boundary_mask");
  495. QUEUE_RO_ENTRY(queue_dma_alignment, "dma_alignment");
  496. #ifdef CONFIG_BLK_DEV_THROTTLING_LOW
  497. QUEUE_RW_ENTRY(blk_throtl_sample_time, "throttle_sample_time");
  498. #endif
  499. /* legacy alias for logical_block_size: */
  500. static struct queue_sysfs_entry queue_hw_sector_size_entry = {
  501. .attr = {.name = "hw_sector_size", .mode = 0444 },
  502. .show = queue_logical_block_size_show,
  503. };
  504. QUEUE_RW_ENTRY(queue_nonrot, "rotational");
  505. QUEUE_RW_ENTRY(queue_iostats, "iostats");
  506. QUEUE_RW_ENTRY(queue_random, "add_random");
  507. QUEUE_RW_ENTRY(queue_stable_writes, "stable_writes");
  508. static struct attribute *queue_attrs[] = {
  509. &queue_requests_entry.attr,
  510. &queue_ra_entry.attr,
  511. &queue_max_hw_sectors_entry.attr,
  512. &queue_max_sectors_entry.attr,
  513. &queue_max_segments_entry.attr,
  514. &queue_max_discard_segments_entry.attr,
  515. &queue_max_integrity_segments_entry.attr,
  516. &queue_max_segment_size_entry.attr,
  517. &elv_iosched_entry.attr,
  518. &queue_hw_sector_size_entry.attr,
  519. &queue_logical_block_size_entry.attr,
  520. &queue_physical_block_size_entry.attr,
  521. &queue_chunk_sectors_entry.attr,
  522. &queue_io_min_entry.attr,
  523. &queue_io_opt_entry.attr,
  524. &queue_discard_granularity_entry.attr,
  525. &queue_discard_max_entry.attr,
  526. &queue_discard_max_hw_entry.attr,
  527. &queue_discard_zeroes_data_entry.attr,
  528. &queue_write_same_max_entry.attr,
  529. &queue_write_zeroes_max_entry.attr,
  530. &queue_zone_append_max_entry.attr,
  531. &queue_zone_write_granularity_entry.attr,
  532. &queue_nonrot_entry.attr,
  533. &queue_zoned_entry.attr,
  534. &queue_nr_zones_entry.attr,
  535. &queue_max_open_zones_entry.attr,
  536. &queue_max_active_zones_entry.attr,
  537. &queue_nomerges_entry.attr,
  538. &queue_rq_affinity_entry.attr,
  539. &queue_iostats_entry.attr,
  540. &queue_stable_writes_entry.attr,
  541. &queue_random_entry.attr,
  542. &queue_poll_entry.attr,
  543. &queue_wc_entry.attr,
  544. &queue_fua_entry.attr,
  545. &queue_dax_entry.attr,
  546. &queue_wb_lat_entry.attr,
  547. &queue_poll_delay_entry.attr,
  548. &queue_io_timeout_entry.attr,
  549. #ifdef CONFIG_BLK_DEV_THROTTLING_LOW
  550. &blk_throtl_sample_time_entry.attr,
  551. #endif
  552. &queue_virt_boundary_mask_entry.attr,
  553. &queue_dma_alignment_entry.attr,
  554. NULL,
  555. };
  556. static umode_t queue_attr_visible(struct kobject *kobj, struct attribute *attr,
  557. int n)
  558. {
  559. struct request_queue *q =
  560. container_of(kobj, struct request_queue, kobj);
  561. if (attr == &queue_io_timeout_entry.attr &&
  562. (!q->mq_ops || !q->mq_ops->timeout))
  563. return 0;
  564. if ((attr == &queue_max_open_zones_entry.attr ||
  565. attr == &queue_max_active_zones_entry.attr) &&
  566. !blk_queue_is_zoned(q))
  567. return 0;
  568. return attr->mode;
  569. }
  570. static struct attribute_group queue_attr_group = {
  571. .attrs = queue_attrs,
  572. .is_visible = queue_attr_visible,
  573. };
  574. #define to_queue(atr) container_of((atr), struct queue_sysfs_entry, attr)
  575. static ssize_t
  576. queue_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
  577. {
  578. struct queue_sysfs_entry *entry = to_queue(attr);
  579. struct request_queue *q =
  580. container_of(kobj, struct request_queue, kobj);
  581. ssize_t res;
  582. if (!entry->show)
  583. return -EIO;
  584. mutex_lock(&q->sysfs_lock);
  585. res = entry->show(q, page);
  586. mutex_unlock(&q->sysfs_lock);
  587. return res;
  588. }
  589. static ssize_t
  590. queue_attr_store(struct kobject *kobj, struct attribute *attr,
  591. const char *page, size_t length)
  592. {
  593. struct queue_sysfs_entry *entry = to_queue(attr);
  594. struct request_queue *q;
  595. ssize_t res;
  596. if (!entry->store)
  597. return -EIO;
  598. q = container_of(kobj, struct request_queue, kobj);
  599. mutex_lock(&q->sysfs_lock);
  600. res = entry->store(q, page, length);
  601. mutex_unlock(&q->sysfs_lock);
  602. return res;
  603. }
  604. static void blk_free_queue_rcu(struct rcu_head *rcu_head)
  605. {
  606. struct request_queue *q = container_of(rcu_head, struct request_queue,
  607. rcu_head);
  608. percpu_ref_exit(&q->q_usage_counter);
  609. kmem_cache_free(blk_get_queue_kmem_cache(blk_queue_has_srcu(q)), q);
  610. }
  611. /**
  612. * blk_release_queue - releases all allocated resources of the request_queue
  613. * @kobj: pointer to a kobject, whose container is a request_queue
  614. *
  615. * This function releases all allocated resources of the request queue.
  616. *
  617. * The struct request_queue refcount is incremented with blk_get_queue() and
  618. * decremented with blk_put_queue(). Once the refcount reaches 0 this function
  619. * is called.
  620. *
  621. * Drivers exist which depend on the release of the request_queue to be
  622. * synchronous, it should not be deferred.
  623. *
  624. * Context: can sleep
  625. */
  626. static void blk_release_queue(struct kobject *kobj)
  627. {
  628. struct request_queue *q =
  629. container_of(kobj, struct request_queue, kobj);
  630. might_sleep();
  631. if (q->poll_stat)
  632. blk_stat_remove_callback(q, q->poll_cb);
  633. blk_stat_free_callback(q->poll_cb);
  634. blk_free_queue_stats(q->stats);
  635. kfree(q->poll_stat);
  636. if (queue_is_mq(q))
  637. blk_mq_release(q);
  638. if (blk_queue_has_srcu(q))
  639. cleanup_srcu_struct(q->srcu);
  640. ida_free(&blk_queue_ida, q->id);
  641. call_rcu(&q->rcu_head, blk_free_queue_rcu);
  642. }
  643. static const struct sysfs_ops queue_sysfs_ops = {
  644. .show = queue_attr_show,
  645. .store = queue_attr_store,
  646. };
  647. static const struct attribute_group *blk_queue_attr_groups[] = {
  648. &queue_attr_group,
  649. NULL
  650. };
  651. struct kobj_type blk_queue_ktype = {
  652. .default_groups = blk_queue_attr_groups,
  653. .sysfs_ops = &queue_sysfs_ops,
  654. .release = blk_release_queue,
  655. };
  656. /**
  657. * blk_register_queue - register a block layer queue with sysfs
  658. * @disk: Disk of which the request queue should be registered with sysfs.
  659. */
  660. int blk_register_queue(struct gendisk *disk)
  661. {
  662. struct request_queue *q = disk->queue;
  663. int ret;
  664. mutex_lock(&q->sysfs_dir_lock);
  665. ret = kobject_add(&q->kobj, &disk_to_dev(disk)->kobj, "queue");
  666. if (ret < 0)
  667. goto unlock;
  668. if (queue_is_mq(q))
  669. blk_mq_sysfs_register(disk);
  670. mutex_lock(&q->sysfs_lock);
  671. mutex_lock(&q->debugfs_mutex);
  672. q->debugfs_dir = debugfs_create_dir(kobject_name(q->kobj.parent),
  673. blk_debugfs_root);
  674. if (queue_is_mq(q))
  675. blk_mq_debugfs_register(q);
  676. mutex_unlock(&q->debugfs_mutex);
  677. ret = disk_register_independent_access_ranges(disk);
  678. if (ret)
  679. goto put_dev;
  680. if (q->elevator) {
  681. ret = elv_register_queue(q, false);
  682. if (ret)
  683. goto put_dev;
  684. }
  685. ret = blk_crypto_sysfs_register(disk);
  686. if (ret)
  687. goto put_dev;
  688. blk_queue_flag_set(QUEUE_FLAG_REGISTERED, q);
  689. wbt_enable_default(q);
  690. blk_throtl_register(disk);
  691. /* Now everything is ready and send out KOBJ_ADD uevent */
  692. kobject_uevent(&q->kobj, KOBJ_ADD);
  693. if (q->elevator)
  694. kobject_uevent(&q->elevator->kobj, KOBJ_ADD);
  695. mutex_unlock(&q->sysfs_lock);
  696. unlock:
  697. mutex_unlock(&q->sysfs_dir_lock);
  698. /*
  699. * SCSI probing may synchronously create and destroy a lot of
  700. * request_queues for non-existent devices. Shutting down a fully
  701. * functional queue takes measureable wallclock time as RCU grace
  702. * periods are involved. To avoid excessive latency in these
  703. * cases, a request_queue starts out in a degraded mode which is
  704. * faster to shut down and is made fully functional here as
  705. * request_queues for non-existent devices never get registered.
  706. */
  707. if (!blk_queue_init_done(q)) {
  708. blk_queue_flag_set(QUEUE_FLAG_INIT_DONE, q);
  709. percpu_ref_switch_to_percpu(&q->q_usage_counter);
  710. }
  711. return ret;
  712. put_dev:
  713. elv_unregister_queue(q);
  714. disk_unregister_independent_access_ranges(disk);
  715. mutex_unlock(&q->sysfs_lock);
  716. mutex_unlock(&q->sysfs_dir_lock);
  717. kobject_del(&q->kobj);
  718. return ret;
  719. }
  720. /**
  721. * blk_unregister_queue - counterpart of blk_register_queue()
  722. * @disk: Disk of which the request queue should be unregistered from sysfs.
  723. *
  724. * Note: the caller is responsible for guaranteeing that this function is called
  725. * after blk_register_queue() has finished.
  726. */
  727. void blk_unregister_queue(struct gendisk *disk)
  728. {
  729. struct request_queue *q = disk->queue;
  730. if (WARN_ON(!q))
  731. return;
  732. /* Return early if disk->queue was never registered. */
  733. if (!blk_queue_registered(q))
  734. return;
  735. /*
  736. * Since sysfs_remove_dir() prevents adding new directory entries
  737. * before removal of existing entries starts, protect against
  738. * concurrent elv_iosched_store() calls.
  739. */
  740. mutex_lock(&q->sysfs_lock);
  741. blk_queue_flag_clear(QUEUE_FLAG_REGISTERED, q);
  742. mutex_unlock(&q->sysfs_lock);
  743. mutex_lock(&q->sysfs_dir_lock);
  744. /*
  745. * Remove the sysfs attributes before unregistering the queue data
  746. * structures that can be modified through sysfs.
  747. */
  748. if (queue_is_mq(q))
  749. blk_mq_sysfs_unregister(disk);
  750. blk_crypto_sysfs_unregister(disk);
  751. mutex_lock(&q->sysfs_lock);
  752. elv_unregister_queue(q);
  753. disk_unregister_independent_access_ranges(disk);
  754. mutex_unlock(&q->sysfs_lock);
  755. /* Now that we've deleted all child objects, we can delete the queue. */
  756. kobject_uevent(&q->kobj, KOBJ_REMOVE);
  757. kobject_del(&q->kobj);
  758. mutex_unlock(&q->sysfs_dir_lock);
  759. mutex_lock(&q->debugfs_mutex);
  760. blk_trace_shutdown(q);
  761. debugfs_remove_recursive(q->debugfs_dir);
  762. q->debugfs_dir = NULL;
  763. q->sched_debugfs_dir = NULL;
  764. q->rqos_debugfs_dir = NULL;
  765. mutex_unlock(&q->debugfs_mutex);
  766. }