IRC Logs for #lost


2024-01-24

08:34:41 XanClic joined the channel
09:14:29 kevin joined the channel
12:30:08 kevin: XanClic: Was machst du mit dem Drain in bdrv_change_aio_context(), wenn du den Graph die ganze Zeit gelockt hast?
12:30:46 XanClic: keine Ahnung, habs ja nur so ausprobiert, und in blk_set_aio_context() gings zumindest, ohne, dass was passiert wäre
12:31:24 XanClic: und wie gesagt, bdrv_root_unref_child() hält sowieso schon die ganze Zeit das Lock (hab nicht alle Caller kontrolliert, aber bei bdrv_close() weiß ichs definitiv noch)
12:32:42 kevin: Hm.. Theoretisch ist das verboten. Keine Ahnung, ob es irgendwelche zusätzlichen Gründe gibt, warum es in diesem Fall doch funktioniert.
12:33:37 kevin: Das generelle Problem mit Drain ist halt, dass es beliebige Callbacks aufrufen kann. Wenn einer davon I/O machen will, hast du einen Deadlock.
12:34:41 XanClic: Ich hab den Code nicht gemacht!
12:36:06 XanClic: ah, bdrv_root_unref_child() hat ja sogar doch GRAPH_WRLOCK. Irgendwie übersehen.
12:37:33 XanClic: Ich weiß ja nun auch nicht, wie gefährlich es ist, einfach so bspw. in bdrv_root_unref_child() das Lock freizugeben
12:37:54 XanClic: Wenn das einfach so ginge, dann gäbs ja keinen Grund für die Existenz von bdrv_schedule_unref(), nehm ich an
12:38:01 kevin: Locks freigeben macht alles kaputt
12:38:17 kevin: Dann lieber Drain und hoffen, dass nichts passiert ;-)
12:38:23 XanClic: „macht“? Das ist ja Fortschritt :)
12:38:49 kevin: Ein offensichtlicher Grund, warum Drain harmlos sein kann, wäre, wenn das BDS eh schon gedraint ist
12:38:58 XanClic: ja
12:41:19 XanClic: Bei unref seh ich oft ein drain davor, aber halt nur für das eine Parent, das da gerade eine Children unref-en möchte
12:41:30 XanClic: und ist eben auch keine drained section
12:41:42 XanClic: Bei bdrv_attach_child_common() wiederum seh ich eher gar nichts
12:43:43 XanClic: Klingt also so wie „Wenn man keine lustigen Sachen macht, dann wirds schon gehen“
12:44:19 kevin: Genau das, was man will
12:45:06 kevin: Die andere Frage wäre, ob wir überhaupt noch drainen müssen, nachdem man jetzt ja aus beliebigen Threads Requests absetzen darf
12:45:21 kevin: Also ist es doch eigentlich egal, wenn noch was in einem anderen Thread unterwegs ist?
12:46:01 XanClic: Ich hab mich vor anderthalb Jahren eigentlich entschieden, dass ich da nicht drüber nachdenken möchte
12:46:05 XanClic: aber klingt plausibel
12:46:11 XanClic: solange eben beim Commit der Graph gelockt ist
12:48:26 kevin: Genau
12:49:09 kevin: Ich bin mir fast sicher, dass es in der Praxis da doch noch irgendwas gibt, aber so rein theoretisch jedenfalls...
12:49:35 XanClic: Wozu brauchts eigentlich überhaupt noch einen AioContext am BDS?
12:49:49 XanClic: Weil Blockjobs wissen müssen, in welchem Context sie laufen sollen?
12:59:04 kevin: Ja, quasi als Default
13:00:11 kevin: Exports auch. Gibt es sonst noch was?
13:01:58 XanClic: OK
16:38:29 XanClic joined the channel