)]}'
{
  "commit": "e1b4c6a58304fd490124cc2b454d80edc786665c",
  "tree": "ebb2e81a49c5e82413e3c2c09a0f550cf86704c0",
  "parents": [
    "3010f06c52aa7da51493df59303ea733a614597b"
  ],
  "author": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Sat Dec 13 17:50:23 2025 -0500"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Tue Dec 16 00:57:29 2025 -0500"
  },
  "message": "shmem: fix recovery on rename failures\n\nmaple_tree insertions can fail if we are seriously short on memory;\nsimple_offset_rename() does not recover well if it runs into that.\nThe same goes for simple_offset_rename_exchange().\n\nMoreover, shmem_whiteout() expects that if it succeeds, the caller will\nprogress to d_move(), i.e. that shmem_rename2() won\u0027t fail past the\nsuccessful call of shmem_whiteout().\n\nNot hard to fix, fortunately - mtree_store() can\u0027t fail if the index we\nare trying to store into is already present in the tree as a singleton.\n\nFor simple_offset_rename_exchange() that\u0027s enough - we just need to be\ncareful about the order of operations.\n\nFor simple_offset_rename() solution is to preinsert the target into the\ntree for new_dir; the rest can be done without any potentially failing\noperations.\n\nThat preinsertion has to be done in shmem_rename2() rather than in\nsimple_offset_rename() itself - otherwise we\u0027d need to deal with the\npossibility of failure after successful shmem_whiteout().\n\nFixes: a2e459555c5f (\"shmem: stable directory offsets\")\nReviewed-by: Christian Brauner \u003cbrauner@kernel.org\u003e\nReviewed-by: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9264523be85cf01af71fd7309fb2e729c0eeea61",
      "old_mode": 33188,
      "old_path": "fs/libfs.c",
      "new_id": "591eb649ebbacf202ff48cd3abd64a175daa291c",
      "new_mode": 33188,
      "new_path": "fs/libfs.c"
    },
    {
      "type": "modify",
      "old_id": "04ceeca12a0d5caadb68643bf68b7a78e17c08d4",
      "old_mode": 33188,
      "old_path": "include/linux/fs.h",
      "new_id": "f5c9cf28c4dcf9ec648f0fc4f3f4bb44d1b1c482",
      "new_mode": 33188,
      "new_path": "include/linux/fs.h"
    },
    {
      "type": "modify",
      "old_id": "d3edc809e2e716dbba4ce0b70ce8947a998c90ae",
      "old_mode": 33188,
      "old_path": "mm/shmem.c",
      "new_id": "a9666b0599a4162ee759bb3508d0bc53c2dd4606",
      "new_mode": 33188,
      "new_path": "mm/shmem.c"
    }
  ]
}
