blockdev.c 121 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128
  1. /*
  2. * QEMU host block devices
  3. *
  4. * Copyright (c) 2003-2008 Fabrice Bellard
  5. *
  6. * This work is licensed under the terms of the GNU GPL, version 2 or
  7. * later. See the COPYING file in the top-level directory.
  8. *
  9. * This file incorporates work covered by the following copyright and
  10. * permission notice:
  11. *
  12. * Copyright (c) 2003-2008 Fabrice Bellard
  13. *
  14. * Permission is hereby granted, free of charge, to any person obtaining a copy
  15. * of this software and associated documentation files (the "Software"), to deal
  16. * in the Software without restriction, including without limitation the rights
  17. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  18. * copies of the Software, and to permit persons to whom the Software is
  19. * furnished to do so, subject to the following conditions:
  20. *
  21. * The above copyright notice and this permission notice shall be included in
  22. * all copies or substantial portions of the Software.
  23. *
  24. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  25. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  26. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  27. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  28. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  29. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  30. * THE SOFTWARE.
  31. */
  32. #include "qemu/osdep.h"
  33. #include "sysemu/block-backend.h"
  34. #include "sysemu/blockdev.h"
  35. #include "hw/block/block.h"
  36. #include "block/blockjob.h"
  37. #include "block/throttle-groups.h"
  38. #include "monitor/monitor.h"
  39. #include "qemu/error-report.h"
  40. #include "qemu/option.h"
  41. #include "qemu/config-file.h"
  42. #include "qapi/qmp/types.h"
  43. #include "qapi-visit.h"
  44. #include "qapi/qmp/qerror.h"
  45. #include "qapi/qobject-output-visitor.h"
  46. #include "sysemu/sysemu.h"
  47. #include "block/block_int.h"
  48. #include "qmp-commands.h"
  49. #include "block/trace.h"
  50. #include "sysemu/arch_init.h"
  51. #include "sysemu/qtest.h"
  52. #include "qemu/cutils.h"
  53. #include "qemu/help_option.h"
  54. #include "qemu/throttle-options.h"
  55. static QTAILQ_HEAD(, BlockDriverState) monitor_bdrv_states =
  56. QTAILQ_HEAD_INITIALIZER(monitor_bdrv_states);
  57. static int do_open_tray(const char *blk_name, const char *qdev_id,
  58. bool force, Error **errp);
  59. static const char *const if_name[IF_COUNT] = {
  60. [IF_NONE] = "none",
  61. [IF_IDE] = "ide",
  62. [IF_SCSI] = "scsi",
  63. [IF_FLOPPY] = "floppy",
  64. [IF_PFLASH] = "pflash",
  65. [IF_MTD] = "mtd",
  66. [IF_SD] = "sd",
  67. [IF_VIRTIO] = "virtio",
  68. [IF_XEN] = "xen",
  69. };
  70. static int if_max_devs[IF_COUNT] = {
  71. /*
  72. * Do not change these numbers! They govern how drive option
  73. * index maps to unit and bus. That mapping is ABI.
  74. *
  75. * All controllers used to implement if=T drives need to support
  76. * if_max_devs[T] units, for any T with if_max_devs[T] != 0.
  77. * Otherwise, some index values map to "impossible" bus, unit
  78. * values.
  79. *
  80. * For instance, if you change [IF_SCSI] to 255, -drive
  81. * if=scsi,index=12 no longer means bus=1,unit=5, but
  82. * bus=0,unit=12. With an lsi53c895a controller (7 units max),
  83. * the drive can't be set up. Regression.
  84. */
  85. [IF_IDE] = 2,
  86. [IF_SCSI] = 7,
  87. };
  88. /**
  89. * Boards may call this to offer board-by-board overrides
  90. * of the default, global values.
  91. */
  92. void override_max_devs(BlockInterfaceType type, int max_devs)
  93. {
  94. BlockBackend *blk;
  95. DriveInfo *dinfo;
  96. if (max_devs <= 0) {
  97. return;
  98. }
  99. for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
  100. dinfo = blk_legacy_dinfo(blk);
  101. if (dinfo->type == type) {
  102. fprintf(stderr, "Cannot override units-per-bus property of"
  103. " the %s interface, because a drive of that type has"
  104. " already been added.\n", if_name[type]);
  105. g_assert_not_reached();
  106. }
  107. }
  108. if_max_devs[type] = max_devs;
  109. }
  110. /*
  111. * We automatically delete the drive when a device using it gets
  112. * unplugged. Questionable feature, but we can't just drop it.
  113. * Device models call blockdev_mark_auto_del() to schedule the
  114. * automatic deletion, and generic qdev code calls blockdev_auto_del()
  115. * when deletion is actually safe.
  116. */
  117. void blockdev_mark_auto_del(BlockBackend *blk)
  118. {
  119. DriveInfo *dinfo = blk_legacy_dinfo(blk);
  120. BlockDriverState *bs = blk_bs(blk);
  121. AioContext *aio_context;
  122. if (!dinfo) {
  123. return;
  124. }
  125. if (bs) {
  126. aio_context = bdrv_get_aio_context(bs);
  127. aio_context_acquire(aio_context);
  128. if (bs->job) {
  129. block_job_cancel(bs->job);
  130. }
  131. aio_context_release(aio_context);
  132. }
  133. dinfo->auto_del = 1;
  134. }
  135. void blockdev_auto_del(BlockBackend *blk)
  136. {
  137. DriveInfo *dinfo = blk_legacy_dinfo(blk);
  138. if (dinfo && dinfo->auto_del) {
  139. monitor_remove_blk(blk);
  140. blk_unref(blk);
  141. }
  142. }
  143. /**
  144. * Returns the current mapping of how many units per bus
  145. * a particular interface can support.
  146. *
  147. * A positive integer indicates n units per bus.
  148. * 0 implies the mapping has not been established.
  149. * -1 indicates an invalid BlockInterfaceType was given.
  150. */
  151. int drive_get_max_devs(BlockInterfaceType type)
  152. {
  153. if (type >= IF_IDE && type < IF_COUNT) {
  154. return if_max_devs[type];
  155. }
  156. return -1;
  157. }
  158. static int drive_index_to_bus_id(BlockInterfaceType type, int index)
  159. {
  160. int max_devs = if_max_devs[type];
  161. return max_devs ? index / max_devs : 0;
  162. }
  163. static int drive_index_to_unit_id(BlockInterfaceType type, int index)
  164. {
  165. int max_devs = if_max_devs[type];
  166. return max_devs ? index % max_devs : index;
  167. }
  168. QemuOpts *drive_def(const char *optstr)
  169. {
  170. return qemu_opts_parse_noisily(qemu_find_opts("drive"), optstr, false);
  171. }
  172. QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
  173. const char *optstr)
  174. {
  175. QemuOpts *opts;
  176. opts = drive_def(optstr);
  177. if (!opts) {
  178. return NULL;
  179. }
  180. if (type != IF_DEFAULT) {
  181. qemu_opt_set(opts, "if", if_name[type], &error_abort);
  182. }
  183. if (index >= 0) {
  184. qemu_opt_set_number(opts, "index", index, &error_abort);
  185. }
  186. if (file)
  187. qemu_opt_set(opts, "file", file, &error_abort);
  188. return opts;
  189. }
  190. DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
  191. {
  192. BlockBackend *blk;
  193. DriveInfo *dinfo;
  194. for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
  195. dinfo = blk_legacy_dinfo(blk);
  196. if (dinfo && dinfo->type == type
  197. && dinfo->bus == bus && dinfo->unit == unit) {
  198. return dinfo;
  199. }
  200. }
  201. return NULL;
  202. }
  203. void drive_check_orphaned(void)
  204. {
  205. BlockBackend *blk;
  206. DriveInfo *dinfo;
  207. Location loc;
  208. bool orphans = false;
  209. for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
  210. dinfo = blk_legacy_dinfo(blk);
  211. if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
  212. dinfo->type != IF_NONE) {
  213. loc_push_none(&loc);
  214. qemu_opts_loc_restore(dinfo->opts);
  215. error_report("machine type does not support"
  216. " if=%s,bus=%d,unit=%d",
  217. if_name[dinfo->type], dinfo->bus, dinfo->unit);
  218. loc_pop(&loc);
  219. orphans = true;
  220. }
  221. }
  222. if (orphans) {
  223. exit(1);
  224. }
  225. }
  226. DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
  227. {
  228. return drive_get(type,
  229. drive_index_to_bus_id(type, index),
  230. drive_index_to_unit_id(type, index));
  231. }
  232. int drive_get_max_bus(BlockInterfaceType type)
  233. {
  234. int max_bus;
  235. BlockBackend *blk;
  236. DriveInfo *dinfo;
  237. max_bus = -1;
  238. for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
  239. dinfo = blk_legacy_dinfo(blk);
  240. if (dinfo && dinfo->type == type && dinfo->bus > max_bus) {
  241. max_bus = dinfo->bus;
  242. }
  243. }
  244. return max_bus;
  245. }
  246. /* Get a block device. This should only be used for single-drive devices
  247. (e.g. SD/Floppy/MTD). Multi-disk devices (scsi/ide) should use the
  248. appropriate bus. */
  249. DriveInfo *drive_get_next(BlockInterfaceType type)
  250. {
  251. static int next_block_unit[IF_COUNT];
  252. return drive_get(type, 0, next_block_unit[type]++);
  253. }
  254. static void bdrv_format_print(void *opaque, const char *name)
  255. {
  256. error_printf(" %s", name);
  257. }
  258. typedef struct {
  259. QEMUBH *bh;
  260. BlockDriverState *bs;
  261. } BDRVPutRefBH;
  262. static int parse_block_error_action(const char *buf, bool is_read, Error **errp)
  263. {
  264. if (!strcmp(buf, "ignore")) {
  265. return BLOCKDEV_ON_ERROR_IGNORE;
  266. } else if (!is_read && !strcmp(buf, "enospc")) {
  267. return BLOCKDEV_ON_ERROR_ENOSPC;
  268. } else if (!strcmp(buf, "stop")) {
  269. return BLOCKDEV_ON_ERROR_STOP;
  270. } else if (!strcmp(buf, "report")) {
  271. return BLOCKDEV_ON_ERROR_REPORT;
  272. } else {
  273. error_setg(errp, "'%s' invalid %s error action",
  274. buf, is_read ? "read" : "write");
  275. return -1;
  276. }
  277. }
  278. static bool parse_stats_intervals(BlockAcctStats *stats, QList *intervals,
  279. Error **errp)
  280. {
  281. const QListEntry *entry;
  282. for (entry = qlist_first(intervals); entry; entry = qlist_next(entry)) {
  283. switch (qobject_type(entry->value)) {
  284. case QTYPE_QSTRING: {
  285. unsigned long long length;
  286. const char *str = qstring_get_str(qobject_to_qstring(entry->value));
  287. if (parse_uint_full(str, &length, 10) == 0 &&
  288. length > 0 && length <= UINT_MAX) {
  289. block_acct_add_interval(stats, (unsigned) length);
  290. } else {
  291. error_setg(errp, "Invalid interval length: %s", str);
  292. return false;
  293. }
  294. break;
  295. }
  296. case QTYPE_QNUM: {
  297. int64_t length = qnum_get_int(qobject_to_qnum(entry->value));
  298. if (length > 0 && length <= UINT_MAX) {
  299. block_acct_add_interval(stats, (unsigned) length);
  300. } else {
  301. error_setg(errp, "Invalid interval length: %" PRId64, length);
  302. return false;
  303. }
  304. break;
  305. }
  306. default:
  307. error_setg(errp, "The specification of stats-intervals is invalid");
  308. return false;
  309. }
  310. }
  311. return true;
  312. }
  313. typedef enum { MEDIA_DISK, MEDIA_CDROM } DriveMediaType;
  314. /* All parameters but @opts are optional and may be set to NULL. */
  315. static void extract_common_blockdev_options(QemuOpts *opts, int *bdrv_flags,
  316. const char **throttling_group, ThrottleConfig *throttle_cfg,
  317. BlockdevDetectZeroesOptions *detect_zeroes, Error **errp)
  318. {
  319. Error *local_error = NULL;
  320. const char *aio;
  321. if (bdrv_flags) {
  322. if (qemu_opt_get_bool(opts, "copy-on-read", false)) {
  323. *bdrv_flags |= BDRV_O_COPY_ON_READ;
  324. }
  325. if ((aio = qemu_opt_get(opts, "aio")) != NULL) {
  326. if (!strcmp(aio, "native")) {
  327. *bdrv_flags |= BDRV_O_NATIVE_AIO;
  328. } else if (!strcmp(aio, "threads")) {
  329. /* this is the default */
  330. } else {
  331. error_setg(errp, "invalid aio option");
  332. return;
  333. }
  334. }
  335. }
  336. /* disk I/O throttling */
  337. if (throttling_group) {
  338. *throttling_group = qemu_opt_get(opts, "throttling.group");
  339. }
  340. if (throttle_cfg) {
  341. throttle_config_init(throttle_cfg);
  342. throttle_cfg->buckets[THROTTLE_BPS_TOTAL].avg =
  343. qemu_opt_get_number(opts, "throttling.bps-total", 0);
  344. throttle_cfg->buckets[THROTTLE_BPS_READ].avg =
  345. qemu_opt_get_number(opts, "throttling.bps-read", 0);
  346. throttle_cfg->buckets[THROTTLE_BPS_WRITE].avg =
  347. qemu_opt_get_number(opts, "throttling.bps-write", 0);
  348. throttle_cfg->buckets[THROTTLE_OPS_TOTAL].avg =
  349. qemu_opt_get_number(opts, "throttling.iops-total", 0);
  350. throttle_cfg->buckets[THROTTLE_OPS_READ].avg =
  351. qemu_opt_get_number(opts, "throttling.iops-read", 0);
  352. throttle_cfg->buckets[THROTTLE_OPS_WRITE].avg =
  353. qemu_opt_get_number(opts, "throttling.iops-write", 0);
  354. throttle_cfg->buckets[THROTTLE_BPS_TOTAL].max =
  355. qemu_opt_get_number(opts, "throttling.bps-total-max", 0);
  356. throttle_cfg->buckets[THROTTLE_BPS_READ].max =
  357. qemu_opt_get_number(opts, "throttling.bps-read-max", 0);
  358. throttle_cfg->buckets[THROTTLE_BPS_WRITE].max =
  359. qemu_opt_get_number(opts, "throttling.bps-write-max", 0);
  360. throttle_cfg->buckets[THROTTLE_OPS_TOTAL].max =
  361. qemu_opt_get_number(opts, "throttling.iops-total-max", 0);
  362. throttle_cfg->buckets[THROTTLE_OPS_READ].max =
  363. qemu_opt_get_number(opts, "throttling.iops-read-max", 0);
  364. throttle_cfg->buckets[THROTTLE_OPS_WRITE].max =
  365. qemu_opt_get_number(opts, "throttling.iops-write-max", 0);
  366. throttle_cfg->buckets[THROTTLE_BPS_TOTAL].burst_length =
  367. qemu_opt_get_number(opts, "throttling.bps-total-max-length", 1);
  368. throttle_cfg->buckets[THROTTLE_BPS_READ].burst_length =
  369. qemu_opt_get_number(opts, "throttling.bps-read-max-length", 1);
  370. throttle_cfg->buckets[THROTTLE_BPS_WRITE].burst_length =
  371. qemu_opt_get_number(opts, "throttling.bps-write-max-length", 1);
  372. throttle_cfg->buckets[THROTTLE_OPS_TOTAL].burst_length =
  373. qemu_opt_get_number(opts, "throttling.iops-total-max-length", 1);
  374. throttle_cfg->buckets[THROTTLE_OPS_READ].burst_length =
  375. qemu_opt_get_number(opts, "throttling.iops-read-max-length", 1);
  376. throttle_cfg->buckets[THROTTLE_OPS_WRITE].burst_length =
  377. qemu_opt_get_number(opts, "throttling.iops-write-max-length", 1);
  378. throttle_cfg->op_size =
  379. qemu_opt_get_number(opts, "throttling.iops-size", 0);
  380. if (!throttle_is_valid(throttle_cfg, errp)) {
  381. return;
  382. }
  383. }
  384. if (detect_zeroes) {
  385. *detect_zeroes =
  386. qapi_enum_parse(&BlockdevDetectZeroesOptions_lookup,
  387. qemu_opt_get(opts, "detect-zeroes"),
  388. BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF,
  389. &local_error);
  390. if (local_error) {
  391. error_propagate(errp, local_error);
  392. return;
  393. }
  394. }
  395. }
  396. /* Takes the ownership of bs_opts */
  397. static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
  398. Error **errp)
  399. {
  400. const char *buf;
  401. int bdrv_flags = 0;
  402. int on_read_error, on_write_error;
  403. bool account_invalid, account_failed;
  404. bool writethrough, read_only;
  405. BlockBackend *blk;
  406. BlockDriverState *bs;
  407. ThrottleConfig cfg;
  408. int snapshot = 0;
  409. Error *error = NULL;
  410. QemuOpts *opts;
  411. QDict *interval_dict = NULL;
  412. QList *interval_list = NULL;
  413. const char *id;
  414. BlockdevDetectZeroesOptions detect_zeroes =
  415. BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF;
  416. const char *throttling_group = NULL;
  417. /* Check common options by copying from bs_opts to opts, all other options
  418. * stay in bs_opts for processing by bdrv_open(). */
  419. id = qdict_get_try_str(bs_opts, "id");
  420. opts = qemu_opts_create(&qemu_common_drive_opts, id, 1, &error);
  421. if (error) {
  422. error_propagate(errp, error);
  423. goto err_no_opts;
  424. }
  425. qemu_opts_absorb_qdict(opts, bs_opts, &error);
  426. if (error) {
  427. error_propagate(errp, error);
  428. goto early_err;
  429. }
  430. if (id) {
  431. qdict_del(bs_opts, "id");
  432. }
  433. /* extract parameters */
  434. snapshot = qemu_opt_get_bool(opts, "snapshot", 0);
  435. account_invalid = qemu_opt_get_bool(opts, "stats-account-invalid", true);
  436. account_failed = qemu_opt_get_bool(opts, "stats-account-failed", true);
  437. writethrough = !qemu_opt_get_bool(opts, BDRV_OPT_CACHE_WB, true);
  438. id = qemu_opts_id(opts);
  439. qdict_extract_subqdict(bs_opts, &interval_dict, "stats-intervals.");
  440. qdict_array_split(interval_dict, &interval_list);
  441. if (qdict_size(interval_dict) != 0) {
  442. error_setg(errp, "Invalid option stats-intervals.%s",
  443. qdict_first(interval_dict)->key);
  444. goto early_err;
  445. }
  446. extract_common_blockdev_options(opts, &bdrv_flags, &throttling_group, &cfg,
  447. &detect_zeroes, &error);
  448. if (error) {
  449. error_propagate(errp, error);
  450. goto early_err;
  451. }
  452. if ((buf = qemu_opt_get(opts, "format")) != NULL) {
  453. if (is_help_option(buf)) {
  454. error_printf("Supported formats:");
  455. bdrv_iterate_format(bdrv_format_print, NULL);
  456. error_printf("\n");
  457. goto early_err;
  458. }
  459. if (qdict_haskey(bs_opts, "driver")) {
  460. error_setg(errp, "Cannot specify both 'driver' and 'format'");
  461. goto early_err;
  462. }
  463. qdict_put_str(bs_opts, "driver", buf);
  464. }
  465. on_write_error = BLOCKDEV_ON_ERROR_ENOSPC;
  466. if ((buf = qemu_opt_get(opts, "werror")) != NULL) {
  467. on_write_error = parse_block_error_action(buf, 0, &error);
  468. if (error) {
  469. error_propagate(errp, error);
  470. goto early_err;
  471. }
  472. }
  473. on_read_error = BLOCKDEV_ON_ERROR_REPORT;
  474. if ((buf = qemu_opt_get(opts, "rerror")) != NULL) {
  475. on_read_error = parse_block_error_action(buf, 1, &error);
  476. if (error) {
  477. error_propagate(errp, error);
  478. goto early_err;
  479. }
  480. }
  481. if (snapshot) {
  482. bdrv_flags |= BDRV_O_SNAPSHOT;
  483. }
  484. read_only = qemu_opt_get_bool(opts, BDRV_OPT_READ_ONLY, false);
  485. /* init */
  486. if ((!file || !*file) && !qdict_size(bs_opts)) {
  487. BlockBackendRootState *blk_rs;
  488. blk = blk_new(0, BLK_PERM_ALL);
  489. blk_rs = blk_get_root_state(blk);
  490. blk_rs->open_flags = bdrv_flags;
  491. blk_rs->read_only = read_only;
  492. blk_rs->detect_zeroes = detect_zeroes;
  493. QDECREF(bs_opts);
  494. } else {
  495. if (file && !*file) {
  496. file = NULL;
  497. }
  498. /* bdrv_open() defaults to the values in bdrv_flags (for compatibility
  499. * with other callers) rather than what we want as the real defaults.
  500. * Apply the defaults here instead. */
  501. qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_DIRECT, "off");
  502. qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_NO_FLUSH, "off");
  503. qdict_set_default_str(bs_opts, BDRV_OPT_READ_ONLY,
  504. read_only ? "on" : "off");
  505. assert((bdrv_flags & BDRV_O_CACHE_MASK) == 0);
  506. if (runstate_check(RUN_STATE_INMIGRATE)) {
  507. bdrv_flags |= BDRV_O_INACTIVE;
  508. }
  509. blk = blk_new_open(file, NULL, bs_opts, bdrv_flags, errp);
  510. if (!blk) {
  511. goto err_no_bs_opts;
  512. }
  513. bs = blk_bs(blk);
  514. bs->detect_zeroes = detect_zeroes;
  515. block_acct_setup(blk_get_stats(blk), account_invalid, account_failed);
  516. if (!parse_stats_intervals(blk_get_stats(blk), interval_list, errp)) {
  517. blk_unref(blk);
  518. blk = NULL;
  519. goto err_no_bs_opts;
  520. }
  521. }
  522. /* disk I/O throttling */
  523. if (throttle_enabled(&cfg)) {
  524. if (!throttling_group) {
  525. throttling_group = id;
  526. }
  527. blk_io_limits_enable(blk, throttling_group);
  528. blk_set_io_limits(blk, &cfg);
  529. }
  530. blk_set_enable_write_cache(blk, !writethrough);
  531. blk_set_on_error(blk, on_read_error, on_write_error);
  532. if (!monitor_add_blk(blk, id, errp)) {
  533. blk_unref(blk);
  534. blk = NULL;
  535. goto err_no_bs_opts;
  536. }
  537. err_no_bs_opts:
  538. qemu_opts_del(opts);
  539. QDECREF(interval_dict);
  540. QDECREF(interval_list);
  541. return blk;
  542. early_err:
  543. qemu_opts_del(opts);
  544. QDECREF(interval_dict);
  545. QDECREF(interval_list);
  546. err_no_opts:
  547. QDECREF(bs_opts);
  548. return NULL;
  549. }
  550. /* Takes the ownership of bs_opts */
  551. static BlockDriverState *bds_tree_init(QDict *bs_opts, Error **errp)
  552. {
  553. int bdrv_flags = 0;
  554. /* bdrv_open() defaults to the values in bdrv_flags (for compatibility
  555. * with other callers) rather than what we want as the real defaults.
  556. * Apply the defaults here instead. */
  557. qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_DIRECT, "off");
  558. qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_NO_FLUSH, "off");
  559. qdict_set_default_str(bs_opts, BDRV_OPT_READ_ONLY, "off");
  560. if (runstate_check(RUN_STATE_INMIGRATE)) {
  561. bdrv_flags |= BDRV_O_INACTIVE;
  562. }
  563. return bdrv_open(NULL, NULL, bs_opts, bdrv_flags, errp);
  564. }
  565. void blockdev_close_all_bdrv_states(void)
  566. {
  567. BlockDriverState *bs, *next_bs;
  568. QTAILQ_FOREACH_SAFE(bs, &monitor_bdrv_states, monitor_list, next_bs) {
  569. AioContext *ctx = bdrv_get_aio_context(bs);
  570. aio_context_acquire(ctx);
  571. bdrv_unref(bs);
  572. aio_context_release(ctx);
  573. }
  574. }
  575. /* Iterates over the list of monitor-owned BlockDriverStates */
  576. BlockDriverState *bdrv_next_monitor_owned(BlockDriverState *bs)
  577. {
  578. return bs ? QTAILQ_NEXT(bs, monitor_list)
  579. : QTAILQ_FIRST(&monitor_bdrv_states);
  580. }
  581. static void qemu_opt_rename(QemuOpts *opts, const char *from, const char *to,
  582. Error **errp)
  583. {
  584. const char *value;
  585. value = qemu_opt_get(opts, from);
  586. if (value) {
  587. if (qemu_opt_find(opts, to)) {
  588. error_setg(errp, "'%s' and its alias '%s' can't be used at the "
  589. "same time", to, from);
  590. return;
  591. }
  592. }
  593. /* rename all items in opts */
  594. while ((value = qemu_opt_get(opts, from))) {
  595. qemu_opt_set(opts, to, value, &error_abort);
  596. qemu_opt_unset(opts, from);
  597. }
  598. }
  599. QemuOptsList qemu_legacy_drive_opts = {
  600. .name = "drive",
  601. .head = QTAILQ_HEAD_INITIALIZER(qemu_legacy_drive_opts.head),
  602. .desc = {
  603. {
  604. .name = "bus",
  605. .type = QEMU_OPT_NUMBER,
  606. .help = "bus number",
  607. },{
  608. .name = "unit",
  609. .type = QEMU_OPT_NUMBER,
  610. .help = "unit number (i.e. lun for scsi)",
  611. },{
  612. .name = "index",
  613. .type = QEMU_OPT_NUMBER,
  614. .help = "index number",
  615. },{
  616. .name = "media",
  617. .type = QEMU_OPT_STRING,
  618. .help = "media type (disk, cdrom)",
  619. },{
  620. .name = "if",
  621. .type = QEMU_OPT_STRING,
  622. .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
  623. },{
  624. .name = "cyls",
  625. .type = QEMU_OPT_NUMBER,
  626. .help = "number of cylinders (ide disk geometry)",
  627. },{
  628. .name = "heads",
  629. .type = QEMU_OPT_NUMBER,
  630. .help = "number of heads (ide disk geometry)",
  631. },{
  632. .name = "secs",
  633. .type = QEMU_OPT_NUMBER,
  634. .help = "number of sectors (ide disk geometry)",
  635. },{
  636. .name = "trans",
  637. .type = QEMU_OPT_STRING,
  638. .help = "chs translation (auto, lba, none)",
  639. },{
  640. .name = "boot",
  641. .type = QEMU_OPT_BOOL,
  642. .help = "(deprecated, ignored)",
  643. },{
  644. .name = "addr",
  645. .type = QEMU_OPT_STRING,
  646. .help = "pci address (virtio only)",
  647. },{
  648. .name = "serial",
  649. .type = QEMU_OPT_STRING,
  650. .help = "disk serial number",
  651. },{
  652. .name = "file",
  653. .type = QEMU_OPT_STRING,
  654. .help = "file name",
  655. },
  656. /* Options that are passed on, but have special semantics with -drive */
  657. {
  658. .name = BDRV_OPT_READ_ONLY,
  659. .type = QEMU_OPT_BOOL,
  660. .help = "open drive file as read-only",
  661. },{
  662. .name = "rerror",
  663. .type = QEMU_OPT_STRING,
  664. .help = "read error action",
  665. },{
  666. .name = "werror",
  667. .type = QEMU_OPT_STRING,
  668. .help = "write error action",
  669. },{
  670. .name = "copy-on-read",
  671. .type = QEMU_OPT_BOOL,
  672. .help = "copy read data from backing file into image file",
  673. },
  674. { /* end of list */ }
  675. },
  676. };
  677. DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
  678. {
  679. const char *value;
  680. BlockBackend *blk;
  681. DriveInfo *dinfo = NULL;
  682. QDict *bs_opts;
  683. QemuOpts *legacy_opts;
  684. DriveMediaType media = MEDIA_DISK;
  685. BlockInterfaceType type;
  686. int cyls, heads, secs, translation;
  687. int max_devs, bus_id, unit_id, index;
  688. const char *devaddr;
  689. const char *werror, *rerror;
  690. bool read_only = false;
  691. bool copy_on_read;
  692. const char *serial;
  693. const char *filename;
  694. Error *local_err = NULL;
  695. int i;
  696. const char *deprecated[] = {
  697. "serial", "trans", "secs", "heads", "cyls", "addr"
  698. };
  699. /* Change legacy command line options into QMP ones */
  700. static const struct {
  701. const char *from;
  702. const char *to;
  703. } opt_renames[] = {
  704. { "iops", "throttling.iops-total" },
  705. { "iops_rd", "throttling.iops-read" },
  706. { "iops_wr", "throttling.iops-write" },
  707. { "bps", "throttling.bps-total" },
  708. { "bps_rd", "throttling.bps-read" },
  709. { "bps_wr", "throttling.bps-write" },
  710. { "iops_max", "throttling.iops-total-max" },
  711. { "iops_rd_max", "throttling.iops-read-max" },
  712. { "iops_wr_max", "throttling.iops-write-max" },
  713. { "bps_max", "throttling.bps-total-max" },
  714. { "bps_rd_max", "throttling.bps-read-max" },
  715. { "bps_wr_max", "throttling.bps-write-max" },
  716. { "iops_size", "throttling.iops-size" },
  717. { "group", "throttling.group" },
  718. { "readonly", BDRV_OPT_READ_ONLY },
  719. };
  720. for (i = 0; i < ARRAY_SIZE(opt_renames); i++) {
  721. qemu_opt_rename(all_opts, opt_renames[i].from, opt_renames[i].to,
  722. &local_err);
  723. if (local_err) {
  724. error_report_err(local_err);
  725. return NULL;
  726. }
  727. }
  728. value = qemu_opt_get(all_opts, "cache");
  729. if (value) {
  730. int flags = 0;
  731. bool writethrough;
  732. if (bdrv_parse_cache_mode(value, &flags, &writethrough) != 0) {
  733. error_report("invalid cache option");
  734. return NULL;
  735. }
  736. /* Specific options take precedence */
  737. if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_WB)) {
  738. qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_WB,
  739. !writethrough, &error_abort);
  740. }
  741. if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_DIRECT)) {
  742. qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_DIRECT,
  743. !!(flags & BDRV_O_NOCACHE), &error_abort);
  744. }
  745. if (!qemu_opt_get(all_opts, BDRV_OPT_CACHE_NO_FLUSH)) {
  746. qemu_opt_set_bool(all_opts, BDRV_OPT_CACHE_NO_FLUSH,
  747. !!(flags & BDRV_O_NO_FLUSH), &error_abort);
  748. }
  749. qemu_opt_unset(all_opts, "cache");
  750. }
  751. /* Get a QDict for processing the options */
  752. bs_opts = qdict_new();
  753. qemu_opts_to_qdict(all_opts, bs_opts);
  754. legacy_opts = qemu_opts_create(&qemu_legacy_drive_opts, NULL, 0,
  755. &error_abort);
  756. qemu_opts_absorb_qdict(legacy_opts, bs_opts, &local_err);
  757. if (local_err) {
  758. error_report_err(local_err);
  759. goto fail;
  760. }
  761. /* Deprecated option boot=[on|off] */
  762. if (qemu_opt_get(legacy_opts, "boot") != NULL) {
  763. fprintf(stderr, "qemu-kvm: boot=on|off is deprecated and will be "
  764. "ignored. Future versions will reject this parameter. Please "
  765. "update your scripts.\n");
  766. }
  767. /* Other deprecated options */
  768. if (!qtest_enabled()) {
  769. for (i = 0; i < ARRAY_SIZE(deprecated); i++) {
  770. if (qemu_opt_get(legacy_opts, deprecated[i]) != NULL) {
  771. error_report("'%s' is deprecated, please use the corresponding "
  772. "option of '-device' instead", deprecated[i]);
  773. }
  774. }
  775. }
  776. /* Media type */
  777. value = qemu_opt_get(legacy_opts, "media");
  778. if (value) {
  779. if (!strcmp(value, "disk")) {
  780. media = MEDIA_DISK;
  781. } else if (!strcmp(value, "cdrom")) {
  782. media = MEDIA_CDROM;
  783. read_only = true;
  784. } else {
  785. error_report("'%s' invalid media", value);
  786. goto fail;
  787. }
  788. }
  789. /* copy-on-read is disabled with a warning for read-only devices */
  790. read_only |= qemu_opt_get_bool(legacy_opts, BDRV_OPT_READ_ONLY, false);
  791. copy_on_read = qemu_opt_get_bool(legacy_opts, "copy-on-read", false);
  792. if (read_only && copy_on_read) {
  793. warn_report("disabling copy-on-read on read-only drive");
  794. copy_on_read = false;
  795. }
  796. qdict_put_str(bs_opts, BDRV_OPT_READ_ONLY, read_only ? "on" : "off");
  797. qdict_put_str(bs_opts, "copy-on-read", copy_on_read ? "on" : "off");
  798. /* Controller type */
  799. value = qemu_opt_get(legacy_opts, "if");
  800. if (value) {
  801. for (type = 0;
  802. type < IF_COUNT && strcmp(value, if_name[type]);
  803. type++) {
  804. }
  805. if (type == IF_COUNT) {
  806. error_report("unsupported bus type '%s'", value);
  807. goto fail;
  808. }
  809. } else {
  810. type = block_default_type;
  811. }
  812. /* Geometry */
  813. cyls = qemu_opt_get_number(legacy_opts, "cyls", 0);
  814. heads = qemu_opt_get_number(legacy_opts, "heads", 0);
  815. secs = qemu_opt_get_number(legacy_opts, "secs", 0);
  816. if (cyls || heads || secs) {
  817. if (cyls < 1) {
  818. error_report("invalid physical cyls number");
  819. goto fail;
  820. }
  821. if (heads < 1) {
  822. error_report("invalid physical heads number");
  823. goto fail;
  824. }
  825. if (secs < 1) {
  826. error_report("invalid physical secs number");
  827. goto fail;
  828. }
  829. }
  830. translation = BIOS_ATA_TRANSLATION_AUTO;
  831. value = qemu_opt_get(legacy_opts, "trans");
  832. if (value != NULL) {
  833. if (!cyls) {
  834. error_report("'%s' trans must be used with cyls, heads and secs",
  835. value);
  836. goto fail;
  837. }
  838. if (!strcmp(value, "none")) {
  839. translation = BIOS_ATA_TRANSLATION_NONE;
  840. } else if (!strcmp(value, "lba")) {
  841. translation = BIOS_ATA_TRANSLATION_LBA;
  842. } else if (!strcmp(value, "large")) {
  843. translation = BIOS_ATA_TRANSLATION_LARGE;
  844. } else if (!strcmp(value, "rechs")) {
  845. translation = BIOS_ATA_TRANSLATION_RECHS;
  846. } else if (!strcmp(value, "auto")) {
  847. translation = BIOS_ATA_TRANSLATION_AUTO;
  848. } else {
  849. error_report("'%s' invalid translation type", value);
  850. goto fail;
  851. }
  852. }
  853. if (media == MEDIA_CDROM) {
  854. if (cyls || secs || heads) {
  855. error_report("CHS can't be set with media=cdrom");
  856. goto fail;
  857. }
  858. }
  859. /* Device address specified by bus/unit or index.
  860. * If none was specified, try to find the first free one. */
  861. bus_id = qemu_opt_get_number(legacy_opts, "bus", 0);
  862. unit_id = qemu_opt_get_number(legacy_opts, "unit", -1);
  863. index = qemu_opt_get_number(legacy_opts, "index", -1);
  864. max_devs = if_max_devs[type];
  865. if (index != -1) {
  866. if (bus_id != 0 || unit_id != -1) {
  867. error_report("index cannot be used with bus and unit");
  868. goto fail;
  869. }
  870. bus_id = drive_index_to_bus_id(type, index);
  871. unit_id = drive_index_to_unit_id(type, index);
  872. }
  873. if (unit_id == -1) {
  874. unit_id = 0;
  875. while (drive_get(type, bus_id, unit_id) != NULL) {
  876. unit_id++;
  877. if (max_devs && unit_id >= max_devs) {
  878. unit_id -= max_devs;
  879. bus_id++;
  880. }
  881. }
  882. }
  883. if (max_devs && unit_id >= max_devs) {
  884. error_report("unit %d too big (max is %d)", unit_id, max_devs - 1);
  885. goto fail;
  886. }
  887. if (drive_get(type, bus_id, unit_id) != NULL) {
  888. error_report("drive with bus=%d, unit=%d (index=%d) exists",
  889. bus_id, unit_id, index);
  890. goto fail;
  891. }
  892. /* Serial number */
  893. serial = qemu_opt_get(legacy_opts, "serial");
  894. /* no id supplied -> create one */
  895. if (qemu_opts_id(all_opts) == NULL) {
  896. char *new_id;
  897. const char *mediastr = "";
  898. if (type == IF_IDE || type == IF_SCSI) {
  899. mediastr = (media == MEDIA_CDROM) ? "-cd" : "-hd";
  900. }
  901. if (max_devs) {
  902. new_id = g_strdup_printf("%s%i%s%i", if_name[type], bus_id,
  903. mediastr, unit_id);
  904. } else {
  905. new_id = g_strdup_printf("%s%s%i", if_name[type],
  906. mediastr, unit_id);
  907. }
  908. qdict_put_str(bs_opts, "id", new_id);
  909. g_free(new_id);
  910. }
  911. /* Add virtio block device */
  912. devaddr = qemu_opt_get(legacy_opts, "addr");
  913. if (devaddr && type != IF_VIRTIO) {
  914. error_report("addr is not supported by this bus type");
  915. goto fail;
  916. }
  917. if (type == IF_VIRTIO) {
  918. QemuOpts *devopts;
  919. devopts = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
  920. &error_abort);
  921. if (arch_type == QEMU_ARCH_S390X) {
  922. qemu_opt_set(devopts, "driver", "virtio-blk-ccw", &error_abort);
  923. } else {
  924. qemu_opt_set(devopts, "driver", "virtio-blk-pci", &error_abort);
  925. }
  926. qemu_opt_set(devopts, "drive", qdict_get_str(bs_opts, "id"),
  927. &error_abort);
  928. if (devaddr) {
  929. qemu_opt_set(devopts, "addr", devaddr, &error_abort);
  930. }
  931. }
  932. filename = qemu_opt_get(legacy_opts, "file");
  933. /* Check werror/rerror compatibility with if=... */
  934. werror = qemu_opt_get(legacy_opts, "werror");
  935. if (werror != NULL) {
  936. if (type != IF_IDE && type != IF_SCSI && type != IF_VIRTIO &&
  937. type != IF_NONE) {
  938. error_report("werror is not supported by this bus type");
  939. goto fail;
  940. }
  941. qdict_put_str(bs_opts, "werror", werror);
  942. }
  943. rerror = qemu_opt_get(legacy_opts, "rerror");
  944. if (rerror != NULL) {
  945. if (type != IF_IDE && type != IF_VIRTIO && type != IF_SCSI &&
  946. type != IF_NONE) {
  947. error_report("rerror is not supported by this bus type");
  948. goto fail;
  949. }
  950. qdict_put_str(bs_opts, "rerror", rerror);
  951. }
  952. /* Actual block device init: Functionality shared with blockdev-add */
  953. blk = blockdev_init(filename, bs_opts, &local_err);
  954. bs_opts = NULL;
  955. if (!blk) {
  956. if (local_err) {
  957. error_report_err(local_err);
  958. }
  959. goto fail;
  960. } else {
  961. assert(!local_err);
  962. }
  963. /* Create legacy DriveInfo */
  964. dinfo = g_malloc0(sizeof(*dinfo));
  965. dinfo->opts = all_opts;
  966. dinfo->cyls = cyls;
  967. dinfo->heads = heads;
  968. dinfo->secs = secs;
  969. dinfo->trans = translation;
  970. dinfo->type = type;
  971. dinfo->bus = bus_id;
  972. dinfo->unit = unit_id;
  973. dinfo->devaddr = devaddr;
  974. dinfo->serial = g_strdup(serial);
  975. blk_set_legacy_dinfo(blk, dinfo);
  976. switch(type) {
  977. case IF_IDE:
  978. case IF_SCSI:
  979. case IF_XEN:
  980. case IF_NONE:
  981. dinfo->media_cd = media == MEDIA_CDROM;
  982. break;
  983. default:
  984. break;
  985. }
  986. fail:
  987. qemu_opts_del(legacy_opts);
  988. QDECREF(bs_opts);
  989. return dinfo;
  990. }
  991. static BlockDriverState *qmp_get_root_bs(const char *name, Error **errp)
  992. {
  993. BlockDriverState *bs;
  994. bs = bdrv_lookup_bs(name, name, errp);
  995. if (bs == NULL) {
  996. return NULL;
  997. }
  998. if (!bdrv_is_root_node(bs)) {
  999. error_setg(errp, "Need a root block node");
  1000. return NULL;
  1001. }
  1002. if (!bdrv_is_inserted(bs)) {
  1003. error_setg(errp, "Device has no medium");
  1004. return NULL;
  1005. }
  1006. return bs;
  1007. }
  1008. static BlockBackend *qmp_get_blk(const char *blk_name, const char *qdev_id,
  1009. Error **errp)
  1010. {
  1011. BlockBackend *blk;
  1012. if (!blk_name == !qdev_id) {
  1013. error_setg(errp, "Need exactly one of 'device' and 'id'");
  1014. return NULL;
  1015. }
  1016. if (qdev_id) {
  1017. blk = blk_by_qdev_id(qdev_id, errp);
  1018. } else {
  1019. blk = blk_by_name(blk_name);
  1020. if (blk == NULL) {
  1021. error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
  1022. "Device '%s' not found", blk_name);
  1023. }
  1024. }
  1025. return blk;
  1026. }
  1027. void hmp_commit(Monitor *mon, const QDict *qdict)
  1028. {
  1029. const char *device = qdict_get_str(qdict, "device");
  1030. BlockBackend *blk;
  1031. int ret;
  1032. if (!strcmp(device, "all")) {
  1033. ret = blk_commit_all();
  1034. } else {
  1035. BlockDriverState *bs;
  1036. AioContext *aio_context;
  1037. blk = blk_by_name(device);
  1038. if (!blk) {
  1039. monitor_printf(mon, "Device '%s' not found\n", device);
  1040. return;
  1041. }
  1042. if (!blk_is_available(blk)) {
  1043. monitor_printf(mon, "Device '%s' has no medium\n", device);
  1044. return;
  1045. }
  1046. bs = blk_bs(blk);
  1047. aio_context = bdrv_get_aio_context(bs);
  1048. aio_context_acquire(aio_context);
  1049. ret = bdrv_commit(bs);
  1050. aio_context_release(aio_context);
  1051. }
  1052. if (ret < 0) {
  1053. monitor_printf(mon, "'commit' error for '%s': %s\n", device,
  1054. strerror(-ret));
  1055. }
  1056. }
  1057. static void blockdev_do_action(TransactionAction *action, Error **errp)
  1058. {
  1059. TransactionActionList list;
  1060. list.value = action;
  1061. list.next = NULL;
  1062. qmp_transaction(&list, false, NULL, errp);
  1063. }
  1064. void qmp_blockdev_snapshot_sync(bool has_device, const char *device,
  1065. bool has_node_name, const char *node_name,
  1066. const char *snapshot_file,
  1067. bool has_snapshot_node_name,
  1068. const char *snapshot_node_name,
  1069. bool has_format, const char *format,
  1070. bool has_mode, NewImageMode mode, Error **errp)
  1071. {
  1072. BlockdevSnapshotSync snapshot = {
  1073. .has_device = has_device,
  1074. .device = (char *) device,
  1075. .has_node_name = has_node_name,
  1076. .node_name = (char *) node_name,
  1077. .snapshot_file = (char *) snapshot_file,
  1078. .has_snapshot_node_name = has_snapshot_node_name,
  1079. .snapshot_node_name = (char *) snapshot_node_name,
  1080. .has_format = has_format,
  1081. .format = (char *) format,
  1082. .has_mode = has_mode,
  1083. .mode = mode,
  1084. };
  1085. TransactionAction action = {
  1086. .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC,
  1087. .u.blockdev_snapshot_sync.data = &snapshot,
  1088. };
  1089. blockdev_do_action(&action, errp);
  1090. }
  1091. void qmp_blockdev_snapshot(const char *node, const char *overlay,
  1092. Error **errp)
  1093. {
  1094. BlockdevSnapshot snapshot_data = {
  1095. .node = (char *) node,
  1096. .overlay = (char *) overlay
  1097. };
  1098. TransactionAction action = {
  1099. .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT,
  1100. .u.blockdev_snapshot.data = &snapshot_data,
  1101. };
  1102. blockdev_do_action(&action, errp);
  1103. }
  1104. void qmp_blockdev_snapshot_internal_sync(const char *device,
  1105. const char *name,
  1106. Error **errp)
  1107. {
  1108. BlockdevSnapshotInternal snapshot = {
  1109. .device = (char *) device,
  1110. .name = (char *) name
  1111. };
  1112. TransactionAction action = {
  1113. .type = TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC,
  1114. .u.blockdev_snapshot_internal_sync.data = &snapshot,
  1115. };
  1116. blockdev_do_action(&action, errp);
  1117. }
  1118. SnapshotInfo *qmp_blockdev_snapshot_delete_internal_sync(const char *device,
  1119. bool has_id,
  1120. const char *id,
  1121. bool has_name,
  1122. const char *name,
  1123. Error **errp)
  1124. {
  1125. BlockDriverState *bs;
  1126. AioContext *aio_context;
  1127. QEMUSnapshotInfo sn;
  1128. Error *local_err = NULL;
  1129. SnapshotInfo *info = NULL;
  1130. int ret;
  1131. bs = qmp_get_root_bs(device, errp);
  1132. if (!bs) {
  1133. return NULL;
  1134. }
  1135. aio_context = bdrv_get_aio_context(bs);
  1136. aio_context_acquire(aio_context);
  1137. if (!has_id) {
  1138. id = NULL;
  1139. }
  1140. if (!has_name) {
  1141. name = NULL;
  1142. }
  1143. if (!id && !name) {
  1144. error_setg(errp, "Name or id must be provided");
  1145. goto out_aio_context;
  1146. }
  1147. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT_DELETE, errp)) {
  1148. goto out_aio_context;
  1149. }
  1150. ret = bdrv_snapshot_find_by_id_and_name(bs, id, name, &sn, &local_err);
  1151. if (local_err) {
  1152. error_propagate(errp, local_err);
  1153. goto out_aio_context;
  1154. }
  1155. if (!ret) {
  1156. error_setg(errp,
  1157. "Snapshot with id '%s' and name '%s' does not exist on "
  1158. "device '%s'",
  1159. STR_OR_NULL(id), STR_OR_NULL(name), device);
  1160. goto out_aio_context;
  1161. }
  1162. bdrv_snapshot_delete(bs, id, name, &local_err);
  1163. if (local_err) {
  1164. error_propagate(errp, local_err);
  1165. goto out_aio_context;
  1166. }
  1167. aio_context_release(aio_context);
  1168. info = g_new0(SnapshotInfo, 1);
  1169. info->id = g_strdup(sn.id_str);
  1170. info->name = g_strdup(sn.name);
  1171. info->date_nsec = sn.date_nsec;
  1172. info->date_sec = sn.date_sec;
  1173. info->vm_state_size = sn.vm_state_size;
  1174. info->vm_clock_nsec = sn.vm_clock_nsec % 1000000000;
  1175. info->vm_clock_sec = sn.vm_clock_nsec / 1000000000;
  1176. return info;
  1177. out_aio_context:
  1178. aio_context_release(aio_context);
  1179. return NULL;
  1180. }
  1181. /**
  1182. * block_dirty_bitmap_lookup:
  1183. * Return a dirty bitmap (if present), after validating
  1184. * the node reference and bitmap names.
  1185. *
  1186. * @node: The name of the BDS node to search for bitmaps
  1187. * @name: The name of the bitmap to search for
  1188. * @pbs: Output pointer for BDS lookup, if desired. Can be NULL.
  1189. * @paio: Output pointer for aio_context acquisition, if desired. Can be NULL.
  1190. * @errp: Output pointer for error information. Can be NULL.
  1191. *
  1192. * @return: A bitmap object on success, or NULL on failure.
  1193. */
  1194. static BdrvDirtyBitmap *block_dirty_bitmap_lookup(const char *node,
  1195. const char *name,
  1196. BlockDriverState **pbs,
  1197. Error **errp)
  1198. {
  1199. BlockDriverState *bs;
  1200. BdrvDirtyBitmap *bitmap;
  1201. if (!node) {
  1202. error_setg(errp, "Node cannot be NULL");
  1203. return NULL;
  1204. }
  1205. if (!name) {
  1206. error_setg(errp, "Bitmap name cannot be NULL");
  1207. return NULL;
  1208. }
  1209. bs = bdrv_lookup_bs(node, node, NULL);
  1210. if (!bs) {
  1211. error_setg(errp, "Node '%s' not found", node);
  1212. return NULL;
  1213. }
  1214. bitmap = bdrv_find_dirty_bitmap(bs, name);
  1215. if (!bitmap) {
  1216. error_setg(errp, "Dirty bitmap '%s' not found", name);
  1217. return NULL;
  1218. }
  1219. if (pbs) {
  1220. *pbs = bs;
  1221. }
  1222. return bitmap;
  1223. }
  1224. /* New and old BlockDriverState structs for atomic group operations */
  1225. typedef struct BlkActionState BlkActionState;
  1226. /**
  1227. * BlkActionOps:
  1228. * Table of operations that define an Action.
  1229. *
  1230. * @instance_size: Size of state struct, in bytes.
  1231. * @prepare: Prepare the work, must NOT be NULL.
  1232. * @commit: Commit the changes, can be NULL.
  1233. * @abort: Abort the changes on fail, can be NULL.
  1234. * @clean: Clean up resources after all transaction actions have called
  1235. * commit() or abort(). Can be NULL.
  1236. *
  1237. * Only prepare() may fail. In a single transaction, only one of commit() or
  1238. * abort() will be called. clean() will always be called if it is present.
  1239. */
  1240. typedef struct BlkActionOps {
  1241. size_t instance_size;
  1242. void (*prepare)(BlkActionState *common, Error **errp);
  1243. void (*commit)(BlkActionState *common);
  1244. void (*abort)(BlkActionState *common);
  1245. void (*clean)(BlkActionState *common);
  1246. } BlkActionOps;
  1247. /**
  1248. * BlkActionState:
  1249. * Describes one Action's state within a Transaction.
  1250. *
  1251. * @action: QAPI-defined enum identifying which Action to perform.
  1252. * @ops: Table of ActionOps this Action can perform.
  1253. * @block_job_txn: Transaction which this action belongs to.
  1254. * @entry: List membership for all Actions in this Transaction.
  1255. *
  1256. * This structure must be arranged as first member in a subclassed type,
  1257. * assuming that the compiler will also arrange it to the same offsets as the
  1258. * base class.
  1259. */
  1260. struct BlkActionState {
  1261. TransactionAction *action;
  1262. const BlkActionOps *ops;
  1263. BlockJobTxn *block_job_txn;
  1264. TransactionProperties *txn_props;
  1265. QSIMPLEQ_ENTRY(BlkActionState) entry;
  1266. };
  1267. /* internal snapshot private data */
  1268. typedef struct InternalSnapshotState {
  1269. BlkActionState common;
  1270. BlockDriverState *bs;
  1271. AioContext *aio_context;
  1272. QEMUSnapshotInfo sn;
  1273. bool created;
  1274. } InternalSnapshotState;
  1275. static int action_check_completion_mode(BlkActionState *s, Error **errp)
  1276. {
  1277. if (s->txn_props->completion_mode != ACTION_COMPLETION_MODE_INDIVIDUAL) {
  1278. error_setg(errp,
  1279. "Action '%s' does not support Transaction property "
  1280. "completion-mode = %s",
  1281. TransactionActionKind_str(s->action->type),
  1282. ActionCompletionMode_str(s->txn_props->completion_mode));
  1283. return -1;
  1284. }
  1285. return 0;
  1286. }
  1287. static void internal_snapshot_prepare(BlkActionState *common,
  1288. Error **errp)
  1289. {
  1290. Error *local_err = NULL;
  1291. const char *device;
  1292. const char *name;
  1293. BlockDriverState *bs;
  1294. QEMUSnapshotInfo old_sn, *sn;
  1295. bool ret;
  1296. qemu_timeval tv;
  1297. BlockdevSnapshotInternal *internal;
  1298. InternalSnapshotState *state;
  1299. int ret1;
  1300. g_assert(common->action->type ==
  1301. TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC);
  1302. internal = common->action->u.blockdev_snapshot_internal_sync.data;
  1303. state = DO_UPCAST(InternalSnapshotState, common, common);
  1304. /* 1. parse input */
  1305. device = internal->device;
  1306. name = internal->name;
  1307. /* 2. check for validation */
  1308. if (action_check_completion_mode(common, errp) < 0) {
  1309. return;
  1310. }
  1311. bs = qmp_get_root_bs(device, errp);
  1312. if (!bs) {
  1313. return;
  1314. }
  1315. /* AioContext is released in .clean() */
  1316. state->aio_context = bdrv_get_aio_context(bs);
  1317. aio_context_acquire(state->aio_context);
  1318. state->bs = bs;
  1319. bdrv_drained_begin(bs);
  1320. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT, errp)) {
  1321. return;
  1322. }
  1323. if (bdrv_is_read_only(bs)) {
  1324. error_setg(errp, "Device '%s' is read only", device);
  1325. return;
  1326. }
  1327. if (!bdrv_can_snapshot(bs)) {
  1328. error_setg(errp, "Block format '%s' used by device '%s' "
  1329. "does not support internal snapshots",
  1330. bs->drv->format_name, device);
  1331. return;
  1332. }
  1333. if (!strlen(name)) {
  1334. error_setg(errp, "Name is empty");
  1335. return;
  1336. }
  1337. /* check whether a snapshot with name exist */
  1338. ret = bdrv_snapshot_find_by_id_and_name(bs, NULL, name, &old_sn,
  1339. &local_err);
  1340. if (local_err) {
  1341. error_propagate(errp, local_err);
  1342. return;
  1343. } else if (ret) {
  1344. error_setg(errp,
  1345. "Snapshot with name '%s' already exists on device '%s'",
  1346. name, device);
  1347. return;
  1348. }
  1349. /* 3. take the snapshot */
  1350. sn = &state->sn;
  1351. pstrcpy(sn->name, sizeof(sn->name), name);
  1352. qemu_gettimeofday(&tv);
  1353. sn->date_sec = tv.tv_sec;
  1354. sn->date_nsec = tv.tv_usec * 1000;
  1355. sn->vm_clock_nsec = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
  1356. ret1 = bdrv_snapshot_create(bs, sn);
  1357. if (ret1 < 0) {
  1358. error_setg_errno(errp, -ret1,
  1359. "Failed to create snapshot '%s' on device '%s'",
  1360. name, device);
  1361. return;
  1362. }
  1363. /* 4. succeed, mark a snapshot is created */
  1364. state->created = true;
  1365. }
  1366. static void internal_snapshot_abort(BlkActionState *common)
  1367. {
  1368. InternalSnapshotState *state =
  1369. DO_UPCAST(InternalSnapshotState, common, common);
  1370. BlockDriverState *bs = state->bs;
  1371. QEMUSnapshotInfo *sn = &state->sn;
  1372. Error *local_error = NULL;
  1373. if (!state->created) {
  1374. return;
  1375. }
  1376. if (bdrv_snapshot_delete(bs, sn->id_str, sn->name, &local_error) < 0) {
  1377. error_reportf_err(local_error,
  1378. "Failed to delete snapshot with id '%s' and "
  1379. "name '%s' on device '%s' in abort: ",
  1380. sn->id_str, sn->name,
  1381. bdrv_get_device_name(bs));
  1382. }
  1383. }
  1384. static void internal_snapshot_clean(BlkActionState *common)
  1385. {
  1386. InternalSnapshotState *state = DO_UPCAST(InternalSnapshotState,
  1387. common, common);
  1388. if (state->aio_context) {
  1389. if (state->bs) {
  1390. bdrv_drained_end(state->bs);
  1391. }
  1392. aio_context_release(state->aio_context);
  1393. }
  1394. }
  1395. /* external snapshot private data */
  1396. typedef struct ExternalSnapshotState {
  1397. BlkActionState common;
  1398. BlockDriverState *old_bs;
  1399. BlockDriverState *new_bs;
  1400. AioContext *aio_context;
  1401. bool overlay_appended;
  1402. } ExternalSnapshotState;
  1403. static void external_snapshot_prepare(BlkActionState *common,
  1404. Error **errp)
  1405. {
  1406. int flags = 0;
  1407. QDict *options = NULL;
  1408. Error *local_err = NULL;
  1409. /* Device and node name of the image to generate the snapshot from */
  1410. const char *device;
  1411. const char *node_name;
  1412. /* Reference to the new image (for 'blockdev-snapshot') */
  1413. const char *snapshot_ref;
  1414. /* File name of the new image (for 'blockdev-snapshot-sync') */
  1415. const char *new_image_file;
  1416. ExternalSnapshotState *state =
  1417. DO_UPCAST(ExternalSnapshotState, common, common);
  1418. TransactionAction *action = common->action;
  1419. /* 'blockdev-snapshot' and 'blockdev-snapshot-sync' have similar
  1420. * purpose but a different set of parameters */
  1421. switch (action->type) {
  1422. case TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT:
  1423. {
  1424. BlockdevSnapshot *s = action->u.blockdev_snapshot.data;
  1425. device = s->node;
  1426. node_name = s->node;
  1427. new_image_file = NULL;
  1428. snapshot_ref = s->overlay;
  1429. }
  1430. break;
  1431. case TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC:
  1432. {
  1433. BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
  1434. device = s->has_device ? s->device : NULL;
  1435. node_name = s->has_node_name ? s->node_name : NULL;
  1436. new_image_file = s->snapshot_file;
  1437. snapshot_ref = NULL;
  1438. }
  1439. break;
  1440. default:
  1441. g_assert_not_reached();
  1442. }
  1443. /* start processing */
  1444. if (action_check_completion_mode(common, errp) < 0) {
  1445. return;
  1446. }
  1447. state->old_bs = bdrv_lookup_bs(device, node_name, errp);
  1448. if (!state->old_bs) {
  1449. return;
  1450. }
  1451. /* Acquire AioContext now so any threads operating on old_bs stop */
  1452. state->aio_context = bdrv_get_aio_context(state->old_bs);
  1453. aio_context_acquire(state->aio_context);
  1454. bdrv_drained_begin(state->old_bs);
  1455. if (!bdrv_is_inserted(state->old_bs)) {
  1456. error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
  1457. return;
  1458. }
  1459. if (bdrv_op_is_blocked(state->old_bs,
  1460. BLOCK_OP_TYPE_EXTERNAL_SNAPSHOT, errp)) {
  1461. return;
  1462. }
  1463. if (!bdrv_is_read_only(state->old_bs)) {
  1464. if (bdrv_flush(state->old_bs)) {
  1465. error_setg(errp, QERR_IO_ERROR);
  1466. return;
  1467. }
  1468. }
  1469. if (!bdrv_is_first_non_filter(state->old_bs)) {
  1470. error_setg(errp, QERR_FEATURE_DISABLED, "snapshot");
  1471. return;
  1472. }
  1473. if (action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC) {
  1474. BlockdevSnapshotSync *s = action->u.blockdev_snapshot_sync.data;
  1475. const char *format = s->has_format ? s->format : "qcow2";
  1476. enum NewImageMode mode;
  1477. const char *snapshot_node_name =
  1478. s->has_snapshot_node_name ? s->snapshot_node_name : NULL;
  1479. if (node_name && !snapshot_node_name) {
  1480. error_setg(errp, "New snapshot node name missing");
  1481. return;
  1482. }
  1483. if (snapshot_node_name &&
  1484. bdrv_lookup_bs(snapshot_node_name, snapshot_node_name, NULL)) {
  1485. error_setg(errp, "New snapshot node name already in use");
  1486. return;
  1487. }
  1488. flags = state->old_bs->open_flags;
  1489. flags &= ~(BDRV_O_SNAPSHOT | BDRV_O_COPY_ON_READ);
  1490. flags |= BDRV_O_NO_BACKING;
  1491. /* create new image w/backing file */
  1492. mode = s->has_mode ? s->mode : NEW_IMAGE_MODE_ABSOLUTE_PATHS;
  1493. if (mode != NEW_IMAGE_MODE_EXISTING) {
  1494. int64_t size = bdrv_getlength(state->old_bs);
  1495. if (size < 0) {
  1496. error_setg_errno(errp, -size, "bdrv_getlength failed");
  1497. return;
  1498. }
  1499. bdrv_img_create(new_image_file, format,
  1500. state->old_bs->filename,
  1501. state->old_bs->drv->format_name,
  1502. NULL, size, flags, false, &local_err);
  1503. if (local_err) {
  1504. error_propagate(errp, local_err);
  1505. return;
  1506. }
  1507. }
  1508. options = qdict_new();
  1509. if (s->has_snapshot_node_name) {
  1510. qdict_put_str(options, "node-name", snapshot_node_name);
  1511. }
  1512. qdict_put_str(options, "driver", format);
  1513. }
  1514. state->new_bs = bdrv_open(new_image_file, snapshot_ref, options, flags,
  1515. errp);
  1516. /* We will manually add the backing_hd field to the bs later */
  1517. if (!state->new_bs) {
  1518. return;
  1519. }
  1520. if (bdrv_has_blk(state->new_bs)) {
  1521. error_setg(errp, "The snapshot is already in use");
  1522. return;
  1523. }
  1524. if (bdrv_op_is_blocked(state->new_bs, BLOCK_OP_TYPE_EXTERNAL_SNAPSHOT,
  1525. errp)) {
  1526. return;
  1527. }
  1528. if (state->new_bs->backing != NULL) {
  1529. error_setg(errp, "The snapshot already has a backing image");
  1530. return;
  1531. }
  1532. if (!state->new_bs->drv->supports_backing) {
  1533. error_setg(errp, "The snapshot does not support backing images");
  1534. return;
  1535. }
  1536. bdrv_set_aio_context(state->new_bs, state->aio_context);
  1537. /* This removes our old bs and adds the new bs. This is an operation that
  1538. * can fail, so we need to do it in .prepare; undoing it for abort is
  1539. * always possible. */
  1540. bdrv_ref(state->new_bs);
  1541. bdrv_append(state->new_bs, state->old_bs, &local_err);
  1542. if (local_err) {
  1543. error_propagate(errp, local_err);
  1544. return;
  1545. }
  1546. state->overlay_appended = true;
  1547. }
  1548. static void external_snapshot_commit(BlkActionState *common)
  1549. {
  1550. ExternalSnapshotState *state =
  1551. DO_UPCAST(ExternalSnapshotState, common, common);
  1552. /* We don't need (or want) to use the transactional
  1553. * bdrv_reopen_multiple() across all the entries at once, because we
  1554. * don't want to abort all of them if one of them fails the reopen */
  1555. if (!atomic_read(&state->old_bs->copy_on_read)) {
  1556. bdrv_reopen(state->old_bs, state->old_bs->open_flags & ~BDRV_O_RDWR,
  1557. NULL);
  1558. }
  1559. }
  1560. static void external_snapshot_abort(BlkActionState *common)
  1561. {
  1562. ExternalSnapshotState *state =
  1563. DO_UPCAST(ExternalSnapshotState, common, common);
  1564. if (state->new_bs) {
  1565. if (state->overlay_appended) {
  1566. bdrv_ref(state->old_bs); /* we can't let bdrv_set_backind_hd()
  1567. close state->old_bs; we need it */
  1568. bdrv_set_backing_hd(state->new_bs, NULL, &error_abort);
  1569. bdrv_replace_node(state->new_bs, state->old_bs, &error_abort);
  1570. bdrv_unref(state->old_bs); /* bdrv_replace_node() ref'ed old_bs */
  1571. }
  1572. }
  1573. }
  1574. static void external_snapshot_clean(BlkActionState *common)
  1575. {
  1576. ExternalSnapshotState *state =
  1577. DO_UPCAST(ExternalSnapshotState, common, common);
  1578. if (state->aio_context) {
  1579. bdrv_drained_end(state->old_bs);
  1580. aio_context_release(state->aio_context);
  1581. bdrv_unref(state->new_bs);
  1582. }
  1583. }
  1584. typedef struct DriveBackupState {
  1585. BlkActionState common;
  1586. BlockDriverState *bs;
  1587. AioContext *aio_context;
  1588. BlockJob *job;
  1589. } DriveBackupState;
  1590. static BlockJob *do_drive_backup(DriveBackup *backup, BlockJobTxn *txn,
  1591. Error **errp);
  1592. static void drive_backup_prepare(BlkActionState *common, Error **errp)
  1593. {
  1594. DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
  1595. BlockDriverState *bs;
  1596. DriveBackup *backup;
  1597. Error *local_err = NULL;
  1598. assert(common->action->type == TRANSACTION_ACTION_KIND_DRIVE_BACKUP);
  1599. backup = common->action->u.drive_backup.data;
  1600. bs = qmp_get_root_bs(backup->device, errp);
  1601. if (!bs) {
  1602. return;
  1603. }
  1604. /* AioContext is released in .clean() */
  1605. state->aio_context = bdrv_get_aio_context(bs);
  1606. aio_context_acquire(state->aio_context);
  1607. bdrv_drained_begin(bs);
  1608. state->bs = bs;
  1609. state->job = do_drive_backup(backup, common->block_job_txn, &local_err);
  1610. if (local_err) {
  1611. error_propagate(errp, local_err);
  1612. return;
  1613. }
  1614. }
  1615. static void drive_backup_commit(BlkActionState *common)
  1616. {
  1617. DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
  1618. assert(state->job);
  1619. block_job_start(state->job);
  1620. }
  1621. static void drive_backup_abort(BlkActionState *common)
  1622. {
  1623. DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
  1624. if (state->job) {
  1625. block_job_cancel_sync(state->job);
  1626. }
  1627. }
  1628. static void drive_backup_clean(BlkActionState *common)
  1629. {
  1630. DriveBackupState *state = DO_UPCAST(DriveBackupState, common, common);
  1631. if (state->aio_context) {
  1632. bdrv_drained_end(state->bs);
  1633. aio_context_release(state->aio_context);
  1634. }
  1635. }
  1636. typedef struct BlockdevBackupState {
  1637. BlkActionState common;
  1638. BlockDriverState *bs;
  1639. BlockJob *job;
  1640. AioContext *aio_context;
  1641. } BlockdevBackupState;
  1642. static BlockJob *do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn,
  1643. Error **errp);
  1644. static void blockdev_backup_prepare(BlkActionState *common, Error **errp)
  1645. {
  1646. BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
  1647. BlockdevBackup *backup;
  1648. BlockDriverState *bs, *target;
  1649. Error *local_err = NULL;
  1650. assert(common->action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP);
  1651. backup = common->action->u.blockdev_backup.data;
  1652. bs = qmp_get_root_bs(backup->device, errp);
  1653. if (!bs) {
  1654. return;
  1655. }
  1656. target = bdrv_lookup_bs(backup->target, backup->target, errp);
  1657. if (!target) {
  1658. return;
  1659. }
  1660. /* AioContext is released in .clean() */
  1661. state->aio_context = bdrv_get_aio_context(bs);
  1662. if (state->aio_context != bdrv_get_aio_context(target)) {
  1663. state->aio_context = NULL;
  1664. error_setg(errp, "Backup between two IO threads is not implemented");
  1665. return;
  1666. }
  1667. aio_context_acquire(state->aio_context);
  1668. state->bs = bs;
  1669. bdrv_drained_begin(state->bs);
  1670. state->job = do_blockdev_backup(backup, common->block_job_txn, &local_err);
  1671. if (local_err) {
  1672. error_propagate(errp, local_err);
  1673. return;
  1674. }
  1675. }
  1676. static void blockdev_backup_commit(BlkActionState *common)
  1677. {
  1678. BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
  1679. assert(state->job);
  1680. block_job_start(state->job);
  1681. }
  1682. static void blockdev_backup_abort(BlkActionState *common)
  1683. {
  1684. BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
  1685. if (state->job) {
  1686. block_job_cancel_sync(state->job);
  1687. }
  1688. }
  1689. static void blockdev_backup_clean(BlkActionState *common)
  1690. {
  1691. BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common);
  1692. if (state->aio_context) {
  1693. bdrv_drained_end(state->bs);
  1694. aio_context_release(state->aio_context);
  1695. }
  1696. }
  1697. typedef struct BlockDirtyBitmapState {
  1698. BlkActionState common;
  1699. BdrvDirtyBitmap *bitmap;
  1700. BlockDriverState *bs;
  1701. AioContext *aio_context;
  1702. HBitmap *backup;
  1703. bool prepared;
  1704. } BlockDirtyBitmapState;
  1705. static void block_dirty_bitmap_add_prepare(BlkActionState *common,
  1706. Error **errp)
  1707. {
  1708. Error *local_err = NULL;
  1709. BlockDirtyBitmapAdd *action;
  1710. BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
  1711. common, common);
  1712. if (action_check_completion_mode(common, errp) < 0) {
  1713. return;
  1714. }
  1715. action = common->action->u.block_dirty_bitmap_add.data;
  1716. /* AIO context taken and released within qmp_block_dirty_bitmap_add */
  1717. qmp_block_dirty_bitmap_add(action->node, action->name,
  1718. action->has_granularity, action->granularity,
  1719. action->has_persistent, action->persistent,
  1720. action->has_autoload, action->autoload,
  1721. &local_err);
  1722. if (!local_err) {
  1723. state->prepared = true;
  1724. } else {
  1725. error_propagate(errp, local_err);
  1726. }
  1727. }
  1728. static void block_dirty_bitmap_add_abort(BlkActionState *common)
  1729. {
  1730. BlockDirtyBitmapAdd *action;
  1731. BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
  1732. common, common);
  1733. action = common->action->u.block_dirty_bitmap_add.data;
  1734. /* Should not be able to fail: IF the bitmap was added via .prepare(),
  1735. * then the node reference and bitmap name must have been valid.
  1736. */
  1737. if (state->prepared) {
  1738. qmp_block_dirty_bitmap_remove(action->node, action->name, &error_abort);
  1739. }
  1740. }
  1741. static void block_dirty_bitmap_clear_prepare(BlkActionState *common,
  1742. Error **errp)
  1743. {
  1744. BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
  1745. common, common);
  1746. BlockDirtyBitmap *action;
  1747. if (action_check_completion_mode(common, errp) < 0) {
  1748. return;
  1749. }
  1750. action = common->action->u.block_dirty_bitmap_clear.data;
  1751. state->bitmap = block_dirty_bitmap_lookup(action->node,
  1752. action->name,
  1753. &state->bs,
  1754. errp);
  1755. if (!state->bitmap) {
  1756. return;
  1757. }
  1758. if (bdrv_dirty_bitmap_frozen(state->bitmap)) {
  1759. error_setg(errp, "Cannot modify a frozen bitmap");
  1760. return;
  1761. } else if (!bdrv_dirty_bitmap_enabled(state->bitmap)) {
  1762. error_setg(errp, "Cannot clear a disabled bitmap");
  1763. return;
  1764. } else if (bdrv_dirty_bitmap_readonly(state->bitmap)) {
  1765. error_setg(errp, "Cannot clear a readonly bitmap");
  1766. return;
  1767. }
  1768. bdrv_clear_dirty_bitmap(state->bitmap, &state->backup);
  1769. /* AioContext is released in .clean() */
  1770. }
  1771. static void block_dirty_bitmap_clear_abort(BlkActionState *common)
  1772. {
  1773. BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
  1774. common, common);
  1775. if (state->backup) {
  1776. bdrv_undo_clear_dirty_bitmap(state->bitmap, state->backup);
  1777. }
  1778. }
  1779. static void block_dirty_bitmap_clear_commit(BlkActionState *common)
  1780. {
  1781. BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
  1782. common, common);
  1783. hbitmap_free(state->backup);
  1784. }
  1785. static void block_dirty_bitmap_clear_clean(BlkActionState *common)
  1786. {
  1787. BlockDirtyBitmapState *state = DO_UPCAST(BlockDirtyBitmapState,
  1788. common, common);
  1789. if (state->aio_context) {
  1790. aio_context_release(state->aio_context);
  1791. }
  1792. }
  1793. static void abort_prepare(BlkActionState *common, Error **errp)
  1794. {
  1795. error_setg(errp, "Transaction aborted using Abort action");
  1796. }
  1797. static void abort_commit(BlkActionState *common)
  1798. {
  1799. g_assert_not_reached(); /* this action never succeeds */
  1800. }
  1801. static const BlkActionOps actions[] = {
  1802. [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT] = {
  1803. .instance_size = sizeof(ExternalSnapshotState),
  1804. .prepare = external_snapshot_prepare,
  1805. .commit = external_snapshot_commit,
  1806. .abort = external_snapshot_abort,
  1807. .clean = external_snapshot_clean,
  1808. },
  1809. [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = {
  1810. .instance_size = sizeof(ExternalSnapshotState),
  1811. .prepare = external_snapshot_prepare,
  1812. .commit = external_snapshot_commit,
  1813. .abort = external_snapshot_abort,
  1814. .clean = external_snapshot_clean,
  1815. },
  1816. [TRANSACTION_ACTION_KIND_DRIVE_BACKUP] = {
  1817. .instance_size = sizeof(DriveBackupState),
  1818. .prepare = drive_backup_prepare,
  1819. .commit = drive_backup_commit,
  1820. .abort = drive_backup_abort,
  1821. .clean = drive_backup_clean,
  1822. },
  1823. [TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP] = {
  1824. .instance_size = sizeof(BlockdevBackupState),
  1825. .prepare = blockdev_backup_prepare,
  1826. .commit = blockdev_backup_commit,
  1827. .abort = blockdev_backup_abort,
  1828. .clean = blockdev_backup_clean,
  1829. },
  1830. [TRANSACTION_ACTION_KIND_ABORT] = {
  1831. .instance_size = sizeof(BlkActionState),
  1832. .prepare = abort_prepare,
  1833. .commit = abort_commit,
  1834. },
  1835. [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_INTERNAL_SYNC] = {
  1836. .instance_size = sizeof(InternalSnapshotState),
  1837. .prepare = internal_snapshot_prepare,
  1838. .abort = internal_snapshot_abort,
  1839. .clean = internal_snapshot_clean,
  1840. },
  1841. [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_ADD] = {
  1842. .instance_size = sizeof(BlockDirtyBitmapState),
  1843. .prepare = block_dirty_bitmap_add_prepare,
  1844. .abort = block_dirty_bitmap_add_abort,
  1845. },
  1846. [TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_CLEAR] = {
  1847. .instance_size = sizeof(BlockDirtyBitmapState),
  1848. .prepare = block_dirty_bitmap_clear_prepare,
  1849. .commit = block_dirty_bitmap_clear_commit,
  1850. .abort = block_dirty_bitmap_clear_abort,
  1851. .clean = block_dirty_bitmap_clear_clean,
  1852. }
  1853. };
  1854. /**
  1855. * Allocate a TransactionProperties structure if necessary, and fill
  1856. * that structure with desired defaults if they are unset.
  1857. */
  1858. static TransactionProperties *get_transaction_properties(
  1859. TransactionProperties *props)
  1860. {
  1861. if (!props) {
  1862. props = g_new0(TransactionProperties, 1);
  1863. }
  1864. if (!props->has_completion_mode) {
  1865. props->has_completion_mode = true;
  1866. props->completion_mode = ACTION_COMPLETION_MODE_INDIVIDUAL;
  1867. }
  1868. return props;
  1869. }
  1870. /*
  1871. * 'Atomic' group operations. The operations are performed as a set, and if
  1872. * any fail then we roll back all operations in the group.
  1873. */
  1874. void qmp_transaction(TransactionActionList *dev_list,
  1875. bool has_props,
  1876. struct TransactionProperties *props,
  1877. Error **errp)
  1878. {
  1879. TransactionActionList *dev_entry = dev_list;
  1880. BlockJobTxn *block_job_txn = NULL;
  1881. BlkActionState *state, *next;
  1882. Error *local_err = NULL;
  1883. QSIMPLEQ_HEAD(snap_bdrv_states, BlkActionState) snap_bdrv_states;
  1884. QSIMPLEQ_INIT(&snap_bdrv_states);
  1885. /* Does this transaction get canceled as a group on failure?
  1886. * If not, we don't really need to make a BlockJobTxn.
  1887. */
  1888. props = get_transaction_properties(props);
  1889. if (props->completion_mode != ACTION_COMPLETION_MODE_INDIVIDUAL) {
  1890. block_job_txn = block_job_txn_new();
  1891. }
  1892. /* drain all i/o before any operations */
  1893. bdrv_drain_all();
  1894. /* We don't do anything in this loop that commits us to the operations */
  1895. while (NULL != dev_entry) {
  1896. TransactionAction *dev_info = NULL;
  1897. const BlkActionOps *ops;
  1898. dev_info = dev_entry->value;
  1899. dev_entry = dev_entry->next;
  1900. assert(dev_info->type < ARRAY_SIZE(actions));
  1901. ops = &actions[dev_info->type];
  1902. assert(ops->instance_size > 0);
  1903. state = g_malloc0(ops->instance_size);
  1904. state->ops = ops;
  1905. state->action = dev_info;
  1906. state->block_job_txn = block_job_txn;
  1907. state->txn_props = props;
  1908. QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
  1909. state->ops->prepare(state, &local_err);
  1910. if (local_err) {
  1911. error_propagate(errp, local_err);
  1912. goto delete_and_fail;
  1913. }
  1914. }
  1915. QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
  1916. if (state->ops->commit) {
  1917. state->ops->commit(state);
  1918. }
  1919. }
  1920. /* success */
  1921. goto exit;
  1922. delete_and_fail:
  1923. /* failure, and it is all-or-none; roll back all operations */
  1924. QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
  1925. if (state->ops->abort) {
  1926. state->ops->abort(state);
  1927. }
  1928. }
  1929. exit:
  1930. QSIMPLEQ_FOREACH_SAFE(state, &snap_bdrv_states, entry, next) {
  1931. if (state->ops->clean) {
  1932. state->ops->clean(state);
  1933. }
  1934. g_free(state);
  1935. }
  1936. if (!has_props) {
  1937. qapi_free_TransactionProperties(props);
  1938. }
  1939. block_job_txn_unref(block_job_txn);
  1940. }
  1941. void qmp_eject(bool has_device, const char *device,
  1942. bool has_id, const char *id,
  1943. bool has_force, bool force, Error **errp)
  1944. {
  1945. Error *local_err = NULL;
  1946. int rc;
  1947. if (!has_force) {
  1948. force = false;
  1949. }
  1950. rc = do_open_tray(has_device ? device : NULL,
  1951. has_id ? id : NULL,
  1952. force, &local_err);
  1953. if (rc && rc != -ENOSYS) {
  1954. error_propagate(errp, local_err);
  1955. return;
  1956. }
  1957. error_free(local_err);
  1958. qmp_x_blockdev_remove_medium(has_device, device, has_id, id, errp);
  1959. }
  1960. void qmp_block_passwd(bool has_device, const char *device,
  1961. bool has_node_name, const char *node_name,
  1962. const char *password, Error **errp)
  1963. {
  1964. error_setg(errp,
  1965. "Setting block passwords directly is no longer supported");
  1966. }
  1967. /*
  1968. * Attempt to open the tray of @device.
  1969. * If @force, ignore its tray lock.
  1970. * Else, if the tray is locked, don't open it, but ask the guest to open it.
  1971. * On error, store an error through @errp and return -errno.
  1972. * If @device does not exist, return -ENODEV.
  1973. * If it has no removable media, return -ENOTSUP.
  1974. * If it has no tray, return -ENOSYS.
  1975. * If the guest was asked to open the tray, return -EINPROGRESS.
  1976. * Else, return 0.
  1977. */
  1978. static int do_open_tray(const char *blk_name, const char *qdev_id,
  1979. bool force, Error **errp)
  1980. {
  1981. BlockBackend *blk;
  1982. const char *device = qdev_id ?: blk_name;
  1983. bool locked;
  1984. blk = qmp_get_blk(blk_name, qdev_id, errp);
  1985. if (!blk) {
  1986. return -ENODEV;
  1987. }
  1988. if (!blk_dev_has_removable_media(blk)) {
  1989. error_setg(errp, "Device '%s' is not removable", device);
  1990. return -ENOTSUP;
  1991. }
  1992. if (!blk_dev_has_tray(blk)) {
  1993. error_setg(errp, "Device '%s' does not have a tray", device);
  1994. return -ENOSYS;
  1995. }
  1996. if (blk_dev_is_tray_open(blk)) {
  1997. return 0;
  1998. }
  1999. locked = blk_dev_is_medium_locked(blk);
  2000. if (locked) {
  2001. blk_dev_eject_request(blk, force);
  2002. }
  2003. if (!locked || force) {
  2004. blk_dev_change_media_cb(blk, false, &error_abort);
  2005. }
  2006. if (locked && !force) {
  2007. error_setg(errp, "Device '%s' is locked and force was not specified, "
  2008. "wait for tray to open and try again", device);
  2009. return -EINPROGRESS;
  2010. }
  2011. return 0;
  2012. }
  2013. void qmp_blockdev_open_tray(bool has_device, const char *device,
  2014. bool has_id, const char *id,
  2015. bool has_force, bool force,
  2016. Error **errp)
  2017. {
  2018. Error *local_err = NULL;
  2019. int rc;
  2020. if (!has_force) {
  2021. force = false;
  2022. }
  2023. rc = do_open_tray(has_device ? device : NULL,
  2024. has_id ? id : NULL,
  2025. force, &local_err);
  2026. if (rc && rc != -ENOSYS && rc != -EINPROGRESS) {
  2027. error_propagate(errp, local_err);
  2028. return;
  2029. }
  2030. error_free(local_err);
  2031. }
  2032. void qmp_blockdev_close_tray(bool has_device, const char *device,
  2033. bool has_id, const char *id,
  2034. Error **errp)
  2035. {
  2036. BlockBackend *blk;
  2037. Error *local_err = NULL;
  2038. device = has_device ? device : NULL;
  2039. id = has_id ? id : NULL;
  2040. blk = qmp_get_blk(device, id, errp);
  2041. if (!blk) {
  2042. return;
  2043. }
  2044. if (!blk_dev_has_removable_media(blk)) {
  2045. error_setg(errp, "Device '%s' is not removable", device ?: id);
  2046. return;
  2047. }
  2048. if (!blk_dev_has_tray(blk)) {
  2049. /* Ignore this command on tray-less devices */
  2050. return;
  2051. }
  2052. if (!blk_dev_is_tray_open(blk)) {
  2053. return;
  2054. }
  2055. blk_dev_change_media_cb(blk, true, &local_err);
  2056. if (local_err) {
  2057. error_propagate(errp, local_err);
  2058. return;
  2059. }
  2060. }
  2061. void qmp_x_blockdev_remove_medium(bool has_device, const char *device,
  2062. bool has_id, const char *id, Error **errp)
  2063. {
  2064. BlockBackend *blk;
  2065. BlockDriverState *bs;
  2066. AioContext *aio_context;
  2067. bool has_attached_device;
  2068. device = has_device ? device : NULL;
  2069. id = has_id ? id : NULL;
  2070. blk = qmp_get_blk(device, id, errp);
  2071. if (!blk) {
  2072. return;
  2073. }
  2074. /* For BBs without a device, we can exchange the BDS tree at will */
  2075. has_attached_device = blk_get_attached_dev(blk);
  2076. if (has_attached_device && !blk_dev_has_removable_media(blk)) {
  2077. error_setg(errp, "Device '%s' is not removable", device ?: id);
  2078. return;
  2079. }
  2080. if (has_attached_device && blk_dev_has_tray(blk) &&
  2081. !blk_dev_is_tray_open(blk))
  2082. {
  2083. error_setg(errp, "Tray of device '%s' is not open", device ?: id);
  2084. return;
  2085. }
  2086. bs = blk_bs(blk);
  2087. if (!bs) {
  2088. return;
  2089. }
  2090. aio_context = bdrv_get_aio_context(bs);
  2091. aio_context_acquire(aio_context);
  2092. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_EJECT, errp)) {
  2093. goto out;
  2094. }
  2095. blk_remove_bs(blk);
  2096. if (!blk_dev_has_tray(blk)) {
  2097. /* For tray-less devices, blockdev-open-tray is a no-op (or may not be
  2098. * called at all); therefore, the medium needs to be ejected here.
  2099. * Do it after blk_remove_bs() so blk_is_inserted(blk) returns the @load
  2100. * value passed here (i.e. false). */
  2101. blk_dev_change_media_cb(blk, false, &error_abort);
  2102. }
  2103. out:
  2104. aio_context_release(aio_context);
  2105. }
  2106. static void qmp_blockdev_insert_anon_medium(BlockBackend *blk,
  2107. BlockDriverState *bs, Error **errp)
  2108. {
  2109. Error *local_err = NULL;
  2110. bool has_device;
  2111. int ret;
  2112. /* For BBs without a device, we can exchange the BDS tree at will */
  2113. has_device = blk_get_attached_dev(blk);
  2114. if (has_device && !blk_dev_has_removable_media(blk)) {
  2115. error_setg(errp, "Device is not removable");
  2116. return;
  2117. }
  2118. if (has_device && blk_dev_has_tray(blk) && !blk_dev_is_tray_open(blk)) {
  2119. error_setg(errp, "Tray of the device is not open");
  2120. return;
  2121. }
  2122. if (blk_bs(blk)) {
  2123. error_setg(errp, "There already is a medium in the device");
  2124. return;
  2125. }
  2126. ret = blk_insert_bs(blk, bs, errp);
  2127. if (ret < 0) {
  2128. return;
  2129. }
  2130. if (!blk_dev_has_tray(blk)) {
  2131. /* For tray-less devices, blockdev-close-tray is a no-op (or may not be
  2132. * called at all); therefore, the medium needs to be pushed into the
  2133. * slot here.
  2134. * Do it after blk_insert_bs() so blk_is_inserted(blk) returns the @load
  2135. * value passed here (i.e. true). */
  2136. blk_dev_change_media_cb(blk, true, &local_err);
  2137. if (local_err) {
  2138. error_propagate(errp, local_err);
  2139. blk_remove_bs(blk);
  2140. return;
  2141. }
  2142. }
  2143. }
  2144. void qmp_x_blockdev_insert_medium(bool has_device, const char *device,
  2145. bool has_id, const char *id,
  2146. const char *node_name, Error **errp)
  2147. {
  2148. BlockBackend *blk;
  2149. BlockDriverState *bs;
  2150. blk = qmp_get_blk(has_device ? device : NULL,
  2151. has_id ? id : NULL,
  2152. errp);
  2153. if (!blk) {
  2154. return;
  2155. }
  2156. bs = bdrv_find_node(node_name);
  2157. if (!bs) {
  2158. error_setg(errp, "Node '%s' not found", node_name);
  2159. return;
  2160. }
  2161. if (bdrv_has_blk(bs)) {
  2162. error_setg(errp, "Node '%s' is already in use", node_name);
  2163. return;
  2164. }
  2165. qmp_blockdev_insert_anon_medium(blk, bs, errp);
  2166. }
  2167. void qmp_blockdev_change_medium(bool has_device, const char *device,
  2168. bool has_id, const char *id,
  2169. const char *filename,
  2170. bool has_format, const char *format,
  2171. bool has_read_only,
  2172. BlockdevChangeReadOnlyMode read_only,
  2173. Error **errp)
  2174. {
  2175. BlockBackend *blk;
  2176. BlockDriverState *medium_bs = NULL;
  2177. int bdrv_flags;
  2178. bool detect_zeroes;
  2179. int rc;
  2180. QDict *options = NULL;
  2181. Error *err = NULL;
  2182. blk = qmp_get_blk(has_device ? device : NULL,
  2183. has_id ? id : NULL,
  2184. errp);
  2185. if (!blk) {
  2186. goto fail;
  2187. }
  2188. if (blk_bs(blk)) {
  2189. blk_update_root_state(blk);
  2190. }
  2191. bdrv_flags = blk_get_open_flags_from_root_state(blk);
  2192. bdrv_flags &= ~(BDRV_O_TEMPORARY | BDRV_O_SNAPSHOT | BDRV_O_NO_BACKING |
  2193. BDRV_O_PROTOCOL);
  2194. if (!has_read_only) {
  2195. read_only = BLOCKDEV_CHANGE_READ_ONLY_MODE_RETAIN;
  2196. }
  2197. switch (read_only) {
  2198. case BLOCKDEV_CHANGE_READ_ONLY_MODE_RETAIN:
  2199. break;
  2200. case BLOCKDEV_CHANGE_READ_ONLY_MODE_READ_ONLY:
  2201. bdrv_flags &= ~BDRV_O_RDWR;
  2202. break;
  2203. case BLOCKDEV_CHANGE_READ_ONLY_MODE_READ_WRITE:
  2204. bdrv_flags |= BDRV_O_RDWR;
  2205. break;
  2206. default:
  2207. abort();
  2208. }
  2209. options = qdict_new();
  2210. detect_zeroes = blk_get_detect_zeroes_from_root_state(blk);
  2211. qdict_put_str(options, "detect-zeroes", detect_zeroes ? "on" : "off");
  2212. if (has_format) {
  2213. qdict_put_str(options, "driver", format);
  2214. }
  2215. medium_bs = bdrv_open(filename, NULL, options, bdrv_flags, errp);
  2216. if (!medium_bs) {
  2217. goto fail;
  2218. }
  2219. rc = do_open_tray(has_device ? device : NULL,
  2220. has_id ? id : NULL,
  2221. false, &err);
  2222. if (rc && rc != -ENOSYS) {
  2223. error_propagate(errp, err);
  2224. goto fail;
  2225. }
  2226. error_free(err);
  2227. err = NULL;
  2228. qmp_x_blockdev_remove_medium(has_device, device, has_id, id, &err);
  2229. if (err) {
  2230. error_propagate(errp, err);
  2231. goto fail;
  2232. }
  2233. qmp_blockdev_insert_anon_medium(blk, medium_bs, &err);
  2234. if (err) {
  2235. error_propagate(errp, err);
  2236. goto fail;
  2237. }
  2238. qmp_blockdev_close_tray(has_device, device, has_id, id, errp);
  2239. fail:
  2240. /* If the medium has been inserted, the device has its own reference, so
  2241. * ours must be relinquished; and if it has not been inserted successfully,
  2242. * the reference must be relinquished anyway */
  2243. bdrv_unref(medium_bs);
  2244. }
  2245. /* throttling disk I/O limits */
  2246. void qmp_block_set_io_throttle(BlockIOThrottle *arg, Error **errp)
  2247. {
  2248. ThrottleConfig cfg;
  2249. BlockDriverState *bs;
  2250. BlockBackend *blk;
  2251. AioContext *aio_context;
  2252. blk = qmp_get_blk(arg->has_device ? arg->device : NULL,
  2253. arg->has_id ? arg->id : NULL,
  2254. errp);
  2255. if (!blk) {
  2256. return;
  2257. }
  2258. aio_context = blk_get_aio_context(blk);
  2259. aio_context_acquire(aio_context);
  2260. bs = blk_bs(blk);
  2261. if (!bs) {
  2262. error_setg(errp, "Device has no medium");
  2263. goto out;
  2264. }
  2265. throttle_config_init(&cfg);
  2266. cfg.buckets[THROTTLE_BPS_TOTAL].avg = arg->bps;
  2267. cfg.buckets[THROTTLE_BPS_READ].avg = arg->bps_rd;
  2268. cfg.buckets[THROTTLE_BPS_WRITE].avg = arg->bps_wr;
  2269. cfg.buckets[THROTTLE_OPS_TOTAL].avg = arg->iops;
  2270. cfg.buckets[THROTTLE_OPS_READ].avg = arg->iops_rd;
  2271. cfg.buckets[THROTTLE_OPS_WRITE].avg = arg->iops_wr;
  2272. if (arg->has_bps_max) {
  2273. cfg.buckets[THROTTLE_BPS_TOTAL].max = arg->bps_max;
  2274. }
  2275. if (arg->has_bps_rd_max) {
  2276. cfg.buckets[THROTTLE_BPS_READ].max = arg->bps_rd_max;
  2277. }
  2278. if (arg->has_bps_wr_max) {
  2279. cfg.buckets[THROTTLE_BPS_WRITE].max = arg->bps_wr_max;
  2280. }
  2281. if (arg->has_iops_max) {
  2282. cfg.buckets[THROTTLE_OPS_TOTAL].max = arg->iops_max;
  2283. }
  2284. if (arg->has_iops_rd_max) {
  2285. cfg.buckets[THROTTLE_OPS_READ].max = arg->iops_rd_max;
  2286. }
  2287. if (arg->has_iops_wr_max) {
  2288. cfg.buckets[THROTTLE_OPS_WRITE].max = arg->iops_wr_max;
  2289. }
  2290. if (arg->has_bps_max_length) {
  2291. cfg.buckets[THROTTLE_BPS_TOTAL].burst_length = arg->bps_max_length;
  2292. }
  2293. if (arg->has_bps_rd_max_length) {
  2294. cfg.buckets[THROTTLE_BPS_READ].burst_length = arg->bps_rd_max_length;
  2295. }
  2296. if (arg->has_bps_wr_max_length) {
  2297. cfg.buckets[THROTTLE_BPS_WRITE].burst_length = arg->bps_wr_max_length;
  2298. }
  2299. if (arg->has_iops_max_length) {
  2300. cfg.buckets[THROTTLE_OPS_TOTAL].burst_length = arg->iops_max_length;
  2301. }
  2302. if (arg->has_iops_rd_max_length) {
  2303. cfg.buckets[THROTTLE_OPS_READ].burst_length = arg->iops_rd_max_length;
  2304. }
  2305. if (arg->has_iops_wr_max_length) {
  2306. cfg.buckets[THROTTLE_OPS_WRITE].burst_length = arg->iops_wr_max_length;
  2307. }
  2308. if (arg->has_iops_size) {
  2309. cfg.op_size = arg->iops_size;
  2310. }
  2311. if (!throttle_is_valid(&cfg, errp)) {
  2312. goto out;
  2313. }
  2314. if (throttle_enabled(&cfg)) {
  2315. /* Enable I/O limits if they're not enabled yet, otherwise
  2316. * just update the throttling group. */
  2317. if (!blk_get_public(blk)->throttle_group_member.throttle_state) {
  2318. blk_io_limits_enable(blk,
  2319. arg->has_group ? arg->group :
  2320. arg->has_device ? arg->device :
  2321. arg->id);
  2322. } else if (arg->has_group) {
  2323. blk_io_limits_update_group(blk, arg->group);
  2324. }
  2325. /* Set the new throttling configuration */
  2326. blk_set_io_limits(blk, &cfg);
  2327. } else if (blk_get_public(blk)->throttle_group_member.throttle_state) {
  2328. /* If all throttling settings are set to 0, disable I/O limits */
  2329. blk_io_limits_disable(blk);
  2330. }
  2331. out:
  2332. aio_context_release(aio_context);
  2333. }
  2334. void qmp_block_dirty_bitmap_add(const char *node, const char *name,
  2335. bool has_granularity, uint32_t granularity,
  2336. bool has_persistent, bool persistent,
  2337. bool has_autoload, bool autoload,
  2338. Error **errp)
  2339. {
  2340. BlockDriverState *bs;
  2341. BdrvDirtyBitmap *bitmap;
  2342. if (!name || name[0] == '\0') {
  2343. error_setg(errp, "Bitmap name cannot be empty");
  2344. return;
  2345. }
  2346. bs = bdrv_lookup_bs(node, node, errp);
  2347. if (!bs) {
  2348. return;
  2349. }
  2350. if (has_granularity) {
  2351. if (granularity < 512 || !is_power_of_2(granularity)) {
  2352. error_setg(errp, "Granularity must be power of 2 "
  2353. "and at least 512");
  2354. return;
  2355. }
  2356. } else {
  2357. /* Default to cluster size, if available: */
  2358. granularity = bdrv_get_default_bitmap_granularity(bs);
  2359. }
  2360. if (!has_persistent) {
  2361. persistent = false;
  2362. }
  2363. if (!has_autoload) {
  2364. autoload = false;
  2365. }
  2366. if (has_autoload && !persistent) {
  2367. error_setg(errp, "Autoload flag must be used only for persistent "
  2368. "bitmaps");
  2369. return;
  2370. }
  2371. if (persistent &&
  2372. !bdrv_can_store_new_dirty_bitmap(bs, name, granularity, errp))
  2373. {
  2374. return;
  2375. }
  2376. bitmap = bdrv_create_dirty_bitmap(bs, granularity, name, errp);
  2377. if (bitmap == NULL) {
  2378. return;
  2379. }
  2380. bdrv_dirty_bitmap_set_persistance(bitmap, persistent);
  2381. bdrv_dirty_bitmap_set_autoload(bitmap, autoload);
  2382. }
  2383. void qmp_block_dirty_bitmap_remove(const char *node, const char *name,
  2384. Error **errp)
  2385. {
  2386. BlockDriverState *bs;
  2387. BdrvDirtyBitmap *bitmap;
  2388. Error *local_err = NULL;
  2389. bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
  2390. if (!bitmap || !bs) {
  2391. return;
  2392. }
  2393. if (bdrv_dirty_bitmap_frozen(bitmap)) {
  2394. error_setg(errp,
  2395. "Bitmap '%s' is currently frozen and cannot be removed",
  2396. name);
  2397. return;
  2398. }
  2399. if (bdrv_dirty_bitmap_get_persistance(bitmap)) {
  2400. bdrv_remove_persistent_dirty_bitmap(bs, name, &local_err);
  2401. if (local_err != NULL) {
  2402. error_propagate(errp, local_err);
  2403. return;
  2404. }
  2405. }
  2406. bdrv_dirty_bitmap_make_anon(bitmap);
  2407. bdrv_release_dirty_bitmap(bs, bitmap);
  2408. }
  2409. /**
  2410. * Completely clear a bitmap, for the purposes of synchronizing a bitmap
  2411. * immediately after a full backup operation.
  2412. */
  2413. void qmp_block_dirty_bitmap_clear(const char *node, const char *name,
  2414. Error **errp)
  2415. {
  2416. BdrvDirtyBitmap *bitmap;
  2417. BlockDriverState *bs;
  2418. bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
  2419. if (!bitmap || !bs) {
  2420. return;
  2421. }
  2422. if (bdrv_dirty_bitmap_frozen(bitmap)) {
  2423. error_setg(errp,
  2424. "Bitmap '%s' is currently frozen and cannot be modified",
  2425. name);
  2426. return;
  2427. } else if (!bdrv_dirty_bitmap_enabled(bitmap)) {
  2428. error_setg(errp,
  2429. "Bitmap '%s' is currently disabled and cannot be cleared",
  2430. name);
  2431. return;
  2432. } else if (bdrv_dirty_bitmap_readonly(bitmap)) {
  2433. error_setg(errp, "Bitmap '%s' is readonly and cannot be cleared", name);
  2434. return;
  2435. }
  2436. bdrv_clear_dirty_bitmap(bitmap, NULL);
  2437. }
  2438. BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *node,
  2439. const char *name,
  2440. Error **errp)
  2441. {
  2442. BdrvDirtyBitmap *bitmap;
  2443. BlockDriverState *bs;
  2444. BlockDirtyBitmapSha256 *ret = NULL;
  2445. char *sha256;
  2446. bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
  2447. if (!bitmap || !bs) {
  2448. return NULL;
  2449. }
  2450. sha256 = bdrv_dirty_bitmap_sha256(bitmap, errp);
  2451. if (sha256 == NULL) {
  2452. return NULL;
  2453. }
  2454. ret = g_new(BlockDirtyBitmapSha256, 1);
  2455. ret->sha256 = sha256;
  2456. return ret;
  2457. }
  2458. void hmp_drive_del(Monitor *mon, const QDict *qdict)
  2459. {
  2460. const char *id = qdict_get_str(qdict, "id");
  2461. BlockBackend *blk;
  2462. BlockDriverState *bs;
  2463. AioContext *aio_context;
  2464. Error *local_err = NULL;
  2465. bs = bdrv_find_node(id);
  2466. if (bs) {
  2467. qmp_blockdev_del(id, &local_err);
  2468. if (local_err) {
  2469. error_report_err(local_err);
  2470. }
  2471. return;
  2472. }
  2473. blk = blk_by_name(id);
  2474. if (!blk) {
  2475. error_report("Device '%s' not found", id);
  2476. return;
  2477. }
  2478. if (!blk_legacy_dinfo(blk)) {
  2479. error_report("Deleting device added with blockdev-add"
  2480. " is not supported");
  2481. return;
  2482. }
  2483. aio_context = blk_get_aio_context(blk);
  2484. aio_context_acquire(aio_context);
  2485. bs = blk_bs(blk);
  2486. if (bs) {
  2487. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, &local_err)) {
  2488. error_report_err(local_err);
  2489. aio_context_release(aio_context);
  2490. return;
  2491. }
  2492. blk_remove_bs(blk);
  2493. }
  2494. /* Make the BlockBackend and the attached BlockDriverState anonymous */
  2495. monitor_remove_blk(blk);
  2496. /* If this BlockBackend has a device attached to it, its refcount will be
  2497. * decremented when the device is removed; otherwise we have to do so here.
  2498. */
  2499. if (blk_get_attached_dev(blk)) {
  2500. /* Further I/O must not pause the guest */
  2501. blk_set_on_error(blk, BLOCKDEV_ON_ERROR_REPORT,
  2502. BLOCKDEV_ON_ERROR_REPORT);
  2503. } else {
  2504. blk_unref(blk);
  2505. }
  2506. aio_context_release(aio_context);
  2507. }
  2508. void qmp_block_resize(bool has_device, const char *device,
  2509. bool has_node_name, const char *node_name,
  2510. int64_t size, Error **errp)
  2511. {
  2512. Error *local_err = NULL;
  2513. BlockBackend *blk = NULL;
  2514. BlockDriverState *bs;
  2515. AioContext *aio_context;
  2516. int ret;
  2517. bs = bdrv_lookup_bs(has_device ? device : NULL,
  2518. has_node_name ? node_name : NULL,
  2519. &local_err);
  2520. if (local_err) {
  2521. error_propagate(errp, local_err);
  2522. return;
  2523. }
  2524. aio_context = bdrv_get_aio_context(bs);
  2525. aio_context_acquire(aio_context);
  2526. if (!bdrv_is_first_non_filter(bs)) {
  2527. error_setg(errp, QERR_FEATURE_DISABLED, "resize");
  2528. goto out;
  2529. }
  2530. if (size < 0) {
  2531. error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "size", "a >0 size");
  2532. goto out;
  2533. }
  2534. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_RESIZE, NULL)) {
  2535. error_setg(errp, QERR_DEVICE_IN_USE, device);
  2536. goto out;
  2537. }
  2538. blk = blk_new(BLK_PERM_RESIZE, BLK_PERM_ALL);
  2539. ret = blk_insert_bs(blk, bs, errp);
  2540. if (ret < 0) {
  2541. goto out;
  2542. }
  2543. bdrv_drained_begin(bs);
  2544. ret = blk_truncate(blk, size, PREALLOC_MODE_OFF, errp);
  2545. bdrv_drained_end(bs);
  2546. out:
  2547. blk_unref(blk);
  2548. aio_context_release(aio_context);
  2549. }
  2550. void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
  2551. bool has_base, const char *base,
  2552. bool has_base_node, const char *base_node,
  2553. bool has_backing_file, const char *backing_file,
  2554. bool has_speed, int64_t speed,
  2555. bool has_on_error, BlockdevOnError on_error,
  2556. Error **errp)
  2557. {
  2558. BlockDriverState *bs, *iter;
  2559. BlockDriverState *base_bs = NULL;
  2560. AioContext *aio_context;
  2561. Error *local_err = NULL;
  2562. const char *base_name = NULL;
  2563. if (!has_on_error) {
  2564. on_error = BLOCKDEV_ON_ERROR_REPORT;
  2565. }
  2566. bs = bdrv_lookup_bs(device, device, errp);
  2567. if (!bs) {
  2568. return;
  2569. }
  2570. aio_context = bdrv_get_aio_context(bs);
  2571. aio_context_acquire(aio_context);
  2572. if (has_base && has_base_node) {
  2573. error_setg(errp, "'base' and 'base-node' cannot be specified "
  2574. "at the same time");
  2575. goto out;
  2576. }
  2577. if (has_base) {
  2578. base_bs = bdrv_find_backing_image(bs, base);
  2579. if (base_bs == NULL) {
  2580. error_setg(errp, QERR_BASE_NOT_FOUND, base);
  2581. goto out;
  2582. }
  2583. assert(bdrv_get_aio_context(base_bs) == aio_context);
  2584. base_name = base;
  2585. }
  2586. if (has_base_node) {
  2587. base_bs = bdrv_lookup_bs(NULL, base_node, errp);
  2588. if (!base_bs) {
  2589. goto out;
  2590. }
  2591. if (bs == base_bs || !bdrv_chain_contains(bs, base_bs)) {
  2592. error_setg(errp, "Node '%s' is not a backing image of '%s'",
  2593. base_node, device);
  2594. goto out;
  2595. }
  2596. assert(bdrv_get_aio_context(base_bs) == aio_context);
  2597. base_name = base_bs->filename;
  2598. }
  2599. /* Check for op blockers in the whole chain between bs and base */
  2600. for (iter = bs; iter && iter != base_bs; iter = backing_bs(iter)) {
  2601. if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_STREAM, errp)) {
  2602. goto out;
  2603. }
  2604. }
  2605. /* if we are streaming the entire chain, the result will have no backing
  2606. * file, and specifying one is therefore an error */
  2607. if (base_bs == NULL && has_backing_file) {
  2608. error_setg(errp, "backing file specified, but streaming the "
  2609. "entire chain");
  2610. goto out;
  2611. }
  2612. /* backing_file string overrides base bs filename */
  2613. base_name = has_backing_file ? backing_file : base_name;
  2614. stream_start(has_job_id ? job_id : NULL, bs, base_bs, base_name,
  2615. has_speed ? speed : 0, on_error, &local_err);
  2616. if (local_err) {
  2617. error_propagate(errp, local_err);
  2618. goto out;
  2619. }
  2620. trace_qmp_block_stream(bs, bs->job);
  2621. out:
  2622. aio_context_release(aio_context);
  2623. }
  2624. void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
  2625. bool has_base, const char *base,
  2626. bool has_top, const char *top,
  2627. bool has_backing_file, const char *backing_file,
  2628. bool has_speed, int64_t speed,
  2629. bool has_filter_node_name, const char *filter_node_name,
  2630. Error **errp)
  2631. {
  2632. BlockDriverState *bs;
  2633. BlockDriverState *iter;
  2634. BlockDriverState *base_bs, *top_bs;
  2635. AioContext *aio_context;
  2636. Error *local_err = NULL;
  2637. /* This will be part of the QMP command, if/when the
  2638. * BlockdevOnError change for blkmirror makes it in
  2639. */
  2640. BlockdevOnError on_error = BLOCKDEV_ON_ERROR_REPORT;
  2641. if (!has_speed) {
  2642. speed = 0;
  2643. }
  2644. if (!has_filter_node_name) {
  2645. filter_node_name = NULL;
  2646. }
  2647. /* Important Note:
  2648. * libvirt relies on the DeviceNotFound error class in order to probe for
  2649. * live commit feature versions; for this to work, we must make sure to
  2650. * perform the device lookup before any generic errors that may occur in a
  2651. * scenario in which all optional arguments are omitted. */
  2652. bs = qmp_get_root_bs(device, &local_err);
  2653. if (!bs) {
  2654. bs = bdrv_lookup_bs(device, device, NULL);
  2655. if (!bs) {
  2656. error_free(local_err);
  2657. error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
  2658. "Device '%s' not found", device);
  2659. } else {
  2660. error_propagate(errp, local_err);
  2661. }
  2662. return;
  2663. }
  2664. aio_context = bdrv_get_aio_context(bs);
  2665. aio_context_acquire(aio_context);
  2666. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_COMMIT_SOURCE, errp)) {
  2667. goto out;
  2668. }
  2669. /* default top_bs is the active layer */
  2670. top_bs = bs;
  2671. if (has_top && top) {
  2672. if (strcmp(bs->filename, top) != 0) {
  2673. top_bs = bdrv_find_backing_image(bs, top);
  2674. }
  2675. }
  2676. if (top_bs == NULL) {
  2677. error_setg(errp, "Top image file %s not found", top ? top : "NULL");
  2678. goto out;
  2679. }
  2680. assert(bdrv_get_aio_context(top_bs) == aio_context);
  2681. if (has_base && base) {
  2682. base_bs = bdrv_find_backing_image(top_bs, base);
  2683. } else {
  2684. base_bs = bdrv_find_base(top_bs);
  2685. }
  2686. if (base_bs == NULL) {
  2687. error_setg(errp, QERR_BASE_NOT_FOUND, base ? base : "NULL");
  2688. goto out;
  2689. }
  2690. assert(bdrv_get_aio_context(base_bs) == aio_context);
  2691. for (iter = top_bs; iter != backing_bs(base_bs); iter = backing_bs(iter)) {
  2692. if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
  2693. goto out;
  2694. }
  2695. }
  2696. /* Do not allow attempts to commit an image into itself */
  2697. if (top_bs == base_bs) {
  2698. error_setg(errp, "cannot commit an image into itself");
  2699. goto out;
  2700. }
  2701. if (top_bs == bs) {
  2702. if (has_backing_file) {
  2703. error_setg(errp, "'backing-file' specified,"
  2704. " but 'top' is the active layer");
  2705. goto out;
  2706. }
  2707. commit_active_start(has_job_id ? job_id : NULL, bs, base_bs,
  2708. BLOCK_JOB_DEFAULT, speed, on_error,
  2709. filter_node_name, NULL, NULL, false, &local_err);
  2710. } else {
  2711. BlockDriverState *overlay_bs = bdrv_find_overlay(bs, top_bs);
  2712. if (bdrv_op_is_blocked(overlay_bs, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
  2713. goto out;
  2714. }
  2715. commit_start(has_job_id ? job_id : NULL, bs, base_bs, top_bs, speed,
  2716. on_error, has_backing_file ? backing_file : NULL,
  2717. filter_node_name, &local_err);
  2718. }
  2719. if (local_err != NULL) {
  2720. error_propagate(errp, local_err);
  2721. goto out;
  2722. }
  2723. out:
  2724. aio_context_release(aio_context);
  2725. }
  2726. static BlockJob *do_drive_backup(DriveBackup *backup, BlockJobTxn *txn,
  2727. Error **errp)
  2728. {
  2729. BlockDriverState *bs;
  2730. BlockDriverState *target_bs;
  2731. BlockDriverState *source = NULL;
  2732. BlockJob *job = NULL;
  2733. BdrvDirtyBitmap *bmap = NULL;
  2734. AioContext *aio_context;
  2735. QDict *options = NULL;
  2736. Error *local_err = NULL;
  2737. int flags;
  2738. int64_t size;
  2739. bool set_backing_hd = false;
  2740. if (!backup->has_speed) {
  2741. backup->speed = 0;
  2742. }
  2743. if (!backup->has_on_source_error) {
  2744. backup->on_source_error = BLOCKDEV_ON_ERROR_REPORT;
  2745. }
  2746. if (!backup->has_on_target_error) {
  2747. backup->on_target_error = BLOCKDEV_ON_ERROR_REPORT;
  2748. }
  2749. if (!backup->has_mode) {
  2750. backup->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
  2751. }
  2752. if (!backup->has_job_id) {
  2753. backup->job_id = NULL;
  2754. }
  2755. if (!backup->has_compress) {
  2756. backup->compress = false;
  2757. }
  2758. bs = qmp_get_root_bs(backup->device, errp);
  2759. if (!bs) {
  2760. return NULL;
  2761. }
  2762. aio_context = bdrv_get_aio_context(bs);
  2763. aio_context_acquire(aio_context);
  2764. if (!backup->has_format) {
  2765. backup->format = backup->mode == NEW_IMAGE_MODE_EXISTING ?
  2766. NULL : (char*) bs->drv->format_name;
  2767. }
  2768. /* Early check to avoid creating target */
  2769. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_BACKUP_SOURCE, errp)) {
  2770. goto out;
  2771. }
  2772. flags = bs->open_flags | BDRV_O_RDWR;
  2773. /* See if we have a backing HD we can use to create our new image
  2774. * on top of. */
  2775. if (backup->sync == MIRROR_SYNC_MODE_TOP) {
  2776. source = backing_bs(bs);
  2777. if (!source) {
  2778. backup->sync = MIRROR_SYNC_MODE_FULL;
  2779. }
  2780. }
  2781. if (backup->sync == MIRROR_SYNC_MODE_NONE) {
  2782. source = bs;
  2783. flags |= BDRV_O_NO_BACKING;
  2784. set_backing_hd = true;
  2785. }
  2786. size = bdrv_getlength(bs);
  2787. if (size < 0) {
  2788. error_setg_errno(errp, -size, "bdrv_getlength failed");
  2789. goto out;
  2790. }
  2791. if (backup->mode != NEW_IMAGE_MODE_EXISTING) {
  2792. assert(backup->format);
  2793. if (source) {
  2794. bdrv_img_create(backup->target, backup->format, source->filename,
  2795. source->drv->format_name, NULL,
  2796. size, flags, false, &local_err);
  2797. } else {
  2798. bdrv_img_create(backup->target, backup->format, NULL, NULL, NULL,
  2799. size, flags, false, &local_err);
  2800. }
  2801. }
  2802. if (local_err) {
  2803. error_propagate(errp, local_err);
  2804. goto out;
  2805. }
  2806. if (backup->format) {
  2807. if (!options) {
  2808. options = qdict_new();
  2809. }
  2810. qdict_put_str(options, "driver", backup->format);
  2811. }
  2812. target_bs = bdrv_open(backup->target, NULL, options, flags, errp);
  2813. if (!target_bs) {
  2814. goto out;
  2815. }
  2816. bdrv_set_aio_context(target_bs, aio_context);
  2817. if (set_backing_hd) {
  2818. bdrv_set_backing_hd(target_bs, source, &local_err);
  2819. if (local_err) {
  2820. bdrv_unref(target_bs);
  2821. goto out;
  2822. }
  2823. }
  2824. if (backup->has_bitmap) {
  2825. bmap = bdrv_find_dirty_bitmap(bs, backup->bitmap);
  2826. if (!bmap) {
  2827. error_setg(errp, "Bitmap '%s' could not be found", backup->bitmap);
  2828. bdrv_unref(target_bs);
  2829. goto out;
  2830. }
  2831. }
  2832. job = backup_job_create(backup->job_id, bs, target_bs, backup->speed,
  2833. backup->sync, bmap, backup->compress,
  2834. backup->on_source_error, backup->on_target_error,
  2835. BLOCK_JOB_DEFAULT, NULL, NULL, txn, &local_err);
  2836. bdrv_unref(target_bs);
  2837. if (local_err != NULL) {
  2838. error_propagate(errp, local_err);
  2839. goto out;
  2840. }
  2841. out:
  2842. aio_context_release(aio_context);
  2843. return job;
  2844. }
  2845. void qmp_drive_backup(DriveBackup *arg, Error **errp)
  2846. {
  2847. BlockJob *job;
  2848. job = do_drive_backup(arg, NULL, errp);
  2849. if (job) {
  2850. block_job_start(job);
  2851. }
  2852. }
  2853. BlockDeviceInfoList *qmp_query_named_block_nodes(Error **errp)
  2854. {
  2855. return bdrv_named_nodes_list(errp);
  2856. }
  2857. BlockJob *do_blockdev_backup(BlockdevBackup *backup, BlockJobTxn *txn,
  2858. Error **errp)
  2859. {
  2860. BlockDriverState *bs;
  2861. BlockDriverState *target_bs;
  2862. Error *local_err = NULL;
  2863. AioContext *aio_context;
  2864. BlockJob *job = NULL;
  2865. if (!backup->has_speed) {
  2866. backup->speed = 0;
  2867. }
  2868. if (!backup->has_on_source_error) {
  2869. backup->on_source_error = BLOCKDEV_ON_ERROR_REPORT;
  2870. }
  2871. if (!backup->has_on_target_error) {
  2872. backup->on_target_error = BLOCKDEV_ON_ERROR_REPORT;
  2873. }
  2874. if (!backup->has_job_id) {
  2875. backup->job_id = NULL;
  2876. }
  2877. if (!backup->has_compress) {
  2878. backup->compress = false;
  2879. }
  2880. bs = qmp_get_root_bs(backup->device, errp);
  2881. if (!bs) {
  2882. return NULL;
  2883. }
  2884. aio_context = bdrv_get_aio_context(bs);
  2885. aio_context_acquire(aio_context);
  2886. target_bs = bdrv_lookup_bs(backup->target, backup->target, errp);
  2887. if (!target_bs) {
  2888. goto out;
  2889. }
  2890. if (bdrv_get_aio_context(target_bs) != aio_context) {
  2891. if (!bdrv_has_blk(target_bs)) {
  2892. /* The target BDS is not attached, we can safely move it to another
  2893. * AioContext. */
  2894. bdrv_set_aio_context(target_bs, aio_context);
  2895. } else {
  2896. error_setg(errp, "Target is attached to a different thread from "
  2897. "source.");
  2898. goto out;
  2899. }
  2900. }
  2901. job = backup_job_create(backup->job_id, bs, target_bs, backup->speed,
  2902. backup->sync, NULL, backup->compress,
  2903. backup->on_source_error, backup->on_target_error,
  2904. BLOCK_JOB_DEFAULT, NULL, NULL, txn, &local_err);
  2905. if (local_err != NULL) {
  2906. error_propagate(errp, local_err);
  2907. }
  2908. out:
  2909. aio_context_release(aio_context);
  2910. return job;
  2911. }
  2912. void qmp_blockdev_backup(BlockdevBackup *arg, Error **errp)
  2913. {
  2914. BlockJob *job;
  2915. job = do_blockdev_backup(arg, NULL, errp);
  2916. if (job) {
  2917. block_job_start(job);
  2918. }
  2919. }
  2920. /* Parameter check and block job starting for drive mirroring.
  2921. * Caller should hold @device and @target's aio context (must be the same).
  2922. **/
  2923. static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
  2924. BlockDriverState *target,
  2925. bool has_replaces, const char *replaces,
  2926. enum MirrorSyncMode sync,
  2927. BlockMirrorBackingMode backing_mode,
  2928. bool has_speed, int64_t speed,
  2929. bool has_granularity, uint32_t granularity,
  2930. bool has_buf_size, int64_t buf_size,
  2931. bool has_on_source_error,
  2932. BlockdevOnError on_source_error,
  2933. bool has_on_target_error,
  2934. BlockdevOnError on_target_error,
  2935. bool has_unmap, bool unmap,
  2936. bool has_filter_node_name,
  2937. const char *filter_node_name,
  2938. Error **errp)
  2939. {
  2940. if (!has_speed) {
  2941. speed = 0;
  2942. }
  2943. if (!has_on_source_error) {
  2944. on_source_error = BLOCKDEV_ON_ERROR_REPORT;
  2945. }
  2946. if (!has_on_target_error) {
  2947. on_target_error = BLOCKDEV_ON_ERROR_REPORT;
  2948. }
  2949. if (!has_granularity) {
  2950. granularity = 0;
  2951. }
  2952. if (!has_buf_size) {
  2953. buf_size = 0;
  2954. }
  2955. if (!has_unmap) {
  2956. unmap = true;
  2957. }
  2958. if (!has_filter_node_name) {
  2959. filter_node_name = NULL;
  2960. }
  2961. if (granularity != 0 && (granularity < 512 || granularity > 1048576 * 64)) {
  2962. error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity",
  2963. "a value in range [512B, 64MB]");
  2964. return;
  2965. }
  2966. if (granularity & (granularity - 1)) {
  2967. error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity",
  2968. "power of 2");
  2969. return;
  2970. }
  2971. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR_SOURCE, errp)) {
  2972. return;
  2973. }
  2974. if (bdrv_op_is_blocked(target, BLOCK_OP_TYPE_MIRROR_TARGET, errp)) {
  2975. return;
  2976. }
  2977. if (!bs->backing && sync == MIRROR_SYNC_MODE_TOP) {
  2978. sync = MIRROR_SYNC_MODE_FULL;
  2979. }
  2980. /* pass the node name to replace to mirror start since it's loose coupling
  2981. * and will allow to check whether the node still exist at mirror completion
  2982. */
  2983. mirror_start(job_id, bs, target,
  2984. has_replaces ? replaces : NULL,
  2985. speed, granularity, buf_size, sync, backing_mode,
  2986. on_source_error, on_target_error, unmap, filter_node_name,
  2987. errp);
  2988. }
  2989. void qmp_drive_mirror(DriveMirror *arg, Error **errp)
  2990. {
  2991. BlockDriverState *bs;
  2992. BlockDriverState *source, *target_bs;
  2993. AioContext *aio_context;
  2994. BlockMirrorBackingMode backing_mode;
  2995. Error *local_err = NULL;
  2996. QDict *options = NULL;
  2997. int flags;
  2998. int64_t size;
  2999. const char *format = arg->format;
  3000. bs = qmp_get_root_bs(arg->device, errp);
  3001. if (!bs) {
  3002. return;
  3003. }
  3004. aio_context = bdrv_get_aio_context(bs);
  3005. aio_context_acquire(aio_context);
  3006. if (!arg->has_mode) {
  3007. arg->mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
  3008. }
  3009. if (!arg->has_format) {
  3010. format = (arg->mode == NEW_IMAGE_MODE_EXISTING
  3011. ? NULL : bs->drv->format_name);
  3012. }
  3013. flags = bs->open_flags | BDRV_O_RDWR;
  3014. source = backing_bs(bs);
  3015. if (!source && arg->sync == MIRROR_SYNC_MODE_TOP) {
  3016. arg->sync = MIRROR_SYNC_MODE_FULL;
  3017. }
  3018. if (arg->sync == MIRROR_SYNC_MODE_NONE) {
  3019. source = bs;
  3020. }
  3021. size = bdrv_getlength(bs);
  3022. if (size < 0) {
  3023. error_setg_errno(errp, -size, "bdrv_getlength failed");
  3024. goto out;
  3025. }
  3026. if (arg->has_replaces) {
  3027. BlockDriverState *to_replace_bs;
  3028. AioContext *replace_aio_context;
  3029. int64_t replace_size;
  3030. if (!arg->has_node_name) {
  3031. error_setg(errp, "a node-name must be provided when replacing a"
  3032. " named node of the graph");
  3033. goto out;
  3034. }
  3035. to_replace_bs = check_to_replace_node(bs, arg->replaces, &local_err);
  3036. if (!to_replace_bs) {
  3037. error_propagate(errp, local_err);
  3038. goto out;
  3039. }
  3040. replace_aio_context = bdrv_get_aio_context(to_replace_bs);
  3041. aio_context_acquire(replace_aio_context);
  3042. replace_size = bdrv_getlength(to_replace_bs);
  3043. aio_context_release(replace_aio_context);
  3044. if (size != replace_size) {
  3045. error_setg(errp, "cannot replace image with a mirror image of "
  3046. "different size");
  3047. goto out;
  3048. }
  3049. }
  3050. if (arg->mode == NEW_IMAGE_MODE_ABSOLUTE_PATHS) {
  3051. backing_mode = MIRROR_SOURCE_BACKING_CHAIN;
  3052. } else {
  3053. backing_mode = MIRROR_OPEN_BACKING_CHAIN;
  3054. }
  3055. /* Don't open backing image in create() */
  3056. flags |= BDRV_O_NO_BACKING;
  3057. if ((arg->sync == MIRROR_SYNC_MODE_FULL || !source)
  3058. && arg->mode != NEW_IMAGE_MODE_EXISTING)
  3059. {
  3060. /* create new image w/o backing file */
  3061. assert(format);
  3062. bdrv_img_create(arg->target, format,
  3063. NULL, NULL, NULL, size, flags, false, &local_err);
  3064. } else {
  3065. switch (arg->mode) {
  3066. case NEW_IMAGE_MODE_EXISTING:
  3067. break;
  3068. case NEW_IMAGE_MODE_ABSOLUTE_PATHS:
  3069. /* create new image with backing file */
  3070. bdrv_img_create(arg->target, format,
  3071. source->filename,
  3072. source->drv->format_name,
  3073. NULL, size, flags, false, &local_err);
  3074. break;
  3075. default:
  3076. abort();
  3077. }
  3078. }
  3079. if (local_err) {
  3080. error_propagate(errp, local_err);
  3081. goto out;
  3082. }
  3083. options = qdict_new();
  3084. if (arg->has_node_name) {
  3085. qdict_put_str(options, "node-name", arg->node_name);
  3086. }
  3087. if (format) {
  3088. qdict_put_str(options, "driver", format);
  3089. }
  3090. /* Mirroring takes care of copy-on-write using the source's backing
  3091. * file.
  3092. */
  3093. target_bs = bdrv_open(arg->target, NULL, options, flags, errp);
  3094. if (!target_bs) {
  3095. goto out;
  3096. }
  3097. bdrv_set_aio_context(target_bs, aio_context);
  3098. blockdev_mirror_common(arg->has_job_id ? arg->job_id : NULL, bs, target_bs,
  3099. arg->has_replaces, arg->replaces, arg->sync,
  3100. backing_mode, arg->has_speed, arg->speed,
  3101. arg->has_granularity, arg->granularity,
  3102. arg->has_buf_size, arg->buf_size,
  3103. arg->has_on_source_error, arg->on_source_error,
  3104. arg->has_on_target_error, arg->on_target_error,
  3105. arg->has_unmap, arg->unmap,
  3106. false, NULL,
  3107. &local_err);
  3108. bdrv_unref(target_bs);
  3109. error_propagate(errp, local_err);
  3110. out:
  3111. aio_context_release(aio_context);
  3112. }
  3113. void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
  3114. const char *device, const char *target,
  3115. bool has_replaces, const char *replaces,
  3116. MirrorSyncMode sync,
  3117. bool has_speed, int64_t speed,
  3118. bool has_granularity, uint32_t granularity,
  3119. bool has_buf_size, int64_t buf_size,
  3120. bool has_on_source_error,
  3121. BlockdevOnError on_source_error,
  3122. bool has_on_target_error,
  3123. BlockdevOnError on_target_error,
  3124. bool has_filter_node_name,
  3125. const char *filter_node_name,
  3126. Error **errp)
  3127. {
  3128. BlockDriverState *bs;
  3129. BlockDriverState *target_bs;
  3130. AioContext *aio_context;
  3131. BlockMirrorBackingMode backing_mode = MIRROR_LEAVE_BACKING_CHAIN;
  3132. Error *local_err = NULL;
  3133. bs = qmp_get_root_bs(device, errp);
  3134. if (!bs) {
  3135. return;
  3136. }
  3137. target_bs = bdrv_lookup_bs(target, target, errp);
  3138. if (!target_bs) {
  3139. return;
  3140. }
  3141. aio_context = bdrv_get_aio_context(bs);
  3142. aio_context_acquire(aio_context);
  3143. bdrv_set_aio_context(target_bs, aio_context);
  3144. blockdev_mirror_common(has_job_id ? job_id : NULL, bs, target_bs,
  3145. has_replaces, replaces, sync, backing_mode,
  3146. has_speed, speed,
  3147. has_granularity, granularity,
  3148. has_buf_size, buf_size,
  3149. has_on_source_error, on_source_error,
  3150. has_on_target_error, on_target_error,
  3151. true, true,
  3152. has_filter_node_name, filter_node_name,
  3153. &local_err);
  3154. error_propagate(errp, local_err);
  3155. aio_context_release(aio_context);
  3156. }
  3157. /* Get a block job using its ID and acquire its AioContext */
  3158. static BlockJob *find_block_job(const char *id, AioContext **aio_context,
  3159. Error **errp)
  3160. {
  3161. BlockJob *job;
  3162. assert(id != NULL);
  3163. *aio_context = NULL;
  3164. job = block_job_get(id);
  3165. if (!job) {
  3166. error_set(errp, ERROR_CLASS_DEVICE_NOT_ACTIVE,
  3167. "Block job '%s' not found", id);
  3168. return NULL;
  3169. }
  3170. *aio_context = blk_get_aio_context(job->blk);
  3171. aio_context_acquire(*aio_context);
  3172. return job;
  3173. }
  3174. void qmp_block_job_set_speed(const char *device, int64_t speed, Error **errp)
  3175. {
  3176. AioContext *aio_context;
  3177. BlockJob *job = find_block_job(device, &aio_context, errp);
  3178. if (!job) {
  3179. return;
  3180. }
  3181. block_job_set_speed(job, speed, errp);
  3182. aio_context_release(aio_context);
  3183. }
  3184. void qmp_block_job_cancel(const char *device,
  3185. bool has_force, bool force, Error **errp)
  3186. {
  3187. AioContext *aio_context;
  3188. BlockJob *job = find_block_job(device, &aio_context, errp);
  3189. if (!job) {
  3190. return;
  3191. }
  3192. if (!has_force) {
  3193. force = false;
  3194. }
  3195. if (block_job_user_paused(job) && !force) {
  3196. error_setg(errp, "The block job for device '%s' is currently paused",
  3197. device);
  3198. goto out;
  3199. }
  3200. trace_qmp_block_job_cancel(job);
  3201. block_job_cancel(job);
  3202. out:
  3203. aio_context_release(aio_context);
  3204. }
  3205. void qmp_block_job_pause(const char *device, Error **errp)
  3206. {
  3207. AioContext *aio_context;
  3208. BlockJob *job = find_block_job(device, &aio_context, errp);
  3209. if (!job || block_job_user_paused(job)) {
  3210. return;
  3211. }
  3212. trace_qmp_block_job_pause(job);
  3213. block_job_user_pause(job);
  3214. aio_context_release(aio_context);
  3215. }
  3216. void qmp_block_job_resume(const char *device, Error **errp)
  3217. {
  3218. AioContext *aio_context;
  3219. BlockJob *job = find_block_job(device, &aio_context, errp);
  3220. if (!job || !block_job_user_paused(job)) {
  3221. return;
  3222. }
  3223. trace_qmp_block_job_resume(job);
  3224. block_job_user_resume(job);
  3225. aio_context_release(aio_context);
  3226. }
  3227. void qmp_block_job_complete(const char *device, Error **errp)
  3228. {
  3229. AioContext *aio_context;
  3230. BlockJob *job = find_block_job(device, &aio_context, errp);
  3231. if (!job) {
  3232. return;
  3233. }
  3234. trace_qmp_block_job_complete(job);
  3235. block_job_complete(job, errp);
  3236. aio_context_release(aio_context);
  3237. }
  3238. void qmp_change_backing_file(const char *device,
  3239. const char *image_node_name,
  3240. const char *backing_file,
  3241. Error **errp)
  3242. {
  3243. BlockDriverState *bs = NULL;
  3244. AioContext *aio_context;
  3245. BlockDriverState *image_bs = NULL;
  3246. Error *local_err = NULL;
  3247. bool ro;
  3248. int open_flags;
  3249. int ret;
  3250. bs = qmp_get_root_bs(device, errp);
  3251. if (!bs) {
  3252. return;
  3253. }
  3254. aio_context = bdrv_get_aio_context(bs);
  3255. aio_context_acquire(aio_context);
  3256. image_bs = bdrv_lookup_bs(NULL, image_node_name, &local_err);
  3257. if (local_err) {
  3258. error_propagate(errp, local_err);
  3259. goto out;
  3260. }
  3261. if (!image_bs) {
  3262. error_setg(errp, "image file not found");
  3263. goto out;
  3264. }
  3265. if (bdrv_find_base(image_bs) == image_bs) {
  3266. error_setg(errp, "not allowing backing file change on an image "
  3267. "without a backing file");
  3268. goto out;
  3269. }
  3270. /* even though we are not necessarily operating on bs, we need it to
  3271. * determine if block ops are currently prohibited on the chain */
  3272. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_CHANGE, errp)) {
  3273. goto out;
  3274. }
  3275. /* final sanity check */
  3276. if (!bdrv_chain_contains(bs, image_bs)) {
  3277. error_setg(errp, "'%s' and image file are not in the same chain",
  3278. device);
  3279. goto out;
  3280. }
  3281. /* if not r/w, reopen to make r/w */
  3282. open_flags = image_bs->open_flags;
  3283. ro = bdrv_is_read_only(image_bs);
  3284. if (ro) {
  3285. bdrv_reopen(image_bs, open_flags | BDRV_O_RDWR, &local_err);
  3286. if (local_err) {
  3287. error_propagate(errp, local_err);
  3288. goto out;
  3289. }
  3290. }
  3291. ret = bdrv_change_backing_file(image_bs, backing_file,
  3292. image_bs->drv ? image_bs->drv->format_name : "");
  3293. if (ret < 0) {
  3294. error_setg_errno(errp, -ret, "Could not change backing file to '%s'",
  3295. backing_file);
  3296. /* don't exit here, so we can try to restore open flags if
  3297. * appropriate */
  3298. }
  3299. if (ro) {
  3300. bdrv_reopen(image_bs, open_flags, &local_err);
  3301. error_propagate(errp, local_err);
  3302. }
  3303. out:
  3304. aio_context_release(aio_context);
  3305. }
  3306. void hmp_drive_add_node(Monitor *mon, const char *optstr)
  3307. {
  3308. QemuOpts *opts;
  3309. QDict *qdict;
  3310. Error *local_err = NULL;
  3311. opts = qemu_opts_parse_noisily(&qemu_drive_opts, optstr, false);
  3312. if (!opts) {
  3313. return;
  3314. }
  3315. qdict = qemu_opts_to_qdict(opts, NULL);
  3316. if (!qdict_get_try_str(qdict, "node-name")) {
  3317. QDECREF(qdict);
  3318. error_report("'node-name' needs to be specified");
  3319. goto out;
  3320. }
  3321. BlockDriverState *bs = bds_tree_init(qdict, &local_err);
  3322. if (!bs) {
  3323. error_report_err(local_err);
  3324. goto out;
  3325. }
  3326. QTAILQ_INSERT_TAIL(&monitor_bdrv_states, bs, monitor_list);
  3327. out:
  3328. qemu_opts_del(opts);
  3329. }
  3330. void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
  3331. {
  3332. BlockDriverState *bs;
  3333. QObject *obj;
  3334. Visitor *v = qobject_output_visitor_new(&obj);
  3335. QDict *qdict;
  3336. const QDictEntry *ent;
  3337. Error *local_err = NULL;
  3338. visit_type_BlockdevOptions(v, NULL, &options, &local_err);
  3339. if (local_err) {
  3340. error_propagate(errp, local_err);
  3341. goto fail;
  3342. }
  3343. visit_complete(v, &obj);
  3344. qdict = qobject_to_qdict(obj);
  3345. qdict_flatten(qdict);
  3346. /*
  3347. * Rewrite "backing": null to "backing": ""
  3348. * TODO Rewrite "" to null instead, and perhaps not even here
  3349. */
  3350. for (ent = qdict_first(qdict); ent; ent = qdict_next(qdict, ent)) {
  3351. char *dot = strrchr(ent->key, '.');
  3352. if (!strcmp(dot ? dot + 1 : ent->key, "backing")
  3353. && qobject_type(ent->value) == QTYPE_QNULL) {
  3354. qdict_put(qdict, ent->key, qstring_new());
  3355. }
  3356. }
  3357. if (!qdict_get_try_str(qdict, "node-name")) {
  3358. error_setg(errp, "'node-name' must be specified for the root node");
  3359. goto fail;
  3360. }
  3361. bs = bds_tree_init(qdict, errp);
  3362. if (!bs) {
  3363. goto fail;
  3364. }
  3365. QTAILQ_INSERT_TAIL(&monitor_bdrv_states, bs, monitor_list);
  3366. fail:
  3367. visit_free(v);
  3368. }
  3369. void qmp_blockdev_del(const char *node_name, Error **errp)
  3370. {
  3371. AioContext *aio_context;
  3372. BlockDriverState *bs;
  3373. bs = bdrv_find_node(node_name);
  3374. if (!bs) {
  3375. error_setg(errp, "Cannot find node %s", node_name);
  3376. return;
  3377. }
  3378. if (bdrv_has_blk(bs)) {
  3379. error_setg(errp, "Node %s is in use", node_name);
  3380. return;
  3381. }
  3382. aio_context = bdrv_get_aio_context(bs);
  3383. aio_context_acquire(aio_context);
  3384. if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, errp)) {
  3385. goto out;
  3386. }
  3387. if (!bs->monitor_list.tqe_prev) {
  3388. error_setg(errp, "Node %s is not owned by the monitor",
  3389. bs->node_name);
  3390. goto out;
  3391. }
  3392. if (bs->refcnt > 1) {
  3393. error_setg(errp, "Block device %s is in use",
  3394. bdrv_get_device_or_node_name(bs));
  3395. goto out;
  3396. }
  3397. QTAILQ_REMOVE(&monitor_bdrv_states, bs, monitor_list);
  3398. bdrv_unref(bs);
  3399. out:
  3400. aio_context_release(aio_context);
  3401. }
  3402. static BdrvChild *bdrv_find_child(BlockDriverState *parent_bs,
  3403. const char *child_name)
  3404. {
  3405. BdrvChild *child;
  3406. QLIST_FOREACH(child, &parent_bs->children, next) {
  3407. if (strcmp(child->name, child_name) == 0) {
  3408. return child;
  3409. }
  3410. }
  3411. return NULL;
  3412. }
  3413. void qmp_x_blockdev_change(const char *parent, bool has_child,
  3414. const char *child, bool has_node,
  3415. const char *node, Error **errp)
  3416. {
  3417. BlockDriverState *parent_bs, *new_bs = NULL;
  3418. BdrvChild *p_child;
  3419. parent_bs = bdrv_lookup_bs(parent, parent, errp);
  3420. if (!parent_bs) {
  3421. return;
  3422. }
  3423. if (has_child == has_node) {
  3424. if (has_child) {
  3425. error_setg(errp, "The parameters child and node are in conflict");
  3426. } else {
  3427. error_setg(errp, "Either child or node must be specified");
  3428. }
  3429. return;
  3430. }
  3431. if (has_child) {
  3432. p_child = bdrv_find_child(parent_bs, child);
  3433. if (!p_child) {
  3434. error_setg(errp, "Node '%s' does not have child '%s'",
  3435. parent, child);
  3436. return;
  3437. }
  3438. bdrv_del_child(parent_bs, p_child, errp);
  3439. }
  3440. if (has_node) {
  3441. new_bs = bdrv_find_node(node);
  3442. if (!new_bs) {
  3443. error_setg(errp, "Node '%s' not found", node);
  3444. return;
  3445. }
  3446. bdrv_add_child(parent_bs, new_bs, errp);
  3447. }
  3448. }
  3449. BlockJobInfoList *qmp_query_block_jobs(Error **errp)
  3450. {
  3451. BlockJobInfoList *head = NULL, **p_next = &head;
  3452. BlockJob *job;
  3453. for (job = block_job_next(NULL); job; job = block_job_next(job)) {
  3454. BlockJobInfoList *elem;
  3455. AioContext *aio_context;
  3456. if (block_job_is_internal(job)) {
  3457. continue;
  3458. }
  3459. elem = g_new0(BlockJobInfoList, 1);
  3460. aio_context = blk_get_aio_context(job->blk);
  3461. aio_context_acquire(aio_context);
  3462. elem->value = block_job_query(job, errp);
  3463. aio_context_release(aio_context);
  3464. if (!elem->value) {
  3465. g_free(elem);
  3466. qapi_free_BlockJobInfoList(head);
  3467. return NULL;
  3468. }
  3469. *p_next = elem;
  3470. p_next = &elem->next;
  3471. }
  3472. return head;
  3473. }
  3474. QemuOptsList qemu_common_drive_opts = {
  3475. .name = "drive",
  3476. .head = QTAILQ_HEAD_INITIALIZER(qemu_common_drive_opts.head),
  3477. .desc = {
  3478. {
  3479. .name = "snapshot",
  3480. .type = QEMU_OPT_BOOL,
  3481. .help = "enable/disable snapshot mode",
  3482. },{
  3483. .name = "aio",
  3484. .type = QEMU_OPT_STRING,
  3485. .help = "host AIO implementation (threads, native)",
  3486. },{
  3487. .name = BDRV_OPT_CACHE_WB,
  3488. .type = QEMU_OPT_BOOL,
  3489. .help = "Enable writeback mode",
  3490. },{
  3491. .name = "format",
  3492. .type = QEMU_OPT_STRING,
  3493. .help = "disk format (raw, qcow2, ...)",
  3494. },{
  3495. .name = "rerror",
  3496. .type = QEMU_OPT_STRING,
  3497. .help = "read error action",
  3498. },{
  3499. .name = "werror",
  3500. .type = QEMU_OPT_STRING,
  3501. .help = "write error action",
  3502. },{
  3503. .name = BDRV_OPT_READ_ONLY,
  3504. .type = QEMU_OPT_BOOL,
  3505. .help = "open drive file as read-only",
  3506. },
  3507. THROTTLE_OPTS,
  3508. {
  3509. .name = "throttling.group",
  3510. .type = QEMU_OPT_STRING,
  3511. .help = "name of the block throttling group",
  3512. },{
  3513. .name = "copy-on-read",
  3514. .type = QEMU_OPT_BOOL,
  3515. .help = "copy read data from backing file into image file",
  3516. },{
  3517. .name = "detect-zeroes",
  3518. .type = QEMU_OPT_STRING,
  3519. .help = "try to optimize zero writes (off, on, unmap)",
  3520. },{
  3521. .name = "stats-account-invalid",
  3522. .type = QEMU_OPT_BOOL,
  3523. .help = "whether to account for invalid I/O operations "
  3524. "in the statistics",
  3525. },{
  3526. .name = "stats-account-failed",
  3527. .type = QEMU_OPT_BOOL,
  3528. .help = "whether to account for failed I/O operations "
  3529. "in the statistics",
  3530. },
  3531. { /* end of list */ }
  3532. },
  3533. };
  3534. QemuOptsList qemu_drive_opts = {
  3535. .name = "drive",
  3536. .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
  3537. .desc = {
  3538. /*
  3539. * no elements => accept any params
  3540. * validation will happen later
  3541. */
  3542. { /* end of list */ }
  3543. },
  3544. };