)]}'
{
  "commit": "caffc373c573e2520431619e825c4c7b8ccf3d98",
  "tree": "537e0df241061ee0c5f4e8498c81e5aad05bc0fa",
  "parents": [
    "566cf877a1fcb6d6dc0126b076aad062054c2637"
  ],
  "author": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Tue Jan 31 16:46:22 2017 +0000"
  },
  "committer": {
    "name": "Al Viro",
    "email": "viro@zeniv.linux.org.uk",
    "time": "Thu Feb 02 07:50:04 2017 -0500"
  },
  "message": "statx: Add a system call to make enhanced file info available\n\nAdd a system call to make extended file information available, including\nfile creation and some attribute flags where available through the\nunderlying filesystem.\n\nThe getattr inode operation is altered to take two additional arguments: a\nu32 request_mask and an unsigned int flags that indicate the\nsynchronisation mode.  This change is propagated to the vfs_getattr*()\nfunction.\n\nFunctions like vfs_stat() are now inline wrappers around new functions\nvfs_statx() and vfs_statx_fd() to reduce stack usage.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nOVERVIEW\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe idea was initially proposed as a set of xattrs that could be retrieved\nwith getxattr(), but the general preference proved to be for a new syscall\nwith an extended stat structure.\n\nA number of requests were gathered for features to be included.  The\nfollowing have been included:\n\n (1) Make the fields a consistent size on all arches and make them large.\n\n (2) Spare space, request flags and information flags are provided for\n     future expansion.\n\n (3) Better support for the y2038 problem [Arnd Bergmann] (tv_sec is an\n     __s64).\n\n (4) Creation time: The SMB protocol carries the creation time, which could\n     be exported by Samba, which will in turn help CIFS make use of\n     FS-Cache as that can be used for coherency data (stx_btime).\n\n     This is also specified in NFSv4 as a recommended attribute and could\n     be exported by NFSD [Steve French].\n\n (5) Lightweight stat: Ask for just those details of interest, and allow a\n     netfs (such as NFS) to approximate anything not of interest, possibly\n     without going to the server [Trond Myklebust, Ulrich Drepper, Andreas\n     Dilger] (AT_STATX_DONT_SYNC).\n\n (6) Heavyweight stat: Force a netfs to go to the server, even if it thinks\n     its cached attributes are up to date [Trond Myklebust]\n     (AT_STATX_FORCE_SYNC).\n\nAnd the following have been left out for future extension:\n\n (7) Data version number: Could be used by userspace NFS servers [Aneesh\n     Kumar].\n\n     Can also be used to modify fill_post_wcc() in NFSD which retrieves\n     i_version directly, but has just called vfs_getattr().  It could get\n     it from the kstat struct if it used vfs_xgetattr() instead.\n\n     (There\u0027s disagreement on the exact semantics of a single field, since\n     not all filesystems do this the same way).\n\n (8) BSD stat compatibility: Including more fields from the BSD stat such\n     as creation time (st_btime) and inode generation number (st_gen)\n     [Jeremy Allison, Bernd Schubert].\n\n (9) Inode generation number: Useful for FUSE and userspace NFS servers\n     [Bernd Schubert].\n\n     (This was asked for but later deemed unnecessary with the\n     open-by-handle capability available and caused disagreement as to\n     whether it\u0027s a security hole or not).\n\n(10) Extra coherency data may be useful in making backups [Andreas Dilger].\n\n     (No particular data were offered, but things like last backup\n     timestamp, the data version number and the DOS archive bit would come\n     into this category).\n\n(11) Allow the filesystem to indicate what it can/cannot provide: A\n     filesystem can now say it doesn\u0027t support a standard stat feature if\n     that isn\u0027t available, so if, for instance, inode numbers or UIDs don\u0027t\n     exist or are fabricated locally...\n\n     (This requires a separate system call - I have an fsinfo() call idea\n     for this).\n\n(12) Store a 16-byte volume ID in the superblock that can be returned in\n     struct xstat [Steve French].\n\n     (Deferred to fsinfo).\n\n(13) Include granularity fields in the time data to indicate the\n     granularity of each of the times (NFSv4 time_delta) [Steve French].\n\n     (Deferred to fsinfo).\n\n(14) FS_IOC_GETFLAGS value.  These could be translated to BSD\u0027s st_flags.\n     Note that the Linux IOC flags are a mess and filesystems such as Ext4\n     define flags that aren\u0027t in linux/fs.h, so translation in the kernel\n     may be a necessity (or, possibly, we provide the filesystem type too).\n\n     (Some attributes are made available in stx_attributes, but the general\n     feeling was that the IOC flags were to ext[234]-specific and shouldn\u0027t\n     be exposed through statx this way).\n\n(15) Mask of features available on file (eg: ACLs, seclabel) [Brad Boyer,\n     Michael Kerrisk].\n\n     (Deferred, probably to fsinfo.  Finding out if there\u0027s an ACL or\n     seclabal might require extra filesystem operations).\n\n(16) Femtosecond-resolution timestamps [Dave Chinner].\n\n     (A __reserved field has been left in the statx_timestamp struct for\n     this - if there proves to be a need).\n\n(17) A set multiple attributes syscall to go with this.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nNEW SYSTEM CALL\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe new system call is:\n\n\tint ret \u003d statx(int dfd,\n\t\t\tconst char *filename,\n\t\t\tunsigned int flags,\n\t\t\tunsigned int mask,\n\t\t\tstruct statx *buffer);\n\nThe dfd, filename and flags parameters indicate the file to query, in a\nsimilar way to fstatat().  There is no equivalent of lstat() as that can be\nemulated with statx() by passing AT_SYMLINK_NOFOLLOW in flags.  There is\nalso no equivalent of fstat() as that can be emulated by passing a NULL\nfilename to statx() with the fd of interest in dfd.\n\nWhether or not statx() synchronises the attributes with the backing store\ncan be controlled by OR\u0027ing a value into the flags argument (this typically\nonly affects network filesystems):\n\n (1) AT_STATX_SYNC_AS_STAT tells statx() to behave as stat() does in this\n     respect.\n\n (2) AT_STATX_FORCE_SYNC will require a network filesystem to synchronise\n     its attributes with the server - which might require data writeback to\n     occur to get the timestamps correct.\n\n (3) AT_STATX_DONT_SYNC will suppress synchronisation with the server in a\n     network filesystem.  The resulting values should be considered\n     approximate.\n\nmask is a bitmask indicating the fields in struct statx that are of\ninterest to the caller.  The user should set this to STATX_BASIC_STATS to\nget the basic set returned by stat().  It should be noted that asking for\nmore information may entail extra I/O operations.\n\nbuffer points to the destination for the data.  This must be 256 bytes in\nsize.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nMAIN ATTRIBUTES RECORD\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe following structures are defined in which to return the main attribute\nset:\n\n\tstruct statx_timestamp {\n\t\t__s64\ttv_sec;\n\t\t__s32\ttv_nsec;\n\t\t__s32\t__reserved;\n\t};\n\n\tstruct statx {\n\t\t__u32\tstx_mask;\n\t\t__u32\tstx_blksize;\n\t\t__u64\tstx_attributes;\n\t\t__u32\tstx_nlink;\n\t\t__u32\tstx_uid;\n\t\t__u32\tstx_gid;\n\t\t__u16\tstx_mode;\n\t\t__u16\t__spare0[1];\n\t\t__u64\tstx_ino;\n\t\t__u64\tstx_size;\n\t\t__u64\tstx_blocks;\n\t\t__u64\t__spare1[1];\n\t\tstruct statx_timestamp\tstx_atime;\n\t\tstruct statx_timestamp\tstx_btime;\n\t\tstruct statx_timestamp\tstx_ctime;\n\t\tstruct statx_timestamp\tstx_mtime;\n\t\t__u32\tstx_rdev_major;\n\t\t__u32\tstx_rdev_minor;\n\t\t__u32\tstx_dev_major;\n\t\t__u32\tstx_dev_minor;\n\t\t__u64\t__spare2[14];\n\t};\n\nThe defined bits in request_mask and stx_mask are:\n\n\tSTATX_TYPE\t\tWant/got stx_mode \u0026 S_IFMT\n\tSTATX_MODE\t\tWant/got stx_mode \u0026 ~S_IFMT\n\tSTATX_NLINK\t\tWant/got stx_nlink\n\tSTATX_UID\t\tWant/got stx_uid\n\tSTATX_GID\t\tWant/got stx_gid\n\tSTATX_ATIME\t\tWant/got stx_atime{,_ns}\n\tSTATX_MTIME\t\tWant/got stx_mtime{,_ns}\n\tSTATX_CTIME\t\tWant/got stx_ctime{,_ns}\n\tSTATX_INO\t\tWant/got stx_ino\n\tSTATX_SIZE\t\tWant/got stx_size\n\tSTATX_BLOCKS\t\tWant/got stx_blocks\n\tSTATX_BASIC_STATS\t[The stuff in the normal stat struct]\n\tSTATX_BTIME\t\tWant/got stx_btime{,_ns}\n\tSTATX_ALL\t\t[All currently available stuff]\n\nstx_btime is the file creation time, stx_mask is a bitmask indicating the\ndata provided and __spares*[] are where as-yet undefined fields can be\nplaced.\n\nTime fields are structures with separate seconds and nanoseconds fields\nplus a reserved field in case we want to add even finer resolution.  Note\nthat times will be negative if before 1970; in such a case, the nanosecond\nfields will also be negative if not zero.\n\nThe bits defined in the stx_attributes field convey information about a\nfile, how it is accessed, where it is and what it does.  The following\nattributes map to FS_*_FL flags and are the same numerical value:\n\n\tSTATX_ATTR_COMPRESSED\t\tFile is compressed by the fs\n\tSTATX_ATTR_IMMUTABLE\t\tFile is marked immutable\n\tSTATX_ATTR_APPEND\t\tFile is append-only\n\tSTATX_ATTR_NODUMP\t\tFile is not to be dumped\n\tSTATX_ATTR_ENCRYPTED\t\tFile requires key to decrypt in fs\n\nWithin the kernel, the supported flags are listed by:\n\n\tKSTAT_ATTR_FS_IOC_FLAGS\n\n[Are any other IOC flags of sufficient general interest to be exposed\nthrough this interface?]\n\nNew flags include:\n\n\tSTATX_ATTR_AUTOMOUNT\t\tObject is an automount trigger\n\nThese are for the use of GUI tools that might want to mark files specially,\ndepending on what they are.\n\nFields in struct statx come in a number of classes:\n\n (0) stx_dev_*, stx_blksize.\n\n     These are local system information and are always available.\n\n (1) stx_mode, stx_nlinks, stx_uid, stx_gid, stx_[amc]time, stx_ino,\n     stx_size, stx_blocks.\n\n     These will be returned whether the caller asks for them or not.  The\n     corresponding bits in stx_mask will be set to indicate whether they\n     actually have valid values.\n\n     If the caller didn\u0027t ask for them, then they may be approximated.  For\n     example, NFS won\u0027t waste any time updating them from the server,\n     unless as a byproduct of updating something requested.\n\n     If the values don\u0027t actually exist for the underlying object (such as\n     UID or GID on a DOS file), then the bit won\u0027t be set in the stx_mask,\n     even if the caller asked for the value.  In such a case, the returned\n     value will be a fabrication.\n\n     Note that there are instances where the type might not be valid, for\n     instance Windows reparse points.\n\n (2) stx_rdev_*.\n\n     This will be set only if stx_mode indicates we\u0027re looking at a\n     blockdev or a chardev, otherwise will be 0.\n\n (3) stx_btime.\n\n     Similar to (1), except this will be set to 0 if it doesn\u0027t exist.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nTESTING\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nThe following test program can be used to test the statx system call:\n\n\tsamples/statx/test-statx.c\n\nJust compile and run, passing it paths to the files you want to examine.\nThe file is built automatically if CONFIG_SAMPLES is enabled.\n\nHere\u0027s some example output.  Firstly, an NFS directory that crosses to\nanother FSID.  Note that the AUTOMOUNT attribute is set because transiting\nthis directory will cause d_automount to be invoked by the VFS.\n\n\t[root@andromeda ~]# /tmp/test-statx -A /warthog/data\n\tstatx(/warthog/data) \u003d 0\n\tresults\u003d7ff\n\t  Size: 4096            Blocks: 8          IO Block: 1048576  directory\n\tDevice: 00:26           Inode: 1703937     Links: 125\n\tAccess: (3777/drwxrwxrwx)  Uid:     0   Gid:  4041\n\tAccess: 2016-11-24 09:02:12.219699527+0000\n\tModify: 2016-11-17 10:44:36.225653653+0000\n\tChange: 2016-11-17 10:44:36.225653653+0000\n\tAttributes: 0000000000001000 (-------- -------- -------- -------- -------- -------- ---m---- --------)\n\nSecondly, the result of automounting on that directory.\n\n\t[root@andromeda ~]# /tmp/test-statx /warthog/data\n\tstatx(/warthog/data) \u003d 0\n\tresults\u003d7ff\n\t  Size: 4096            Blocks: 8          IO Block: 1048576  directory\n\tDevice: 00:27           Inode: 2           Links: 125\n\tAccess: (3777/drwxrwxrwx)  Uid:     0   Gid:  4041\n\tAccess: 2016-11-24 09:02:12.219699527+0000\n\tModify: 2016-11-17 10:44:36.225653653+0000\n\tChange: 2016-11-17 10:44:36.225653653+0000\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ace63cd7af8c0d26783f272a5fa9e39be647df3a",
      "old_mode": 33188,
      "old_path": "Documentation/filesystems/Locking",
      "new_id": "fdcfdd79682a00102b1c18c8b56e19e00a418d26",
      "new_mode": 33188,
      "new_path": "Documentation/filesystems/Locking"
    },
    {
      "type": "modify",
      "old_id": "b968084eeac14bbc4f8f51dbf7fc3484f61da496",
      "old_mode": 33188,
      "old_path": "Documentation/filesystems/vfs.txt",
      "new_id": "569211703721fe81e0cbbbd1cb979a10c276cf9e",
      "new_mode": 33188,
      "new_path": "Documentation/filesystems/vfs.txt"
    },
    {
      "type": "modify",
      "old_id": "2b361854254414662c17b531e2cacb8d5bb696b9",
      "old_mode": 33188,
      "old_path": "arch/x86/entry/syscalls/syscall_32.tbl",
      "new_id": "9ba050fe47f30e6eff1d119ed33fa1505b2a661d",
      "new_mode": 33188,
      "new_path": "arch/x86/entry/syscalls/syscall_32.tbl"
    },
    {
      "type": "modify",
      "old_id": "e93ef0b38db8e16a38f83e2e3f08dfb8d5fff4a0",
      "old_mode": 33188,
      "old_path": "arch/x86/entry/syscalls/syscall_64.tbl",
      "new_id": "5aef183e2f85c5f6c45e44d4e9a68c9ea62c0d74",
      "new_mode": 33188,
      "new_path": "arch/x86/entry/syscalls/syscall_64.tbl"
    },
    {
      "type": "modify",
      "old_id": "44a74cf1372c6e710d2b102ac51dd34ee44ffd0e",
      "old_mode": 33188,
      "old_path": "drivers/base/devtmpfs.c",
      "new_id": "d2fb9c8ed2057b16954dd8871b1e8a033625da10",
      "new_mode": 33188,
      "new_path": "drivers/base/devtmpfs.c"
    },
    {
      "type": "modify",
      "old_id": "f347285c67ec1151d0d725842eed84ba2231f760",
      "old_mode": 33188,
      "old_path": "drivers/block/loop.c",
      "new_id": "6886cc520a7c4e64fe1d261d1cf7075ec66789f6",
      "new_mode": 33188,
      "new_path": "drivers/block/loop.c"
    },
    {
      "type": "modify",
      "old_id": "85d54f37e28ff25d88fe055838593413170659ad",
      "old_mode": 33188,
      "old_path": "drivers/mtd/ubi/build.c",
      "new_id": "77513195f50e391b77ab209684adb67880153057",
      "new_mode": 33188,
      "new_path": "drivers/mtd/ubi/build.c"
    },
    {
      "type": "modify",
      "old_id": "88b1897aeb40f77771cef9ae3e9773b812a37877",
      "old_mode": 33188,
      "old_path": "drivers/mtd/ubi/kapi.c",
      "new_id": "d4b2e874449869629437828e6e8f8b01cce1ee74",
      "new_mode": 33188,
      "new_path": "drivers/mtd/ubi/kapi.c"
    },
    {
      "type": "modify",
      "old_id": "f634c11216e641311191333064bd2c35fed33643",
      "old_mode": 33188,
      "old_path": "drivers/staging/lustre/lustre/llite/file.c",
      "new_id": "aeea64a7f09617e5185ef1ab9416750ef4f9eac9",
      "new_mode": 33188,
      "new_path": "drivers/staging/lustre/lustre/llite/file.c"
    },
    {
      "type": "modify",
      "old_id": "065a9a7e120aed967afb666ae496eb13462598cd",
      "old_mode": 33188,
      "old_path": "drivers/staging/lustre/lustre/llite/llite_internal.h",
      "new_id": "9cfd035320803ee3fb6b827cb72b7e11f8023de2",
      "new_mode": 33188,
      "new_path": "drivers/staging/lustre/lustre/llite/llite_internal.h"
    },
    {
      "type": "modify",
      "old_id": "f4f4450119e42f74c1bc3269cc07ee798f9bc49b",
      "old_mode": 33188,
      "old_path": "fs/9p/vfs_inode.c",
      "new_id": "f1d96233670c7bf0f89d3c3dcaa7192e3119dbd5",
      "new_mode": 33188,
      "new_path": "fs/9p/vfs_inode.c"
    },
    {
      "type": "modify",
      "old_id": "5999bd050678cd333ffa0f7e6e88f6a575e5a885",
      "old_mode": 33188,
      "old_path": "fs/9p/vfs_inode_dotl.c",
      "new_id": "570e63ee5b713d0fb4550b9e77e4bd630a7efc84",
      "new_mode": 33188,
      "new_path": "fs/9p/vfs_inode_dotl.c"
    },
    {
      "type": "modify",
      "old_id": "86cc7264c21cda727a3bb71e73af9a7ddc35eec5",
      "old_mode": 33188,
      "old_path": "fs/afs/inode.c",
      "new_id": "1e4897a048d2ee0dee49b613f22336b7118ff9f8",
      "new_mode": 33188,
      "new_path": "fs/afs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "535a38d2c1d06f752cd6beae54766c1a9d899527",
      "old_mode": 33188,
      "old_path": "fs/afs/internal.h",
      "new_id": "217fcae5f23ccb72899b3cc8c1a352c358e51a17",
      "new_mode": 33188,
      "new_path": "fs/afs/internal.h"
    },
    {
      "type": "modify",
      "old_id": "5f685c8192981864c3e273acce95dacc40494367",
      "old_mode": 33188,
      "old_path": "fs/bad_inode.c",
      "new_id": "bb53728c7a31b0abee8f5080ae25e162ff74f203",
      "new_mode": 33188,
      "new_path": "fs/bad_inode.c"
    },
    {
      "type": "modify",
      "old_id": "1e861a063721e7c173a770cd68d0fea484cb75b3",
      "old_mode": 33188,
      "old_path": "fs/btrfs/inode.c",
      "new_id": "6e4af3f3c177b9889c68dcf7181f469a53bc42db",
      "new_mode": 33188,
      "new_path": "fs/btrfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "5e659d054b40ae6faac23af26c5321c5af6ff69b",
      "old_mode": 33188,
      "old_path": "fs/ceph/inode.c",
      "new_id": "f022bc972133970fc1ed6b160cd5b1f44ffaff74",
      "new_mode": 33188,
      "new_path": "fs/ceph/inode.c"
    },
    {
      "type": "modify",
      "old_id": "3373b61faefd0fac7d240438e5bb2dca7e3433db",
      "old_mode": 33188,
      "old_path": "fs/ceph/super.h",
      "new_id": "e47d8e93ef1c4daae662168e38cdb7b94e241398",
      "new_mode": 33188,
      "new_path": "fs/ceph/super.h"
    },
    {
      "type": "modify",
      "old_id": "c9c00a862036f680af9e950c6ec13a2ca07ae854",
      "old_mode": 33188,
      "old_path": "fs/cifs/cifsfs.h",
      "new_id": "da717fee30260be533f0992d5ed93114907f1c31",
      "new_mode": 33188,
      "new_path": "fs/cifs/cifsfs.h"
    },
    {
      "type": "modify",
      "old_id": "7ab5be7944aa8436f35e1e6d1ac6f277a07e14af",
      "old_mode": 33188,
      "old_path": "fs/cifs/inode.c",
      "new_id": "1363fff460b937fee2f4ec840988e998dcd7926f",
      "new_mode": 33188,
      "new_path": "fs/cifs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "5104d84c4f6425c5ea950a889040a5ca54527c29",
      "old_mode": 33188,
      "old_path": "fs/coda/coda_linux.h",
      "new_id": "d3c361883c2844e227c8a4f472c73829e39b1795",
      "new_mode": 33188,
      "new_path": "fs/coda/coda_linux.h"
    },
    {
      "type": "modify",
      "old_id": "71dbe7e287cef964955edad9be066966f129db29",
      "old_mode": 33188,
      "old_path": "fs/coda/inode.c",
      "new_id": "2dea594da19968288586138a35c22a81151914e7",
      "new_mode": 33188,
      "new_path": "fs/coda/inode.c"
    },
    {
      "type": "modify",
      "old_id": "e7413f82d27bf392be10998aa9c8b2ef598a354e",
      "old_mode": 33188,
      "old_path": "fs/ecryptfs/inode.c",
      "new_id": "efc2db42d17513d089f16cfaaab38c81a4ed216c",
      "new_mode": 33188,
      "new_path": "fs/ecryptfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "a4b531be9168d576e7e5f875bf5af6dc9a01020c",
      "old_mode": 33188,
      "old_path": "fs/exportfs/expfs.c",
      "new_id": "f2d24bb8d745e37c33950b5de3e8676a402c0963",
      "new_mode": 33188,
      "new_path": "fs/exportfs/expfs.c"
    },
    {
      "type": "modify",
      "old_id": "2163c1e69f2a66151103f96b7d73268702784dfc",
      "old_mode": 33188,
      "old_path": "fs/ext4/ext4.h",
      "new_id": "6a1ae44572d78df267adcfd39b457bf8f71ec33d",
      "new_mode": 33188,
      "new_path": "fs/ext4/ext4.h"
    },
    {
      "type": "modify",
      "old_id": "88d57af1b516c5bbfd7b2f1bc471a9d76382c3bc",
      "old_mode": 33188,
      "old_path": "fs/ext4/inode.c",
      "new_id": "f26caabc1b736d185488c7ab499b4f67063d001b",
      "new_mode": 33188,
      "new_path": "fs/ext4/inode.c"
    },
    {
      "type": "modify",
      "old_id": "2da8c3aa0ce5db222ed1c60aa6d394140d564aae",
      "old_mode": 33188,
      "old_path": "fs/f2fs/f2fs.h",
      "new_id": "db1f5f6a0d04058e03bb9f3999695b70812f90ef",
      "new_mode": 33188,
      "new_path": "fs/f2fs/f2fs.h"
    },
    {
      "type": "modify",
      "old_id": "49f10dce817dc9e4806b6a417b96391a1c794fd1",
      "old_mode": 33188,
      "old_path": "fs/f2fs/file.c",
      "new_id": "c902230af3f56d4f0c69a30efbde210349ad4e57",
      "new_mode": 33188,
      "new_path": "fs/f2fs/file.c"
    },
    {
      "type": "modify",
      "old_id": "e6b764a17a9c844bacb724c3f9b601df6c8bcdd0",
      "old_mode": 33188,
      "old_path": "fs/fat/fat.h",
      "new_id": "051dac1ce3be1713bf8e1e8df983ce9a35a1e34c",
      "new_mode": 33188,
      "new_path": "fs/fat/fat.h"
    },
    {
      "type": "modify",
      "old_id": "3d04b124bce09970aea1de9ad1d30a2622593513",
      "old_mode": 33188,
      "old_path": "fs/fat/file.c",
      "new_id": "4724cc9ad65021c8fe80a3cc66783e8d01801907",
      "new_mode": 33188,
      "new_path": "fs/fat/file.c"
    },
    {
      "type": "modify",
      "old_id": "811fd8929a18c1e330316202fd40ac58857ec3c7",
      "old_mode": 33188,
      "old_path": "fs/fuse/dir.c",
      "new_id": "beb3d64f16e2919a486aa0a1a7b4a936abef5eb2",
      "new_mode": 33188,
      "new_path": "fs/fuse/dir.c"
    },
    {
      "type": "modify",
      "old_id": "eb7724b8578a0409889a20953005c98e1544b559",
      "old_mode": 33188,
      "old_path": "fs/gfs2/inode.c",
      "new_id": "288c15f385bde519525c61678e9d578dd074f95c",
      "new_mode": 33188,
      "new_path": "fs/gfs2/inode.c"
    },
    {
      "type": "modify",
      "old_id": "ac9e108ce1eacb7020f4af1c4ee8ec949c84ff51",
      "old_mode": 33188,
      "old_path": "fs/kernfs/inode.c",
      "new_id": "fb4b4a79a0d6b4bb329f43ca4ace01ed35cbe74c",
      "new_mode": 33188,
      "new_path": "fs/kernfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "bfd551bbf2312c10e71099dc4a49d076d36d2e28",
      "old_mode": 33188,
      "old_path": "fs/kernfs/kernfs-internal.h",
      "new_id": "9865d19627ab5298819df2fe978fbc9ea6ad76f4",
      "new_mode": 33188,
      "new_path": "fs/kernfs/kernfs-internal.h"
    },
    {
      "type": "modify",
      "old_id": "28d6f35feed62855e26ede0073b3bcaf6b6564a9",
      "old_mode": 33188,
      "old_path": "fs/libfs.c",
      "new_id": "1dfaf8f606c097b2b67291b61955f9423e4d666d",
      "new_mode": 33188,
      "new_path": "fs/libfs.c"
    },
    {
      "type": "modify",
      "old_id": "e7d9bf86d97595d1d1fe29bcca7ae5bdeefa0b6a",
      "old_mode": 33188,
      "old_path": "fs/minix/inode.c",
      "new_id": "6ac76b0434e93727d99ad583688adf6a27d1f6ec",
      "new_mode": 33188,
      "new_path": "fs/minix/inode.c"
    },
    {
      "type": "modify",
      "old_id": "01ad81dcacc5a45e1f15bbce6cc61508380e4c27",
      "old_mode": 33188,
      "old_path": "fs/minix/minix.h",
      "new_id": "663d66138d06dfc17430a25496e1f2673e5deda0",
      "new_mode": 33188,
      "new_path": "fs/minix/minix.h"
    },
    {
      "type": "modify",
      "old_id": "5ca4d96b19421881c6b3b0fba493e605d6d70eeb",
      "old_mode": 33188,
      "old_path": "fs/nfs/inode.c",
      "new_id": "b5425315adccab5504e08abebea108e919e7f9f0",
      "new_mode": 33188,
      "new_path": "fs/nfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "5551e8ef67fd0b64faa92688a8fa38b05bbb0c78",
      "old_mode": 33188,
      "old_path": "fs/nfs/namespace.c",
      "new_id": "590494047461cfa62b61ccbcbdc984db60b5e891",
      "new_mode": 33188,
      "new_path": "fs/nfs/namespace.c"
    },
    {
      "type": "modify",
      "old_id": "8fae53ce21d16c8406ff01425d924eb044edee34",
      "old_mode": 33188,
      "old_path": "fs/nfsd/nfs4xdr.c",
      "new_id": "f96f5e1c804fd2a602163739e4cbab78c102d958",
      "new_mode": 33188,
      "new_path": "fs/nfsd/nfs4xdr.c"
    },
    {
      "type": "modify",
      "old_id": "0bf9e7bf5800af3855e3d93aaec194dcbea93ba6",
      "old_mode": 33188,
      "old_path": "fs/nfsd/vfs.h",
      "new_id": "59853adca22913142f4fcff4e233d4bfce96cb97",
      "new_mode": 33188,
      "new_path": "fs/nfsd/vfs.h"
    },
    {
      "type": "modify",
      "old_id": "c4889655d32b5360228bb0c3deb7e729de855163",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/file.c",
      "new_id": "15afd0b282126e9117d1b4df697e0188acc896d1",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/file.c"
    },
    {
      "type": "modify",
      "old_id": "897fd9a2e51dbe91f20cd4795950228c72890e91",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/file.h",
      "new_id": "1fdc9839cd931d911a586c85cf4093d132b06637",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/file.h"
    },
    {
      "type": "modify",
      "old_id": "551bc74ed2b822fe0f211d90527397da2d86bb38",
      "old_mode": 33188,
      "old_path": "fs/orangefs/inode.c",
      "new_id": "881c94f14d2174a1ad185521113926d7ee6126d3",
      "new_mode": 33188,
      "new_path": "fs/orangefs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "3bf803d732c5b3702f735c5776cae6d249b85364",
      "old_mode": 33188,
      "old_path": "fs/orangefs/orangefs-kernel.h",
      "new_id": "49d54fb2fab28a05a15ed41f8c64437c9f70fb29",
      "new_mode": 33188,
      "new_path": "fs/orangefs/orangefs-kernel.h"
    },
    {
      "type": "modify",
      "old_id": "f57043dace628767fddc0cb4b9f27692a6b672c3",
      "old_mode": 33188,
      "old_path": "fs/overlayfs/copy_up.c",
      "new_id": "a6f9ca621e0b5a0b1f6485c28eac2ddd4b593733",
      "new_mode": 33188,
      "new_path": "fs/overlayfs/copy_up.c"
    },
    {
      "type": "modify",
      "old_id": "16e06dd894575900f0043f417c5bf6227b690cf9",
      "old_mode": 33188,
      "old_path": "fs/overlayfs/dir.c",
      "new_id": "6515796460dfe170fb33b109feb09c9ac0b17519",
      "new_mode": 33188,
      "new_path": "fs/overlayfs/dir.c"
    },
    {
      "type": "modify",
      "old_id": "08643ac44a0278ed04be96d6df267e3b13821692",
      "old_mode": 33188,
      "old_path": "fs/overlayfs/inode.c",
      "new_id": "d4bb54f7b6b42abaa417f30aeca3f6c7e069ec00",
      "new_mode": 33188,
      "new_path": "fs/overlayfs/inode.c"
    },
    {
      "type": "modify",
      "old_id": "87c9a9aacda3601e2686e239243f447728137943",
      "old_mode": 33188,
      "old_path": "fs/proc/base.c",
      "new_id": "b5a5d3cab35828572c2f949f784fe9496af959e5",
      "new_mode": 33188,
      "new_path": "fs/proc/base.c"
    },
    {
      "type": "modify",
      "old_id": "f6a01f09f79d51457dae4226c9882bf60076c588",
      "old_mode": 33188,
      "old_path": "fs/proc/generic.c",
      "new_id": "7491bd620643e958eb9718b3e34125ad9bb84c20",
      "new_mode": 33188,
      "new_path": "fs/proc/generic.c"
    },
    {
      "type": "modify",
      "old_id": "2de5194ba378996db775404ef24379039f0c7ba4",
      "old_mode": 33188,
      "old_path": "fs/proc/internal.h",
      "new_id": "e858c125be4ab49f767267d4a5f42548470f13b5",
      "new_mode": 33188,
      "new_path": "fs/proc/internal.h"
    },
    {
      "type": "modify",
      "old_id": "ffd72a6c6e0446972c6ae86cb1722482c40b2504",
      "old_mode": 33188,
      "old_path": "fs/proc/proc_net.c",
      "new_id": "9db1df2537fc9cd66a26c2cdef2cc02e8a4664c9",
      "new_mode": 33188,
      "new_path": "fs/proc/proc_net.c"
    },
    {
      "type": "modify",
      "old_id": "d4e37acd48217dcb1090a1ee68bb4ec4cb7226e5",
      "old_mode": 33188,
      "old_path": "fs/proc/proc_sysctl.c",
      "new_id": "2ea07a181dfa703559b1621d56f60cbaff4e83b7",
      "new_mode": 33188,
      "new_path": "fs/proc/proc_sysctl.c"
    },
    {
      "type": "modify",
      "old_id": "1988440b20496386303daec0190546261131a3b0",
      "old_mode": 33188,
      "old_path": "fs/proc/root.c",
      "new_id": "42e940dc02d239e89f5c230bed0834d39a0f5e1e",
      "new_mode": 33188,
      "new_path": "fs/proc/root.c"
    },
    {
      "type": "modify",
      "old_id": "a268b7f27adf62fc8ffd5fddd0d7012d35bc5295",
      "old_mode": 33188,
      "old_path": "fs/stat.c",
      "new_id": "9f1347cce6e145bc1ed92758ce2bf8e7384f33f1",
      "new_mode": 33188,
      "new_path": "fs/stat.c"
    },
    {
      "type": "modify",
      "old_id": "08d3e630b49c8691fe24e9ce8d7294c370a7d067",
      "old_mode": 33188,
      "old_path": "fs/sysv/itree.c",
      "new_id": "83809f5b5eca25427a5d52abde54ba2a76121ede",
      "new_mode": 33188,
      "new_path": "fs/sysv/itree.c"
    },
    {
      "type": "modify",
      "old_id": "6c212288adcb095391e9557f246c927daa2d0663",
      "old_mode": 33188,
      "old_path": "fs/sysv/sysv.h",
      "new_id": "1e7e27c729affb80b6d4eee02c295df7e59ebfc5",
      "new_mode": 33188,
      "new_path": "fs/sysv/sysv.h"
    },
    {
      "type": "modify",
      "old_id": "528369f3e472087fe39e0b9e716cb4a70016cee7",
      "old_mode": 33188,
      "old_path": "fs/ubifs/dir.c",
      "new_id": "30825d882aa94a4c2486d47581f33d1dfca1a409",
      "new_mode": 33188,
      "new_path": "fs/ubifs/dir.c"
    },
    {
      "type": "modify",
      "old_id": "ca72382ce6cc9e58e955373649bec3b994f9d19f",
      "old_mode": 33188,
      "old_path": "fs/ubifs/ubifs.h",
      "new_id": "aec34764597d8dd2e5684934633eb1aa12bc78d9",
      "new_mode": 33188,
      "new_path": "fs/ubifs/ubifs.h"
    },
    {
      "type": "modify",
      "old_id": "22c16155f1b42a1380f85935fa43706cd60e2b40",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_iops.c",
      "new_id": "229cc6a6d8ef03dc599b5195c5052796e2e19ba7",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_iops.c"
    },
    {
      "type": "modify",
      "old_id": "2ba074328894cea30d6273a574417d789fae271d",
      "old_mode": 33188,
      "old_path": "include/linux/fs.h",
      "new_id": "57cd65d7f91d6c2c82a5181ee7b5616e2f878ac9",
      "new_mode": 33188,
      "new_path": "include/linux/fs.h"
    },
    {
      "type": "modify",
      "old_id": "f1da8c8dd473869897c3363f9e299bd28086c8d5",
      "old_mode": 33188,
      "old_path": "include/linux/nfs_fs.h",
      "new_id": "287f341610864f745e44fb4cbfb4ad44a26f4ea5",
      "new_mode": 33188,
      "new_path": "include/linux/nfs_fs.h"
    },
    {
      "type": "modify",
      "old_id": "075cb0c7eb2ade30e936d8a5e961732ea1faf759",
      "old_mode": 33188,
      "old_path": "include/linux/stat.h",
      "new_id": "c76e524fb34b6af362c82103662454750826ac9e",
      "new_mode": 33188,
      "new_path": "include/linux/stat.h"
    },
    {
      "type": "modify",
      "old_id": "91a740f6b884236e3ed5771f01397f4647f3cd9d",
      "old_mode": 33188,
      "old_path": "include/linux/syscalls.h",
      "new_id": "980c3c9b06f88176347a73bd6335f270779738d5",
      "new_mode": 33188,
      "new_path": "include/linux/syscalls.h"
    },
    {
      "type": "modify",
      "old_id": "beed138bd359382273cd9f9c114f44b7bd559841",
      "old_mode": 33188,
      "old_path": "include/uapi/linux/fcntl.h",
      "new_id": "813afd6eee713e68fa4b88e6aabf6aecce1993e1",
      "new_mode": 33188,
      "new_path": "include/uapi/linux/fcntl.h"
    },
    {
      "type": "modify",
      "old_id": "7fec7e36d9217dffa3e1d6cb83f6c4d54839aded",
      "old_mode": 33188,
      "old_path": "include/uapi/linux/stat.h",
      "new_id": "51a6b86e370043f7b37f128c4896f5f588710643",
      "new_mode": 33188,
      "new_path": "include/uapi/linux/stat.h"
    },
    {
      "type": "modify",
      "old_id": "bb53285a1d99666676e85697330f1a052f7c3cc0",
      "old_mode": 33188,
      "old_path": "mm/shmem.c",
      "new_id": "03c523041eaaf186769a98f3e134a775a074f627",
      "new_mode": 33188,
      "new_path": "mm/shmem.c"
    },
    {
      "type": "modify",
      "old_id": "b124f62ed6cb30b0e89a2d698dc6a346b65e6b62",
      "old_mode": 33188,
      "old_path": "samples/Kconfig",
      "new_id": "e1fc9a6a96fa3363f39fd11132a3cd0f83ebf49c",
      "new_mode": 33188,
      "new_path": "samples/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "86a137e451d978bec15778e13766648b6cfb3f18",
      "old_mode": 33188,
      "old_path": "samples/Makefile",
      "new_id": "db54e766ddb1a3b87eb9ec00d63a4450e2668576",
      "new_mode": 33188,
      "new_path": "samples/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1f80a3d8cf45ca913e97ba5094443af07a12b6ae",
      "new_mode": 33188,
      "new_path": "samples/statx/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8571d766331dd1a513a3f772f3a7ce050909598b",
      "new_mode": 33188,
      "new_path": "samples/statx/test-statx.c"
    }
  ]
}
