)]}'
{
  "commit": "b678626289708f1a3b1f2a46671bf3e0f00282e5",
  "tree": "408531c5a85d37174a7a53a6155e3c08de68dab4",
  "parents": [
    "92c61645d8b305557e25a7e9394be00b84efe623"
  ],
  "author": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Fri Feb 17 22:49:09 2023 +0000"
  },
  "committer": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Mar 16 13:57:47 2023 +0000"
  },
  "message": "pipe: Use a linked-list instead of a ring buffer\n\nUse a linked-list of pipe_buffers rather than a ring, allocating them as we\nneed them.  We cache one on pipe_inode_info struct for fast use by ordinary\npipe writes, just as we can cache a spare page.\n\nDoing this will allow the pipe_buffer to have an integral variable-sized\nbio_vec array pointing to the content of the buffer, allowing a buffer to\npoint to multiple folios.\n\nHaving a pipe_buffer that can point to multiple pages then allows splice to\nappend an entire splice segment consisting of multipe pages in a single\npipe buffer.\n\nThe pipe buffer bvec can then be passed directly to, say, sendmsg() with\nMSG_SPLICE_PAGES when splicing from the pipe, allowing the socket to be a\nbit more efficient.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f7a74cc9cdd7da8c40964927ddad59720b0cfa8a",
      "old_mode": 33188,
      "old_path": "fs/internal.h",
      "new_id": "8508f8562043af73efb6339cdf77abc0349c9d86",
      "new_mode": 33188,
      "new_path": "fs/internal.h"
    },
    {
      "type": "modify",
      "old_id": "4427903109e1d025316e669e192c9bfcd2672a38",
      "old_mode": 33188,
      "old_path": "fs/pipe.c",
      "new_id": "5473528ccec53b1a6feec304dd79713141c5ceb5",
      "new_mode": 33188,
      "new_path": "fs/pipe.c"
    },
    {
      "type": "modify",
      "old_id": "0d749bf6e86f9f05841600f94d8ffd596767c204",
      "old_mode": 33188,
      "old_path": "fs/pipe.h",
      "new_id": "ef11dffa237e278fd3f46c516f802ea8f81a960e",
      "new_mode": 33188,
      "new_path": "fs/pipe.h"
    },
    {
      "type": "modify",
      "old_id": "8bbbb19eb59e61d7c724d22e9cfa60c7b783d422",
      "old_mode": 33188,
      "old_path": "fs/splice.c",
      "new_id": "1889b865cbd0738f591d3657f7e709637b243364",
      "new_mode": 33188,
      "new_path": "fs/splice.c"
    },
    {
      "type": "modify",
      "old_id": "555aae5448ae4ec00065e00553955b31bb44884b",
      "old_mode": 33188,
      "old_path": "include/linux/bvec.h",
      "new_id": "6c030a2140db9f65e903c1c43961a1ac45b6c278",
      "new_mode": 33188,
      "new_path": "include/linux/bvec.h"
    },
    {
      "type": "modify",
      "old_id": "569483ea7cac9f815bd303293f2e1a5cc36d7809",
      "old_mode": 33188,
      "old_path": "include/linux/pipe_fs_i.h",
      "new_id": "2e33c66d1c56253870d89ddb0511f1ea62a1e9fc",
      "new_mode": 33188,
      "new_path": "include/linux/pipe_fs_i.h"
    },
    {
      "type": "modify",
      "old_id": "9ed729e9ad9e8c957cf7700fd9961e9b584c85fd",
      "old_mode": 33188,
      "old_path": "include/linux/splice.h",
      "new_id": "9f6f5effe1299e5351631b6bee89aad6b10ab5dc",
      "new_mode": 33188,
      "new_path": "include/linux/splice.h"
    },
    {
      "type": "modify",
      "old_id": "fc6bba20273bdb176a9215ca9770d46808679471",
      "old_mode": 33188,
      "old_path": "include/linux/watch_queue.h",
      "new_id": "cef93832bd42c873960ba167e683070093082d56",
      "new_mode": 33188,
      "new_path": "include/linux/watch_queue.h"
    },
    {
      "type": "modify",
      "old_id": "9aa70ae53d24d13d7ba714d6659512a374d55570",
      "old_mode": 33188,
      "old_path": "kernel/relay.c",
      "new_id": "5e48d039e0172c6f872721fe8ef034e5b4a22a43",
      "new_mode": 33188,
      "new_path": "kernel/relay.c"
    },
    {
      "type": "modify",
      "old_id": "45551c7b4c36588fac4378f04fe4a4d7ef8e36a9",
      "old_mode": 33188,
      "old_path": "kernel/trace/trace.c",
      "new_id": "38337445ab5033ee898f54d4b6a9ff2af9ae8e01",
      "new_mode": 33188,
      "new_path": "kernel/trace/trace.c"
    },
    {
      "type": "modify",
      "old_id": "df8977974fbf0ca041cf83631e8eb012181598d4",
      "old_mode": 33188,
      "old_path": "kernel/watch_queue.c",
      "new_id": "0541e3eeca6b9d9ad9a159a83ce44a17f33b0793",
      "new_mode": 33188,
      "new_path": "kernel/watch_queue.c"
    },
    {
      "type": "modify",
      "old_id": "b75a4b781695cdcb58df81535214022deaf88a81",
      "old_mode": 33188,
      "old_path": "mm/filemap.c",
      "new_id": "8f34ab4ef029bd4f836d60131a6a67db0fff4775",
      "new_mode": 33188,
      "new_path": "mm/filemap.c"
    },
    {
      "type": "modify",
      "old_id": "9fa333e26b7dfac6f4bc326e7d044320c9378c3c",
      "old_mode": 33188,
      "old_path": "net/core/skbuff.c",
      "new_id": "bc736cb7d84148d44e704ce2f1e9cac3f86b8455",
      "new_mode": 33188,
      "new_path": "net/core/skbuff.c"
    },
    {
      "type": "modify",
      "old_id": "3c1e7122076b9ebc89c8479302d51387dbb16d02",
      "old_mode": 33188,
      "old_path": "security/keys/internal.h",
      "new_id": "990edf7078f1358fbdc747e6181b59c867dc6611",
      "new_mode": 33188,
      "new_path": "security/keys/internal.h"
    }
  ]
}
