rnbd-clt.c 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * RDMA Network Block Driver
  4. *
  5. * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved.
  6. * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved.
  7. * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved.
  8. */
  9. #undef pr_fmt
  10. #define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt
  11. #include <linux/module.h>
  12. #include <linux/blkdev.h>
  13. #include <linux/hdreg.h>
  14. #include <linux/scatterlist.h>
  15. #include <linux/idr.h>
  16. #include "rnbd-clt.h"
  17. MODULE_DESCRIPTION("RDMA Network Block Device Client");
  18. MODULE_LICENSE("GPL");
  19. static int rnbd_client_major;
  20. static DEFINE_IDA(index_ida);
  21. static DEFINE_MUTEX(sess_lock);
  22. static LIST_HEAD(sess_list);
  23. static struct workqueue_struct *rnbd_clt_wq;
  24. /*
  25. * Maximum number of partitions an instance can have.
  26. * 6 bits = 64 minors = 63 partitions (one minor is used for the device itself)
  27. */
  28. #define RNBD_PART_BITS 6
  29. static inline bool rnbd_clt_get_sess(struct rnbd_clt_session *sess)
  30. {
  31. return refcount_inc_not_zero(&sess->refcount);
  32. }
  33. static void free_sess(struct rnbd_clt_session *sess);
  34. static void rnbd_clt_put_sess(struct rnbd_clt_session *sess)
  35. {
  36. might_sleep();
  37. if (refcount_dec_and_test(&sess->refcount))
  38. free_sess(sess);
  39. }
  40. static void rnbd_clt_put_dev(struct rnbd_clt_dev *dev)
  41. {
  42. might_sleep();
  43. if (!refcount_dec_and_test(&dev->refcount))
  44. return;
  45. ida_free(&index_ida, dev->clt_device_id);
  46. kfree(dev->hw_queues);
  47. kfree(dev->pathname);
  48. rnbd_clt_put_sess(dev->sess);
  49. mutex_destroy(&dev->lock);
  50. kfree(dev);
  51. }
  52. static inline bool rnbd_clt_get_dev(struct rnbd_clt_dev *dev)
  53. {
  54. return refcount_inc_not_zero(&dev->refcount);
  55. }
  56. static void rnbd_clt_change_capacity(struct rnbd_clt_dev *dev,
  57. sector_t new_nsectors)
  58. {
  59. if (get_capacity(dev->gd) == new_nsectors)
  60. return;
  61. /*
  62. * If the size changed, we need to revalidate it
  63. */
  64. rnbd_clt_info(dev, "Device size changed from %llu to %llu sectors\n",
  65. get_capacity(dev->gd), new_nsectors);
  66. set_capacity_and_notify(dev->gd, new_nsectors);
  67. }
  68. static int process_msg_open_rsp(struct rnbd_clt_dev *dev,
  69. struct rnbd_msg_open_rsp *rsp)
  70. {
  71. struct kobject *gd_kobj;
  72. int err = 0;
  73. mutex_lock(&dev->lock);
  74. if (dev->dev_state == DEV_STATE_UNMAPPED) {
  75. rnbd_clt_info(dev,
  76. "Ignoring Open-Response message from server for unmapped device\n");
  77. err = -ENOENT;
  78. goto out;
  79. }
  80. if (dev->dev_state == DEV_STATE_MAPPED_DISCONNECTED) {
  81. u64 nsectors = le64_to_cpu(rsp->nsectors);
  82. rnbd_clt_change_capacity(dev, nsectors);
  83. gd_kobj = &disk_to_dev(dev->gd)->kobj;
  84. kobject_uevent(gd_kobj, KOBJ_ONLINE);
  85. rnbd_clt_info(dev, "Device online, device remapped successfully\n");
  86. }
  87. if (!rsp->logical_block_size) {
  88. err = -EINVAL;
  89. goto out;
  90. }
  91. dev->device_id = le32_to_cpu(rsp->device_id);
  92. dev->dev_state = DEV_STATE_MAPPED;
  93. out:
  94. mutex_unlock(&dev->lock);
  95. return err;
  96. }
  97. int rnbd_clt_resize_disk(struct rnbd_clt_dev *dev, sector_t newsize)
  98. {
  99. int ret = 0;
  100. mutex_lock(&dev->lock);
  101. if (dev->dev_state != DEV_STATE_MAPPED) {
  102. pr_err("Failed to set new size of the device, device is not opened\n");
  103. ret = -ENOENT;
  104. goto out;
  105. }
  106. rnbd_clt_change_capacity(dev, newsize);
  107. out:
  108. mutex_unlock(&dev->lock);
  109. return ret;
  110. }
  111. static inline void rnbd_clt_dev_requeue(struct rnbd_queue *q)
  112. {
  113. if (WARN_ON(!q->hctx))
  114. return;
  115. /* We can come here from interrupt, thus async=true */
  116. blk_mq_run_hw_queue(q->hctx, true);
  117. }
  118. enum {
  119. RNBD_DELAY_IFBUSY = -1,
  120. };
  121. /**
  122. * rnbd_get_cpu_qlist() - finds a list with HW queues to be rerun
  123. * @sess: Session to find a queue for
  124. * @cpu: Cpu to start the search from
  125. *
  126. * Description:
  127. * Each CPU has a list of HW queues, which needs to be rerun. If a list
  128. * is not empty - it is marked with a bit. This function finds first
  129. * set bit in a bitmap and returns corresponding CPU list.
  130. */
  131. static struct rnbd_cpu_qlist *
  132. rnbd_get_cpu_qlist(struct rnbd_clt_session *sess, int cpu)
  133. {
  134. int bit;
  135. /* Search from cpu to nr_cpu_ids */
  136. bit = find_next_bit(sess->cpu_queues_bm, nr_cpu_ids, cpu);
  137. if (bit < nr_cpu_ids) {
  138. return per_cpu_ptr(sess->cpu_queues, bit);
  139. } else if (cpu != 0) {
  140. /* Search from 0 to cpu */
  141. bit = find_first_bit(sess->cpu_queues_bm, cpu);
  142. if (bit < cpu)
  143. return per_cpu_ptr(sess->cpu_queues, bit);
  144. }
  145. return NULL;
  146. }
  147. static inline int nxt_cpu(int cpu)
  148. {
  149. return (cpu + 1) % nr_cpu_ids;
  150. }
  151. /**
  152. * rnbd_rerun_if_needed() - rerun next queue marked as stopped
  153. * @sess: Session to rerun a queue on
  154. *
  155. * Description:
  156. * Each CPU has it's own list of HW queues, which should be rerun.
  157. * Function finds such list with HW queues, takes a list lock, picks up
  158. * the first HW queue out of the list and requeues it.
  159. *
  160. * Return:
  161. * True if the queue was requeued, false otherwise.
  162. *
  163. * Context:
  164. * Does not matter.
  165. */
  166. static bool rnbd_rerun_if_needed(struct rnbd_clt_session *sess)
  167. {
  168. struct rnbd_queue *q = NULL;
  169. struct rnbd_cpu_qlist *cpu_q;
  170. unsigned long flags;
  171. int *cpup;
  172. /*
  173. * To keep fairness and not to let other queues starve we always
  174. * try to wake up someone else in round-robin manner. That of course
  175. * increases latency but queues always have a chance to be executed.
  176. */
  177. cpup = get_cpu_ptr(sess->cpu_rr);
  178. for (cpu_q = rnbd_get_cpu_qlist(sess, nxt_cpu(*cpup)); cpu_q;
  179. cpu_q = rnbd_get_cpu_qlist(sess, nxt_cpu(cpu_q->cpu))) {
  180. if (!spin_trylock_irqsave(&cpu_q->requeue_lock, flags))
  181. continue;
  182. if (!test_bit(cpu_q->cpu, sess->cpu_queues_bm))
  183. goto unlock;
  184. q = list_first_entry_or_null(&cpu_q->requeue_list,
  185. typeof(*q), requeue_list);
  186. if (WARN_ON(!q))
  187. goto clear_bit;
  188. list_del_init(&q->requeue_list);
  189. clear_bit_unlock(0, &q->in_list);
  190. if (list_empty(&cpu_q->requeue_list)) {
  191. /* Clear bit if nothing is left */
  192. clear_bit:
  193. clear_bit(cpu_q->cpu, sess->cpu_queues_bm);
  194. }
  195. unlock:
  196. spin_unlock_irqrestore(&cpu_q->requeue_lock, flags);
  197. if (q)
  198. break;
  199. }
  200. /**
  201. * Saves the CPU that is going to be requeued on the per-cpu var. Just
  202. * incrementing it doesn't work because rnbd_get_cpu_qlist() will
  203. * always return the first CPU with something on the queue list when the
  204. * value stored on the var is greater than the last CPU with something
  205. * on the list.
  206. */
  207. if (cpu_q)
  208. *cpup = cpu_q->cpu;
  209. put_cpu_ptr(sess->cpu_rr);
  210. if (q)
  211. rnbd_clt_dev_requeue(q);
  212. return q;
  213. }
  214. /**
  215. * rnbd_rerun_all_if_idle() - rerun all queues left in the list if
  216. * session is idling (there are no requests
  217. * in-flight).
  218. * @sess: Session to rerun the queues on
  219. *
  220. * Description:
  221. * This function tries to rerun all stopped queues if there are no
  222. * requests in-flight anymore. This function tries to solve an obvious
  223. * problem, when number of tags < than number of queues (hctx), which
  224. * are stopped and put to sleep. If last permit, which has been just put,
  225. * does not wake up all left queues (hctxs), IO requests hang forever.
  226. *
  227. * That can happen when all number of permits, say N, have been exhausted
  228. * from one CPU, and we have many block devices per session, say M.
  229. * Each block device has it's own queue (hctx) for each CPU, so eventually
  230. * we can put that number of queues (hctxs) to sleep: M x nr_cpu_ids.
  231. * If number of permits N < M x nr_cpu_ids finally we will get an IO hang.
  232. *
  233. * To avoid this hang last caller of rnbd_put_permit() (last caller is the
  234. * one who observes sess->busy == 0) must wake up all remaining queues.
  235. *
  236. * Context:
  237. * Does not matter.
  238. */
  239. static void rnbd_rerun_all_if_idle(struct rnbd_clt_session *sess)
  240. {
  241. bool requeued;
  242. do {
  243. requeued = rnbd_rerun_if_needed(sess);
  244. } while (atomic_read(&sess->busy) == 0 && requeued);
  245. }
  246. static struct rtrs_permit *rnbd_get_permit(struct rnbd_clt_session *sess,
  247. enum rtrs_clt_con_type con_type,
  248. enum wait_type wait)
  249. {
  250. struct rtrs_permit *permit;
  251. permit = rtrs_clt_get_permit(sess->rtrs, con_type, wait);
  252. if (permit)
  253. /* We have a subtle rare case here, when all permits can be
  254. * consumed before busy counter increased. This is safe,
  255. * because loser will get NULL as a permit, observe 0 busy
  256. * counter and immediately restart the queue himself.
  257. */
  258. atomic_inc(&sess->busy);
  259. return permit;
  260. }
  261. static void rnbd_put_permit(struct rnbd_clt_session *sess,
  262. struct rtrs_permit *permit)
  263. {
  264. rtrs_clt_put_permit(sess->rtrs, permit);
  265. atomic_dec(&sess->busy);
  266. /* Paired with rnbd_clt_dev_add_to_requeue(). Decrement first
  267. * and then check queue bits.
  268. */
  269. smp_mb__after_atomic();
  270. rnbd_rerun_all_if_idle(sess);
  271. }
  272. static struct rnbd_iu *rnbd_get_iu(struct rnbd_clt_session *sess,
  273. enum rtrs_clt_con_type con_type,
  274. enum wait_type wait)
  275. {
  276. struct rnbd_iu *iu;
  277. struct rtrs_permit *permit;
  278. iu = kzalloc(sizeof(*iu), GFP_KERNEL);
  279. if (!iu)
  280. return NULL;
  281. permit = rnbd_get_permit(sess, con_type, wait);
  282. if (!permit) {
  283. kfree(iu);
  284. return NULL;
  285. }
  286. iu->permit = permit;
  287. /*
  288. * 1st reference is dropped after finishing sending a "user" message,
  289. * 2nd reference is dropped after confirmation with the response is
  290. * returned.
  291. * 1st and 2nd can happen in any order, so the rnbd_iu should be
  292. * released (rtrs_permit returned to rtrs) only after both
  293. * are finished.
  294. */
  295. atomic_set(&iu->refcount, 2);
  296. init_waitqueue_head(&iu->comp.wait);
  297. iu->comp.errno = INT_MAX;
  298. if (sg_alloc_table(&iu->sgt, 1, GFP_KERNEL)) {
  299. rnbd_put_permit(sess, permit);
  300. kfree(iu);
  301. return NULL;
  302. }
  303. return iu;
  304. }
  305. static void rnbd_put_iu(struct rnbd_clt_session *sess, struct rnbd_iu *iu)
  306. {
  307. if (atomic_dec_and_test(&iu->refcount)) {
  308. sg_free_table(&iu->sgt);
  309. rnbd_put_permit(sess, iu->permit);
  310. kfree(iu);
  311. }
  312. }
  313. static void rnbd_softirq_done_fn(struct request *rq)
  314. {
  315. struct rnbd_clt_dev *dev = rq->q->disk->private_data;
  316. struct rnbd_clt_session *sess = dev->sess;
  317. struct rnbd_iu *iu;
  318. iu = blk_mq_rq_to_pdu(rq);
  319. sg_free_table_chained(&iu->sgt, RNBD_INLINE_SG_CNT);
  320. rnbd_put_permit(sess, iu->permit);
  321. blk_mq_end_request(rq, errno_to_blk_status(iu->errno));
  322. }
  323. static void msg_io_conf(void *priv, int errno)
  324. {
  325. struct rnbd_iu *iu = priv;
  326. struct rnbd_clt_dev *dev = iu->dev;
  327. struct request *rq = iu->rq;
  328. int rw = rq_data_dir(rq);
  329. iu->errno = errno;
  330. blk_mq_complete_request(rq);
  331. if (errno)
  332. rnbd_clt_info_rl(dev, "%s I/O failed with err: %d\n",
  333. rw == READ ? "read" : "write", errno);
  334. }
  335. static void wake_up_iu_comp(struct rnbd_iu *iu, int errno)
  336. {
  337. iu->comp.errno = errno;
  338. wake_up(&iu->comp.wait);
  339. }
  340. static void msg_conf(void *priv, int errno)
  341. {
  342. struct rnbd_iu *iu = priv;
  343. iu->errno = errno;
  344. schedule_work(&iu->work);
  345. }
  346. static int send_usr_msg(struct rtrs_clt_sess *rtrs, int dir,
  347. struct rnbd_iu *iu, struct kvec *vec,
  348. size_t len, struct scatterlist *sg, unsigned int sg_len,
  349. void (*conf)(struct work_struct *work),
  350. int *errno, int wait)
  351. {
  352. int err;
  353. struct rtrs_clt_req_ops req_ops;
  354. INIT_WORK(&iu->work, conf);
  355. req_ops = (struct rtrs_clt_req_ops) {
  356. .priv = iu,
  357. .conf_fn = msg_conf,
  358. };
  359. err = rtrs_clt_request(dir, &req_ops, rtrs, iu->permit,
  360. vec, 1, len, sg, sg_len);
  361. if (!err && wait) {
  362. wait_event(iu->comp.wait, iu->comp.errno != INT_MAX);
  363. *errno = iu->comp.errno;
  364. } else {
  365. *errno = 0;
  366. }
  367. return err;
  368. }
  369. static void msg_close_conf(struct work_struct *work)
  370. {
  371. struct rnbd_iu *iu = container_of(work, struct rnbd_iu, work);
  372. struct rnbd_clt_dev *dev = iu->dev;
  373. wake_up_iu_comp(iu, iu->errno);
  374. rnbd_put_iu(dev->sess, iu);
  375. rnbd_clt_put_dev(dev);
  376. }
  377. static int send_msg_close(struct rnbd_clt_dev *dev, u32 device_id,
  378. enum wait_type wait)
  379. {
  380. struct rnbd_clt_session *sess = dev->sess;
  381. struct rnbd_msg_close msg;
  382. struct rnbd_iu *iu;
  383. struct kvec vec = {
  384. .iov_base = &msg,
  385. .iov_len = sizeof(msg)
  386. };
  387. int err, errno;
  388. iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT);
  389. if (!iu)
  390. return -ENOMEM;
  391. iu->buf = NULL;
  392. iu->dev = dev;
  393. msg.hdr.type = cpu_to_le16(RNBD_MSG_CLOSE);
  394. msg.device_id = cpu_to_le32(device_id);
  395. WARN_ON(!rnbd_clt_get_dev(dev));
  396. err = send_usr_msg(sess->rtrs, WRITE, iu, &vec, 0, NULL, 0,
  397. msg_close_conf, &errno, wait);
  398. if (err) {
  399. rnbd_clt_put_dev(dev);
  400. rnbd_put_iu(sess, iu);
  401. } else {
  402. err = errno;
  403. }
  404. rnbd_put_iu(sess, iu);
  405. return err;
  406. }
  407. static void msg_open_conf(struct work_struct *work)
  408. {
  409. struct rnbd_iu *iu = container_of(work, struct rnbd_iu, work);
  410. struct rnbd_msg_open_rsp *rsp = iu->buf;
  411. struct rnbd_clt_dev *dev = iu->dev;
  412. int errno = iu->errno;
  413. bool from_map = false;
  414. /* INIT state is only triggered from rnbd_clt_map_device */
  415. if (dev->dev_state == DEV_STATE_INIT)
  416. from_map = true;
  417. if (errno) {
  418. rnbd_clt_err(dev,
  419. "Opening failed, server responded: %d\n",
  420. errno);
  421. } else {
  422. errno = process_msg_open_rsp(dev, rsp);
  423. if (errno) {
  424. u32 device_id = le32_to_cpu(rsp->device_id);
  425. /*
  426. * If server thinks its fine, but we fail to process
  427. * then be nice and send a close to server.
  428. */
  429. send_msg_close(dev, device_id, RTRS_PERMIT_NOWAIT);
  430. }
  431. }
  432. /* We free rsp in rnbd_clt_map_device for map scenario */
  433. if (!from_map)
  434. kfree(rsp);
  435. wake_up_iu_comp(iu, errno);
  436. rnbd_put_iu(dev->sess, iu);
  437. rnbd_clt_put_dev(dev);
  438. }
  439. static void msg_sess_info_conf(struct work_struct *work)
  440. {
  441. struct rnbd_iu *iu = container_of(work, struct rnbd_iu, work);
  442. struct rnbd_msg_sess_info_rsp *rsp = iu->buf;
  443. struct rnbd_clt_session *sess = iu->sess;
  444. if (!iu->errno)
  445. sess->ver = min_t(u8, rsp->ver, RNBD_PROTO_VER_MAJOR);
  446. kfree(rsp);
  447. wake_up_iu_comp(iu, iu->errno);
  448. rnbd_put_iu(sess, iu);
  449. rnbd_clt_put_sess(sess);
  450. }
  451. static int send_msg_open(struct rnbd_clt_dev *dev, enum wait_type wait)
  452. {
  453. struct rnbd_clt_session *sess = dev->sess;
  454. struct rnbd_msg_open_rsp *rsp;
  455. struct rnbd_msg_open msg;
  456. struct rnbd_iu *iu;
  457. struct kvec vec = {
  458. .iov_base = &msg,
  459. .iov_len = sizeof(msg)
  460. };
  461. int err, errno;
  462. rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
  463. if (!rsp)
  464. return -ENOMEM;
  465. iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT);
  466. if (!iu) {
  467. kfree(rsp);
  468. return -ENOMEM;
  469. }
  470. iu->buf = rsp;
  471. iu->dev = dev;
  472. sg_init_one(iu->sgt.sgl, rsp, sizeof(*rsp));
  473. msg.hdr.type = cpu_to_le16(RNBD_MSG_OPEN);
  474. msg.access_mode = dev->access_mode;
  475. strscpy(msg.dev_name, dev->pathname, sizeof(msg.dev_name));
  476. WARN_ON(!rnbd_clt_get_dev(dev));
  477. err = send_usr_msg(sess->rtrs, READ, iu,
  478. &vec, sizeof(*rsp), iu->sgt.sgl, 1,
  479. msg_open_conf, &errno, wait);
  480. if (err) {
  481. rnbd_clt_put_dev(dev);
  482. rnbd_put_iu(sess, iu);
  483. kfree(rsp);
  484. } else {
  485. err = errno;
  486. }
  487. rnbd_put_iu(sess, iu);
  488. return err;
  489. }
  490. static int send_msg_sess_info(struct rnbd_clt_session *sess, enum wait_type wait)
  491. {
  492. struct rnbd_msg_sess_info_rsp *rsp;
  493. struct rnbd_msg_sess_info msg;
  494. struct rnbd_iu *iu;
  495. struct kvec vec = {
  496. .iov_base = &msg,
  497. .iov_len = sizeof(msg)
  498. };
  499. int err, errno;
  500. rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
  501. if (!rsp)
  502. return -ENOMEM;
  503. iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT);
  504. if (!iu) {
  505. kfree(rsp);
  506. return -ENOMEM;
  507. }
  508. iu->buf = rsp;
  509. iu->sess = sess;
  510. sg_init_one(iu->sgt.sgl, rsp, sizeof(*rsp));
  511. msg.hdr.type = cpu_to_le16(RNBD_MSG_SESS_INFO);
  512. msg.ver = RNBD_PROTO_VER_MAJOR;
  513. if (!rnbd_clt_get_sess(sess)) {
  514. /*
  515. * That can happen only in one case, when RTRS has restablished
  516. * the connection and link_ev() is called, but session is almost
  517. * dead, last reference on session is put and caller is waiting
  518. * for RTRS to close everything.
  519. */
  520. err = -ENODEV;
  521. goto put_iu;
  522. }
  523. err = send_usr_msg(sess->rtrs, READ, iu,
  524. &vec, sizeof(*rsp), iu->sgt.sgl, 1,
  525. msg_sess_info_conf, &errno, wait);
  526. if (err) {
  527. rnbd_clt_put_sess(sess);
  528. put_iu:
  529. rnbd_put_iu(sess, iu);
  530. kfree(rsp);
  531. } else {
  532. err = errno;
  533. }
  534. rnbd_put_iu(sess, iu);
  535. return err;
  536. }
  537. static void set_dev_states_to_disconnected(struct rnbd_clt_session *sess)
  538. {
  539. struct rnbd_clt_dev *dev;
  540. struct kobject *gd_kobj;
  541. mutex_lock(&sess->lock);
  542. list_for_each_entry(dev, &sess->devs_list, list) {
  543. rnbd_clt_err(dev, "Device disconnected.\n");
  544. mutex_lock(&dev->lock);
  545. if (dev->dev_state == DEV_STATE_MAPPED) {
  546. dev->dev_state = DEV_STATE_MAPPED_DISCONNECTED;
  547. gd_kobj = &disk_to_dev(dev->gd)->kobj;
  548. kobject_uevent(gd_kobj, KOBJ_OFFLINE);
  549. }
  550. mutex_unlock(&dev->lock);
  551. }
  552. mutex_unlock(&sess->lock);
  553. }
  554. static void remap_devs(struct rnbd_clt_session *sess)
  555. {
  556. struct rnbd_clt_dev *dev;
  557. struct rtrs_attrs attrs;
  558. int err;
  559. /*
  560. * Careful here: we are called from RTRS link event directly,
  561. * thus we can't send any RTRS request and wait for response
  562. * or RTRS will not be able to complete request with failure
  563. * if something goes wrong (failing of outstanding requests
  564. * happens exactly from the context where we are blocking now).
  565. *
  566. * So to avoid deadlocks each usr message sent from here must
  567. * be asynchronous.
  568. */
  569. err = send_msg_sess_info(sess, RTRS_PERMIT_NOWAIT);
  570. if (err) {
  571. pr_err("send_msg_sess_info(\"%s\"): %d\n", sess->sessname, err);
  572. return;
  573. }
  574. err = rtrs_clt_query(sess->rtrs, &attrs);
  575. if (err) {
  576. pr_err("rtrs_clt_query(\"%s\"): %d\n", sess->sessname, err);
  577. return;
  578. }
  579. mutex_lock(&sess->lock);
  580. sess->max_io_size = attrs.max_io_size;
  581. list_for_each_entry(dev, &sess->devs_list, list) {
  582. bool skip;
  583. mutex_lock(&dev->lock);
  584. skip = (dev->dev_state == DEV_STATE_INIT);
  585. mutex_unlock(&dev->lock);
  586. if (skip)
  587. /*
  588. * When device is establishing connection for the first
  589. * time - do not remap, it will be closed soon.
  590. */
  591. continue;
  592. rnbd_clt_info(dev, "session reconnected, remapping device\n");
  593. err = send_msg_open(dev, RTRS_PERMIT_NOWAIT);
  594. if (err) {
  595. rnbd_clt_err(dev, "send_msg_open(): %d\n", err);
  596. break;
  597. }
  598. }
  599. mutex_unlock(&sess->lock);
  600. }
  601. static void rnbd_clt_link_ev(void *priv, enum rtrs_clt_link_ev ev)
  602. {
  603. struct rnbd_clt_session *sess = priv;
  604. switch (ev) {
  605. case RTRS_CLT_LINK_EV_DISCONNECTED:
  606. set_dev_states_to_disconnected(sess);
  607. break;
  608. case RTRS_CLT_LINK_EV_RECONNECTED:
  609. remap_devs(sess);
  610. break;
  611. default:
  612. pr_err("Unknown session event received (%d), session: %s\n",
  613. ev, sess->sessname);
  614. }
  615. }
  616. static void rnbd_init_cpu_qlists(struct rnbd_cpu_qlist __percpu *cpu_queues)
  617. {
  618. unsigned int cpu;
  619. struct rnbd_cpu_qlist *cpu_q;
  620. for_each_possible_cpu(cpu) {
  621. cpu_q = per_cpu_ptr(cpu_queues, cpu);
  622. cpu_q->cpu = cpu;
  623. INIT_LIST_HEAD(&cpu_q->requeue_list);
  624. spin_lock_init(&cpu_q->requeue_lock);
  625. }
  626. }
  627. static void destroy_mq_tags(struct rnbd_clt_session *sess)
  628. {
  629. if (sess->tag_set.tags)
  630. blk_mq_free_tag_set(&sess->tag_set);
  631. }
  632. static inline void wake_up_rtrs_waiters(struct rnbd_clt_session *sess)
  633. {
  634. sess->rtrs_ready = true;
  635. wake_up_all(&sess->rtrs_waitq);
  636. }
  637. static void close_rtrs(struct rnbd_clt_session *sess)
  638. {
  639. might_sleep();
  640. if (!IS_ERR_OR_NULL(sess->rtrs)) {
  641. rtrs_clt_close(sess->rtrs);
  642. sess->rtrs = NULL;
  643. wake_up_rtrs_waiters(sess);
  644. }
  645. }
  646. static void free_sess(struct rnbd_clt_session *sess)
  647. {
  648. WARN_ON(!list_empty(&sess->devs_list));
  649. might_sleep();
  650. close_rtrs(sess);
  651. destroy_mq_tags(sess);
  652. if (!list_empty(&sess->list)) {
  653. mutex_lock(&sess_lock);
  654. list_del(&sess->list);
  655. mutex_unlock(&sess_lock);
  656. }
  657. free_percpu(sess->cpu_queues);
  658. free_percpu(sess->cpu_rr);
  659. mutex_destroy(&sess->lock);
  660. kfree(sess);
  661. }
  662. static struct rnbd_clt_session *alloc_sess(const char *sessname)
  663. {
  664. struct rnbd_clt_session *sess;
  665. int err, cpu;
  666. sess = kzalloc_node(sizeof(*sess), GFP_KERNEL, NUMA_NO_NODE);
  667. if (!sess)
  668. return ERR_PTR(-ENOMEM);
  669. strscpy(sess->sessname, sessname, sizeof(sess->sessname));
  670. atomic_set(&sess->busy, 0);
  671. mutex_init(&sess->lock);
  672. INIT_LIST_HEAD(&sess->devs_list);
  673. INIT_LIST_HEAD(&sess->list);
  674. bitmap_zero(sess->cpu_queues_bm, num_possible_cpus());
  675. init_waitqueue_head(&sess->rtrs_waitq);
  676. refcount_set(&sess->refcount, 1);
  677. sess->cpu_queues = alloc_percpu(struct rnbd_cpu_qlist);
  678. if (!sess->cpu_queues) {
  679. err = -ENOMEM;
  680. goto err;
  681. }
  682. rnbd_init_cpu_qlists(sess->cpu_queues);
  683. /*
  684. * That is simple percpu variable which stores cpu indices, which are
  685. * incremented on each access. We need that for the sake of fairness
  686. * to wake up queues in a round-robin manner.
  687. */
  688. sess->cpu_rr = alloc_percpu(int);
  689. if (!sess->cpu_rr) {
  690. err = -ENOMEM;
  691. goto err;
  692. }
  693. for_each_possible_cpu(cpu)
  694. * per_cpu_ptr(sess->cpu_rr, cpu) = cpu;
  695. return sess;
  696. err:
  697. free_sess(sess);
  698. return ERR_PTR(err);
  699. }
  700. static int wait_for_rtrs_connection(struct rnbd_clt_session *sess)
  701. {
  702. wait_event(sess->rtrs_waitq, sess->rtrs_ready);
  703. if (IS_ERR_OR_NULL(sess->rtrs))
  704. return -ECONNRESET;
  705. return 0;
  706. }
  707. static void wait_for_rtrs_disconnection(struct rnbd_clt_session *sess)
  708. __releases(&sess_lock)
  709. __acquires(&sess_lock)
  710. {
  711. DEFINE_WAIT(wait);
  712. prepare_to_wait(&sess->rtrs_waitq, &wait, TASK_UNINTERRUPTIBLE);
  713. if (IS_ERR_OR_NULL(sess->rtrs)) {
  714. finish_wait(&sess->rtrs_waitq, &wait);
  715. return;
  716. }
  717. mutex_unlock(&sess_lock);
  718. /* loop in caller, see __find_and_get_sess().
  719. * You can't leave mutex locked and call schedule(), you will catch a
  720. * deadlock with a caller of free_sess(), which has just put the last
  721. * reference and is about to take the sess_lock in order to delete
  722. * the session from the list.
  723. */
  724. schedule();
  725. mutex_lock(&sess_lock);
  726. }
  727. static struct rnbd_clt_session *__find_and_get_sess(const char *sessname)
  728. __releases(&sess_lock)
  729. __acquires(&sess_lock)
  730. {
  731. struct rnbd_clt_session *sess, *sn;
  732. int err;
  733. again:
  734. list_for_each_entry_safe(sess, sn, &sess_list, list) {
  735. if (strcmp(sessname, sess->sessname))
  736. continue;
  737. if (sess->rtrs_ready && IS_ERR_OR_NULL(sess->rtrs))
  738. /*
  739. * No RTRS connection, session is dying.
  740. */
  741. continue;
  742. if (rnbd_clt_get_sess(sess)) {
  743. /*
  744. * Alive session is found, wait for RTRS connection.
  745. */
  746. mutex_unlock(&sess_lock);
  747. err = wait_for_rtrs_connection(sess);
  748. if (err)
  749. rnbd_clt_put_sess(sess);
  750. mutex_lock(&sess_lock);
  751. if (err)
  752. /* Session is dying, repeat the loop */
  753. goto again;
  754. return sess;
  755. }
  756. /*
  757. * Ref is 0, session is dying, wait for RTRS disconnect
  758. * in order to avoid session names clashes.
  759. */
  760. wait_for_rtrs_disconnection(sess);
  761. /*
  762. * RTRS is disconnected and soon session will be freed,
  763. * so repeat a loop.
  764. */
  765. goto again;
  766. }
  767. return NULL;
  768. }
  769. /* caller is responsible for initializing 'first' to false */
  770. static struct
  771. rnbd_clt_session *find_or_create_sess(const char *sessname, bool *first)
  772. {
  773. struct rnbd_clt_session *sess = NULL;
  774. mutex_lock(&sess_lock);
  775. sess = __find_and_get_sess(sessname);
  776. if (!sess) {
  777. sess = alloc_sess(sessname);
  778. if (IS_ERR(sess)) {
  779. mutex_unlock(&sess_lock);
  780. return sess;
  781. }
  782. list_add(&sess->list, &sess_list);
  783. *first = true;
  784. }
  785. mutex_unlock(&sess_lock);
  786. return sess;
  787. }
  788. static int rnbd_client_open(struct gendisk *disk, blk_mode_t mode)
  789. {
  790. struct rnbd_clt_dev *dev = disk->private_data;
  791. if (get_disk_ro(dev->gd) && (mode & BLK_OPEN_WRITE))
  792. return -EPERM;
  793. if (dev->dev_state == DEV_STATE_UNMAPPED ||
  794. !rnbd_clt_get_dev(dev))
  795. return -EIO;
  796. return 0;
  797. }
  798. static void rnbd_client_release(struct gendisk *gen)
  799. {
  800. struct rnbd_clt_dev *dev = gen->private_data;
  801. rnbd_clt_put_dev(dev);
  802. }
  803. static int rnbd_client_getgeo(struct block_device *block_device,
  804. struct hd_geometry *geo)
  805. {
  806. u64 size;
  807. struct rnbd_clt_dev *dev = block_device->bd_disk->private_data;
  808. struct queue_limits *limit = &dev->queue->limits;
  809. size = dev->size * (limit->logical_block_size / SECTOR_SIZE);
  810. geo->cylinders = size >> 6; /* size/64 */
  811. geo->heads = 4;
  812. geo->sectors = 16;
  813. geo->start = 0;
  814. return 0;
  815. }
  816. static const struct block_device_operations rnbd_client_ops = {
  817. .owner = THIS_MODULE,
  818. .open = rnbd_client_open,
  819. .release = rnbd_client_release,
  820. .getgeo = rnbd_client_getgeo
  821. };
  822. /* The amount of data that belongs to an I/O and the amount of data that
  823. * should be read or written to the disk (bi_size) can differ.
  824. *
  825. * E.g. When WRITE_SAME is used, only a small amount of data is
  826. * transferred that is then written repeatedly over a lot of sectors.
  827. *
  828. * Get the size of data to be transferred via RTRS by summing up the size
  829. * of the scather-gather list entries.
  830. */
  831. static size_t rnbd_clt_get_sg_size(struct scatterlist *sglist, u32 len)
  832. {
  833. struct scatterlist *sg;
  834. size_t tsize = 0;
  835. int i;
  836. for_each_sg(sglist, sg, len, i)
  837. tsize += sg->length;
  838. return tsize;
  839. }
  840. static int rnbd_client_xfer_request(struct rnbd_clt_dev *dev,
  841. struct request *rq,
  842. struct rnbd_iu *iu)
  843. {
  844. struct rtrs_clt_sess *rtrs = dev->sess->rtrs;
  845. struct rtrs_permit *permit = iu->permit;
  846. struct rnbd_msg_io msg;
  847. struct rtrs_clt_req_ops req_ops;
  848. unsigned int sg_cnt = 0;
  849. struct kvec vec;
  850. size_t size;
  851. int err;
  852. iu->rq = rq;
  853. iu->dev = dev;
  854. msg.sector = cpu_to_le64(blk_rq_pos(rq));
  855. msg.bi_size = cpu_to_le32(blk_rq_bytes(rq));
  856. msg.rw = cpu_to_le32(rq_to_rnbd_flags(rq));
  857. msg.prio = cpu_to_le16(req_get_ioprio(rq));
  858. /*
  859. * We only support discards/WRITE_ZEROES with single segment for now.
  860. * See queue limits.
  861. */
  862. if ((req_op(rq) != REQ_OP_DISCARD) && (req_op(rq) != REQ_OP_WRITE_ZEROES))
  863. sg_cnt = blk_rq_map_sg(dev->queue, rq, iu->sgt.sgl);
  864. if (sg_cnt == 0)
  865. sg_mark_end(&iu->sgt.sgl[0]);
  866. msg.hdr.type = cpu_to_le16(RNBD_MSG_IO);
  867. msg.device_id = cpu_to_le32(dev->device_id);
  868. vec = (struct kvec) {
  869. .iov_base = &msg,
  870. .iov_len = sizeof(msg)
  871. };
  872. size = rnbd_clt_get_sg_size(iu->sgt.sgl, sg_cnt);
  873. req_ops = (struct rtrs_clt_req_ops) {
  874. .priv = iu,
  875. .conf_fn = msg_io_conf,
  876. };
  877. err = rtrs_clt_request(rq_data_dir(rq), &req_ops, rtrs, permit,
  878. &vec, 1, size, iu->sgt.sgl, sg_cnt);
  879. if (err) {
  880. rnbd_clt_err_rl(dev, "RTRS failed to transfer IO, err: %d\n",
  881. err);
  882. return err;
  883. }
  884. return 0;
  885. }
  886. /**
  887. * rnbd_clt_dev_add_to_requeue() - add device to requeue if session is busy
  888. * @dev: Device to be checked
  889. * @q: Queue to be added to the requeue list if required
  890. *
  891. * Description:
  892. * If session is busy, that means someone will requeue us when resources
  893. * are freed. If session is not doing anything - device is not added to
  894. * the list and @false is returned.
  895. */
  896. static bool rnbd_clt_dev_add_to_requeue(struct rnbd_clt_dev *dev,
  897. struct rnbd_queue *q)
  898. {
  899. struct rnbd_clt_session *sess = dev->sess;
  900. struct rnbd_cpu_qlist *cpu_q;
  901. unsigned long flags;
  902. bool added = true;
  903. bool need_set;
  904. cpu_q = get_cpu_ptr(sess->cpu_queues);
  905. spin_lock_irqsave(&cpu_q->requeue_lock, flags);
  906. if (!test_and_set_bit_lock(0, &q->in_list)) {
  907. if (WARN_ON(!list_empty(&q->requeue_list)))
  908. goto unlock;
  909. need_set = !test_bit(cpu_q->cpu, sess->cpu_queues_bm);
  910. if (need_set) {
  911. set_bit(cpu_q->cpu, sess->cpu_queues_bm);
  912. /* Paired with rnbd_put_permit(). Set a bit first
  913. * and then observe the busy counter.
  914. */
  915. smp_mb__before_atomic();
  916. }
  917. if (atomic_read(&sess->busy)) {
  918. list_add_tail(&q->requeue_list, &cpu_q->requeue_list);
  919. } else {
  920. /* Very unlikely, but possible: busy counter was
  921. * observed as zero. Drop all bits and return
  922. * false to restart the queue by ourselves.
  923. */
  924. if (need_set)
  925. clear_bit(cpu_q->cpu, sess->cpu_queues_bm);
  926. clear_bit_unlock(0, &q->in_list);
  927. added = false;
  928. }
  929. }
  930. unlock:
  931. spin_unlock_irqrestore(&cpu_q->requeue_lock, flags);
  932. put_cpu_ptr(sess->cpu_queues);
  933. return added;
  934. }
  935. static void rnbd_clt_dev_kick_mq_queue(struct rnbd_clt_dev *dev,
  936. struct blk_mq_hw_ctx *hctx,
  937. int delay)
  938. {
  939. struct rnbd_queue *q = hctx->driver_data;
  940. if (delay != RNBD_DELAY_IFBUSY)
  941. blk_mq_delay_run_hw_queue(hctx, delay);
  942. else if (!rnbd_clt_dev_add_to_requeue(dev, q))
  943. /*
  944. * If session is not busy we have to restart
  945. * the queue ourselves.
  946. */
  947. blk_mq_delay_run_hw_queue(hctx, 10/*ms*/);
  948. }
  949. static blk_status_t rnbd_queue_rq(struct blk_mq_hw_ctx *hctx,
  950. const struct blk_mq_queue_data *bd)
  951. {
  952. struct request *rq = bd->rq;
  953. struct rnbd_clt_dev *dev = rq->q->disk->private_data;
  954. struct rnbd_iu *iu = blk_mq_rq_to_pdu(rq);
  955. int err;
  956. blk_status_t ret = BLK_STS_IOERR;
  957. if (dev->dev_state != DEV_STATE_MAPPED)
  958. return BLK_STS_IOERR;
  959. iu->permit = rnbd_get_permit(dev->sess, RTRS_IO_CON,
  960. RTRS_PERMIT_NOWAIT);
  961. if (!iu->permit) {
  962. rnbd_clt_dev_kick_mq_queue(dev, hctx, RNBD_DELAY_IFBUSY);
  963. return BLK_STS_RESOURCE;
  964. }
  965. iu->sgt.sgl = iu->first_sgl;
  966. err = sg_alloc_table_chained(&iu->sgt,
  967. /* Even-if the request has no segment,
  968. * sglist must have one entry at least.
  969. */
  970. blk_rq_nr_phys_segments(rq) ? : 1,
  971. iu->sgt.sgl,
  972. RNBD_INLINE_SG_CNT);
  973. if (err) {
  974. rnbd_clt_err_rl(dev, "sg_alloc_table_chained ret=%d\n", err);
  975. rnbd_clt_dev_kick_mq_queue(dev, hctx, 10/*ms*/);
  976. rnbd_put_permit(dev->sess, iu->permit);
  977. return BLK_STS_RESOURCE;
  978. }
  979. blk_mq_start_request(rq);
  980. err = rnbd_client_xfer_request(dev, rq, iu);
  981. if (err == 0)
  982. return BLK_STS_OK;
  983. if (err == -EAGAIN || err == -ENOMEM) {
  984. rnbd_clt_dev_kick_mq_queue(dev, hctx, 10/*ms*/);
  985. ret = BLK_STS_RESOURCE;
  986. }
  987. sg_free_table_chained(&iu->sgt, RNBD_INLINE_SG_CNT);
  988. rnbd_put_permit(dev->sess, iu->permit);
  989. return ret;
  990. }
  991. static int rnbd_rdma_poll(struct blk_mq_hw_ctx *hctx, struct io_comp_batch *iob)
  992. {
  993. struct rnbd_queue *q = hctx->driver_data;
  994. struct rnbd_clt_dev *dev = q->dev;
  995. return rtrs_clt_rdma_cq_direct(dev->sess->rtrs, hctx->queue_num);
  996. }
  997. static void rnbd_rdma_map_queues(struct blk_mq_tag_set *set)
  998. {
  999. struct rnbd_clt_session *sess = set->driver_data;
  1000. /* shared read/write queues */
  1001. set->map[HCTX_TYPE_DEFAULT].nr_queues = num_online_cpus();
  1002. set->map[HCTX_TYPE_DEFAULT].queue_offset = 0;
  1003. set->map[HCTX_TYPE_READ].nr_queues = num_online_cpus();
  1004. set->map[HCTX_TYPE_READ].queue_offset = 0;
  1005. blk_mq_map_queues(&set->map[HCTX_TYPE_DEFAULT]);
  1006. blk_mq_map_queues(&set->map[HCTX_TYPE_READ]);
  1007. if (sess->nr_poll_queues) {
  1008. /* dedicated queue for poll */
  1009. set->map[HCTX_TYPE_POLL].nr_queues = sess->nr_poll_queues;
  1010. set->map[HCTX_TYPE_POLL].queue_offset = set->map[HCTX_TYPE_READ].queue_offset +
  1011. set->map[HCTX_TYPE_READ].nr_queues;
  1012. blk_mq_map_queues(&set->map[HCTX_TYPE_POLL]);
  1013. pr_info("[session=%s] mapped %d/%d/%d default/read/poll queues.\n",
  1014. sess->sessname,
  1015. set->map[HCTX_TYPE_DEFAULT].nr_queues,
  1016. set->map[HCTX_TYPE_READ].nr_queues,
  1017. set->map[HCTX_TYPE_POLL].nr_queues);
  1018. } else {
  1019. pr_info("[session=%s] mapped %d/%d default/read queues.\n",
  1020. sess->sessname,
  1021. set->map[HCTX_TYPE_DEFAULT].nr_queues,
  1022. set->map[HCTX_TYPE_READ].nr_queues);
  1023. }
  1024. }
  1025. static struct blk_mq_ops rnbd_mq_ops = {
  1026. .queue_rq = rnbd_queue_rq,
  1027. .complete = rnbd_softirq_done_fn,
  1028. .map_queues = rnbd_rdma_map_queues,
  1029. .poll = rnbd_rdma_poll,
  1030. };
  1031. static int setup_mq_tags(struct rnbd_clt_session *sess)
  1032. {
  1033. struct blk_mq_tag_set *tag_set = &sess->tag_set;
  1034. memset(tag_set, 0, sizeof(*tag_set));
  1035. tag_set->ops = &rnbd_mq_ops;
  1036. tag_set->queue_depth = sess->queue_depth;
  1037. tag_set->numa_node = NUMA_NO_NODE;
  1038. tag_set->flags = BLK_MQ_F_SHOULD_MERGE |
  1039. BLK_MQ_F_TAG_QUEUE_SHARED;
  1040. tag_set->cmd_size = sizeof(struct rnbd_iu) + RNBD_RDMA_SGL_SIZE;
  1041. /* for HCTX_TYPE_DEFAULT, HCTX_TYPE_READ, HCTX_TYPE_POLL */
  1042. tag_set->nr_maps = sess->nr_poll_queues ? HCTX_MAX_TYPES : 2;
  1043. /*
  1044. * HCTX_TYPE_DEFAULT and HCTX_TYPE_READ share one set of queues
  1045. * others are for HCTX_TYPE_POLL
  1046. */
  1047. tag_set->nr_hw_queues = num_online_cpus() + sess->nr_poll_queues;
  1048. tag_set->driver_data = sess;
  1049. return blk_mq_alloc_tag_set(tag_set);
  1050. }
  1051. static struct rnbd_clt_session *
  1052. find_and_get_or_create_sess(const char *sessname,
  1053. const struct rtrs_addr *paths,
  1054. size_t path_cnt, u16 port_nr, u32 nr_poll_queues)
  1055. {
  1056. struct rnbd_clt_session *sess;
  1057. struct rtrs_attrs attrs;
  1058. int err;
  1059. bool first = false;
  1060. struct rtrs_clt_ops rtrs_ops;
  1061. sess = find_or_create_sess(sessname, &first);
  1062. if (sess == ERR_PTR(-ENOMEM)) {
  1063. return ERR_PTR(-ENOMEM);
  1064. } else if ((nr_poll_queues && !first) || (!nr_poll_queues && sess->nr_poll_queues)) {
  1065. /*
  1066. * A device MUST have its own session to use the polling-mode.
  1067. * It must fail to map new device with the same session.
  1068. */
  1069. err = -EINVAL;
  1070. goto put_sess;
  1071. }
  1072. if (!first)
  1073. return sess;
  1074. if (!path_cnt) {
  1075. pr_err("Session %s not found, and path parameter not given", sessname);
  1076. err = -ENXIO;
  1077. goto put_sess;
  1078. }
  1079. rtrs_ops = (struct rtrs_clt_ops) {
  1080. .priv = sess,
  1081. .link_ev = rnbd_clt_link_ev,
  1082. };
  1083. /*
  1084. * Nothing was found, establish rtrs connection and proceed further.
  1085. */
  1086. sess->rtrs = rtrs_clt_open(&rtrs_ops, sessname,
  1087. paths, path_cnt, port_nr,
  1088. 0, /* Do not use pdu of rtrs */
  1089. RECONNECT_DELAY,
  1090. MAX_RECONNECTS, nr_poll_queues);
  1091. if (IS_ERR(sess->rtrs)) {
  1092. err = PTR_ERR(sess->rtrs);
  1093. goto wake_up_and_put;
  1094. }
  1095. err = rtrs_clt_query(sess->rtrs, &attrs);
  1096. if (err)
  1097. goto close_rtrs;
  1098. sess->max_io_size = attrs.max_io_size;
  1099. sess->queue_depth = attrs.queue_depth;
  1100. sess->nr_poll_queues = nr_poll_queues;
  1101. sess->max_segments = attrs.max_segments;
  1102. err = setup_mq_tags(sess);
  1103. if (err)
  1104. goto close_rtrs;
  1105. err = send_msg_sess_info(sess, RTRS_PERMIT_WAIT);
  1106. if (err)
  1107. goto close_rtrs;
  1108. wake_up_rtrs_waiters(sess);
  1109. return sess;
  1110. close_rtrs:
  1111. close_rtrs(sess);
  1112. put_sess:
  1113. rnbd_clt_put_sess(sess);
  1114. return ERR_PTR(err);
  1115. wake_up_and_put:
  1116. wake_up_rtrs_waiters(sess);
  1117. goto put_sess;
  1118. }
  1119. static inline void rnbd_init_hw_queue(struct rnbd_clt_dev *dev,
  1120. struct rnbd_queue *q,
  1121. struct blk_mq_hw_ctx *hctx)
  1122. {
  1123. INIT_LIST_HEAD(&q->requeue_list);
  1124. q->dev = dev;
  1125. q->hctx = hctx;
  1126. }
  1127. static void rnbd_init_mq_hw_queues(struct rnbd_clt_dev *dev)
  1128. {
  1129. unsigned long i;
  1130. struct blk_mq_hw_ctx *hctx;
  1131. struct rnbd_queue *q;
  1132. queue_for_each_hw_ctx(dev->queue, hctx, i) {
  1133. q = &dev->hw_queues[i];
  1134. rnbd_init_hw_queue(dev, q, hctx);
  1135. hctx->driver_data = q;
  1136. }
  1137. }
  1138. static int rnbd_clt_setup_gen_disk(struct rnbd_clt_dev *dev,
  1139. struct rnbd_msg_open_rsp *rsp, int idx)
  1140. {
  1141. int err;
  1142. dev->gd->major = rnbd_client_major;
  1143. dev->gd->first_minor = idx << RNBD_PART_BITS;
  1144. dev->gd->minors = 1 << RNBD_PART_BITS;
  1145. dev->gd->fops = &rnbd_client_ops;
  1146. dev->gd->queue = dev->queue;
  1147. dev->gd->private_data = dev;
  1148. snprintf(dev->gd->disk_name, sizeof(dev->gd->disk_name), "rnbd%d",
  1149. idx);
  1150. pr_debug("disk_name=%s, capacity=%llu\n",
  1151. dev->gd->disk_name,
  1152. le64_to_cpu(rsp->nsectors) *
  1153. (le16_to_cpu(rsp->logical_block_size) / SECTOR_SIZE));
  1154. set_capacity(dev->gd, le64_to_cpu(rsp->nsectors));
  1155. if (dev->access_mode == RNBD_ACCESS_RO)
  1156. set_disk_ro(dev->gd, true);
  1157. err = add_disk(dev->gd);
  1158. if (err)
  1159. put_disk(dev->gd);
  1160. return err;
  1161. }
  1162. static int rnbd_client_setup_device(struct rnbd_clt_dev *dev,
  1163. struct rnbd_msg_open_rsp *rsp)
  1164. {
  1165. struct queue_limits lim = {
  1166. .logical_block_size = le16_to_cpu(rsp->logical_block_size),
  1167. .physical_block_size = le16_to_cpu(rsp->physical_block_size),
  1168. .io_opt = dev->sess->max_io_size,
  1169. .max_hw_sectors = dev->sess->max_io_size / SECTOR_SIZE,
  1170. .max_hw_discard_sectors = le32_to_cpu(rsp->max_discard_sectors),
  1171. .discard_granularity = le32_to_cpu(rsp->discard_granularity),
  1172. .discard_alignment = le32_to_cpu(rsp->discard_alignment),
  1173. .max_segments = dev->sess->max_segments,
  1174. .virt_boundary_mask = SZ_4K - 1,
  1175. .max_write_zeroes_sectors =
  1176. le32_to_cpu(rsp->max_write_zeroes_sectors),
  1177. };
  1178. int idx = dev->clt_device_id;
  1179. dev->size = le64_to_cpu(rsp->nsectors) *
  1180. le16_to_cpu(rsp->logical_block_size);
  1181. if (rsp->secure_discard) {
  1182. lim.max_secure_erase_sectors =
  1183. le32_to_cpu(rsp->max_discard_sectors);
  1184. }
  1185. if (rsp->cache_policy & RNBD_WRITEBACK) {
  1186. lim.features |= BLK_FEAT_WRITE_CACHE;
  1187. if (rsp->cache_policy & RNBD_FUA)
  1188. lim.features |= BLK_FEAT_FUA;
  1189. }
  1190. dev->gd = blk_mq_alloc_disk(&dev->sess->tag_set, &lim, dev);
  1191. if (IS_ERR(dev->gd))
  1192. return PTR_ERR(dev->gd);
  1193. dev->queue = dev->gd->queue;
  1194. rnbd_init_mq_hw_queues(dev);
  1195. return rnbd_clt_setup_gen_disk(dev, rsp, idx);
  1196. }
  1197. static struct rnbd_clt_dev *init_dev(struct rnbd_clt_session *sess,
  1198. enum rnbd_access_mode access_mode,
  1199. const char *pathname,
  1200. u32 nr_poll_queues)
  1201. {
  1202. struct rnbd_clt_dev *dev;
  1203. int ret;
  1204. dev = kzalloc_node(sizeof(*dev), GFP_KERNEL, NUMA_NO_NODE);
  1205. if (!dev)
  1206. return ERR_PTR(-ENOMEM);
  1207. /*
  1208. * nr_cpu_ids: the number of softirq queues
  1209. * nr_poll_queues: the number of polling queues
  1210. */
  1211. dev->hw_queues = kcalloc(nr_cpu_ids + nr_poll_queues,
  1212. sizeof(*dev->hw_queues),
  1213. GFP_KERNEL);
  1214. if (!dev->hw_queues) {
  1215. ret = -ENOMEM;
  1216. goto out_alloc;
  1217. }
  1218. ret = ida_alloc_max(&index_ida, (1 << (MINORBITS - RNBD_PART_BITS)) - 1,
  1219. GFP_KERNEL);
  1220. if (ret < 0) {
  1221. pr_err("Failed to initialize device '%s' from session %s, allocating idr failed, err: %d\n",
  1222. pathname, sess->sessname, ret);
  1223. goto out_queues;
  1224. }
  1225. dev->pathname = kstrdup(pathname, GFP_KERNEL);
  1226. if (!dev->pathname) {
  1227. ret = -ENOMEM;
  1228. goto out_queues;
  1229. }
  1230. dev->clt_device_id = ret;
  1231. dev->sess = sess;
  1232. dev->access_mode = access_mode;
  1233. dev->nr_poll_queues = nr_poll_queues;
  1234. mutex_init(&dev->lock);
  1235. refcount_set(&dev->refcount, 1);
  1236. dev->dev_state = DEV_STATE_INIT;
  1237. /*
  1238. * Here we called from sysfs entry, thus clt-sysfs is
  1239. * responsible that session will not disappear.
  1240. */
  1241. WARN_ON(!rnbd_clt_get_sess(sess));
  1242. return dev;
  1243. out_queues:
  1244. kfree(dev->hw_queues);
  1245. out_alloc:
  1246. kfree(dev);
  1247. return ERR_PTR(ret);
  1248. }
  1249. static bool __exists_dev(const char *pathname, const char *sessname)
  1250. {
  1251. struct rnbd_clt_session *sess;
  1252. struct rnbd_clt_dev *dev;
  1253. bool found = false;
  1254. list_for_each_entry(sess, &sess_list, list) {
  1255. if (sessname && strncmp(sess->sessname, sessname,
  1256. sizeof(sess->sessname)))
  1257. continue;
  1258. mutex_lock(&sess->lock);
  1259. list_for_each_entry(dev, &sess->devs_list, list) {
  1260. if (strlen(dev->pathname) == strlen(pathname) &&
  1261. !strcmp(dev->pathname, pathname)) {
  1262. found = true;
  1263. break;
  1264. }
  1265. }
  1266. mutex_unlock(&sess->lock);
  1267. if (found)
  1268. break;
  1269. }
  1270. return found;
  1271. }
  1272. static bool exists_devpath(const char *pathname, const char *sessname)
  1273. {
  1274. bool found;
  1275. mutex_lock(&sess_lock);
  1276. found = __exists_dev(pathname, sessname);
  1277. mutex_unlock(&sess_lock);
  1278. return found;
  1279. }
  1280. static bool insert_dev_if_not_exists_devpath(struct rnbd_clt_dev *dev)
  1281. {
  1282. bool found;
  1283. struct rnbd_clt_session *sess = dev->sess;
  1284. mutex_lock(&sess_lock);
  1285. found = __exists_dev(dev->pathname, sess->sessname);
  1286. if (!found) {
  1287. mutex_lock(&sess->lock);
  1288. list_add_tail(&dev->list, &sess->devs_list);
  1289. mutex_unlock(&sess->lock);
  1290. }
  1291. mutex_unlock(&sess_lock);
  1292. return found;
  1293. }
  1294. static void delete_dev(struct rnbd_clt_dev *dev)
  1295. {
  1296. struct rnbd_clt_session *sess = dev->sess;
  1297. mutex_lock(&sess->lock);
  1298. list_del(&dev->list);
  1299. mutex_unlock(&sess->lock);
  1300. }
  1301. struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
  1302. struct rtrs_addr *paths,
  1303. size_t path_cnt, u16 port_nr,
  1304. const char *pathname,
  1305. enum rnbd_access_mode access_mode,
  1306. u32 nr_poll_queues)
  1307. {
  1308. struct rnbd_clt_session *sess;
  1309. struct rnbd_clt_dev *dev;
  1310. int ret, errno;
  1311. struct rnbd_msg_open_rsp *rsp;
  1312. struct rnbd_msg_open msg;
  1313. struct rnbd_iu *iu;
  1314. struct kvec vec = {
  1315. .iov_base = &msg,
  1316. .iov_len = sizeof(msg)
  1317. };
  1318. if (exists_devpath(pathname, sessname))
  1319. return ERR_PTR(-EEXIST);
  1320. sess = find_and_get_or_create_sess(sessname, paths, path_cnt, port_nr, nr_poll_queues);
  1321. if (IS_ERR(sess))
  1322. return ERR_CAST(sess);
  1323. dev = init_dev(sess, access_mode, pathname, nr_poll_queues);
  1324. if (IS_ERR(dev)) {
  1325. pr_err("map_device: failed to map device '%s' from session %s, can't initialize device, err: %pe\n",
  1326. pathname, sess->sessname, dev);
  1327. ret = PTR_ERR(dev);
  1328. goto put_sess;
  1329. }
  1330. if (insert_dev_if_not_exists_devpath(dev)) {
  1331. ret = -EEXIST;
  1332. goto put_dev;
  1333. }
  1334. rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
  1335. if (!rsp) {
  1336. ret = -ENOMEM;
  1337. goto del_dev;
  1338. }
  1339. iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT);
  1340. if (!iu) {
  1341. ret = -ENOMEM;
  1342. kfree(rsp);
  1343. goto del_dev;
  1344. }
  1345. iu->buf = rsp;
  1346. iu->dev = dev;
  1347. sg_init_one(iu->sgt.sgl, rsp, sizeof(*rsp));
  1348. msg.hdr.type = cpu_to_le16(RNBD_MSG_OPEN);
  1349. msg.access_mode = dev->access_mode;
  1350. strscpy(msg.dev_name, dev->pathname, sizeof(msg.dev_name));
  1351. WARN_ON(!rnbd_clt_get_dev(dev));
  1352. ret = send_usr_msg(sess->rtrs, READ, iu,
  1353. &vec, sizeof(*rsp), iu->sgt.sgl, 1,
  1354. msg_open_conf, &errno, RTRS_PERMIT_WAIT);
  1355. if (ret) {
  1356. rnbd_clt_put_dev(dev);
  1357. rnbd_put_iu(sess, iu);
  1358. } else {
  1359. ret = errno;
  1360. }
  1361. if (ret) {
  1362. rnbd_clt_err(dev,
  1363. "map_device: failed, can't open remote device, err: %d\n",
  1364. ret);
  1365. goto put_iu;
  1366. }
  1367. mutex_lock(&dev->lock);
  1368. pr_debug("Opened remote device: session=%s, path='%s'\n",
  1369. sess->sessname, pathname);
  1370. ret = rnbd_client_setup_device(dev, rsp);
  1371. if (ret) {
  1372. rnbd_clt_err(dev,
  1373. "map_device: Failed to configure device, err: %d\n",
  1374. ret);
  1375. mutex_unlock(&dev->lock);
  1376. goto send_close;
  1377. }
  1378. rnbd_clt_info(dev,
  1379. "map_device: Device mapped as %s (nsectors: %llu, logical_block_size: %d, physical_block_size: %d, max_write_zeroes_sectors: %d, max_discard_sectors: %d, discard_granularity: %d, discard_alignment: %d, secure_discard: %d, max_segments: %d, max_hw_sectors: %d, wc: %d, fua: %d)\n",
  1380. dev->gd->disk_name, le64_to_cpu(rsp->nsectors),
  1381. le16_to_cpu(rsp->logical_block_size),
  1382. le16_to_cpu(rsp->physical_block_size),
  1383. le32_to_cpu(rsp->max_write_zeroes_sectors),
  1384. le32_to_cpu(rsp->max_discard_sectors),
  1385. le32_to_cpu(rsp->discard_granularity),
  1386. le32_to_cpu(rsp->discard_alignment),
  1387. le16_to_cpu(rsp->secure_discard),
  1388. sess->max_segments, sess->max_io_size / SECTOR_SIZE,
  1389. !!(rsp->cache_policy & RNBD_WRITEBACK),
  1390. !!(rsp->cache_policy & RNBD_FUA));
  1391. mutex_unlock(&dev->lock);
  1392. kfree(rsp);
  1393. rnbd_put_iu(sess, iu);
  1394. rnbd_clt_put_sess(sess);
  1395. return dev;
  1396. send_close:
  1397. send_msg_close(dev, dev->device_id, RTRS_PERMIT_WAIT);
  1398. put_iu:
  1399. kfree(rsp);
  1400. rnbd_put_iu(sess, iu);
  1401. del_dev:
  1402. delete_dev(dev);
  1403. put_dev:
  1404. rnbd_clt_put_dev(dev);
  1405. put_sess:
  1406. rnbd_clt_put_sess(sess);
  1407. return ERR_PTR(ret);
  1408. }
  1409. static void destroy_gen_disk(struct rnbd_clt_dev *dev)
  1410. {
  1411. del_gendisk(dev->gd);
  1412. put_disk(dev->gd);
  1413. }
  1414. static void destroy_sysfs(struct rnbd_clt_dev *dev,
  1415. const struct attribute *sysfs_self)
  1416. {
  1417. rnbd_clt_remove_dev_symlink(dev);
  1418. if (dev->kobj.state_initialized) {
  1419. if (sysfs_self)
  1420. /* To avoid deadlock firstly remove itself */
  1421. sysfs_remove_file_self(&dev->kobj, sysfs_self);
  1422. kobject_del(&dev->kobj);
  1423. kobject_put(&dev->kobj);
  1424. }
  1425. }
  1426. int rnbd_clt_unmap_device(struct rnbd_clt_dev *dev, bool force,
  1427. const struct attribute *sysfs_self)
  1428. {
  1429. struct rnbd_clt_session *sess = dev->sess;
  1430. int refcount, ret = 0;
  1431. bool was_mapped;
  1432. mutex_lock(&dev->lock);
  1433. if (dev->dev_state == DEV_STATE_UNMAPPED) {
  1434. rnbd_clt_info(dev, "Device is already being unmapped\n");
  1435. ret = -EALREADY;
  1436. goto err;
  1437. }
  1438. refcount = refcount_read(&dev->refcount);
  1439. if (!force && refcount > 1) {
  1440. rnbd_clt_err(dev,
  1441. "Closing device failed, device is in use, (%d device users)\n",
  1442. refcount - 1);
  1443. ret = -EBUSY;
  1444. goto err;
  1445. }
  1446. was_mapped = (dev->dev_state == DEV_STATE_MAPPED);
  1447. dev->dev_state = DEV_STATE_UNMAPPED;
  1448. mutex_unlock(&dev->lock);
  1449. delete_dev(dev);
  1450. destroy_sysfs(dev, sysfs_self);
  1451. destroy_gen_disk(dev);
  1452. if (was_mapped && sess->rtrs)
  1453. send_msg_close(dev, dev->device_id, RTRS_PERMIT_WAIT);
  1454. rnbd_clt_info(dev, "Device is unmapped\n");
  1455. /* Likely last reference put */
  1456. rnbd_clt_put_dev(dev);
  1457. /*
  1458. * Here device and session can be vanished!
  1459. */
  1460. return 0;
  1461. err:
  1462. mutex_unlock(&dev->lock);
  1463. return ret;
  1464. }
  1465. int rnbd_clt_remap_device(struct rnbd_clt_dev *dev)
  1466. {
  1467. int err;
  1468. mutex_lock(&dev->lock);
  1469. if (dev->dev_state == DEV_STATE_MAPPED_DISCONNECTED)
  1470. err = 0;
  1471. else if (dev->dev_state == DEV_STATE_UNMAPPED)
  1472. err = -ENODEV;
  1473. else if (dev->dev_state == DEV_STATE_MAPPED)
  1474. err = -EALREADY;
  1475. else
  1476. err = -EBUSY;
  1477. mutex_unlock(&dev->lock);
  1478. if (!err) {
  1479. rnbd_clt_info(dev, "Remapping device.\n");
  1480. err = send_msg_open(dev, RTRS_PERMIT_WAIT);
  1481. if (err)
  1482. rnbd_clt_err(dev, "remap_device: %d\n", err);
  1483. }
  1484. return err;
  1485. }
  1486. static void unmap_device_work(struct work_struct *work)
  1487. {
  1488. struct rnbd_clt_dev *dev;
  1489. dev = container_of(work, typeof(*dev), unmap_on_rmmod_work);
  1490. rnbd_clt_unmap_device(dev, true, NULL);
  1491. }
  1492. static void rnbd_destroy_sessions(void)
  1493. {
  1494. struct rnbd_clt_session *sess, *sn;
  1495. struct rnbd_clt_dev *dev, *tn;
  1496. /* Firstly forbid access through sysfs interface */
  1497. rnbd_clt_destroy_sysfs_files();
  1498. /*
  1499. * Here at this point there is no any concurrent access to sessions
  1500. * list and devices list:
  1501. * 1. New session or device can't be created - session sysfs files
  1502. * are removed.
  1503. * 2. Device or session can't be removed - module reference is taken
  1504. * into account in unmap device sysfs callback.
  1505. * 3. No IO requests inflight - each file open of block_dev increases
  1506. * module reference in get_disk().
  1507. *
  1508. * But still there can be user requests inflights, which are sent by
  1509. * asynchronous send_msg_*() functions, thus before unmapping devices
  1510. * RTRS session must be explicitly closed.
  1511. */
  1512. list_for_each_entry_safe(sess, sn, &sess_list, list) {
  1513. if (!rnbd_clt_get_sess(sess))
  1514. continue;
  1515. close_rtrs(sess);
  1516. list_for_each_entry_safe(dev, tn, &sess->devs_list, list) {
  1517. /*
  1518. * Here unmap happens in parallel for only one reason:
  1519. * del_gendisk() takes around half a second, so
  1520. * on huge amount of devices the whole module unload
  1521. * procedure takes minutes.
  1522. */
  1523. INIT_WORK(&dev->unmap_on_rmmod_work, unmap_device_work);
  1524. queue_work(rnbd_clt_wq, &dev->unmap_on_rmmod_work);
  1525. }
  1526. rnbd_clt_put_sess(sess);
  1527. }
  1528. /* Wait for all scheduled unmap works */
  1529. flush_workqueue(rnbd_clt_wq);
  1530. WARN_ON(!list_empty(&sess_list));
  1531. }
  1532. static int __init rnbd_client_init(void)
  1533. {
  1534. int err = 0;
  1535. BUILD_BUG_ON(sizeof(struct rnbd_msg_hdr) != 4);
  1536. BUILD_BUG_ON(sizeof(struct rnbd_msg_sess_info) != 36);
  1537. BUILD_BUG_ON(sizeof(struct rnbd_msg_sess_info_rsp) != 36);
  1538. BUILD_BUG_ON(sizeof(struct rnbd_msg_open) != 264);
  1539. BUILD_BUG_ON(sizeof(struct rnbd_msg_close) != 8);
  1540. BUILD_BUG_ON(sizeof(struct rnbd_msg_open_rsp) != 56);
  1541. rnbd_client_major = register_blkdev(rnbd_client_major, "rnbd");
  1542. if (rnbd_client_major <= 0) {
  1543. pr_err("Failed to load module, block device registration failed\n");
  1544. return -EBUSY;
  1545. }
  1546. err = rnbd_clt_create_sysfs_files();
  1547. if (err) {
  1548. pr_err("Failed to load module, creating sysfs device files failed, err: %d\n",
  1549. err);
  1550. unregister_blkdev(rnbd_client_major, "rnbd");
  1551. return err;
  1552. }
  1553. rnbd_clt_wq = alloc_workqueue("rnbd_clt_wq", 0, 0);
  1554. if (!rnbd_clt_wq) {
  1555. pr_err("Failed to load module, alloc_workqueue failed.\n");
  1556. rnbd_clt_destroy_sysfs_files();
  1557. unregister_blkdev(rnbd_client_major, "rnbd");
  1558. err = -ENOMEM;
  1559. }
  1560. return err;
  1561. }
  1562. static void __exit rnbd_client_exit(void)
  1563. {
  1564. rnbd_destroy_sessions();
  1565. unregister_blkdev(rnbd_client_major, "rnbd");
  1566. ida_destroy(&index_ida);
  1567. destroy_workqueue(rnbd_clt_wq);
  1568. }
  1569. module_init(rnbd_client_init);
  1570. module_exit(rnbd_client_exit);