)]}'
{
  "commit": "ddb7bcf8430a5d97ae73ff1438618f932cd48340",
  "tree": "6e2d2a2aee9fbd6870e55ec098ee9dc92c535298",
  "parents": [
    "0462391d6d03ce4fb879c9b9f88185bb79581ab9"
  ],
  "author": {
    "name": "Chuck Lever",
    "email": "chuck.lever@oracle.com",
    "time": "Fri Jun 30 13:49:03 2023 -0400"
  },
  "committer": {
    "name": "Christian Brauner",
    "email": "brauner@kernel.org",
    "time": "Mon Jul 03 17:01:29 2023 +0200"
  },
  "message": "shmem: stable directory offsets\n\nThe current cursor-based directory offset mechanism doesn\u0027t work\nwhen a tmpfs filesystem is exported via NFS. This is because NFS\nclients do not open directories. Each server-side READDIR operation\nhas to open the directory, read it, then close it. The cursor state\nfor that directory, being associated strictly with the opened\nstruct file, is thus discarded after each NFS READDIR operation.\n\nDirectory offsets are cached not only by NFS clients, but also by\nuser space libraries on those clients. Essentially there is no way\nto invalidate those caches when directory offsets have changed on\nan NFS server after the offset-to-dentry mapping changes. Thus the\nwhole application stack depends on unchanging directory offsets.\n\nThe solution we\u0027ve come up with is to make the directory offset for\neach file in a tmpfs filesystem stable for the life of the directory\nentry it represents.\n\nshmem_readdir() and shmem_dir_llseek() now use an xarray to map each\ndirectory offset (an loff_t integer) to the memory address of a\nstruct dentry.\n\nSigned-off-by: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nMessage-Id: \u003c168814734331.530310.3911190551060453102.stgit@manet.1015granger.net\u003e\nSigned-off-by: Christian Brauner \u003cbrauner@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9029abd29b1c24e9a9c8bd99818e56f2becaf205",
      "old_mode": 33188,
      "old_path": "include/linux/shmem_fs.h",
      "new_id": "a5454a80ab3064cb5d148620755c65bb526063f9",
      "new_mode": 33188,
      "new_path": "include/linux/shmem_fs.h"
    },
    {
      "type": "modify",
      "old_id": "ba3d7db90c9dbd782492c3bf48d30bf3822e2827",
      "old_mode": 33188,
      "old_path": "mm/shmem.c",
      "new_id": "c9e6c1dd4fe82169a9e43e95441d0c1bc7fa88ed",
      "new_mode": 33188,
      "new_path": "mm/shmem.c"
    }
  ]
}
