)]}'
{"id":"LineageOS%2Fandroid_kernel_xiaomi_earth~474094","triplet_id":"LineageOS%2Fandroid_kernel_xiaomi_earth~lineage-23.2~I2f7abcf9210a1e79855837d1b7c580cc7f7a38e2","project":"LineageOS/android_kernel_xiaomi_earth","branch":"lineage-23.2","hashtags":[],"change_id":"I2f7abcf9210a1e79855837d1b7c580cc7f7a38e2","subject":"UPSTREAM: open: add close_range()","status":"MERGED","created":"2026-02-11 07:06:15.000000000","updated":"2026-02-15 11:26:20.000000000","submitted":"2026-02-15 11:26:20.000000000","submitter":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"474110","meta_rev_id":"a4574b77525c70421f22668b8f766c308e586691","_number":474094,"virtual_id_number":474094,"owner":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"actions":{},"labels":{"Verified":{"approved":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"all":[{"value":1,"date":"2026-02-15 11:25:26.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}],"values":{"-1":"Fails"," 0":"No score","+1":"Verified"},"description":"","default_value":0},"Code-Review":{"approved":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"all":[{"value":2,"date":"2026-02-15 11:25:26.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}],"values":{"-2":"Do not submit","-1":"I would prefer that you didn\u0027t submit this"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0},"CI":{"all":[{"value":0,"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}],"values":{"-1":"Fail"," 0":"No score","+1":"Pass"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}]},"pending_reviewers":{},"reviewer_updates":[],"messages":[{"id":"69cca3c64e7b4d8d0fbe99424efe529e95c95dbf","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2026-02-11 07:06:15.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"6dcc9f4b438416ea8264ab01d20f800d10b97108","author":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2026-02-15 11:25:26.000000000","message":"Patch Set 1: Code-Review+2 Verified+1","accounts_in_message":[],"_revision_number":1},{"id":"a4574b77525c70421f22668b8f766c308e586691","tag":"autogenerated:gerrit:merged","author":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2026-02-15 11:26:20.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"4d4f04e49cca2408d121c7841c445c56d35b80fe","revisions":{"4d4f04e49cca2408d121c7841c445c56d35b80fe":{"kind":"REWORK","_number":1,"created":"2026-02-11 07:06:15.000000000","uploader":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/94/474094/1","fetch":{"anonymous http":{"url":"https://github.com/LineageOS/android_kernel_xiaomi_earth","ref":"refs/changes/94/474094/1","commands":{"Branch":"git fetch https://github.com/LineageOS/android_kernel_xiaomi_earth refs/changes/94/474094/1 \u0026\u0026 git checkout -b change-474094 FETCH_HEAD","Checkout":"git fetch https://github.com/LineageOS/android_kernel_xiaomi_earth refs/changes/94/474094/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://github.com/LineageOS/android_kernel_xiaomi_earth refs/changes/94/474094/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://github.com/LineageOS/android_kernel_xiaomi_earth refs/changes/94/474094/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://github.com/LineageOS/android_kernel_xiaomi_earth refs/changes/94/474094/1","Reset To":"git fetch https://github.com/LineageOS/android_kernel_xiaomi_earth refs/changes/94/474094/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"5d12793dd85c81fc2a26be2fe527443e2cadf76c","subject":"drivers: mediatek: eccci: Fix atomic_set usage","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/LineageOS/android_kernel_xiaomi_earth/commit/5d12793dd85c81fc2a26be2fe527443e2cadf76c"}]}],"author":{"name":"Christian Brauner","email":"christian.brauner@ubuntu.com","date":"2019-05-24 09:30:34.000000000","tz":120},"committer":{"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","date":"2026-02-10 17:11:37.000000000","tz":60},"subject":"UPSTREAM: open: add close_range()","message":"UPSTREAM: open: add close_range()\n\nThis adds the close_range() syscall. It allows to efficiently close a range\nof file descriptors up to all file descriptors of a calling task.\n\nI was contacted by FreeBSD as they wanted to have the same close_range()\nsyscall as we proposed here. We\u0027ve coordinated this and in the meantime, Kyle\nwas fast enough to merge close_range() into FreeBSD already in April:\nhttps://reviews.freebsd.org/D21627\nhttps://svnweb.freebsd.org/base?view\u003drevision\u0026revision\u003d359836\nand the current plan is to backport close_range() to FreeBSD 12.2 (cf. [2])\nonce its merged in Linux too. Python is in the process of switching to\nclose_range() on FreeBSD and they are waiting on us to merge this to switch on\nLinux as well: https://bugs.python.org/issue38061\n\nThe syscall came up in a recent discussion around the new mount API and\nmaking new file descriptor types cloexec by default. During this\ndiscussion, Al suggested the close_range() syscall (cf. [1]). Note, a\nsyscall in this manner has been requested by various people over time.\n\nFirst, it helps to close all file descriptors of an exec()ing task. This\ncan be done safely via (quoting Al\u0027s example from [1] verbatim):\n\n        /* that exec is sensitive */\n        unshare(CLONE_FILES);\n        /* we don\u0027t want anything past stderr here */\n        close_range(3, ~0U);\n        execve(....);\n\nThe code snippet above is one way of working around the problem that file\ndescriptors are not cloexec by default. This is aggravated by the fact that\nwe can\u0027t just switch them over without massively regressing userspace. For\na whole class of programs having an in-kernel method of closing all file\ndescriptors is very helpful (e.g. demons, service managers, programming\nlanguage standard libraries, container managers etc.).\n(Please note, unshare(CLONE_FILES) should only be needed if the calling\ntask is multi-threaded and shares the file descriptor table with another\nthread in which case two threads could race with one thread allocating file\ndescriptors and the other one closing them via close_range(). For the\ngeneral case close_range() before the execve() is sufficient.)\n\nSecond, it allows userspace to avoid implementing closing all file\ndescriptors by parsing through /proc/\u003cpid\u003e/fd/* and calling close() on each\nfile descriptor. From looking at various large(ish) userspace code bases\nthis or similar patterns are very common in:\n- service managers (cf. [4])\n- libcs (cf. [6])\n- container runtimes (cf. [5])\n- programming language runtimes/standard libraries\n  - Python (cf. [2])\n  - Rust (cf. [7], [8])\nAs Dmitry pointed out there\u0027s even a long-standing glibc bug about missing\nkernel support for this task (cf. [3]).\nIn addition, the syscall will also work for tasks that do not have procfs\nmounted and on kernels that do not have procfs support compiled in. In such\nsituations the only way to make sure that all file descriptors are closed\nis to call close() on each file descriptor up to UINT_MAX or RLIMIT_NOFILE,\nOPEN_MAX trickery (cf. comment [8] on Rust).\n\nThe performance is striking. For good measure, comparing the following\nsimple close_all_fds() userspace implementation that is essentially just\nglibc\u0027s version in [6]:\n\nstatic int close_all_fds(void)\n{\n        int dir_fd;\n        DIR *dir;\n        struct dirent *direntp;\n\n        dir \u003d opendir(\"/proc/self/fd\");\n        if (!dir)\n                return -1;\n        dir_fd \u003d dirfd(dir);\n        while ((direntp \u003d readdir(dir))) {\n                int fd;\n                if (strcmp(direntp-\u003ed_name, \".\") \u003d\u003d 0)\n                        continue;\n                if (strcmp(direntp-\u003ed_name, \"..\") \u003d\u003d 0)\n                        continue;\n                fd \u003d atoi(direntp-\u003ed_name);\n                if (fd \u003d\u003d dir_fd || fd \u003d\u003d 0 || fd \u003d\u003d 1 || fd \u003d\u003d 2)\n                        continue;\n                close(fd);\n        }\n        closedir(dir);\n        return 0;\n}\n\nto close_range() yields:\n1. closing 4 open files:\n   - close_all_fds(): ~280 us\n   - close_range():    ~24 us\n\n2. closing 1000 open files:\n   - close_all_fds(): ~5000 us\n   - close_range():   ~800 us\n\nclose_range() is designed to allow for some flexibility. Specifically, it\ndoes not simply always close all open file descriptors of a task. Instead,\ncallers can specify an upper bound.\nThis is e.g. useful for scenarios where specific file descriptors are\ncreated with well-known numbers that are supposed to be excluded from\ngetting closed.\nFor extra paranoia close_range() comes with a flags argument. This can e.g.\nbe used to implement extension. Once can imagine userspace wanting to stop\nat the first error instead of ignoring errors under certain circumstances.\nThere might be other valid ideas in the future. In any case, a flag\nargument doesn\u0027t hurt and keeps us on the safe side.\n\nFrom an implementation side this is kept rather dumb. It saw some input\nfrom David and Jann but all nonsense is obviously my own!\n- Errors to close file descriptors are currently ignored. (Could be changed\n  by setting a flag in the future if needed.)\n- __close_range() is a rather simplistic wrapper around __close_fd().\n  My reasoning behind this is based on the nature of how __close_fd() needs\n  to release an fd. But maybe I misunderstood specifics:\n  We take the files_lock and rcu-dereference the fdtable of the calling\n  task, we find the entry in the fdtable, get the file and need to release\n  files_lock before calling filp_close().\n  In the meantime the fdtable might have been altered so we can\u0027t just\n  retake the spinlock and keep the old rcu-reference of the fdtable\n  around. Instead we need to grab a fresh reference to the fdtable.\n  If my reasoning is correct then there\u0027s really no point in fancyfying\n  __close_range(): We just need to rcu-dereference the fdtable of the\n  calling task once to cap the max_fd value correctly and then go on\n  calling __close_fd() in a loop.\n\n/* References */\n[1]: https://lore.kernel.org/lkml/20190516165021.GD17978@ZenIV.linux.org.uk/\n[2]: https://github.com/python/cpython/blob/9e4f2f3a6b8ee995c365e86d976937c141d867f8/Modules/_posixsubprocess.c#L220\n[3]: https://sourceware.org/bugzilla/show_bug.cgi?id\u003d10353#c7\n[4]: https://github.com/systemd/systemd/blob/5238e9575906297608ff802a27e2ff9effa3b338/src/basic/fd-util.c#L217\n[5]: https://github.com/lxc/lxc/blob/ddf4b77e11a4d08f09b7b9cd13e593f8c047edc5/src/lxc/start.c#L236\n[6]: https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dsysdeps/unix/sysv/linux/grantpt.c;h\u003d2030e07fa6e652aac32c775b8c6e005844c3c4eb;hb\u003dHEAD#l17\n     Note that this is an internal implementation that is not exported.\n     Currently, libc seems to not provide an exported version of this\n     because of missing kernel support to do this.\n     Note, in a recent patch series Florian made grantpt() a nop thereby\n     removing the code referenced here.\n[7]: https://github.com/rust-lang/rust/issues/12148\n[8]: https://github.com/rust-lang/rust/blob/5f47c0613ed4eb46fca3633c1297364c09e5e451/src/libstd/sys/unix/process2.rs#L303-L308\n     Rust\u0027s solution is slightly different but is equally unperformant.\n     Rust calls getdtablesize() which is a glibc library function that\n     simply returns the current RLIMIT_NOFILE or OPEN_MAX values. Rust then\n     goes on to call close() on each fd. That\u0027s obviously overkill for most\n     tasks. Rarely, tasks - especially non-demons - hit RLIMIT_NOFILE or\n     OPEN_MAX.\n     Let\u0027s be nice and assume an unprivileged user with RLIMIT_NOFILE set\n     to 1024. Even in this case, there\u0027s a very high chance that in the\n     common case Rust is calling the close() syscall 1021 times pointlessly\n     if the task just has 0, 1, and 2 open.\n\nSuggested-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nChange-Id: I2f7abcf9210a1e79855837d1b7c580cc7f7a38e2\nSigned-off-by: Christian Brauner \u003cchristian.brauner@ubuntu.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Kyle Evans \u003cself@kyle-evans.net\u003e\nCc: Jann Horn \u003cjannh@google.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Dmitry V. Levin \u003cldv@altlinux.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Florian Weimer \u003cfweimer@redhat.com\u003e\nCc: linux-api@vger.kernel.org\n","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/LineageOS/android_kernel_xiaomi_earth/commit/4d4f04e49cca2408d121c7841c445c56d35b80fe"}],"resolve_conflicts_web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/LineageOS/android_kernel_xiaomi_earth/commit/4d4f04e49cca2408d121c7841c445c56d35b80fe"}]},"branch":"refs/heads/lineage-23.2"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"OK","applied_by":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}},{"label":"Code-Review","status":"OK","applied_by":{"_account_id":26349,"name":"Matsvei Niaverau","email":"matvej2002@gmail.com","username":"surblazer","avatars":[{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ed6759ea3299fee01e32d1e8ccf1f75a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}},{"label":"CI","status":"MAY"}]}],"submit_requirements":[{"name":"CI","description":"Prevent submit if CI failed.","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"-label:CI\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":[],"failing_atoms":["label:CI\u003dMIN"],"atom_explanations":{"label:CI\u003dMIN":""}}},{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dMAX -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX","-label:Verified\u003dMIN"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX","-label:Code-Review\u003dMIN"],"failing_atoms":[],"atom_explanations":{}}}]}
