)]}'
{
  "commit": "93c8a97f99d8d03ce0d5f4fecb0e82bf2d1a52b9",
  "tree": "486ff36718d6a1079d55c7b333d472db014a24cd",
  "parents": [
    "1ae4271ab8dbfbf5dc28b36baa7f3fd5fd2215e1"
  ],
  "author": {
    "name": "Prasad Pandit",
    "email": "pjp@fedoraproject.org",
    "time": "Tue Feb 24 15:55:47 2026 +0530"
  },
  "committer": {
    "name": "Fabiano Rosas",
    "email": "farosas@suse.de",
    "time": "Mon Mar 09 08:53:30 2026 -0300"
  },
  "message": "migration: introduce MIGRATION_STATUS_FAILING\n\nWhen migration connection is broken, the QEMU and libvirtd(8)\nprocess on the source side receive TCP connection reset\nnotification. QEMU sets the migration status to FAILED and\nproceeds to migration_cleanup(). Meanwhile, Libvirtd(8) sends\na QMP command to migrate_set_capabilities().\n\nThe migration_cleanup() and qmp_migrate_set_capabilities()\ncalls race with each other. When the latter is invoked first,\nsince the migration is not running (FAILED), migration\ncapabilities are reset to false, so during migration_cleanup()\nthe QEMU process crashes with assertion failure.\n\nIntroduce a new migration status FAILING and use it as an\ninterim status when an error occurs. Once migration_cleanup()\nis done, it sets the migration status to FAILED. This helps\nto avoid the above race condition and ensuing failure.\n\nInterim status FAILING is set wherever the execution moves\ntowards migration_cleanup():\n  - postcopy_start()\n  - migration_thread()\n  - migration_cleanup()\n  - multifd_send_setup()\n  - bg_migration_thread()\n  - migration_completion()\n  - migration_detect_error()\n  - bg_migration_completion()\n  - multifd_send_error_propagate()\n  - migration_connect_error_propagate()\n\nThe migration status finally moves to FAILED and reports an\nappropriate error to the user.\n\nInterim status FAILING is _NOT_ set in the following routines\nbecause they do not follow the migration_cleanup() path to the\nFAILED state:\n  - cpr_exec_cb()\n  - qemu_savevm_state()\n  - postcopy_listen_thread()\n  - process_incoming_migration_co()\n  - multifd_recv_terminate_threads()\n  - migration_channel_process_incoming()\n\nReviewed-by: Peter Xu \u003cpeterx@redhat.com\u003e\nSigned-off-by: Prasad Pandit \u003cpjp@fedoraproject.org\u003e\nLink: https://lore.kernel.org/qemu-devel/20260224102547.226087-1-ppandit@redhat.com\nSigned-off-by: Fabiano Rosas \u003cfarosas@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a5b0465ed30cb812cb294ab901c7a37fe6157dc6",
      "old_mode": 33188,
      "old_path": "migration/migration.c",
      "new_id": "e80774e89b06f78414ebfe0cd6929764ce7be8a6",
      "new_mode": 33188,
      "new_path": "migration/migration.c"
    },
    {
      "type": "modify",
      "old_id": "ad6261688fdf98a5c7f4ee9fb80ba2901201a33e",
      "old_mode": 33188,
      "old_path": "migration/multifd.c",
      "new_id": "178c6b33501124d0a7d7930c1b75afac1b7dd880",
      "new_mode": 33188,
      "new_path": "migration/multifd.c"
    },
    {
      "type": "modify",
      "old_id": "f925e5541bfabd17796fdc0803eeda26990bee6f",
      "old_mode": 33188,
      "old_path": "qapi/migration.json",
      "new_id": "7134d4ce47ea824cf08dc9220be923f7bc4f9e78",
      "new_mode": 33188,
      "new_path": "qapi/migration.json"
    },
    {
      "type": "modify",
      "old_id": "5c46ceb3e6504279ceba958125165ea6e1856161",
      "old_mode": 33188,
      "old_path": "tests/qtest/migration/migration-qmp.c",
      "new_id": "8279504db19e0d1d2d1581d6696a67cb329cc518",
      "new_mode": 33188,
      "new_path": "tests/qtest/migration/migration-qmp.c"
    },
    {
      "type": "modify",
      "old_id": "a5423ca33c111cb9b9acfc528134057c7105b67e",
      "old_mode": 33188,
      "old_path": "tests/qtest/migration/precopy-tests.c",
      "new_id": "f17dc5176d84d42c8b3d3e546e1a17a17c8dbf88",
      "new_mode": 33188,
      "new_path": "tests/qtest/migration/precopy-tests.c"
    }
  ]
}
