)]}'
{
  "commit": "f3554f4bc69803ac2baaf7cf2aa4339e1f4b693e",
  "tree": "52505043de254dc3e34dad7110724fcc1f489eb9",
  "parents": [
    "6949a6318e60aeb9c755679ac7f978aefe8c1722"
  ],
  "author": {
    "name": "Gerd Hoffmann",
    "email": "kraxel@redhat.com",
    "time": "Thu Apr 02 16:59:23 2009 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Thu Apr 02 19:05:08 2009 -0700"
  },
  "message": "preadv/pwritev: Add preadv and pwritev system calls.\n\nThis patch adds preadv and pwritev system calls.  These syscalls are a\npretty straightforward combination of pread and readv (same for write).\nThey are quite useful for doing vectored I/O in threaded applications.\nUsing lseek+readv instead opens race windows you\u0027ll have to plug with\nlocking.\n\nOther systems have such system calls too, for example NetBSD, check\nhere: http://www.daemon-systems.org/man/preadv.2.html\n\nThe application-visible interface provided by glibc should look like\nthis to be compatible to the existing implementations in the *BSD family:\n\n  ssize_t preadv(int d, const struct iovec *iov, int iovcnt, off_t offset);\n  ssize_t pwritev(int d, const struct iovec *iov, int iovcnt, off_t offset);\n\nThis prototype has one problem though: On 32bit archs is the (64bit)\noffset argument unaligned, which the syscall ABI of several archs doesn\u0027t\nallow to do.  At least s390 needs a wrapper in glibc to handle this.  As\nwe\u0027ll need a wrappers in glibc anyway I\u0027ve decided to push problem to\nglibc entriely and use a syscall prototype which works without\narch-specific wrappers inside the kernel: The offset argument is\nexplicitly splitted into two 32bit values.\n\nThe patch sports the actual system call implementation and the windup in\nthe x86 system call tables.  Other archs follow as separate patches.\n\nSigned-off-by: Gerd Hoffmann \u003ckraxel@redhat.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: \u003clinux-api@vger.kernel.org\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "db0c803170ab9e925dbfe2a22c17d0be23824d6e",
      "old_mode": 33188,
      "old_path": "arch/x86/ia32/ia32entry.S",
      "new_id": "a505202086e8741a916e696ccfb664d3f3e0f8ef",
      "new_mode": 33188,
      "new_path": "arch/x86/ia32/ia32entry.S"
    },
    {
      "type": "modify",
      "old_id": "f2bba78430a4d2628ca83203e193dcb6ee78a247",
      "old_mode": 33188,
      "old_path": "arch/x86/include/asm/unistd_32.h",
      "new_id": "6e72d74cf8dc74b7720f5cb79ba355a926e7fa6e",
      "new_mode": 33188,
      "new_path": "arch/x86/include/asm/unistd_32.h"
    },
    {
      "type": "modify",
      "old_id": "d2e415e6666f63d314270ef57a26dae73e3fac01",
      "old_mode": 33188,
      "old_path": "arch/x86/include/asm/unistd_64.h",
      "new_id": "f81829462325f6328a6e6d9c3667da02e9f616d0",
      "new_mode": 33188,
      "new_path": "arch/x86/include/asm/unistd_64.h"
    },
    {
      "type": "modify",
      "old_id": "3bdb64829b82718f42bafed884f55d1dbe9e65a2",
      "old_mode": 33188,
      "old_path": "arch/x86/kernel/syscall_table_32.S",
      "new_id": "ff5c8736b491b8ff2c4835c5a19a51ad63633de1",
      "new_mode": 33188,
      "new_path": "arch/x86/kernel/syscall_table_32.S"
    },
    {
      "type": "modify",
      "old_id": "e04b4660db846527f81f995de39a5e52f16b2e7f",
      "old_mode": 33188,
      "old_path": "fs/compat.c",
      "new_id": "7c1615183d1ec6b6e7f94562c03c83501b770195",
      "new_mode": 33188,
      "new_path": "fs/compat.c"
    },
    {
      "type": "modify",
      "old_id": "400fe81c973e90cccdb94c814325bc3ce4e39d19",
      "old_mode": 33188,
      "old_path": "fs/read_write.c",
      "new_id": "6d5d8ff238aa50cdce17c4126f775d9af9b00b8f",
      "new_mode": 33188,
      "new_path": "fs/read_write.c"
    },
    {
      "type": "modify",
      "old_id": "b880864672de75e09cfd522f1f6df1fded3ba56b",
      "old_mode": 33188,
      "old_path": "include/linux/compat.h",
      "new_id": "9723edd6455cb8d612923f8a5706fb691e2a1525",
      "new_mode": 33188,
      "new_path": "include/linux/compat.h"
    },
    {
      "type": "modify",
      "old_id": "f9f900cfd066f1ad19ac979dba0c48f2384b95e2",
      "old_mode": 33188,
      "old_path": "include/linux/syscalls.h",
      "new_id": "b299a82a05e7abd369f6b30d9b7182238112b685",
      "new_mode": 33188,
      "new_path": "include/linux/syscalls.h"
    }
  ]
}
