drbd_nl.c 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715
  1. /*
  2. drbd_nl.c
  3. This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
  4. Copyright (C) 2001-2008, LINBIT Information Technologies GmbH.
  5. Copyright (C) 1999-2008, Philipp Reisner <philipp.reisner@linbit.com>.
  6. Copyright (C) 2002-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
  7. drbd is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2, or (at your option)
  10. any later version.
  11. drbd is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with drbd; see the file COPYING. If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #include <linux/module.h>
  20. #include <linux/drbd.h>
  21. #include <linux/in.h>
  22. #include <linux/fs.h>
  23. #include <linux/file.h>
  24. #include <linux/slab.h>
  25. #include <linux/blkpg.h>
  26. #include <linux/cpumask.h>
  27. #include "drbd_int.h"
  28. #include "drbd_req.h"
  29. #include "drbd_wrappers.h"
  30. #include <asm/unaligned.h>
  31. #include <linux/drbd_limits.h>
  32. #include <linux/kthread.h>
  33. #include <net/genetlink.h>
  34. /* .doit */
  35. // int drbd_adm_create_resource(struct sk_buff *skb, struct genl_info *info);
  36. // int drbd_adm_delete_resource(struct sk_buff *skb, struct genl_info *info);
  37. int drbd_adm_add_minor(struct sk_buff *skb, struct genl_info *info);
  38. int drbd_adm_delete_minor(struct sk_buff *skb, struct genl_info *info);
  39. int drbd_adm_create_connection(struct sk_buff *skb, struct genl_info *info);
  40. int drbd_adm_delete_connection(struct sk_buff *skb, struct genl_info *info);
  41. int drbd_adm_set_role(struct sk_buff *skb, struct genl_info *info);
  42. int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info);
  43. int drbd_adm_detach(struct sk_buff *skb, struct genl_info *info);
  44. int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info);
  45. int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info);
  46. int drbd_adm_start_ov(struct sk_buff *skb, struct genl_info *info);
  47. int drbd_adm_new_c_uuid(struct sk_buff *skb, struct genl_info *info);
  48. int drbd_adm_disconnect(struct sk_buff *skb, struct genl_info *info);
  49. int drbd_adm_invalidate(struct sk_buff *skb, struct genl_info *info);
  50. int drbd_adm_invalidate_peer(struct sk_buff *skb, struct genl_info *info);
  51. int drbd_adm_pause_sync(struct sk_buff *skb, struct genl_info *info);
  52. int drbd_adm_resume_sync(struct sk_buff *skb, struct genl_info *info);
  53. int drbd_adm_suspend_io(struct sk_buff *skb, struct genl_info *info);
  54. int drbd_adm_resume_io(struct sk_buff *skb, struct genl_info *info);
  55. int drbd_adm_outdate(struct sk_buff *skb, struct genl_info *info);
  56. int drbd_adm_syncer(struct sk_buff *skb, struct genl_info *info);
  57. int drbd_adm_get_status(struct sk_buff *skb, struct genl_info *info);
  58. int drbd_adm_get_timeout_type(struct sk_buff *skb, struct genl_info *info);
  59. /* .dumpit */
  60. int drbd_adm_get_status_all(struct sk_buff *skb, struct netlink_callback *cb);
  61. #include <linux/drbd_genl_api.h>
  62. #include <linux/genl_magic_func.h>
  63. /* used blkdev_get_by_path, to claim our meta data device(s) */
  64. static char *drbd_m_holder = "Hands off! this is DRBD's meta data device.";
  65. /* Configuration is strictly serialized, because generic netlink message
  66. * processing is strictly serialized by the genl_lock().
  67. * Which means we can use one static global drbd_config_context struct.
  68. */
  69. static struct drbd_config_context {
  70. /* assigned from drbd_genlmsghdr */
  71. unsigned int minor;
  72. /* assigned from request attributes, if present */
  73. unsigned int volume;
  74. #define VOLUME_UNSPECIFIED (-1U)
  75. /* pointer into the request skb,
  76. * limited lifetime! */
  77. char *conn_name;
  78. /* reply buffer */
  79. struct sk_buff *reply_skb;
  80. /* pointer into reply buffer */
  81. struct drbd_genlmsghdr *reply_dh;
  82. /* resolved from attributes, if possible */
  83. struct drbd_conf *mdev;
  84. struct drbd_tconn *tconn;
  85. } adm_ctx;
  86. static void drbd_adm_send_reply(struct sk_buff *skb, struct genl_info *info)
  87. {
  88. genlmsg_end(skb, genlmsg_data(nlmsg_data(nlmsg_hdr(skb))));
  89. if (genlmsg_reply(skb, info))
  90. printk(KERN_ERR "drbd: error sending genl reply\n");
  91. }
  92. /* Used on a fresh "drbd_adm_prepare"d reply_skb, this cannot fail: The only
  93. * reason it could fail was no space in skb, and there are 4k available. */
  94. int drbd_msg_put_info(const char *info)
  95. {
  96. struct sk_buff *skb = adm_ctx.reply_skb;
  97. struct nlattr *nla;
  98. int err = -EMSGSIZE;
  99. if (!info || !info[0])
  100. return 0;
  101. nla = nla_nest_start(skb, DRBD_NLA_CFG_REPLY);
  102. if (!nla)
  103. return err;
  104. err = nla_put_string(skb, T_info_text, info);
  105. if (err) {
  106. nla_nest_cancel(skb, nla);
  107. return err;
  108. } else
  109. nla_nest_end(skb, nla);
  110. return 0;
  111. }
  112. /* This would be a good candidate for a "pre_doit" hook,
  113. * and per-family private info->pointers.
  114. * But we need to stay compatible with older kernels.
  115. * If it returns successfully, adm_ctx members are valid.
  116. */
  117. #define DRBD_ADM_NEED_MINOR 1
  118. #define DRBD_ADM_NEED_CONN 2
  119. static int drbd_adm_prepare(struct sk_buff *skb, struct genl_info *info,
  120. unsigned flags)
  121. {
  122. struct drbd_genlmsghdr *d_in = info->userhdr;
  123. const u8 cmd = info->genlhdr->cmd;
  124. int err;
  125. memset(&adm_ctx, 0, sizeof(adm_ctx));
  126. /* genl_rcv_msg only checks for CAP_NET_ADMIN on "GENL_ADMIN_PERM" :( */
  127. if (cmd != DRBD_ADM_GET_STATUS
  128. && security_netlink_recv(skb, CAP_SYS_ADMIN))
  129. return -EPERM;
  130. adm_ctx.reply_skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
  131. if (!adm_ctx.reply_skb)
  132. goto fail;
  133. adm_ctx.reply_dh = genlmsg_put_reply(adm_ctx.reply_skb,
  134. info, &drbd_genl_family, 0, cmd);
  135. /* put of a few bytes into a fresh skb of >= 4k will always succeed.
  136. * but anyways */
  137. if (!adm_ctx.reply_dh)
  138. goto fail;
  139. adm_ctx.reply_dh->minor = d_in->minor;
  140. adm_ctx.reply_dh->ret_code = NO_ERROR;
  141. if (info->attrs[DRBD_NLA_CFG_CONTEXT]) {
  142. struct nlattr *nla;
  143. /* parse and validate only */
  144. err = drbd_cfg_context_from_attrs(NULL, info->attrs);
  145. if (err)
  146. goto fail;
  147. /* It was present, and valid,
  148. * copy it over to the reply skb. */
  149. err = nla_put_nohdr(adm_ctx.reply_skb,
  150. info->attrs[DRBD_NLA_CFG_CONTEXT]->nla_len,
  151. info->attrs[DRBD_NLA_CFG_CONTEXT]);
  152. if (err)
  153. goto fail;
  154. /* and assign stuff to the global adm_ctx */
  155. nla = nested_attr_tb[__nla_type(T_ctx_volume)];
  156. adm_ctx.volume = nla ? nla_get_u32(nla) : VOLUME_UNSPECIFIED;
  157. nla = nested_attr_tb[__nla_type(T_ctx_conn_name)];
  158. if (nla)
  159. adm_ctx.conn_name = nla_data(nla);
  160. } else
  161. adm_ctx.volume = VOLUME_UNSPECIFIED;
  162. adm_ctx.minor = d_in->minor;
  163. adm_ctx.mdev = minor_to_mdev(d_in->minor);
  164. adm_ctx.tconn = conn_by_name(adm_ctx.conn_name);
  165. if (!adm_ctx.mdev && (flags & DRBD_ADM_NEED_MINOR)) {
  166. drbd_msg_put_info("unknown minor");
  167. return ERR_MINOR_INVALID;
  168. }
  169. if (!adm_ctx.tconn && (flags & DRBD_ADM_NEED_CONN)) {
  170. drbd_msg_put_info("unknown connection");
  171. return ERR_INVALID_REQUEST;
  172. }
  173. /* some more paranoia, if the request was over-determined */
  174. if (adm_ctx.mdev &&
  175. adm_ctx.volume != VOLUME_UNSPECIFIED &&
  176. adm_ctx.volume != adm_ctx.mdev->vnr) {
  177. pr_warning("request: minor=%u, volume=%u; but that minor is volume %u in %s\n",
  178. adm_ctx.minor, adm_ctx.volume,
  179. adm_ctx.mdev->vnr, adm_ctx.mdev->tconn->name);
  180. drbd_msg_put_info("over-determined configuration context mismatch");
  181. return ERR_INVALID_REQUEST;
  182. }
  183. if (adm_ctx.mdev && adm_ctx.tconn &&
  184. adm_ctx.mdev->tconn != adm_ctx.tconn) {
  185. pr_warning("request: minor=%u, conn=%s; but that minor belongs to connection %s\n",
  186. adm_ctx.minor, adm_ctx.conn_name, adm_ctx.mdev->tconn->name);
  187. drbd_msg_put_info("over-determined configuration context mismatch");
  188. return ERR_INVALID_REQUEST;
  189. }
  190. return NO_ERROR;
  191. fail:
  192. nlmsg_free(adm_ctx.reply_skb);
  193. adm_ctx.reply_skb = NULL;
  194. return -ENOMEM;
  195. }
  196. static int drbd_adm_finish(struct genl_info *info, int retcode)
  197. {
  198. struct nlattr *nla;
  199. const char *conn_name = NULL;
  200. if (!adm_ctx.reply_skb)
  201. return -ENOMEM;
  202. adm_ctx.reply_dh->ret_code = retcode;
  203. nla = info->attrs[DRBD_NLA_CFG_CONTEXT];
  204. if (nla) {
  205. nla = nla_find_nested(nla, __nla_type(T_ctx_conn_name));
  206. if (nla)
  207. conn_name = nla_data(nla);
  208. }
  209. drbd_adm_send_reply(adm_ctx.reply_skb, info);
  210. return 0;
  211. }
  212. int drbd_khelper(struct drbd_conf *mdev, char *cmd)
  213. {
  214. char *envp[] = { "HOME=/",
  215. "TERM=linux",
  216. "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
  217. NULL, /* Will be set to address family */
  218. NULL, /* Will be set to address */
  219. NULL };
  220. char mb[12], af[20], ad[60], *afs;
  221. char *argv[] = {usermode_helper, cmd, mb, NULL };
  222. struct sib_info sib;
  223. int ret;
  224. snprintf(mb, 12, "minor-%d", mdev_to_minor(mdev));
  225. if (get_net_conf(mdev->tconn)) {
  226. switch (((struct sockaddr *)mdev->tconn->net_conf->peer_addr)->sa_family) {
  227. case AF_INET6:
  228. afs = "ipv6";
  229. snprintf(ad, 60, "DRBD_PEER_ADDRESS=%pI6",
  230. &((struct sockaddr_in6 *)mdev->tconn->net_conf->peer_addr)->sin6_addr);
  231. break;
  232. case AF_INET:
  233. afs = "ipv4";
  234. snprintf(ad, 60, "DRBD_PEER_ADDRESS=%pI4",
  235. &((struct sockaddr_in *)mdev->tconn->net_conf->peer_addr)->sin_addr);
  236. break;
  237. default:
  238. afs = "ssocks";
  239. snprintf(ad, 60, "DRBD_PEER_ADDRESS=%pI4",
  240. &((struct sockaddr_in *)mdev->tconn->net_conf->peer_addr)->sin_addr);
  241. }
  242. snprintf(af, 20, "DRBD_PEER_AF=%s", afs);
  243. envp[3]=af;
  244. envp[4]=ad;
  245. put_net_conf(mdev->tconn);
  246. }
  247. /* The helper may take some time.
  248. * write out any unsynced meta data changes now */
  249. drbd_md_sync(mdev);
  250. dev_info(DEV, "helper command: %s %s %s\n", usermode_helper, cmd, mb);
  251. sib.sib_reason = SIB_HELPER_PRE;
  252. sib.helper_name = cmd;
  253. drbd_bcast_event(mdev, &sib);
  254. ret = call_usermodehelper(usermode_helper, argv, envp, 1);
  255. if (ret)
  256. dev_warn(DEV, "helper command: %s %s %s exit code %u (0x%x)\n",
  257. usermode_helper, cmd, mb,
  258. (ret >> 8) & 0xff, ret);
  259. else
  260. dev_info(DEV, "helper command: %s %s %s exit code %u (0x%x)\n",
  261. usermode_helper, cmd, mb,
  262. (ret >> 8) & 0xff, ret);
  263. sib.sib_reason = SIB_HELPER_POST;
  264. sib.helper_exit_code = ret;
  265. drbd_bcast_event(mdev, &sib);
  266. if (ret < 0) /* Ignore any ERRNOs we got. */
  267. ret = 0;
  268. return ret;
  269. }
  270. enum drbd_disk_state drbd_try_outdate_peer(struct drbd_conf *mdev)
  271. {
  272. char *ex_to_string;
  273. int r;
  274. enum drbd_disk_state nps;
  275. enum drbd_fencing_p fp;
  276. D_ASSERT(mdev->state.pdsk == D_UNKNOWN);
  277. if (get_ldev_if_state(mdev, D_CONSISTENT)) {
  278. fp = mdev->ldev->dc.fencing;
  279. put_ldev(mdev);
  280. } else {
  281. dev_warn(DEV, "Not fencing peer, I'm not even Consistent myself.\n");
  282. nps = mdev->state.pdsk;
  283. goto out;
  284. }
  285. r = drbd_khelper(mdev, "fence-peer");
  286. switch ((r>>8) & 0xff) {
  287. case 3: /* peer is inconsistent */
  288. ex_to_string = "peer is inconsistent or worse";
  289. nps = D_INCONSISTENT;
  290. break;
  291. case 4: /* peer got outdated, or was already outdated */
  292. ex_to_string = "peer was fenced";
  293. nps = D_OUTDATED;
  294. break;
  295. case 5: /* peer was down */
  296. if (mdev->state.disk == D_UP_TO_DATE) {
  297. /* we will(have) create(d) a new UUID anyways... */
  298. ex_to_string = "peer is unreachable, assumed to be dead";
  299. nps = D_OUTDATED;
  300. } else {
  301. ex_to_string = "peer unreachable, doing nothing since disk != UpToDate";
  302. nps = mdev->state.pdsk;
  303. }
  304. break;
  305. case 6: /* Peer is primary, voluntarily outdate myself.
  306. * This is useful when an unconnected R_SECONDARY is asked to
  307. * become R_PRIMARY, but finds the other peer being active. */
  308. ex_to_string = "peer is active";
  309. dev_warn(DEV, "Peer is primary, outdating myself.\n");
  310. nps = D_UNKNOWN;
  311. _drbd_request_state(mdev, NS(disk, D_OUTDATED), CS_WAIT_COMPLETE);
  312. break;
  313. case 7:
  314. if (fp != FP_STONITH)
  315. dev_err(DEV, "fence-peer() = 7 && fencing != Stonith !!!\n");
  316. ex_to_string = "peer was stonithed";
  317. nps = D_OUTDATED;
  318. break;
  319. default:
  320. /* The script is broken ... */
  321. nps = D_UNKNOWN;
  322. dev_err(DEV, "fence-peer helper broken, returned %d\n", (r>>8)&0xff);
  323. return nps;
  324. }
  325. dev_info(DEV, "fence-peer helper returned %d (%s)\n",
  326. (r>>8) & 0xff, ex_to_string);
  327. out:
  328. if (mdev->state.susp_fen && nps >= D_UNKNOWN) {
  329. /* The handler was not successful... unfreeze here, the
  330. state engine can not unfreeze... */
  331. _drbd_request_state(mdev, NS(susp_fen, 0), CS_VERBOSE);
  332. }
  333. return nps;
  334. }
  335. static int _try_outdate_peer_async(void *data)
  336. {
  337. struct drbd_conf *mdev = (struct drbd_conf *)data;
  338. enum drbd_disk_state nps;
  339. union drbd_state ns;
  340. nps = drbd_try_outdate_peer(mdev);
  341. /* Not using
  342. drbd_request_state(mdev, NS(pdsk, nps));
  343. here, because we might were able to re-establish the connection
  344. in the meantime. This can only partially be solved in the state's
  345. engine is_valid_state() and is_valid_state_transition()
  346. functions.
  347. nps can be D_INCONSISTENT, D_OUTDATED or D_UNKNOWN.
  348. pdsk == D_INCONSISTENT while conn >= C_CONNECTED is valid,
  349. therefore we have to have the pre state change check here.
  350. */
  351. spin_lock_irq(&mdev->tconn->req_lock);
  352. ns = mdev->state;
  353. if (ns.conn < C_WF_REPORT_PARAMS) {
  354. ns.pdsk = nps;
  355. _drbd_set_state(mdev, ns, CS_VERBOSE, NULL);
  356. }
  357. spin_unlock_irq(&mdev->tconn->req_lock);
  358. return 0;
  359. }
  360. void drbd_try_outdate_peer_async(struct drbd_conf *mdev)
  361. {
  362. struct task_struct *opa;
  363. opa = kthread_run(_try_outdate_peer_async, mdev, "drbd%d_a_helper", mdev_to_minor(mdev));
  364. if (IS_ERR(opa))
  365. dev_err(DEV, "out of mem, failed to invoke fence-peer helper\n");
  366. }
  367. enum drbd_state_rv
  368. drbd_set_role(struct drbd_conf *mdev, enum drbd_role new_role, int force)
  369. {
  370. const int max_tries = 4;
  371. enum drbd_state_rv rv = SS_UNKNOWN_ERROR;
  372. int try = 0;
  373. int forced = 0;
  374. union drbd_state mask, val;
  375. enum drbd_disk_state nps;
  376. if (new_role == R_PRIMARY)
  377. request_ping(mdev->tconn); /* Detect a dead peer ASAP */
  378. mutex_lock(mdev->state_mutex);
  379. mask.i = 0; mask.role = R_MASK;
  380. val.i = 0; val.role = new_role;
  381. while (try++ < max_tries) {
  382. rv = _drbd_request_state(mdev, mask, val, CS_WAIT_COMPLETE);
  383. /* in case we first succeeded to outdate,
  384. * but now suddenly could establish a connection */
  385. if (rv == SS_CW_FAILED_BY_PEER && mask.pdsk != 0) {
  386. val.pdsk = 0;
  387. mask.pdsk = 0;
  388. continue;
  389. }
  390. if (rv == SS_NO_UP_TO_DATE_DISK && force &&
  391. (mdev->state.disk < D_UP_TO_DATE &&
  392. mdev->state.disk >= D_INCONSISTENT)) {
  393. mask.disk = D_MASK;
  394. val.disk = D_UP_TO_DATE;
  395. forced = 1;
  396. continue;
  397. }
  398. if (rv == SS_NO_UP_TO_DATE_DISK &&
  399. mdev->state.disk == D_CONSISTENT && mask.pdsk == 0) {
  400. D_ASSERT(mdev->state.pdsk == D_UNKNOWN);
  401. nps = drbd_try_outdate_peer(mdev);
  402. if (nps == D_OUTDATED || nps == D_INCONSISTENT) {
  403. val.disk = D_UP_TO_DATE;
  404. mask.disk = D_MASK;
  405. }
  406. val.pdsk = nps;
  407. mask.pdsk = D_MASK;
  408. continue;
  409. }
  410. if (rv == SS_NOTHING_TO_DO)
  411. goto out;
  412. if (rv == SS_PRIMARY_NOP && mask.pdsk == 0) {
  413. nps = drbd_try_outdate_peer(mdev);
  414. if (force && nps > D_OUTDATED) {
  415. dev_warn(DEV, "Forced into split brain situation!\n");
  416. nps = D_OUTDATED;
  417. }
  418. mask.pdsk = D_MASK;
  419. val.pdsk = nps;
  420. continue;
  421. }
  422. if (rv == SS_TWO_PRIMARIES) {
  423. /* Maybe the peer is detected as dead very soon...
  424. retry at most once more in this case. */
  425. schedule_timeout_interruptible((mdev->tconn->net_conf->ping_timeo+1)*HZ/10);
  426. if (try < max_tries)
  427. try = max_tries - 1;
  428. continue;
  429. }
  430. if (rv < SS_SUCCESS) {
  431. rv = _drbd_request_state(mdev, mask, val,
  432. CS_VERBOSE + CS_WAIT_COMPLETE);
  433. if (rv < SS_SUCCESS)
  434. goto out;
  435. }
  436. break;
  437. }
  438. if (rv < SS_SUCCESS)
  439. goto out;
  440. if (forced)
  441. dev_warn(DEV, "Forced to consider local data as UpToDate!\n");
  442. /* Wait until nothing is on the fly :) */
  443. wait_event(mdev->misc_wait, atomic_read(&mdev->ap_pending_cnt) == 0);
  444. if (new_role == R_SECONDARY) {
  445. set_disk_ro(mdev->vdisk, true);
  446. if (get_ldev(mdev)) {
  447. mdev->ldev->md.uuid[UI_CURRENT] &= ~(u64)1;
  448. put_ldev(mdev);
  449. }
  450. } else {
  451. if (get_net_conf(mdev->tconn)) {
  452. mdev->tconn->net_conf->want_lose = 0;
  453. put_net_conf(mdev->tconn);
  454. }
  455. set_disk_ro(mdev->vdisk, false);
  456. if (get_ldev(mdev)) {
  457. if (((mdev->state.conn < C_CONNECTED ||
  458. mdev->state.pdsk <= D_FAILED)
  459. && mdev->ldev->md.uuid[UI_BITMAP] == 0) || forced)
  460. drbd_uuid_new_current(mdev);
  461. mdev->ldev->md.uuid[UI_CURRENT] |= (u64)1;
  462. put_ldev(mdev);
  463. }
  464. }
  465. /* writeout of activity log covered areas of the bitmap
  466. * to stable storage done in after state change already */
  467. if (mdev->state.conn >= C_WF_REPORT_PARAMS) {
  468. /* if this was forced, we should consider sync */
  469. if (forced)
  470. drbd_send_uuids(mdev);
  471. drbd_send_state(mdev);
  472. }
  473. drbd_md_sync(mdev);
  474. kobject_uevent(&disk_to_dev(mdev->vdisk)->kobj, KOBJ_CHANGE);
  475. out:
  476. mutex_unlock(mdev->state_mutex);
  477. return rv;
  478. }
  479. static const char *from_attrs_err_to_txt(int err)
  480. {
  481. return err == -ENOMSG ? "required attribute missing" :
  482. err == -EOPNOTSUPP ? "unknown mandatory attribute" :
  483. "invalid attribute value";
  484. }
  485. int drbd_adm_set_role(struct sk_buff *skb, struct genl_info *info)
  486. {
  487. struct set_role_parms parms;
  488. int err;
  489. enum drbd_ret_code retcode;
  490. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  491. if (!adm_ctx.reply_skb)
  492. return retcode;
  493. if (retcode != NO_ERROR)
  494. goto out;
  495. memset(&parms, 0, sizeof(parms));
  496. if (info->attrs[DRBD_NLA_SET_ROLE_PARMS]) {
  497. err = set_role_parms_from_attrs(&parms, info->attrs);
  498. if (err) {
  499. retcode = ERR_MANDATORY_TAG;
  500. drbd_msg_put_info(from_attrs_err_to_txt(err));
  501. goto out;
  502. }
  503. }
  504. if (info->genlhdr->cmd == DRBD_ADM_PRIMARY)
  505. retcode = drbd_set_role(adm_ctx.mdev, R_PRIMARY, parms.assume_uptodate);
  506. else
  507. retcode = drbd_set_role(adm_ctx.mdev, R_SECONDARY, 0);
  508. out:
  509. drbd_adm_finish(info, retcode);
  510. return 0;
  511. }
  512. /* initializes the md.*_offset members, so we are able to find
  513. * the on disk meta data */
  514. static void drbd_md_set_sector_offsets(struct drbd_conf *mdev,
  515. struct drbd_backing_dev *bdev)
  516. {
  517. sector_t md_size_sect = 0;
  518. switch (bdev->dc.meta_dev_idx) {
  519. default:
  520. /* v07 style fixed size indexed meta data */
  521. bdev->md.md_size_sect = MD_RESERVED_SECT;
  522. bdev->md.md_offset = drbd_md_ss__(mdev, bdev);
  523. bdev->md.al_offset = MD_AL_OFFSET;
  524. bdev->md.bm_offset = MD_BM_OFFSET;
  525. break;
  526. case DRBD_MD_INDEX_FLEX_EXT:
  527. /* just occupy the full device; unit: sectors */
  528. bdev->md.md_size_sect = drbd_get_capacity(bdev->md_bdev);
  529. bdev->md.md_offset = 0;
  530. bdev->md.al_offset = MD_AL_OFFSET;
  531. bdev->md.bm_offset = MD_BM_OFFSET;
  532. break;
  533. case DRBD_MD_INDEX_INTERNAL:
  534. case DRBD_MD_INDEX_FLEX_INT:
  535. bdev->md.md_offset = drbd_md_ss__(mdev, bdev);
  536. /* al size is still fixed */
  537. bdev->md.al_offset = -MD_AL_SECTORS;
  538. /* we need (slightly less than) ~ this much bitmap sectors: */
  539. md_size_sect = drbd_get_capacity(bdev->backing_bdev);
  540. md_size_sect = ALIGN(md_size_sect, BM_SECT_PER_EXT);
  541. md_size_sect = BM_SECT_TO_EXT(md_size_sect);
  542. md_size_sect = ALIGN(md_size_sect, 8);
  543. /* plus the "drbd meta data super block",
  544. * and the activity log; */
  545. md_size_sect += MD_BM_OFFSET;
  546. bdev->md.md_size_sect = md_size_sect;
  547. /* bitmap offset is adjusted by 'super' block size */
  548. bdev->md.bm_offset = -md_size_sect + MD_AL_OFFSET;
  549. break;
  550. }
  551. }
  552. /* input size is expected to be in KB */
  553. char *ppsize(char *buf, unsigned long long size)
  554. {
  555. /* Needs 9 bytes at max including trailing NUL:
  556. * -1ULL ==> "16384 EB" */
  557. static char units[] = { 'K', 'M', 'G', 'T', 'P', 'E' };
  558. int base = 0;
  559. while (size >= 10000 && base < sizeof(units)-1) {
  560. /* shift + round */
  561. size = (size >> 10) + !!(size & (1<<9));
  562. base++;
  563. }
  564. sprintf(buf, "%u %cB", (unsigned)size, units[base]);
  565. return buf;
  566. }
  567. /* there is still a theoretical deadlock when called from receiver
  568. * on an D_INCONSISTENT R_PRIMARY:
  569. * remote READ does inc_ap_bio, receiver would need to receive answer
  570. * packet from remote to dec_ap_bio again.
  571. * receiver receive_sizes(), comes here,
  572. * waits for ap_bio_cnt == 0. -> deadlock.
  573. * but this cannot happen, actually, because:
  574. * R_PRIMARY D_INCONSISTENT, and peer's disk is unreachable
  575. * (not connected, or bad/no disk on peer):
  576. * see drbd_fail_request_early, ap_bio_cnt is zero.
  577. * R_PRIMARY D_INCONSISTENT, and C_SYNC_TARGET:
  578. * peer may not initiate a resize.
  579. */
  580. /* Note these are not to be confused with
  581. * drbd_adm_suspend_io/drbd_adm_resume_io,
  582. * which are (sub) state changes triggered by admin (drbdsetup),
  583. * and can be long lived.
  584. * This changes an mdev->flag, is triggered by drbd internals,
  585. * and should be short-lived. */
  586. void drbd_suspend_io(struct drbd_conf *mdev)
  587. {
  588. set_bit(SUSPEND_IO, &mdev->flags);
  589. if (is_susp(mdev->state))
  590. return;
  591. wait_event(mdev->misc_wait, !atomic_read(&mdev->ap_bio_cnt));
  592. }
  593. void drbd_resume_io(struct drbd_conf *mdev)
  594. {
  595. clear_bit(SUSPEND_IO, &mdev->flags);
  596. wake_up(&mdev->misc_wait);
  597. }
  598. /**
  599. * drbd_determine_dev_size() - Sets the right device size obeying all constraints
  600. * @mdev: DRBD device.
  601. *
  602. * Returns 0 on success, negative return values indicate errors.
  603. * You should call drbd_md_sync() after calling this function.
  604. */
  605. enum determine_dev_size drbd_determine_dev_size(struct drbd_conf *mdev, enum dds_flags flags) __must_hold(local)
  606. {
  607. sector_t prev_first_sect, prev_size; /* previous meta location */
  608. sector_t la_size;
  609. sector_t size;
  610. char ppb[10];
  611. int md_moved, la_size_changed;
  612. enum determine_dev_size rv = unchanged;
  613. /* race:
  614. * application request passes inc_ap_bio,
  615. * but then cannot get an AL-reference.
  616. * this function later may wait on ap_bio_cnt == 0. -> deadlock.
  617. *
  618. * to avoid that:
  619. * Suspend IO right here.
  620. * still lock the act_log to not trigger ASSERTs there.
  621. */
  622. drbd_suspend_io(mdev);
  623. /* no wait necessary anymore, actually we could assert that */
  624. wait_event(mdev->al_wait, lc_try_lock(mdev->act_log));
  625. prev_first_sect = drbd_md_first_sector(mdev->ldev);
  626. prev_size = mdev->ldev->md.md_size_sect;
  627. la_size = mdev->ldev->md.la_size_sect;
  628. /* TODO: should only be some assert here, not (re)init... */
  629. drbd_md_set_sector_offsets(mdev, mdev->ldev);
  630. size = drbd_new_dev_size(mdev, mdev->ldev, flags & DDSF_FORCED);
  631. if (drbd_get_capacity(mdev->this_bdev) != size ||
  632. drbd_bm_capacity(mdev) != size) {
  633. int err;
  634. err = drbd_bm_resize(mdev, size, !(flags & DDSF_NO_RESYNC));
  635. if (unlikely(err)) {
  636. /* currently there is only one error: ENOMEM! */
  637. size = drbd_bm_capacity(mdev)>>1;
  638. if (size == 0) {
  639. dev_err(DEV, "OUT OF MEMORY! "
  640. "Could not allocate bitmap!\n");
  641. } else {
  642. dev_err(DEV, "BM resizing failed. "
  643. "Leaving size unchanged at size = %lu KB\n",
  644. (unsigned long)size);
  645. }
  646. rv = dev_size_error;
  647. }
  648. /* racy, see comments above. */
  649. drbd_set_my_capacity(mdev, size);
  650. mdev->ldev->md.la_size_sect = size;
  651. dev_info(DEV, "size = %s (%llu KB)\n", ppsize(ppb, size>>1),
  652. (unsigned long long)size>>1);
  653. }
  654. if (rv == dev_size_error)
  655. goto out;
  656. la_size_changed = (la_size != mdev->ldev->md.la_size_sect);
  657. md_moved = prev_first_sect != drbd_md_first_sector(mdev->ldev)
  658. || prev_size != mdev->ldev->md.md_size_sect;
  659. if (la_size_changed || md_moved) {
  660. int err;
  661. drbd_al_shrink(mdev); /* All extents inactive. */
  662. dev_info(DEV, "Writing the whole bitmap, %s\n",
  663. la_size_changed && md_moved ? "size changed and md moved" :
  664. la_size_changed ? "size changed" : "md moved");
  665. /* next line implicitly does drbd_suspend_io()+drbd_resume_io() */
  666. err = drbd_bitmap_io(mdev, &drbd_bm_write,
  667. "size changed", BM_LOCKED_MASK);
  668. if (err) {
  669. rv = dev_size_error;
  670. goto out;
  671. }
  672. drbd_md_mark_dirty(mdev);
  673. }
  674. if (size > la_size)
  675. rv = grew;
  676. if (size < la_size)
  677. rv = shrunk;
  678. out:
  679. lc_unlock(mdev->act_log);
  680. wake_up(&mdev->al_wait);
  681. drbd_resume_io(mdev);
  682. return rv;
  683. }
  684. sector_t
  685. drbd_new_dev_size(struct drbd_conf *mdev, struct drbd_backing_dev *bdev, int assume_peer_has_space)
  686. {
  687. sector_t p_size = mdev->p_size; /* partner's disk size. */
  688. sector_t la_size = bdev->md.la_size_sect; /* last agreed size. */
  689. sector_t m_size; /* my size */
  690. sector_t u_size = bdev->dc.disk_size; /* size requested by user. */
  691. sector_t size = 0;
  692. m_size = drbd_get_max_capacity(bdev);
  693. if (mdev->state.conn < C_CONNECTED && assume_peer_has_space) {
  694. dev_warn(DEV, "Resize while not connected was forced by the user!\n");
  695. p_size = m_size;
  696. }
  697. if (p_size && m_size) {
  698. size = min_t(sector_t, p_size, m_size);
  699. } else {
  700. if (la_size) {
  701. size = la_size;
  702. if (m_size && m_size < size)
  703. size = m_size;
  704. if (p_size && p_size < size)
  705. size = p_size;
  706. } else {
  707. if (m_size)
  708. size = m_size;
  709. if (p_size)
  710. size = p_size;
  711. }
  712. }
  713. if (size == 0)
  714. dev_err(DEV, "Both nodes diskless!\n");
  715. if (u_size) {
  716. if (u_size > size)
  717. dev_err(DEV, "Requested disk size is too big (%lu > %lu)\n",
  718. (unsigned long)u_size>>1, (unsigned long)size>>1);
  719. else
  720. size = u_size;
  721. }
  722. return size;
  723. }
  724. /**
  725. * drbd_check_al_size() - Ensures that the AL is of the right size
  726. * @mdev: DRBD device.
  727. *
  728. * Returns -EBUSY if current al lru is still used, -ENOMEM when allocation
  729. * failed, and 0 on success. You should call drbd_md_sync() after you called
  730. * this function.
  731. */
  732. static int drbd_check_al_size(struct drbd_conf *mdev)
  733. {
  734. struct lru_cache *n, *t;
  735. struct lc_element *e;
  736. unsigned int in_use;
  737. int i;
  738. if (!expect(mdev->sync_conf.al_extents >= DRBD_AL_EXTENTS_MIN))
  739. mdev->sync_conf.al_extents = DRBD_AL_EXTENTS_MIN;
  740. if (mdev->act_log &&
  741. mdev->act_log->nr_elements == mdev->sync_conf.al_extents)
  742. return 0;
  743. in_use = 0;
  744. t = mdev->act_log;
  745. n = lc_create("act_log", drbd_al_ext_cache, AL_UPDATES_PER_TRANSACTION,
  746. mdev->sync_conf.al_extents, sizeof(struct lc_element), 0);
  747. if (n == NULL) {
  748. dev_err(DEV, "Cannot allocate act_log lru!\n");
  749. return -ENOMEM;
  750. }
  751. spin_lock_irq(&mdev->al_lock);
  752. if (t) {
  753. for (i = 0; i < t->nr_elements; i++) {
  754. e = lc_element_by_index(t, i);
  755. if (e->refcnt)
  756. dev_err(DEV, "refcnt(%d)==%d\n",
  757. e->lc_number, e->refcnt);
  758. in_use += e->refcnt;
  759. }
  760. }
  761. if (!in_use)
  762. mdev->act_log = n;
  763. spin_unlock_irq(&mdev->al_lock);
  764. if (in_use) {
  765. dev_err(DEV, "Activity log still in use!\n");
  766. lc_destroy(n);
  767. return -EBUSY;
  768. } else {
  769. if (t)
  770. lc_destroy(t);
  771. }
  772. drbd_md_mark_dirty(mdev); /* we changed mdev->act_log->nr_elemens */
  773. return 0;
  774. }
  775. static void drbd_setup_queue_param(struct drbd_conf *mdev, unsigned int max_bio_size)
  776. {
  777. struct request_queue * const q = mdev->rq_queue;
  778. int max_hw_sectors = max_bio_size >> 9;
  779. int max_segments = 0;
  780. if (get_ldev_if_state(mdev, D_ATTACHING)) {
  781. struct request_queue * const b = mdev->ldev->backing_bdev->bd_disk->queue;
  782. max_hw_sectors = min(queue_max_hw_sectors(b), max_bio_size >> 9);
  783. max_segments = mdev->ldev->dc.max_bio_bvecs;
  784. put_ldev(mdev);
  785. }
  786. blk_queue_logical_block_size(q, 512);
  787. blk_queue_max_hw_sectors(q, max_hw_sectors);
  788. /* This is the workaround for "bio would need to, but cannot, be split" */
  789. blk_queue_max_segments(q, max_segments ? max_segments : BLK_MAX_SEGMENTS);
  790. blk_queue_segment_boundary(q, PAGE_CACHE_SIZE-1);
  791. if (get_ldev_if_state(mdev, D_ATTACHING)) {
  792. struct request_queue * const b = mdev->ldev->backing_bdev->bd_disk->queue;
  793. blk_queue_stack_limits(q, b);
  794. if (q->backing_dev_info.ra_pages != b->backing_dev_info.ra_pages) {
  795. dev_info(DEV, "Adjusting my ra_pages to backing device's (%lu -> %lu)\n",
  796. q->backing_dev_info.ra_pages,
  797. b->backing_dev_info.ra_pages);
  798. q->backing_dev_info.ra_pages = b->backing_dev_info.ra_pages;
  799. }
  800. put_ldev(mdev);
  801. }
  802. }
  803. void drbd_reconsider_max_bio_size(struct drbd_conf *mdev)
  804. {
  805. int now, new, local, peer;
  806. now = queue_max_hw_sectors(mdev->rq_queue) << 9;
  807. local = mdev->local_max_bio_size; /* Eventually last known value, from volatile memory */
  808. peer = mdev->peer_max_bio_size; /* Eventually last known value, from meta data */
  809. if (get_ldev_if_state(mdev, D_ATTACHING)) {
  810. local = queue_max_hw_sectors(mdev->ldev->backing_bdev->bd_disk->queue) << 9;
  811. mdev->local_max_bio_size = local;
  812. put_ldev(mdev);
  813. }
  814. /* We may ignore peer limits if the peer is modern enough.
  815. Because new from 8.3.8 onwards the peer can use multiple
  816. BIOs for a single peer_request */
  817. if (mdev->state.conn >= C_CONNECTED) {
  818. if (mdev->tconn->agreed_pro_version < 94)
  819. peer = mdev->peer_max_bio_size;
  820. else if (mdev->tconn->agreed_pro_version == 94)
  821. peer = DRBD_MAX_SIZE_H80_PACKET;
  822. else /* drbd 8.3.8 onwards */
  823. peer = DRBD_MAX_BIO_SIZE;
  824. }
  825. new = min_t(int, local, peer);
  826. if (mdev->state.role == R_PRIMARY && new < now)
  827. dev_err(DEV, "ASSERT FAILED new < now; (%d < %d)\n", new, now);
  828. if (new != now)
  829. dev_info(DEV, "max BIO size = %u\n", new);
  830. drbd_setup_queue_param(mdev, new);
  831. }
  832. /* serialize deconfig (worker exiting, doing cleanup)
  833. * and reconfig (drbdsetup disk, drbdsetup net)
  834. *
  835. * Wait for a potentially exiting worker, then restart it,
  836. * or start a new one. Flush any pending work, there may still be an
  837. * after_state_change queued.
  838. */
  839. static void conn_reconfig_start(struct drbd_tconn *tconn)
  840. {
  841. wait_event(tconn->ping_wait, !test_and_set_bit(CONFIG_PENDING, &tconn->flags));
  842. wait_event(tconn->ping_wait, !test_bit(OBJECT_DYING, &tconn->flags));
  843. drbd_thread_start(&tconn->worker);
  844. conn_flush_workqueue(tconn);
  845. }
  846. /* if still unconfigured, stops worker again.
  847. * if configured now, clears CONFIG_PENDING.
  848. * wakes potential waiters */
  849. static void conn_reconfig_done(struct drbd_tconn *tconn)
  850. {
  851. spin_lock_irq(&tconn->req_lock);
  852. if (conn_all_vols_unconf(tconn)) {
  853. set_bit(OBJECT_DYING, &tconn->flags);
  854. drbd_thread_stop_nowait(&tconn->worker);
  855. } else
  856. clear_bit(CONFIG_PENDING, &tconn->flags);
  857. spin_unlock_irq(&tconn->req_lock);
  858. wake_up(&tconn->ping_wait);
  859. }
  860. /* Make sure IO is suspended before calling this function(). */
  861. static void drbd_suspend_al(struct drbd_conf *mdev)
  862. {
  863. int s = 0;
  864. if (!lc_try_lock(mdev->act_log)) {
  865. dev_warn(DEV, "Failed to lock al in drbd_suspend_al()\n");
  866. return;
  867. }
  868. drbd_al_shrink(mdev);
  869. spin_lock_irq(&mdev->tconn->req_lock);
  870. if (mdev->state.conn < C_CONNECTED)
  871. s = !test_and_set_bit(AL_SUSPENDED, &mdev->flags);
  872. spin_unlock_irq(&mdev->tconn->req_lock);
  873. lc_unlock(mdev->act_log);
  874. if (s)
  875. dev_info(DEV, "Suspended AL updates\n");
  876. }
  877. int drbd_adm_attach(struct sk_buff *skb, struct genl_info *info)
  878. {
  879. struct drbd_conf *mdev;
  880. int err;
  881. enum drbd_ret_code retcode;
  882. enum determine_dev_size dd;
  883. sector_t max_possible_sectors;
  884. sector_t min_md_device_sectors;
  885. struct drbd_backing_dev *nbc = NULL; /* new_backing_conf */
  886. struct block_device *bdev;
  887. struct lru_cache *resync_lru = NULL;
  888. union drbd_state ns, os;
  889. enum drbd_state_rv rv;
  890. int cp_discovered = 0;
  891. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  892. if (!adm_ctx.reply_skb)
  893. return retcode;
  894. if (retcode != NO_ERROR)
  895. goto fail;
  896. mdev = adm_ctx.mdev;
  897. conn_reconfig_start(mdev->tconn);
  898. /* if you want to reconfigure, please tear down first */
  899. if (mdev->state.disk > D_DISKLESS) {
  900. retcode = ERR_DISK_CONFIGURED;
  901. goto fail;
  902. }
  903. /* It may just now have detached because of IO error. Make sure
  904. * drbd_ldev_destroy is done already, we may end up here very fast,
  905. * e.g. if someone calls attach from the on-io-error handler,
  906. * to realize a "hot spare" feature (not that I'd recommend that) */
  907. wait_event(mdev->misc_wait, !atomic_read(&mdev->local_cnt));
  908. /* allocation not in the IO path, drbdsetup context */
  909. nbc = kzalloc(sizeof(struct drbd_backing_dev), GFP_KERNEL);
  910. if (!nbc) {
  911. retcode = ERR_NOMEM;
  912. goto fail;
  913. }
  914. nbc->dc.disk_size = DRBD_DISK_SIZE_SECT_DEF;
  915. nbc->dc.on_io_error = DRBD_ON_IO_ERROR_DEF;
  916. nbc->dc.fencing = DRBD_FENCING_DEF;
  917. nbc->dc.max_bio_bvecs = DRBD_MAX_BIO_BVECS_DEF;
  918. err = disk_conf_from_attrs(&nbc->dc, info->attrs);
  919. if (err) {
  920. retcode = ERR_MANDATORY_TAG;
  921. drbd_msg_put_info(from_attrs_err_to_txt(err));
  922. goto fail;
  923. }
  924. if ((int)nbc->dc.meta_dev_idx < DRBD_MD_INDEX_FLEX_INT) {
  925. retcode = ERR_MD_IDX_INVALID;
  926. goto fail;
  927. }
  928. if (get_net_conf(mdev->tconn)) {
  929. int prot = mdev->tconn->net_conf->wire_protocol;
  930. put_net_conf(mdev->tconn);
  931. if (nbc->dc.fencing == FP_STONITH && prot == DRBD_PROT_A) {
  932. retcode = ERR_STONITH_AND_PROT_A;
  933. goto fail;
  934. }
  935. }
  936. bdev = blkdev_get_by_path(nbc->dc.backing_dev,
  937. FMODE_READ | FMODE_WRITE | FMODE_EXCL, mdev);
  938. if (IS_ERR(bdev)) {
  939. dev_err(DEV, "open(\"%s\") failed with %ld\n", nbc->dc.backing_dev,
  940. PTR_ERR(bdev));
  941. retcode = ERR_OPEN_DISK;
  942. goto fail;
  943. }
  944. nbc->backing_bdev = bdev;
  945. /*
  946. * meta_dev_idx >= 0: external fixed size, possibly multiple
  947. * drbd sharing one meta device. TODO in that case, paranoia
  948. * check that [md_bdev, meta_dev_idx] is not yet used by some
  949. * other drbd minor! (if you use drbd.conf + drbdadm, that
  950. * should check it for you already; but if you don't, or
  951. * someone fooled it, we need to double check here)
  952. */
  953. bdev = blkdev_get_by_path(nbc->dc.meta_dev,
  954. FMODE_READ | FMODE_WRITE | FMODE_EXCL,
  955. ((int)nbc->dc.meta_dev_idx < 0) ?
  956. (void *)mdev : (void *)drbd_m_holder);
  957. if (IS_ERR(bdev)) {
  958. dev_err(DEV, "open(\"%s\") failed with %ld\n", nbc->dc.meta_dev,
  959. PTR_ERR(bdev));
  960. retcode = ERR_OPEN_MD_DISK;
  961. goto fail;
  962. }
  963. nbc->md_bdev = bdev;
  964. if ((nbc->backing_bdev == nbc->md_bdev) !=
  965. (nbc->dc.meta_dev_idx == DRBD_MD_INDEX_INTERNAL ||
  966. nbc->dc.meta_dev_idx == DRBD_MD_INDEX_FLEX_INT)) {
  967. retcode = ERR_MD_IDX_INVALID;
  968. goto fail;
  969. }
  970. resync_lru = lc_create("resync", drbd_bm_ext_cache,
  971. 1, 61, sizeof(struct bm_extent),
  972. offsetof(struct bm_extent, lce));
  973. if (!resync_lru) {
  974. retcode = ERR_NOMEM;
  975. goto fail;
  976. }
  977. /* RT - for drbd_get_max_capacity() DRBD_MD_INDEX_FLEX_INT */
  978. drbd_md_set_sector_offsets(mdev, nbc);
  979. if (drbd_get_max_capacity(nbc) < nbc->dc.disk_size) {
  980. dev_err(DEV, "max capacity %llu smaller than disk size %llu\n",
  981. (unsigned long long) drbd_get_max_capacity(nbc),
  982. (unsigned long long) nbc->dc.disk_size);
  983. retcode = ERR_DISK_TO_SMALL;
  984. goto fail;
  985. }
  986. if ((int)nbc->dc.meta_dev_idx < 0) {
  987. max_possible_sectors = DRBD_MAX_SECTORS_FLEX;
  988. /* at least one MB, otherwise it does not make sense */
  989. min_md_device_sectors = (2<<10);
  990. } else {
  991. max_possible_sectors = DRBD_MAX_SECTORS;
  992. min_md_device_sectors = MD_RESERVED_SECT * (nbc->dc.meta_dev_idx + 1);
  993. }
  994. if (drbd_get_capacity(nbc->md_bdev) < min_md_device_sectors) {
  995. retcode = ERR_MD_DISK_TO_SMALL;
  996. dev_warn(DEV, "refusing attach: md-device too small, "
  997. "at least %llu sectors needed for this meta-disk type\n",
  998. (unsigned long long) min_md_device_sectors);
  999. goto fail;
  1000. }
  1001. /* Make sure the new disk is big enough
  1002. * (we may currently be R_PRIMARY with no local disk...) */
  1003. if (drbd_get_max_capacity(nbc) <
  1004. drbd_get_capacity(mdev->this_bdev)) {
  1005. retcode = ERR_DISK_TO_SMALL;
  1006. goto fail;
  1007. }
  1008. nbc->known_size = drbd_get_capacity(nbc->backing_bdev);
  1009. if (nbc->known_size > max_possible_sectors) {
  1010. dev_warn(DEV, "==> truncating very big lower level device "
  1011. "to currently maximum possible %llu sectors <==\n",
  1012. (unsigned long long) max_possible_sectors);
  1013. if ((int)nbc->dc.meta_dev_idx >= 0)
  1014. dev_warn(DEV, "==>> using internal or flexible "
  1015. "meta data may help <<==\n");
  1016. }
  1017. drbd_suspend_io(mdev);
  1018. /* also wait for the last barrier ack. */
  1019. wait_event(mdev->misc_wait, !atomic_read(&mdev->ap_pending_cnt) || is_susp(mdev->state));
  1020. /* and for any other previously queued work */
  1021. drbd_flush_workqueue(mdev);
  1022. rv = _drbd_request_state(mdev, NS(disk, D_ATTACHING), CS_VERBOSE);
  1023. retcode = rv; /* FIXME: Type mismatch. */
  1024. drbd_resume_io(mdev);
  1025. if (rv < SS_SUCCESS)
  1026. goto fail;
  1027. if (!get_ldev_if_state(mdev, D_ATTACHING))
  1028. goto force_diskless;
  1029. drbd_md_set_sector_offsets(mdev, nbc);
  1030. if (!mdev->bitmap) {
  1031. if (drbd_bm_init(mdev)) {
  1032. retcode = ERR_NOMEM;
  1033. goto force_diskless_dec;
  1034. }
  1035. }
  1036. retcode = drbd_md_read(mdev, nbc);
  1037. if (retcode != NO_ERROR)
  1038. goto force_diskless_dec;
  1039. if (mdev->state.conn < C_CONNECTED &&
  1040. mdev->state.role == R_PRIMARY &&
  1041. (mdev->ed_uuid & ~((u64)1)) != (nbc->md.uuid[UI_CURRENT] & ~((u64)1))) {
  1042. dev_err(DEV, "Can only attach to data with current UUID=%016llX\n",
  1043. (unsigned long long)mdev->ed_uuid);
  1044. retcode = ERR_DATA_NOT_CURRENT;
  1045. goto force_diskless_dec;
  1046. }
  1047. /* Since we are diskless, fix the activity log first... */
  1048. if (drbd_check_al_size(mdev)) {
  1049. retcode = ERR_NOMEM;
  1050. goto force_diskless_dec;
  1051. }
  1052. /* Prevent shrinking of consistent devices ! */
  1053. if (drbd_md_test_flag(nbc, MDF_CONSISTENT) &&
  1054. drbd_new_dev_size(mdev, nbc, 0) < nbc->md.la_size_sect) {
  1055. dev_warn(DEV, "refusing to truncate a consistent device\n");
  1056. retcode = ERR_DISK_TO_SMALL;
  1057. goto force_diskless_dec;
  1058. }
  1059. if (!drbd_al_read_log(mdev, nbc)) {
  1060. retcode = ERR_IO_MD_DISK;
  1061. goto force_diskless_dec;
  1062. }
  1063. /* Reset the "barriers don't work" bits here, then force meta data to
  1064. * be written, to ensure we determine if barriers are supported. */
  1065. if (nbc->dc.no_md_flush)
  1066. set_bit(MD_NO_FUA, &mdev->flags);
  1067. else
  1068. clear_bit(MD_NO_FUA, &mdev->flags);
  1069. /* Point of no return reached.
  1070. * Devices and memory are no longer released by error cleanup below.
  1071. * now mdev takes over responsibility, and the state engine should
  1072. * clean it up somewhere. */
  1073. D_ASSERT(mdev->ldev == NULL);
  1074. mdev->ldev = nbc;
  1075. mdev->resync = resync_lru;
  1076. nbc = NULL;
  1077. resync_lru = NULL;
  1078. mdev->write_ordering = WO_bdev_flush;
  1079. drbd_bump_write_ordering(mdev, WO_bdev_flush);
  1080. if (drbd_md_test_flag(mdev->ldev, MDF_CRASHED_PRIMARY))
  1081. set_bit(CRASHED_PRIMARY, &mdev->flags);
  1082. else
  1083. clear_bit(CRASHED_PRIMARY, &mdev->flags);
  1084. if (drbd_md_test_flag(mdev->ldev, MDF_PRIMARY_IND) &&
  1085. !(mdev->state.role == R_PRIMARY && mdev->state.susp_nod)) {
  1086. set_bit(CRASHED_PRIMARY, &mdev->flags);
  1087. cp_discovered = 1;
  1088. }
  1089. mdev->send_cnt = 0;
  1090. mdev->recv_cnt = 0;
  1091. mdev->read_cnt = 0;
  1092. mdev->writ_cnt = 0;
  1093. drbd_reconsider_max_bio_size(mdev);
  1094. /* If I am currently not R_PRIMARY,
  1095. * but meta data primary indicator is set,
  1096. * I just now recover from a hard crash,
  1097. * and have been R_PRIMARY before that crash.
  1098. *
  1099. * Now, if I had no connection before that crash
  1100. * (have been degraded R_PRIMARY), chances are that
  1101. * I won't find my peer now either.
  1102. *
  1103. * In that case, and _only_ in that case,
  1104. * we use the degr-wfc-timeout instead of the default,
  1105. * so we can automatically recover from a crash of a
  1106. * degraded but active "cluster" after a certain timeout.
  1107. */
  1108. clear_bit(USE_DEGR_WFC_T, &mdev->flags);
  1109. if (mdev->state.role != R_PRIMARY &&
  1110. drbd_md_test_flag(mdev->ldev, MDF_PRIMARY_IND) &&
  1111. !drbd_md_test_flag(mdev->ldev, MDF_CONNECTED_IND))
  1112. set_bit(USE_DEGR_WFC_T, &mdev->flags);
  1113. dd = drbd_determine_dev_size(mdev, 0);
  1114. if (dd == dev_size_error) {
  1115. retcode = ERR_NOMEM_BITMAP;
  1116. goto force_diskless_dec;
  1117. } else if (dd == grew)
  1118. set_bit(RESYNC_AFTER_NEG, &mdev->flags);
  1119. if (drbd_md_test_flag(mdev->ldev, MDF_FULL_SYNC)) {
  1120. dev_info(DEV, "Assuming that all blocks are out of sync "
  1121. "(aka FullSync)\n");
  1122. if (drbd_bitmap_io(mdev, &drbd_bmio_set_n_write,
  1123. "set_n_write from attaching", BM_LOCKED_MASK)) {
  1124. retcode = ERR_IO_MD_DISK;
  1125. goto force_diskless_dec;
  1126. }
  1127. } else {
  1128. if (drbd_bitmap_io(mdev, &drbd_bm_read,
  1129. "read from attaching", BM_LOCKED_MASK) < 0) {
  1130. retcode = ERR_IO_MD_DISK;
  1131. goto force_diskless_dec;
  1132. }
  1133. }
  1134. if (cp_discovered) {
  1135. drbd_al_apply_to_bm(mdev);
  1136. if (drbd_bitmap_io(mdev, &drbd_bm_write,
  1137. "crashed primary apply AL", BM_LOCKED_MASK)) {
  1138. retcode = ERR_IO_MD_DISK;
  1139. goto force_diskless_dec;
  1140. }
  1141. }
  1142. if (_drbd_bm_total_weight(mdev) == drbd_bm_bits(mdev))
  1143. drbd_suspend_al(mdev); /* IO is still suspended here... */
  1144. spin_lock_irq(&mdev->tconn->req_lock);
  1145. os = mdev->state;
  1146. ns.i = os.i;
  1147. /* If MDF_CONSISTENT is not set go into inconsistent state,
  1148. otherwise investigate MDF_WasUpToDate...
  1149. If MDF_WAS_UP_TO_DATE is not set go into D_OUTDATED disk state,
  1150. otherwise into D_CONSISTENT state.
  1151. */
  1152. if (drbd_md_test_flag(mdev->ldev, MDF_CONSISTENT)) {
  1153. if (drbd_md_test_flag(mdev->ldev, MDF_WAS_UP_TO_DATE))
  1154. ns.disk = D_CONSISTENT;
  1155. else
  1156. ns.disk = D_OUTDATED;
  1157. } else {
  1158. ns.disk = D_INCONSISTENT;
  1159. }
  1160. if (drbd_md_test_flag(mdev->ldev, MDF_PEER_OUT_DATED))
  1161. ns.pdsk = D_OUTDATED;
  1162. if ( ns.disk == D_CONSISTENT &&
  1163. (ns.pdsk == D_OUTDATED || mdev->ldev->dc.fencing == FP_DONT_CARE))
  1164. ns.disk = D_UP_TO_DATE;
  1165. /* All tests on MDF_PRIMARY_IND, MDF_CONNECTED_IND,
  1166. MDF_CONSISTENT and MDF_WAS_UP_TO_DATE must happen before
  1167. this point, because drbd_request_state() modifies these
  1168. flags. */
  1169. /* In case we are C_CONNECTED postpone any decision on the new disk
  1170. state after the negotiation phase. */
  1171. if (mdev->state.conn == C_CONNECTED) {
  1172. mdev->new_state_tmp.i = ns.i;
  1173. ns.i = os.i;
  1174. ns.disk = D_NEGOTIATING;
  1175. /* We expect to receive up-to-date UUIDs soon.
  1176. To avoid a race in receive_state, free p_uuid while
  1177. holding req_lock. I.e. atomic with the state change */
  1178. kfree(mdev->p_uuid);
  1179. mdev->p_uuid = NULL;
  1180. }
  1181. rv = _drbd_set_state(mdev, ns, CS_VERBOSE, NULL);
  1182. ns = mdev->state;
  1183. spin_unlock_irq(&mdev->tconn->req_lock);
  1184. if (rv < SS_SUCCESS)
  1185. goto force_diskless_dec;
  1186. if (mdev->state.role == R_PRIMARY)
  1187. mdev->ldev->md.uuid[UI_CURRENT] |= (u64)1;
  1188. else
  1189. mdev->ldev->md.uuid[UI_CURRENT] &= ~(u64)1;
  1190. drbd_md_mark_dirty(mdev);
  1191. drbd_md_sync(mdev);
  1192. kobject_uevent(&disk_to_dev(mdev->vdisk)->kobj, KOBJ_CHANGE);
  1193. put_ldev(mdev);
  1194. conn_reconfig_done(mdev->tconn);
  1195. drbd_adm_finish(info, retcode);
  1196. return 0;
  1197. force_diskless_dec:
  1198. put_ldev(mdev);
  1199. force_diskless:
  1200. drbd_force_state(mdev, NS(disk, D_FAILED));
  1201. drbd_md_sync(mdev);
  1202. conn_reconfig_done(mdev->tconn);
  1203. fail:
  1204. if (nbc) {
  1205. if (nbc->backing_bdev)
  1206. blkdev_put(nbc->backing_bdev,
  1207. FMODE_READ | FMODE_WRITE | FMODE_EXCL);
  1208. if (nbc->md_bdev)
  1209. blkdev_put(nbc->md_bdev,
  1210. FMODE_READ | FMODE_WRITE | FMODE_EXCL);
  1211. kfree(nbc);
  1212. }
  1213. lc_destroy(resync_lru);
  1214. drbd_adm_finish(info, retcode);
  1215. return 0;
  1216. }
  1217. /* Detaching the disk is a process in multiple stages. First we need to lock
  1218. * out application IO, in-flight IO, IO stuck in drbd_al_begin_io.
  1219. * Then we transition to D_DISKLESS, and wait for put_ldev() to return all
  1220. * internal references as well.
  1221. * Only then we have finally detached. */
  1222. int drbd_adm_detach(struct sk_buff *skb, struct genl_info *info)
  1223. {
  1224. struct drbd_conf *mdev;
  1225. enum drbd_ret_code retcode;
  1226. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1227. if (!adm_ctx.reply_skb)
  1228. return retcode;
  1229. if (retcode != NO_ERROR)
  1230. goto out;
  1231. mdev = adm_ctx.mdev;
  1232. drbd_suspend_io(mdev); /* so no-one is stuck in drbd_al_begin_io */
  1233. retcode = drbd_request_state(mdev, NS(disk, D_DISKLESS));
  1234. wait_event(mdev->misc_wait,
  1235. mdev->state.disk != D_DISKLESS ||
  1236. !atomic_read(&mdev->local_cnt));
  1237. drbd_resume_io(mdev);
  1238. out:
  1239. drbd_adm_finish(info, retcode);
  1240. return 0;
  1241. }
  1242. int drbd_adm_connect(struct sk_buff *skb, struct genl_info *info)
  1243. {
  1244. char hmac_name[CRYPTO_MAX_ALG_NAME];
  1245. struct drbd_conf *mdev;
  1246. struct net_conf *new_conf = NULL;
  1247. struct crypto_hash *tfm = NULL;
  1248. struct crypto_hash *integrity_w_tfm = NULL;
  1249. struct crypto_hash *integrity_r_tfm = NULL;
  1250. void *int_dig_out = NULL;
  1251. void *int_dig_in = NULL;
  1252. void *int_dig_vv = NULL;
  1253. struct drbd_tconn *oconn;
  1254. struct drbd_tconn *tconn;
  1255. struct sockaddr *new_my_addr, *new_peer_addr, *taken_addr;
  1256. enum drbd_ret_code retcode;
  1257. int i;
  1258. int err;
  1259. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_CONN);
  1260. if (!adm_ctx.reply_skb)
  1261. return retcode;
  1262. if (retcode != NO_ERROR)
  1263. goto out;
  1264. tconn = adm_ctx.tconn;
  1265. conn_reconfig_start(tconn);
  1266. if (tconn->cstate > C_STANDALONE) {
  1267. retcode = ERR_NET_CONFIGURED;
  1268. goto fail;
  1269. }
  1270. /* allocation not in the IO path, cqueue thread context */
  1271. new_conf = kzalloc(sizeof(struct net_conf), GFP_KERNEL);
  1272. if (!new_conf) {
  1273. retcode = ERR_NOMEM;
  1274. goto fail;
  1275. }
  1276. new_conf->timeout = DRBD_TIMEOUT_DEF;
  1277. new_conf->try_connect_int = DRBD_CONNECT_INT_DEF;
  1278. new_conf->ping_int = DRBD_PING_INT_DEF;
  1279. new_conf->max_epoch_size = DRBD_MAX_EPOCH_SIZE_DEF;
  1280. new_conf->max_buffers = DRBD_MAX_BUFFERS_DEF;
  1281. new_conf->unplug_watermark = DRBD_UNPLUG_WATERMARK_DEF;
  1282. new_conf->sndbuf_size = DRBD_SNDBUF_SIZE_DEF;
  1283. new_conf->rcvbuf_size = DRBD_RCVBUF_SIZE_DEF;
  1284. new_conf->ko_count = DRBD_KO_COUNT_DEF;
  1285. new_conf->after_sb_0p = DRBD_AFTER_SB_0P_DEF;
  1286. new_conf->after_sb_1p = DRBD_AFTER_SB_1P_DEF;
  1287. new_conf->after_sb_2p = DRBD_AFTER_SB_2P_DEF;
  1288. new_conf->want_lose = 0;
  1289. new_conf->two_primaries = 0;
  1290. new_conf->wire_protocol = DRBD_PROT_C;
  1291. new_conf->ping_timeo = DRBD_PING_TIMEO_DEF;
  1292. new_conf->rr_conflict = DRBD_RR_CONFLICT_DEF;
  1293. new_conf->on_congestion = DRBD_ON_CONGESTION_DEF;
  1294. new_conf->cong_extents = DRBD_CONG_EXTENTS_DEF;
  1295. err = net_conf_from_attrs(new_conf, info->attrs);
  1296. if (err) {
  1297. retcode = ERR_MANDATORY_TAG;
  1298. drbd_msg_put_info(from_attrs_err_to_txt(err));
  1299. goto fail;
  1300. }
  1301. if (new_conf->two_primaries
  1302. && (new_conf->wire_protocol != DRBD_PROT_C)) {
  1303. retcode = ERR_NOT_PROTO_C;
  1304. goto fail;
  1305. }
  1306. idr_for_each_entry(&tconn->volumes, mdev, i) {
  1307. if (get_ldev(mdev)) {
  1308. enum drbd_fencing_p fp = mdev->ldev->dc.fencing;
  1309. put_ldev(mdev);
  1310. if (new_conf->wire_protocol == DRBD_PROT_A && fp == FP_STONITH) {
  1311. retcode = ERR_STONITH_AND_PROT_A;
  1312. goto fail;
  1313. }
  1314. }
  1315. if (mdev->state.role == R_PRIMARY && new_conf->want_lose) {
  1316. retcode = ERR_DISCARD;
  1317. goto fail;
  1318. }
  1319. if (!mdev->bitmap) {
  1320. if(drbd_bm_init(mdev)) {
  1321. retcode = ERR_NOMEM;
  1322. goto fail;
  1323. }
  1324. }
  1325. }
  1326. if (new_conf->on_congestion != OC_BLOCK && new_conf->wire_protocol != DRBD_PROT_A) {
  1327. retcode = ERR_CONG_NOT_PROTO_A;
  1328. goto fail;
  1329. }
  1330. retcode = NO_ERROR;
  1331. new_my_addr = (struct sockaddr *)&new_conf->my_addr;
  1332. new_peer_addr = (struct sockaddr *)&new_conf->peer_addr;
  1333. /* No need to take drbd_cfg_mutex here. All reconfiguration is
  1334. * strictly serialized on genl_lock(). We are protected against
  1335. * concurrent reconfiguration/addition/deletion */
  1336. list_for_each_entry(oconn, &drbd_tconns, all_tconn) {
  1337. if (oconn == tconn)
  1338. continue;
  1339. if (get_net_conf(oconn)) {
  1340. taken_addr = (struct sockaddr *)&oconn->net_conf->my_addr;
  1341. if (new_conf->my_addr_len == oconn->net_conf->my_addr_len &&
  1342. !memcmp(new_my_addr, taken_addr, new_conf->my_addr_len))
  1343. retcode = ERR_LOCAL_ADDR;
  1344. taken_addr = (struct sockaddr *)&oconn->net_conf->peer_addr;
  1345. if (new_conf->peer_addr_len == oconn->net_conf->peer_addr_len &&
  1346. !memcmp(new_peer_addr, taken_addr, new_conf->peer_addr_len))
  1347. retcode = ERR_PEER_ADDR;
  1348. put_net_conf(oconn);
  1349. if (retcode != NO_ERROR)
  1350. goto fail;
  1351. }
  1352. }
  1353. if (new_conf->cram_hmac_alg[0] != 0) {
  1354. snprintf(hmac_name, CRYPTO_MAX_ALG_NAME, "hmac(%s)",
  1355. new_conf->cram_hmac_alg);
  1356. tfm = crypto_alloc_hash(hmac_name, 0, CRYPTO_ALG_ASYNC);
  1357. if (IS_ERR(tfm)) {
  1358. tfm = NULL;
  1359. retcode = ERR_AUTH_ALG;
  1360. goto fail;
  1361. }
  1362. if (!drbd_crypto_is_hash(crypto_hash_tfm(tfm))) {
  1363. retcode = ERR_AUTH_ALG_ND;
  1364. goto fail;
  1365. }
  1366. }
  1367. if (new_conf->integrity_alg[0]) {
  1368. integrity_w_tfm = crypto_alloc_hash(new_conf->integrity_alg, 0, CRYPTO_ALG_ASYNC);
  1369. if (IS_ERR(integrity_w_tfm)) {
  1370. integrity_w_tfm = NULL;
  1371. retcode=ERR_INTEGRITY_ALG;
  1372. goto fail;
  1373. }
  1374. if (!drbd_crypto_is_hash(crypto_hash_tfm(integrity_w_tfm))) {
  1375. retcode=ERR_INTEGRITY_ALG_ND;
  1376. goto fail;
  1377. }
  1378. integrity_r_tfm = crypto_alloc_hash(new_conf->integrity_alg, 0, CRYPTO_ALG_ASYNC);
  1379. if (IS_ERR(integrity_r_tfm)) {
  1380. integrity_r_tfm = NULL;
  1381. retcode=ERR_INTEGRITY_ALG;
  1382. goto fail;
  1383. }
  1384. }
  1385. ((char *)new_conf->shared_secret)[SHARED_SECRET_MAX-1] = 0;
  1386. /* allocation not in the IO path, cqueue thread context */
  1387. if (integrity_w_tfm) {
  1388. i = crypto_hash_digestsize(integrity_w_tfm);
  1389. int_dig_out = kmalloc(i, GFP_KERNEL);
  1390. if (!int_dig_out) {
  1391. retcode = ERR_NOMEM;
  1392. goto fail;
  1393. }
  1394. int_dig_in = kmalloc(i, GFP_KERNEL);
  1395. if (!int_dig_in) {
  1396. retcode = ERR_NOMEM;
  1397. goto fail;
  1398. }
  1399. int_dig_vv = kmalloc(i, GFP_KERNEL);
  1400. if (!int_dig_vv) {
  1401. retcode = ERR_NOMEM;
  1402. goto fail;
  1403. }
  1404. }
  1405. conn_flush_workqueue(tconn);
  1406. spin_lock_irq(&tconn->req_lock);
  1407. if (tconn->net_conf != NULL) {
  1408. retcode = ERR_NET_CONFIGURED;
  1409. spin_unlock_irq(&tconn->req_lock);
  1410. goto fail;
  1411. }
  1412. tconn->net_conf = new_conf;
  1413. crypto_free_hash(tconn->cram_hmac_tfm);
  1414. tconn->cram_hmac_tfm = tfm;
  1415. crypto_free_hash(tconn->integrity_w_tfm);
  1416. tconn->integrity_w_tfm = integrity_w_tfm;
  1417. crypto_free_hash(tconn->integrity_r_tfm);
  1418. tconn->integrity_r_tfm = integrity_r_tfm;
  1419. kfree(tconn->int_dig_out);
  1420. kfree(tconn->int_dig_in);
  1421. kfree(tconn->int_dig_vv);
  1422. tconn->int_dig_out=int_dig_out;
  1423. tconn->int_dig_in=int_dig_in;
  1424. tconn->int_dig_vv=int_dig_vv;
  1425. retcode = _conn_request_state(tconn, NS(conn, C_UNCONNECTED), CS_VERBOSE);
  1426. spin_unlock_irq(&tconn->req_lock);
  1427. idr_for_each_entry(&tconn->volumes, mdev, i) {
  1428. mdev->send_cnt = 0;
  1429. mdev->recv_cnt = 0;
  1430. kobject_uevent(&disk_to_dev(mdev->vdisk)->kobj, KOBJ_CHANGE);
  1431. }
  1432. conn_reconfig_done(tconn);
  1433. drbd_adm_finish(info, retcode);
  1434. return 0;
  1435. fail:
  1436. kfree(int_dig_out);
  1437. kfree(int_dig_in);
  1438. kfree(int_dig_vv);
  1439. crypto_free_hash(tfm);
  1440. crypto_free_hash(integrity_w_tfm);
  1441. crypto_free_hash(integrity_r_tfm);
  1442. kfree(new_conf);
  1443. conn_reconfig_done(tconn);
  1444. out:
  1445. drbd_adm_finish(info, retcode);
  1446. return 0;
  1447. }
  1448. int drbd_adm_disconnect(struct sk_buff *skb, struct genl_info *info)
  1449. {
  1450. struct disconnect_parms parms;
  1451. struct drbd_tconn *tconn;
  1452. enum drbd_ret_code retcode;
  1453. int err;
  1454. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_CONN);
  1455. if (!adm_ctx.reply_skb)
  1456. return retcode;
  1457. if (retcode != NO_ERROR)
  1458. goto fail;
  1459. tconn = adm_ctx.tconn;
  1460. memset(&parms, 0, sizeof(parms));
  1461. if (info->attrs[DRBD_NLA_DISCONNECT_PARMS]) {
  1462. err = disconnect_parms_from_attrs(&parms, info->attrs);
  1463. if (err) {
  1464. retcode = ERR_MANDATORY_TAG;
  1465. drbd_msg_put_info(from_attrs_err_to_txt(err));
  1466. goto fail;
  1467. }
  1468. }
  1469. if (parms.force_disconnect) {
  1470. spin_lock_irq(&tconn->req_lock);
  1471. if (tconn->cstate >= C_WF_CONNECTION)
  1472. _conn_request_state(tconn, NS(conn, C_DISCONNECTING), CS_HARD);
  1473. spin_unlock_irq(&tconn->req_lock);
  1474. goto done;
  1475. }
  1476. retcode = conn_request_state(tconn, NS(conn, C_DISCONNECTING), 0);
  1477. if (retcode == SS_NOTHING_TO_DO)
  1478. goto done;
  1479. else if (retcode == SS_ALREADY_STANDALONE)
  1480. goto done;
  1481. else if (retcode == SS_PRIMARY_NOP) {
  1482. /* Our state checking code wants to see the peer outdated. */
  1483. retcode = conn_request_state(tconn, NS2(conn, C_DISCONNECTING,
  1484. pdsk, D_OUTDATED), CS_VERBOSE);
  1485. } else if (retcode == SS_CW_FAILED_BY_PEER) {
  1486. /* The peer probably wants to see us outdated. */
  1487. retcode = conn_request_state(tconn, NS2(conn, C_DISCONNECTING,
  1488. disk, D_OUTDATED), 0);
  1489. if (retcode == SS_IS_DISKLESS || retcode == SS_LOWER_THAN_OUTDATED) {
  1490. conn_request_state(tconn, NS(conn, C_DISCONNECTING), CS_HARD);
  1491. retcode = SS_SUCCESS;
  1492. }
  1493. }
  1494. if (retcode < SS_SUCCESS)
  1495. goto fail;
  1496. if (wait_event_interruptible(tconn->ping_wait,
  1497. tconn->cstate != C_DISCONNECTING)) {
  1498. /* Do not test for mdev->state.conn == C_STANDALONE, since
  1499. someone else might connect us in the mean time! */
  1500. retcode = ERR_INTR;
  1501. goto fail;
  1502. }
  1503. done:
  1504. retcode = NO_ERROR;
  1505. fail:
  1506. drbd_adm_finish(info, retcode);
  1507. return 0;
  1508. }
  1509. void resync_after_online_grow(struct drbd_conf *mdev)
  1510. {
  1511. int iass; /* I am sync source */
  1512. dev_info(DEV, "Resync of new storage after online grow\n");
  1513. if (mdev->state.role != mdev->state.peer)
  1514. iass = (mdev->state.role == R_PRIMARY);
  1515. else
  1516. iass = test_bit(DISCARD_CONCURRENT, &mdev->tconn->flags);
  1517. if (iass)
  1518. drbd_start_resync(mdev, C_SYNC_SOURCE);
  1519. else
  1520. _drbd_request_state(mdev, NS(conn, C_WF_SYNC_UUID), CS_VERBOSE + CS_SERIALIZE);
  1521. }
  1522. int drbd_adm_resize(struct sk_buff *skb, struct genl_info *info)
  1523. {
  1524. struct resize_parms rs;
  1525. struct drbd_conf *mdev;
  1526. enum drbd_ret_code retcode;
  1527. enum determine_dev_size dd;
  1528. enum dds_flags ddsf;
  1529. int err;
  1530. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1531. if (!adm_ctx.reply_skb)
  1532. return retcode;
  1533. if (retcode != NO_ERROR)
  1534. goto fail;
  1535. memset(&rs, 0, sizeof(struct resize_parms));
  1536. if (info->attrs[DRBD_NLA_RESIZE_PARMS]) {
  1537. err = resize_parms_from_attrs(&rs, info->attrs);
  1538. if (err) {
  1539. retcode = ERR_MANDATORY_TAG;
  1540. drbd_msg_put_info(from_attrs_err_to_txt(err));
  1541. goto fail;
  1542. }
  1543. }
  1544. mdev = adm_ctx.mdev;
  1545. if (mdev->state.conn > C_CONNECTED) {
  1546. retcode = ERR_RESIZE_RESYNC;
  1547. goto fail;
  1548. }
  1549. if (mdev->state.role == R_SECONDARY &&
  1550. mdev->state.peer == R_SECONDARY) {
  1551. retcode = ERR_NO_PRIMARY;
  1552. goto fail;
  1553. }
  1554. if (!get_ldev(mdev)) {
  1555. retcode = ERR_NO_DISK;
  1556. goto fail;
  1557. }
  1558. if (rs.no_resync && mdev->tconn->agreed_pro_version < 93) {
  1559. retcode = ERR_NEED_APV_93;
  1560. goto fail;
  1561. }
  1562. if (mdev->ldev->known_size != drbd_get_capacity(mdev->ldev->backing_bdev))
  1563. mdev->ldev->known_size = drbd_get_capacity(mdev->ldev->backing_bdev);
  1564. mdev->ldev->dc.disk_size = (sector_t)rs.resize_size;
  1565. ddsf = (rs.resize_force ? DDSF_FORCED : 0) | (rs.no_resync ? DDSF_NO_RESYNC : 0);
  1566. dd = drbd_determine_dev_size(mdev, ddsf);
  1567. drbd_md_sync(mdev);
  1568. put_ldev(mdev);
  1569. if (dd == dev_size_error) {
  1570. retcode = ERR_NOMEM_BITMAP;
  1571. goto fail;
  1572. }
  1573. if (mdev->state.conn == C_CONNECTED) {
  1574. if (dd == grew)
  1575. set_bit(RESIZE_PENDING, &mdev->flags);
  1576. drbd_send_uuids(mdev);
  1577. drbd_send_sizes(mdev, 1, ddsf);
  1578. }
  1579. fail:
  1580. drbd_adm_finish(info, retcode);
  1581. return 0;
  1582. }
  1583. int drbd_adm_syncer(struct sk_buff *skb, struct genl_info *info)
  1584. {
  1585. struct drbd_conf *mdev;
  1586. enum drbd_ret_code retcode;
  1587. int err;
  1588. int ovr; /* online verify running */
  1589. int rsr; /* re-sync running */
  1590. struct crypto_hash *verify_tfm = NULL;
  1591. struct crypto_hash *csums_tfm = NULL;
  1592. struct syncer_conf sc;
  1593. cpumask_var_t new_cpu_mask;
  1594. int *rs_plan_s = NULL;
  1595. int fifo_size;
  1596. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1597. if (!adm_ctx.reply_skb)
  1598. return retcode;
  1599. if (retcode != NO_ERROR)
  1600. goto fail;
  1601. mdev = adm_ctx.mdev;
  1602. if (!zalloc_cpumask_var(&new_cpu_mask, GFP_KERNEL)) {
  1603. retcode = ERR_NOMEM;
  1604. drbd_msg_put_info("unable to allocate cpumask");
  1605. goto fail;
  1606. }
  1607. if (((struct drbd_genlmsghdr*)info->userhdr)->flags
  1608. & DRBD_GENL_F_SET_DEFAULTS) {
  1609. memset(&sc, 0, sizeof(struct syncer_conf));
  1610. sc.rate = DRBD_RATE_DEF;
  1611. sc.after = DRBD_AFTER_DEF;
  1612. sc.al_extents = DRBD_AL_EXTENTS_DEF;
  1613. sc.on_no_data = DRBD_ON_NO_DATA_DEF;
  1614. sc.c_plan_ahead = DRBD_C_PLAN_AHEAD_DEF;
  1615. sc.c_delay_target = DRBD_C_DELAY_TARGET_DEF;
  1616. sc.c_fill_target = DRBD_C_FILL_TARGET_DEF;
  1617. sc.c_max_rate = DRBD_C_MAX_RATE_DEF;
  1618. sc.c_min_rate = DRBD_C_MIN_RATE_DEF;
  1619. } else
  1620. memcpy(&sc, &mdev->sync_conf, sizeof(struct syncer_conf));
  1621. err = syncer_conf_from_attrs(&sc, info->attrs);
  1622. if (err) {
  1623. retcode = ERR_MANDATORY_TAG;
  1624. drbd_msg_put_info(from_attrs_err_to_txt(err));
  1625. goto fail;
  1626. }
  1627. /* re-sync running */
  1628. rsr = ( mdev->state.conn == C_SYNC_SOURCE ||
  1629. mdev->state.conn == C_SYNC_TARGET ||
  1630. mdev->state.conn == C_PAUSED_SYNC_S ||
  1631. mdev->state.conn == C_PAUSED_SYNC_T );
  1632. if (rsr && strcmp(sc.csums_alg, mdev->sync_conf.csums_alg)) {
  1633. retcode = ERR_CSUMS_RESYNC_RUNNING;
  1634. goto fail;
  1635. }
  1636. if (!rsr && sc.csums_alg[0]) {
  1637. csums_tfm = crypto_alloc_hash(sc.csums_alg, 0, CRYPTO_ALG_ASYNC);
  1638. if (IS_ERR(csums_tfm)) {
  1639. csums_tfm = NULL;
  1640. retcode = ERR_CSUMS_ALG;
  1641. goto fail;
  1642. }
  1643. if (!drbd_crypto_is_hash(crypto_hash_tfm(csums_tfm))) {
  1644. retcode = ERR_CSUMS_ALG_ND;
  1645. goto fail;
  1646. }
  1647. }
  1648. /* online verify running */
  1649. ovr = (mdev->state.conn == C_VERIFY_S || mdev->state.conn == C_VERIFY_T);
  1650. if (ovr) {
  1651. if (strcmp(sc.verify_alg, mdev->sync_conf.verify_alg)) {
  1652. retcode = ERR_VERIFY_RUNNING;
  1653. goto fail;
  1654. }
  1655. }
  1656. if (!ovr && sc.verify_alg[0]) {
  1657. verify_tfm = crypto_alloc_hash(sc.verify_alg, 0, CRYPTO_ALG_ASYNC);
  1658. if (IS_ERR(verify_tfm)) {
  1659. verify_tfm = NULL;
  1660. retcode = ERR_VERIFY_ALG;
  1661. goto fail;
  1662. }
  1663. if (!drbd_crypto_is_hash(crypto_hash_tfm(verify_tfm))) {
  1664. retcode = ERR_VERIFY_ALG_ND;
  1665. goto fail;
  1666. }
  1667. }
  1668. /* silently ignore cpu mask on UP kernel */
  1669. if (nr_cpu_ids > 1 && sc.cpu_mask[0] != 0) {
  1670. err = __bitmap_parse(sc.cpu_mask, 32, 0,
  1671. cpumask_bits(new_cpu_mask), nr_cpu_ids);
  1672. if (err) {
  1673. dev_warn(DEV, "__bitmap_parse() failed with %d\n", err);
  1674. retcode = ERR_CPU_MASK_PARSE;
  1675. goto fail;
  1676. }
  1677. }
  1678. if (!expect(sc.rate >= 1))
  1679. sc.rate = 1;
  1680. /* clip to allowed range */
  1681. if (!expect(sc.al_extents >= DRBD_AL_EXTENTS_MIN))
  1682. sc.al_extents = DRBD_AL_EXTENTS_MIN;
  1683. if (!expect(sc.al_extents <= DRBD_AL_EXTENTS_MAX))
  1684. sc.al_extents = DRBD_AL_EXTENTS_MAX;
  1685. /* most sanity checks done, try to assign the new sync-after
  1686. * dependency. need to hold the global lock in there,
  1687. * to avoid a race in the dependency loop check. */
  1688. retcode = drbd_alter_sa(mdev, sc.after);
  1689. if (retcode != NO_ERROR)
  1690. goto fail;
  1691. fifo_size = (sc.c_plan_ahead * 10 * SLEEP_TIME) / HZ;
  1692. if (fifo_size != mdev->rs_plan_s.size && fifo_size > 0) {
  1693. rs_plan_s = kzalloc(sizeof(int) * fifo_size, GFP_KERNEL);
  1694. if (!rs_plan_s) {
  1695. dev_err(DEV, "kmalloc of fifo_buffer failed");
  1696. retcode = ERR_NOMEM;
  1697. goto fail;
  1698. }
  1699. }
  1700. /* ok, assign the rest of it as well.
  1701. * lock against receive_SyncParam() */
  1702. spin_lock(&mdev->peer_seq_lock);
  1703. mdev->sync_conf = sc;
  1704. if (!rsr) {
  1705. crypto_free_hash(mdev->csums_tfm);
  1706. mdev->csums_tfm = csums_tfm;
  1707. csums_tfm = NULL;
  1708. }
  1709. if (!ovr) {
  1710. crypto_free_hash(mdev->verify_tfm);
  1711. mdev->verify_tfm = verify_tfm;
  1712. verify_tfm = NULL;
  1713. }
  1714. if (fifo_size != mdev->rs_plan_s.size) {
  1715. kfree(mdev->rs_plan_s.values);
  1716. mdev->rs_plan_s.values = rs_plan_s;
  1717. mdev->rs_plan_s.size = fifo_size;
  1718. mdev->rs_planed = 0;
  1719. rs_plan_s = NULL;
  1720. }
  1721. spin_unlock(&mdev->peer_seq_lock);
  1722. if (get_ldev(mdev)) {
  1723. wait_event(mdev->al_wait, lc_try_lock(mdev->act_log));
  1724. drbd_al_shrink(mdev);
  1725. err = drbd_check_al_size(mdev);
  1726. lc_unlock(mdev->act_log);
  1727. wake_up(&mdev->al_wait);
  1728. put_ldev(mdev);
  1729. drbd_md_sync(mdev);
  1730. if (err) {
  1731. retcode = ERR_NOMEM;
  1732. goto fail;
  1733. }
  1734. }
  1735. if (mdev->state.conn >= C_CONNECTED)
  1736. drbd_send_sync_param(mdev, &sc);
  1737. if (!cpumask_equal(mdev->tconn->cpu_mask, new_cpu_mask)) {
  1738. cpumask_copy(mdev->tconn->cpu_mask, new_cpu_mask);
  1739. drbd_calc_cpu_mask(mdev->tconn);
  1740. mdev->tconn->receiver.reset_cpu_mask = 1;
  1741. mdev->tconn->asender.reset_cpu_mask = 1;
  1742. mdev->tconn->worker.reset_cpu_mask = 1;
  1743. }
  1744. kobject_uevent(&disk_to_dev(mdev->vdisk)->kobj, KOBJ_CHANGE);
  1745. fail:
  1746. kfree(rs_plan_s);
  1747. free_cpumask_var(new_cpu_mask);
  1748. crypto_free_hash(csums_tfm);
  1749. crypto_free_hash(verify_tfm);
  1750. drbd_adm_finish(info, retcode);
  1751. return 0;
  1752. }
  1753. int drbd_adm_invalidate(struct sk_buff *skb, struct genl_info *info)
  1754. {
  1755. struct drbd_conf *mdev;
  1756. int retcode; /* enum drbd_ret_code rsp. enum drbd_state_rv */
  1757. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1758. if (!adm_ctx.reply_skb)
  1759. return retcode;
  1760. if (retcode != NO_ERROR)
  1761. goto out;
  1762. mdev = adm_ctx.mdev;
  1763. /* If there is still bitmap IO pending, probably because of a previous
  1764. * resync just being finished, wait for it before requesting a new resync. */
  1765. wait_event(mdev->misc_wait, !test_bit(BITMAP_IO, &mdev->flags));
  1766. retcode = _drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_T), CS_ORDERED);
  1767. if (retcode < SS_SUCCESS && retcode != SS_NEED_CONNECTION)
  1768. retcode = drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_T));
  1769. while (retcode == SS_NEED_CONNECTION) {
  1770. spin_lock_irq(&mdev->tconn->req_lock);
  1771. if (mdev->state.conn < C_CONNECTED)
  1772. retcode = _drbd_set_state(_NS(mdev, disk, D_INCONSISTENT), CS_VERBOSE, NULL);
  1773. spin_unlock_irq(&mdev->tconn->req_lock);
  1774. if (retcode != SS_NEED_CONNECTION)
  1775. break;
  1776. retcode = drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_T));
  1777. }
  1778. out:
  1779. drbd_adm_finish(info, retcode);
  1780. return 0;
  1781. }
  1782. static int drbd_bmio_set_susp_al(struct drbd_conf *mdev)
  1783. {
  1784. int rv;
  1785. rv = drbd_bmio_set_n_write(mdev);
  1786. drbd_suspend_al(mdev);
  1787. return rv;
  1788. }
  1789. static int drbd_adm_simple_request_state(struct sk_buff *skb, struct genl_info *info,
  1790. union drbd_state mask, union drbd_state val)
  1791. {
  1792. enum drbd_ret_code retcode;
  1793. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1794. if (!adm_ctx.reply_skb)
  1795. return retcode;
  1796. if (retcode != NO_ERROR)
  1797. goto out;
  1798. retcode = drbd_request_state(adm_ctx.mdev, mask, val);
  1799. out:
  1800. drbd_adm_finish(info, retcode);
  1801. return 0;
  1802. }
  1803. int drbd_adm_invalidate_peer(struct sk_buff *skb, struct genl_info *info)
  1804. {
  1805. return drbd_adm_simple_request_state(skb, info, NS(conn, C_STARTING_SYNC_S));
  1806. }
  1807. int drbd_adm_pause_sync(struct sk_buff *skb, struct genl_info *info)
  1808. {
  1809. enum drbd_ret_code retcode;
  1810. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1811. if (!adm_ctx.reply_skb)
  1812. return retcode;
  1813. if (retcode != NO_ERROR)
  1814. goto out;
  1815. if (drbd_request_state(adm_ctx.mdev, NS(user_isp, 1)) == SS_NOTHING_TO_DO)
  1816. retcode = ERR_PAUSE_IS_SET;
  1817. out:
  1818. drbd_adm_finish(info, retcode);
  1819. return 0;
  1820. }
  1821. int drbd_adm_resume_sync(struct sk_buff *skb, struct genl_info *info)
  1822. {
  1823. union drbd_state s;
  1824. enum drbd_ret_code retcode;
  1825. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1826. if (!adm_ctx.reply_skb)
  1827. return retcode;
  1828. if (retcode != NO_ERROR)
  1829. goto out;
  1830. if (drbd_request_state(adm_ctx.mdev, NS(user_isp, 0)) == SS_NOTHING_TO_DO) {
  1831. s = adm_ctx.mdev->state;
  1832. if (s.conn == C_PAUSED_SYNC_S || s.conn == C_PAUSED_SYNC_T) {
  1833. retcode = s.aftr_isp ? ERR_PIC_AFTER_DEP :
  1834. s.peer_isp ? ERR_PIC_PEER_DEP : ERR_PAUSE_IS_CLEAR;
  1835. } else {
  1836. retcode = ERR_PAUSE_IS_CLEAR;
  1837. }
  1838. }
  1839. out:
  1840. drbd_adm_finish(info, retcode);
  1841. return 0;
  1842. }
  1843. int drbd_adm_suspend_io(struct sk_buff *skb, struct genl_info *info)
  1844. {
  1845. return drbd_adm_simple_request_state(skb, info, NS(susp, 1));
  1846. }
  1847. int drbd_adm_resume_io(struct sk_buff *skb, struct genl_info *info)
  1848. {
  1849. struct drbd_conf *mdev;
  1850. int retcode; /* enum drbd_ret_code rsp. enum drbd_state_rv */
  1851. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1852. if (!adm_ctx.reply_skb)
  1853. return retcode;
  1854. if (retcode != NO_ERROR)
  1855. goto out;
  1856. mdev = adm_ctx.mdev;
  1857. if (test_bit(NEW_CUR_UUID, &mdev->flags)) {
  1858. drbd_uuid_new_current(mdev);
  1859. clear_bit(NEW_CUR_UUID, &mdev->flags);
  1860. }
  1861. drbd_suspend_io(mdev);
  1862. retcode = drbd_request_state(mdev, NS3(susp, 0, susp_nod, 0, susp_fen, 0));
  1863. if (retcode == SS_SUCCESS) {
  1864. if (mdev->state.conn < C_CONNECTED)
  1865. tl_clear(mdev->tconn);
  1866. if (mdev->state.disk == D_DISKLESS || mdev->state.disk == D_FAILED)
  1867. tl_restart(mdev->tconn, FAIL_FROZEN_DISK_IO);
  1868. }
  1869. drbd_resume_io(mdev);
  1870. out:
  1871. drbd_adm_finish(info, retcode);
  1872. return 0;
  1873. }
  1874. int drbd_adm_outdate(struct sk_buff *skb, struct genl_info *info)
  1875. {
  1876. return drbd_adm_simple_request_state(skb, info, NS(disk, D_OUTDATED));
  1877. }
  1878. int nla_put_drbd_cfg_context(struct sk_buff *skb, const char *conn_name, unsigned vnr)
  1879. {
  1880. struct nlattr *nla;
  1881. nla = nla_nest_start(skb, DRBD_NLA_CFG_CONTEXT);
  1882. if (!nla)
  1883. goto nla_put_failure;
  1884. if (vnr != VOLUME_UNSPECIFIED)
  1885. NLA_PUT_U32(skb, T_ctx_volume, vnr);
  1886. NLA_PUT_STRING(skb, T_ctx_conn_name, conn_name);
  1887. nla_nest_end(skb, nla);
  1888. return 0;
  1889. nla_put_failure:
  1890. if (nla)
  1891. nla_nest_cancel(skb, nla);
  1892. return -EMSGSIZE;
  1893. }
  1894. int nla_put_status_info(struct sk_buff *skb, struct drbd_conf *mdev,
  1895. const struct sib_info *sib)
  1896. {
  1897. struct state_info *si = NULL; /* for sizeof(si->member); */
  1898. struct nlattr *nla;
  1899. int got_ldev;
  1900. int got_net;
  1901. int err = 0;
  1902. int exclude_sensitive;
  1903. /* If sib != NULL, this is drbd_bcast_event, which anyone can listen
  1904. * to. So we better exclude_sensitive information.
  1905. *
  1906. * If sib == NULL, this is drbd_adm_get_status, executed synchronously
  1907. * in the context of the requesting user process. Exclude sensitive
  1908. * information, unless current has superuser.
  1909. *
  1910. * NOTE: for drbd_adm_get_status_all(), this is a netlink dump, and
  1911. * relies on the current implementation of netlink_dump(), which
  1912. * executes the dump callback successively from netlink_recvmsg(),
  1913. * always in the context of the receiving process */
  1914. exclude_sensitive = sib || !capable(CAP_SYS_ADMIN);
  1915. got_ldev = get_ldev(mdev);
  1916. got_net = get_net_conf(mdev->tconn);
  1917. /* We need to add connection name and volume number information still.
  1918. * Minor number is in drbd_genlmsghdr. */
  1919. if (nla_put_drbd_cfg_context(skb, mdev->tconn->name, mdev->vnr))
  1920. goto nla_put_failure;
  1921. if (got_ldev)
  1922. if (disk_conf_to_skb(skb, &mdev->ldev->dc, exclude_sensitive))
  1923. goto nla_put_failure;
  1924. if (got_net)
  1925. if (net_conf_to_skb(skb, mdev->tconn->net_conf, exclude_sensitive))
  1926. goto nla_put_failure;
  1927. if (syncer_conf_to_skb(skb, &mdev->sync_conf, exclude_sensitive))
  1928. goto nla_put_failure;
  1929. nla = nla_nest_start(skb, DRBD_NLA_STATE_INFO);
  1930. if (!nla)
  1931. goto nla_put_failure;
  1932. NLA_PUT_U32(skb, T_sib_reason, sib ? sib->sib_reason : SIB_GET_STATUS_REPLY);
  1933. NLA_PUT_U32(skb, T_current_state, mdev->state.i);
  1934. NLA_PUT_U64(skb, T_ed_uuid, mdev->ed_uuid);
  1935. NLA_PUT_U64(skb, T_capacity, drbd_get_capacity(mdev->this_bdev));
  1936. if (got_ldev) {
  1937. NLA_PUT_U32(skb, T_disk_flags, mdev->ldev->md.flags);
  1938. NLA_PUT(skb, T_uuids, sizeof(si->uuids), mdev->ldev->md.uuid);
  1939. NLA_PUT_U64(skb, T_bits_total, drbd_bm_bits(mdev));
  1940. NLA_PUT_U64(skb, T_bits_oos, drbd_bm_total_weight(mdev));
  1941. if (C_SYNC_SOURCE <= mdev->state.conn &&
  1942. C_PAUSED_SYNC_T >= mdev->state.conn) {
  1943. NLA_PUT_U64(skb, T_bits_rs_total, mdev->rs_total);
  1944. NLA_PUT_U64(skb, T_bits_rs_failed, mdev->rs_failed);
  1945. }
  1946. }
  1947. if (sib) {
  1948. switch(sib->sib_reason) {
  1949. case SIB_SYNC_PROGRESS:
  1950. case SIB_GET_STATUS_REPLY:
  1951. break;
  1952. case SIB_STATE_CHANGE:
  1953. NLA_PUT_U32(skb, T_prev_state, sib->os.i);
  1954. NLA_PUT_U32(skb, T_new_state, sib->ns.i);
  1955. break;
  1956. case SIB_HELPER_POST:
  1957. NLA_PUT_U32(skb,
  1958. T_helper_exit_code, sib->helper_exit_code);
  1959. /* fall through */
  1960. case SIB_HELPER_PRE:
  1961. NLA_PUT_STRING(skb, T_helper, sib->helper_name);
  1962. break;
  1963. }
  1964. }
  1965. nla_nest_end(skb, nla);
  1966. if (0)
  1967. nla_put_failure:
  1968. err = -EMSGSIZE;
  1969. if (got_ldev)
  1970. put_ldev(mdev);
  1971. if (got_net)
  1972. put_net_conf(mdev->tconn);
  1973. return err;
  1974. }
  1975. int drbd_adm_get_status(struct sk_buff *skb, struct genl_info *info)
  1976. {
  1977. enum drbd_ret_code retcode;
  1978. int err;
  1979. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  1980. if (!adm_ctx.reply_skb)
  1981. return retcode;
  1982. if (retcode != NO_ERROR)
  1983. goto out;
  1984. err = nla_put_status_info(adm_ctx.reply_skb, adm_ctx.mdev, NULL);
  1985. if (err) {
  1986. nlmsg_free(adm_ctx.reply_skb);
  1987. return err;
  1988. }
  1989. out:
  1990. drbd_adm_finish(info, retcode);
  1991. return 0;
  1992. }
  1993. int drbd_adm_get_status_all(struct sk_buff *skb, struct netlink_callback *cb)
  1994. {
  1995. struct drbd_conf *mdev;
  1996. struct drbd_genlmsghdr *dh;
  1997. struct drbd_tconn *pos = (struct drbd_tconn*)cb->args[0];
  1998. struct drbd_tconn *tconn = NULL;
  1999. struct drbd_tconn *tmp;
  2000. unsigned volume = cb->args[1];
  2001. /* Open coded, deferred, iteration:
  2002. * list_for_each_entry_safe(tconn, tmp, &drbd_tconns, all_tconn) {
  2003. * idr_for_each_entry(&tconn->volumes, mdev, i) {
  2004. * ...
  2005. * }
  2006. * }
  2007. * where tconn is cb->args[0];
  2008. * and i is cb->args[1];
  2009. *
  2010. * This may miss entries inserted after this dump started,
  2011. * or entries deleted before they are reached.
  2012. *
  2013. * We need to make sure the mdev won't disappear while
  2014. * we are looking at it, and revalidate our iterators
  2015. * on each iteration.
  2016. */
  2017. /* synchronize with drbd_new_tconn/drbd_free_tconn */
  2018. mutex_lock(&drbd_cfg_mutex);
  2019. /* synchronize with drbd_delete_device */
  2020. rcu_read_lock();
  2021. next_tconn:
  2022. /* revalidate iterator position */
  2023. list_for_each_entry(tmp, &drbd_tconns, all_tconn) {
  2024. if (pos == NULL) {
  2025. /* first iteration */
  2026. pos = tmp;
  2027. tconn = pos;
  2028. break;
  2029. }
  2030. if (tmp == pos) {
  2031. tconn = pos;
  2032. break;
  2033. }
  2034. }
  2035. if (tconn) {
  2036. mdev = idr_get_next(&tconn->volumes, &volume);
  2037. if (!mdev) {
  2038. /* No more volumes to dump on this tconn.
  2039. * Advance tconn iterator. */
  2040. pos = list_entry(tconn->all_tconn.next,
  2041. struct drbd_tconn, all_tconn);
  2042. /* But, did we dump any volume on this tconn yet? */
  2043. if (volume != 0) {
  2044. tconn = NULL;
  2045. volume = 0;
  2046. goto next_tconn;
  2047. }
  2048. }
  2049. dh = genlmsg_put(skb, NETLINK_CB(cb->skb).pid,
  2050. cb->nlh->nlmsg_seq, &drbd_genl_family,
  2051. NLM_F_MULTI, DRBD_ADM_GET_STATUS);
  2052. if (!dh)
  2053. goto out;
  2054. if (!mdev) {
  2055. /* this is a tconn without a single volume */
  2056. dh->minor = -1U;
  2057. dh->ret_code = NO_ERROR;
  2058. if (nla_put_drbd_cfg_context(skb, tconn->name, VOLUME_UNSPECIFIED))
  2059. genlmsg_cancel(skb, dh);
  2060. else
  2061. genlmsg_end(skb, dh);
  2062. goto out;
  2063. }
  2064. D_ASSERT(mdev->vnr == volume);
  2065. D_ASSERT(mdev->tconn == tconn);
  2066. dh->minor = mdev_to_minor(mdev);
  2067. dh->ret_code = NO_ERROR;
  2068. if (nla_put_status_info(skb, mdev, NULL)) {
  2069. genlmsg_cancel(skb, dh);
  2070. goto out;
  2071. }
  2072. genlmsg_end(skb, dh);
  2073. }
  2074. out:
  2075. rcu_read_unlock();
  2076. mutex_unlock(&drbd_cfg_mutex);
  2077. /* where to start the next iteration */
  2078. cb->args[0] = (long)pos;
  2079. cb->args[1] = (pos == tconn) ? volume + 1 : 0;
  2080. /* No more tconns/volumes/minors found results in an empty skb.
  2081. * Which will terminate the dump. */
  2082. return skb->len;
  2083. }
  2084. int drbd_adm_get_timeout_type(struct sk_buff *skb, struct genl_info *info)
  2085. {
  2086. enum drbd_ret_code retcode;
  2087. struct timeout_parms tp;
  2088. int err;
  2089. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  2090. if (!adm_ctx.reply_skb)
  2091. return retcode;
  2092. if (retcode != NO_ERROR)
  2093. goto out;
  2094. tp.timeout_type =
  2095. adm_ctx.mdev->state.pdsk == D_OUTDATED ? UT_PEER_OUTDATED :
  2096. test_bit(USE_DEGR_WFC_T, &adm_ctx.mdev->flags) ? UT_DEGRADED :
  2097. UT_DEFAULT;
  2098. err = timeout_parms_to_priv_skb(adm_ctx.reply_skb, &tp);
  2099. if (err) {
  2100. nlmsg_free(adm_ctx.reply_skb);
  2101. return err;
  2102. }
  2103. out:
  2104. drbd_adm_finish(info, retcode);
  2105. return 0;
  2106. }
  2107. int drbd_adm_start_ov(struct sk_buff *skb, struct genl_info *info)
  2108. {
  2109. struct drbd_conf *mdev;
  2110. enum drbd_ret_code retcode;
  2111. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  2112. if (!adm_ctx.reply_skb)
  2113. return retcode;
  2114. if (retcode != NO_ERROR)
  2115. goto out;
  2116. mdev = adm_ctx.mdev;
  2117. if (info->attrs[DRBD_NLA_START_OV_PARMS]) {
  2118. /* resume from last known position, if possible */
  2119. struct start_ov_parms parms =
  2120. { .ov_start_sector = mdev->ov_start_sector };
  2121. int err = start_ov_parms_from_attrs(&parms, info->attrs);
  2122. if (err) {
  2123. retcode = ERR_MANDATORY_TAG;
  2124. drbd_msg_put_info(from_attrs_err_to_txt(err));
  2125. goto out;
  2126. }
  2127. /* w_make_ov_request expects position to be aligned */
  2128. mdev->ov_start_sector = parms.ov_start_sector & ~BM_SECT_PER_BIT;
  2129. }
  2130. /* If there is still bitmap IO pending, e.g. previous resync or verify
  2131. * just being finished, wait for it before requesting a new resync. */
  2132. wait_event(mdev->misc_wait, !test_bit(BITMAP_IO, &mdev->flags));
  2133. retcode = drbd_request_state(mdev,NS(conn,C_VERIFY_S));
  2134. out:
  2135. drbd_adm_finish(info, retcode);
  2136. return 0;
  2137. }
  2138. int drbd_adm_new_c_uuid(struct sk_buff *skb, struct genl_info *info)
  2139. {
  2140. struct drbd_conf *mdev;
  2141. enum drbd_ret_code retcode;
  2142. int skip_initial_sync = 0;
  2143. int err;
  2144. struct new_c_uuid_parms args;
  2145. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  2146. if (!adm_ctx.reply_skb)
  2147. return retcode;
  2148. if (retcode != NO_ERROR)
  2149. goto out_nolock;
  2150. mdev = adm_ctx.mdev;
  2151. memset(&args, 0, sizeof(args));
  2152. if (info->attrs[DRBD_NLA_NEW_C_UUID_PARMS]) {
  2153. err = new_c_uuid_parms_from_attrs(&args, info->attrs);
  2154. if (err) {
  2155. retcode = ERR_MANDATORY_TAG;
  2156. drbd_msg_put_info(from_attrs_err_to_txt(err));
  2157. goto out_nolock;
  2158. }
  2159. }
  2160. mutex_lock(mdev->state_mutex); /* Protects us against serialized state changes. */
  2161. if (!get_ldev(mdev)) {
  2162. retcode = ERR_NO_DISK;
  2163. goto out;
  2164. }
  2165. /* this is "skip initial sync", assume to be clean */
  2166. if (mdev->state.conn == C_CONNECTED && mdev->tconn->agreed_pro_version >= 90 &&
  2167. mdev->ldev->md.uuid[UI_CURRENT] == UUID_JUST_CREATED && args.clear_bm) {
  2168. dev_info(DEV, "Preparing to skip initial sync\n");
  2169. skip_initial_sync = 1;
  2170. } else if (mdev->state.conn != C_STANDALONE) {
  2171. retcode = ERR_CONNECTED;
  2172. goto out_dec;
  2173. }
  2174. drbd_uuid_set(mdev, UI_BITMAP, 0); /* Rotate UI_BITMAP to History 1, etc... */
  2175. drbd_uuid_new_current(mdev); /* New current, previous to UI_BITMAP */
  2176. if (args.clear_bm) {
  2177. err = drbd_bitmap_io(mdev, &drbd_bmio_clear_n_write,
  2178. "clear_n_write from new_c_uuid", BM_LOCKED_MASK);
  2179. if (err) {
  2180. dev_err(DEV, "Writing bitmap failed with %d\n",err);
  2181. retcode = ERR_IO_MD_DISK;
  2182. }
  2183. if (skip_initial_sync) {
  2184. drbd_send_uuids_skip_initial_sync(mdev);
  2185. _drbd_uuid_set(mdev, UI_BITMAP, 0);
  2186. drbd_print_uuids(mdev, "cleared bitmap UUID");
  2187. spin_lock_irq(&mdev->tconn->req_lock);
  2188. _drbd_set_state(_NS2(mdev, disk, D_UP_TO_DATE, pdsk, D_UP_TO_DATE),
  2189. CS_VERBOSE, NULL);
  2190. spin_unlock_irq(&mdev->tconn->req_lock);
  2191. }
  2192. }
  2193. drbd_md_sync(mdev);
  2194. out_dec:
  2195. put_ldev(mdev);
  2196. out:
  2197. mutex_unlock(mdev->state_mutex);
  2198. out_nolock:
  2199. drbd_adm_finish(info, retcode);
  2200. return 0;
  2201. }
  2202. static enum drbd_ret_code
  2203. drbd_check_conn_name(const char *name)
  2204. {
  2205. if (!name || !name[0]) {
  2206. drbd_msg_put_info("connection name missing");
  2207. return ERR_MANDATORY_TAG;
  2208. }
  2209. /* if we want to use these in sysfs/configfs/debugfs some day,
  2210. * we must not allow slashes */
  2211. if (strchr(name, '/')) {
  2212. drbd_msg_put_info("invalid connection name");
  2213. return ERR_INVALID_REQUEST;
  2214. }
  2215. return NO_ERROR;
  2216. }
  2217. int drbd_adm_create_connection(struct sk_buff *skb, struct genl_info *info)
  2218. {
  2219. enum drbd_ret_code retcode;
  2220. retcode = drbd_adm_prepare(skb, info, 0);
  2221. if (!adm_ctx.reply_skb)
  2222. return retcode;
  2223. if (retcode != NO_ERROR)
  2224. goto out;
  2225. retcode = drbd_check_conn_name(adm_ctx.conn_name);
  2226. if (retcode != NO_ERROR)
  2227. goto out;
  2228. if (adm_ctx.tconn) {
  2229. retcode = ERR_INVALID_REQUEST;
  2230. drbd_msg_put_info("connection exists");
  2231. goto out;
  2232. }
  2233. if (!drbd_new_tconn(adm_ctx.conn_name))
  2234. retcode = ERR_NOMEM;
  2235. out:
  2236. drbd_adm_finish(info, retcode);
  2237. return 0;
  2238. }
  2239. int drbd_adm_add_minor(struct sk_buff *skb, struct genl_info *info)
  2240. {
  2241. struct drbd_genlmsghdr *dh = info->userhdr;
  2242. enum drbd_ret_code retcode;
  2243. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_CONN);
  2244. if (!adm_ctx.reply_skb)
  2245. return retcode;
  2246. if (retcode != NO_ERROR)
  2247. goto out;
  2248. /* FIXME drop minor_count parameter, limit to MINORMASK */
  2249. if (dh->minor >= minor_count) {
  2250. drbd_msg_put_info("requested minor out of range");
  2251. retcode = ERR_INVALID_REQUEST;
  2252. goto out;
  2253. }
  2254. /* FIXME we need a define here */
  2255. if (adm_ctx.volume >= 256) {
  2256. drbd_msg_put_info("requested volume id out of range");
  2257. retcode = ERR_INVALID_REQUEST;
  2258. goto out;
  2259. }
  2260. retcode = conn_new_minor(adm_ctx.tconn, dh->minor, adm_ctx.volume);
  2261. out:
  2262. drbd_adm_finish(info, retcode);
  2263. return 0;
  2264. }
  2265. int drbd_adm_delete_minor(struct sk_buff *skb, struct genl_info *info)
  2266. {
  2267. struct drbd_conf *mdev;
  2268. enum drbd_ret_code retcode;
  2269. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_MINOR);
  2270. if (!adm_ctx.reply_skb)
  2271. return retcode;
  2272. if (retcode != NO_ERROR)
  2273. goto out;
  2274. mdev = adm_ctx.mdev;
  2275. if (mdev->state.disk == D_DISKLESS &&
  2276. mdev->state.conn == C_STANDALONE &&
  2277. mdev->state.role == R_SECONDARY) {
  2278. drbd_delete_device(mdev_to_minor(mdev));
  2279. retcode = NO_ERROR;
  2280. } else
  2281. retcode = ERR_MINOR_CONFIGURED;
  2282. out:
  2283. drbd_adm_finish(info, retcode);
  2284. return 0;
  2285. }
  2286. int drbd_adm_delete_connection(struct sk_buff *skb, struct genl_info *info)
  2287. {
  2288. enum drbd_ret_code retcode;
  2289. retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_CONN);
  2290. if (!adm_ctx.reply_skb)
  2291. return retcode;
  2292. if (retcode != NO_ERROR)
  2293. goto out;
  2294. if (conn_lowest_minor(adm_ctx.tconn) < 0) {
  2295. drbd_free_tconn(adm_ctx.tconn);
  2296. retcode = NO_ERROR;
  2297. } else {
  2298. retcode = ERR_CONN_IN_USE;
  2299. }
  2300. out:
  2301. drbd_adm_finish(info, retcode);
  2302. return 0;
  2303. }
  2304. void drbd_bcast_event(struct drbd_conf *mdev, const struct sib_info *sib)
  2305. {
  2306. static atomic_t drbd_genl_seq = ATOMIC_INIT(2); /* two. */
  2307. struct sk_buff *msg;
  2308. struct drbd_genlmsghdr *d_out;
  2309. unsigned seq;
  2310. int err = -ENOMEM;
  2311. seq = atomic_inc_return(&drbd_genl_seq);
  2312. msg = genlmsg_new(NLMSG_GOODSIZE, GFP_NOIO);
  2313. if (!msg)
  2314. goto failed;
  2315. err = -EMSGSIZE;
  2316. d_out = genlmsg_put(msg, 0, seq, &drbd_genl_family, 0, DRBD_EVENT);
  2317. if (!d_out) /* cannot happen, but anyways. */
  2318. goto nla_put_failure;
  2319. d_out->minor = mdev_to_minor(mdev);
  2320. d_out->ret_code = 0;
  2321. if (nla_put_status_info(msg, mdev, sib))
  2322. goto nla_put_failure;
  2323. genlmsg_end(msg, d_out);
  2324. err = drbd_genl_multicast_events(msg, 0);
  2325. /* msg has been consumed or freed in netlink_broadcast() */
  2326. if (err && err != -ESRCH)
  2327. goto failed;
  2328. return;
  2329. nla_put_failure:
  2330. nlmsg_free(msg);
  2331. failed:
  2332. dev_err(DEV, "Error %d while broadcasting event. "
  2333. "Event seq:%u sib_reason:%u\n",
  2334. err, seq, sib->sib_reason);
  2335. }