Skip to content
Gerrit Dashboard
updated 2026-11-04 14:49:46 UTC

James Simmons jsimmons · review.whamcloud.com

Needs your action

17 new · 78 longstanding
70336 master J –B ✓T ✗1R 0/2
LU-18687 ptlrpc: handle CONFIG_LUSTRE_FS_SERVER tristate
mine enforced failed: review-ldiskfs-dne
upstream pw_shepherd 3 unresolved M +42 −43
5h
enforced failed: review-ldiskfs-dne
3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity. session
build #135255 SUCCESS · tests all Maloo sessions
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-11-04 08:33 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) This isn't a bug, but the body is one line and only repeats the subject. It would help to explain why the change is needed: in-tree
Gerrit AI review for Lustre PS1 · 2026-11-04 08:33
(style) This isn't a bug, but the body is one line and only repeats the subject. It would help to explain why the change is needed: in-tree Kbuild with =m only defines CONFIG_LUSTRE_FS_SERVER_MODULE, so a plain #ifdef drops the server code. It should also say that out-of-tree builds are unchanged, since config.h defines both macros, and that lustre/ptlrpc/wiretest.c is a generated file being edited by hand.
reply PS1 2026-11-04 08:33 Gerrit AI review for Lustre niobuf.c:295 — (defect) With CONFIG_LUSTRE_FS_SERVER=m, this block is now compiled, but ptlrpc_server_bulk_active() is a static inline that is only defined
Gerrit AI review for Lustre PS1 · 2026-11-04 08:33
(defect) With CONFIG_LUSTRE_FS_SERVER=m, this block is now compiled, but ptlrpc_server_bulk_active() is a static inline that is only defined inside `#ifdef CONFIG_LUSTRE_FS_SERVER` in lustre/include/lustre_net.h. When only CONFIG_LUSTRE_FS_SERVER_MODULE is defined, the call is an implicit declaration, and the build fails because of -Werror-implicit-function-declaration.

The same header mismatch also drops the prototypes for other functions this patch now builds: server_bulk_callback() and ptlrpc_prep_bulk_exp() (lustre_net.h), sptlrpc_svc_{prep,wrap,unwrap}_bulk() and sptlrpc_has_gssiam_rules() (lustre_sec.h), and lustre_swab_orphan_ent*() (lustre_swab.h). That gives -Wmissing-prototypes warnings. Should lustre_net.h, lustre_sec.h, lustre_swab.h and the other headers be converted to IS_ENABLED() first?
reply PS1 2026-11-04 08:33 Gerrit AI review for Lustre wiretest.c:272 — (minor) lustre/ptlrpc/wiretest.c is generated by `make newwiretest` from the same wirecheck output as lustre/utils/wiretest.c. After the pre
Gerrit AI review for Lustre PS1 · 2026-11-04 08:33
(minor) lustre/ptlrpc/wiretest.c is generated by `make newwiretest` from the same wirecheck output as lustre/utils/wiretest.c. After the previous patch in the series, CHECK_COND_START() emits `#ifdef HAVE_SERVER_SUPPORT`. So the next regeneration will replace every IS_ENABLED() guard here with `#ifdef HAVE_SERVER_SUPPORT`, which is not defined in an in-kernel Kbuild build. It will also restore the blank line removed after the lustre_mdt_attrs guard. Could wirecheck emit a guard that is correct for both copies, so the kernel copy can stay generated instead of hand-edited?
tags: pw_shepherd
owner James Simmons · uploader James Simmons · PS1 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 ptlrpc: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert ptlrpc to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ie12208b585377aec3885c89a67e4197565e86ed7
70328 master J –B ✓T ✓R 0/2
LU-18687 fid: handle CONFIG_LUSTRE_FS_SERVER tristate
mine 2 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 2 unresolved S +8 −6
5h
build #135242 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-11-04 09:13 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body doesn't mention the new `#include <lu_target.h>` in fid_internal.h or why fid needs it. It may also help to say that the co
Gerrit AI review for Lustre PS2 · 2026-11-04 09:13
(style) The body doesn't mention the new `#include <lu_target.h>` in fid_internal.h or why fid needs it. It may also help to say that the configure build defines both CONFIG_LUSTRE_FS_SERVER and CONFIG_LUSTRE_FS_SERVER_MODULE, so this changes nothing there and only matters for an in-tree `CONFIG_LUSTRE_FS_SERVER=m` build.
reply PS2 2026-11-04 09:13 Gerrit AI review for Lustre fid_internal.h:20 — (minor) Nothing declared in this block uses lu_target.h. The users are elsewhere: fid_handler.c needs `struct tgt_session_info` and `struct
Gerrit AI review for Lustre PS2 · 2026-11-04 09:13
(minor) Nothing declared in this block uses lu_target.h. The users are elsewhere: fid_handler.c needs `struct tgt_session_info` and `struct tgt_handler`, and lproc_fid.c and fid_lib.c need the dt_* types, which lu_target.h pulls in through lustre_update.h and lustre_lfsck.h.

Those files compile today because obd_class.h includes lu_target.h, obd_target.h and dt_object.h under `#ifdef CONFIG_LUSTRE_FS_SERVER`. That guard is false for an in-tree `=m` build, and this include works around it.

This isn't a bug, but would it be cleaner to convert the guard in obd_class.h (lustre_disk.h and lustre_fid.h also still use `#ifdef`), or to include dt_object.h and lu_target.h in the .c files that need them? Otherwise the workaround will be left redundant in this shared header once obd_class.h is converted.
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 fid: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert fid to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ia362acb03ed3f8b0cf5b53aee9dc4c052f1cb951
70329 master J –B ✓T ✓R 0/2
LU-18687 mgc: handle CONFIG_LUSTRE_FS_SERVER tristate
mine 4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 4 unresolved S +19 −19
5h
build #135248 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_internal.h:64 — (minor) `cld_is_barrier()` still uses `#ifdef` while `cld_is_nodemap()` just above was converted. With =m it always returns false, so `mgc_p
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(minor) `cld_is_barrier()` still uses `#ifdef` while `cld_is_nodemap()` just above was converted. With =m it always returns false, so `mgc_process_log()` would send a barrier cld through `mgc_process_cfg_log()`. Convert it as well?
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_internal.h:71 — (defect) This block of prototypes (`mgc_fs_clear()`, `mgc_set_info_async_server()`, `mgc_process_server_cfg_log()`, `mgc_process_nodemap_log
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(defect) This block of prototypes (`mgc_fs_clear()`, `mgc_set_info_async_server()`, `mgc_process_server_cfg_log()`, `mgc_process_nodemap_log()`, `mgc_process_config_server()`, `mgc_fs_setup()`) is still under `#ifdef CONFIG_LUSTRE_FS_SERVER`, along with the matching `#else`/`#endif` comments. Their callers in mgc_request.c are now under `IS_ENABLED()`.

With CONFIG_LUSTRE_FS_SERVER=m only CONFIG_LUSTRE_FS_SERVER_MODULE is defined. The prototypes disappear and `mgc_barrier_glimpse_ast` becomes NULL, but the calls are still compiled, so the build fails with implicit function declarations. Should this be `#if IS_ENABLED(CONFIG_LUSTRE_FS_SERVER)` too?
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_request.c:241 — (defect) This `mgc_fs_setup()` block in `do_config_log_add()` was left as `#ifdef`, but its error label `err_env:` below was changed to `IS_
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(defect) This `mgc_fs_setup()` block in `do_config_log_add()` was left as `#ifdef`, but its error label `err_env:` below was changed to `IS_ENABLED()`.

With =m, `err_env` is defined but never used. That is a -Wunused-label warning, and an error under -Werror. Servers would also never set up `cld_los`, so they get no local config copy. Should this one be converted too?
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_request.c:459 — (defect) Same problem in `config_log_add()`. The nodemap/barrier setup here is still `#ifdef`, while the declarations of `nodemap_cld`/`barr
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(defect) Same problem in `config_log_add()`. The nodemap/barrier setup here is still `#ifdef`, while the declarations of `nodemap_cld`/`barrier_cld`, the `GOTO(out_barrier, rc)` and the `out_barrier:`/`out_nodemap:` labels were all converted.

With =m, `out_nodemap` is defined but never used. Also, no target would ever add the nodemap log and no MDT the barrier log.
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 mgc: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert mgc to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I20d9475c98f3a3abbedeaf48f021f319eaef1ffa
70327 master J –B ✓T ✓R 0/2
LU-18687 ldlm: handle CONFIG_LUSTRE_FS_SERVER tristate
mine 1 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 1 unresolved M +40 −40
5h
build #135246 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-11-04 09:03 Gerrit AI review for Lustre ldlm_lock.c:117 — (defect) lustre/ldlm/ldlm_inodebits.c was not converted. It still has `#ifdef CONFIG_LUSTRE_FS_SERVER` at line 38, around ldlm_reprocess_ino
Gerrit AI review for Lustre PS2 · 2026-11-04 09:03
(defect) lustre/ldlm/ldlm_inodebits.c was not converted. It still has `#ifdef CONFIG_LUSTRE_FS_SERVER` at line 38, around ldlm_reprocess_inodebits_queue() and ldlm_process_inodebits_lock().

When Kconfig sets CONFIG_LUSTRE_FS_SERVER=m it defines only CONFIG_LUSTRE_FS_SERVER_MODULE. In that case these tables are built (IS_ENABLED() is true), but the two functions they point to are not:

    [LDLM_IBITS] = ldlm_process_inodebits_lock,
    ...
    [LDLM_IBITS] = ldlm_reprocess_inodebits_queue,

Wouldn't that give an undefined-symbol link error for ptlrpc? Out-of-tree builds still work only because lustre-build.m4 defines both macros. Should ldlm_inodebits.c:38 use `#if IS_ENABLED(CONFIG_LUSTRE_FS_SERVER)` as well, so that ldlm is fully converted as the commit message says?
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 ldlm: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert ldlm to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I04fa91c00b5dc2cacb2919e046dcf2adce866262
69027 master J –B ✓T ✓R 0/2
LU-18687 build: handle CONFIG_LUSTRE_FS_SERVER tristate
mine 6 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 6 unresolved M +80 −67
5h
build #135235 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets:
+5 earlier PS1 09-17 PS2 09-18 PS3 09-22 PS4 09-22 PS5 09-23
PS6 09-29 PS7 10-07 PS8 10-21 PS9 10-29 PS10 11-02
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre COMMIT_MSG:17 — (minor) This patch adds no headers and converts no code to IS_ENABLED(). Those parts appear to have moved to the per-subsystem patches in th
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(minor) This patch adds no headers and converts no code to IS_ENABLED(). Those parts appear to have moved to the per-subsystem patches in the series. What this patch does now is: add the four ifdef/ifndef checkpatch rules (dropping the old HAVE_SERVER_SUPPORT rule), switch wirecheck and the userspace wiretest.c to HAVE_SERVER_SUPPORT, add CONFIG_LUSTRE_FS_SERVER_MODULE, and add a second copy of SERVER_ONLY/SERVER_ONLY_EXPORT_SYMBOL() in include/lustre_compat/linux/module.h. Could the message describe those changes instead?
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre COMMIT_MSG:18 — (typo) "jus" -> "just"
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(typo) "jus" -> "just"
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre COMMIT_MSG:22 — (suggestion) The userspace part undoes the switch of wirecheck.c and lustre/utils/wiretest.c from HAVE_SERVER_SUPPORT to CONFIG_LUSTRE_FS_SE
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(suggestion) The userspace part undoes the switch of wirecheck.c and lustre/utils/wiretest.c from HAVE_SERVER_SUPPORT to CONFIG_LUSTRE_FS_SERVER. That switch came in with the wiretest regeneration in the commit below. CONFIG_LUSTRE_FS_SERVER is defined only when modules are enabled, so since that commit a server build of the utilities without modules silently skips the server wire checks. If that counts as a bug, consider adding:

Fixes: 39b5d59f8612 ("LU-18847 mdt: cleanup reint structs")
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre module.h:12 — (minor) lustre/include/obd_class.h still defines SERVER_ONLY and SERVER_ONLY_EXPORT_SYMBOL() under the same condition, so after this patch t
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(minor) lustre/include/obd_class.h still defines SERVER_ONLY and SERVER_ONLY_EXPORT_SYMBOL() under the same condition, so after this patch there are two copies. The compiler accepts them only because both have the same tokens. If one copy is later changed (for example to IS_ENABLED()) and the other is not, the build gets a macro-redefinition error. None of the patches in the LU-18687 series touches obd_class.h. Should the obd_class.h copy be removed here, or this copy be dropped until the move happens?
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre wirecheck.c:324 — (minor) `make newwiretest` writes this same output to both lustre/utils/wiretest.c and lustre/ptlrpc/wiretest.c. With HAVE_SERVER_SUPPORT he
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(minor) `make newwiretest` writes this same output to both lustre/utils/wiretest.c and lustre/ptlrpc/wiretest.c. With HAVE_SERVER_SUPPORT here, the next regeneration (needed by any wire change) puts `#ifdef HAVE_SERVER_SUPPORT` into lustre/ptlrpc/wiretest.c.

That is a problem on the kernel side in three ways:
- HAVE_SERVER_SUPPORT comes only from the autoconf config.h, so in the in-tree Kbuild build this series targets every server wire check in ptlrpc/wiretest.c would be compiled out without any warning.
- The new spelling.txt rule in this patch flags `ifdef HAVE_SERVER_SUPPORT` in kernel files, so every regenerated wiretest would trip checkpatch.
- It would undo the `#if IS_ENABLED(CONFIG_LUSTRE_FS_SERVER)` conversion of ptlrpc/wiretest.c in the ptlrpc patch of this series.

The kernel copy needs IS_ENABLED(CONFIG_LUSTRE_FS_SERVER) and the userspace copy needs HAVE_SERVER_SUPPORT, and no single CHECK_COND_START() argument gives both. One option is to emit the CONFIG_ form here and have lustre/utils/wirehdr.c map HAVE_SERVER_SUPPORT onto it. Another is to give wirecheck a kernel/userspace switch so each copy gets its own guard.
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre wiretest.c:2971 — (typo) This `#endif` comment still says CONFIG_LUSTRE_FS_SERVER, but the `#ifdef` above it was changed to HAVE_SERVER_SUPPORT. wirecheck wou
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(typo) This `#endif` comment still says CONFIG_LUSTRE_FS_SERVER, but the `#ifdef` above it was changed to HAVE_SERVER_SUPPORT. wirecheck would print HAVE_SERVER_SUPPORT here, so the file looks hand-edited rather than regenerated. The same mismatch is at the LCFG_NODEMAP_* block (the `#endif` after LCFG_NODEMAP_BANLIST_DEL).
owner James Simmons · uploader James Simmons · PS10 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: handle CONFIG_LUSTRE_FS_SERVER tristate

Lustre treats CONFIG_LUSTRE_FS_SERVER as a boolean but when
imported into a Linux kernel it can be a tristate value,
turn off, module, or built in. To properly support
building in the Linux kernel tree with Kbuild using
tristate value we need to use the IS_ENABLED macro.
All other lustre CONFIG_* options are boolean so no need
to update them. For the IS_ENABLED macro to work we need
to define CONFIG_LUSTRE_FS_SERVER_MODULE. We also add
headers that are needed to actually build in the linux
kernel tree. This is jus the base patch and we need
many patches on top to give it a chance to land.

Change user land utilities not to use Kbuild options.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I410a9d2e95dd0edcbfa78ca901d2e904b0b3f2b4
70332 master J –B ✓T ✗1R 0/2
LU-18687 fld: handle CONFIG_LUSTRE_FS_SERVER tristate
mine enforced failed: review-ldiskfs-dne-arm
upstream CI@PS1 S +8 −9
5h
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 5 tests. 1 tests failed: lnet-selftest. session
build #135245 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
build/test results are from PS1 — PS2…PS2 changed only the commit message (votes copied, CI not re-run)
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 fld: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert fld to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I749ceae35a936daad21a1a0e0078023b534634fe
70337 master J –B ✓T ✓R 0/2
LU-18687 obdecho: handle CONFIG_LUSTRE_FS_SERVER tristate
mine 3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 3 unresolved M +50 −50
6h
build #135256 SUCCESS · tests all Maloo sessions
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-11-04 08:22 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) The subject and body say obdecho, but every hunk is under lustre/obdclass/, and lustre/obdecho/ still has about 30 `#ifdef CONFIG_LU
Gerrit AI review for Lustre PS1 · 2026-11-04 08:22
(style) The subject and body say obdecho, but every hunk is under lustre/obdclass/, and lustre/obdecho/ still has about 30 `#ifdef CONFIG_LUSTRE_FS_SERVER` lines (echo_client.c, echo_internal.h). Should this be `LU-18687 obdclass: handle CONFIG_LUSTRE_FS_SERVER tristate`?
reply PS1 2026-11-04 08:22 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) If the patch is refreshed, the body could say why the change is needed. With CONFIG_LUSTRE_FS_SERVER=m, Kbuild defines only CONFIG_L
Gerrit AI review for Lustre PS1 · 2026-11-04 08:22
(style) If the patch is refreshed, the body could say why the change is needed. With CONFIG_LUSTRE_FS_SERVER=m, Kbuild defines only CONFIG_LUSTRE_FS_SERVER_MODULE, so a plain `#ifdef` silently compiles the server code out.

It could also mention that lustre_handles.c changes from HAVE_SERVER_SUPPORT to CONFIG_LUSTRE_FS_SERVER. That one is a different macro, not just a change of form. It is equivalent in practice, because CONFIG_LUSTRE_FS_SERVER is defined whenever server modules are built.
reply PS1 2026-11-04 08:22 Gerrit AI review for Lustre lu_tgt_descs.c:138 — (suggestion) The headers this code depends on still use plain `#ifdef CONFIG_LUSTRE_FS_SERVER`. For example, `lq_rr` in struct lu_qos (lu_ob
Gerrit AI review for Lustre PS1 · 2026-11-04 08:22
(suggestion) The headers this code depends on still use plain `#ifdef CONFIG_LUSTRE_FS_SERVER`. For example, `lq_rr` in struct lu_qos (lu_object.h), OBDF_NO_TRANSNO in obd.h, the server includes and SERVER_ONLY in obd_class.h, and lustre_log.h.

In a =m in-kernel build, this block would be compiled but `qos->lq_rr` would not exist. The same applies to `OBDF_NO_TRANSNO` in class_cleanup(). Before this patch, that configuration was at least consistently client-only.

There's no in-tree Kconfig yet, so nothing is broken today. Would it make sense to convert lustre/include/ before (or together with) the .c files, so that each patch in the series builds on its own in the target configuration?
owner James Simmons · uploader James Simmons · PS1 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 obdecho: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert obdecho to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I13911144ed39a0cba72a9b9a4035569065571833
61282 master J –B ✓T ✓R 0/2
LU-16832 lnet: add nanosecond delay latency support
carrying Sohei Koyama · 3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
pw_shepherd 3 unresolved L +183 −73
9h
build #135225 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger
patchsets:
+22 earlier PS1 09-12 PS2 09-12 PS3 09-12 PS4 09-12 PS5 09-12 Janitor Bot PS6 09-12 PS7 09-12 PS8 09-29 PS9 09-29 PS10 09-29 PS11 02-05 PS12 07-20 James Simmons PS13 09-02 James Simmons PS14 09-03 James Simmons PS15 09-04 James Simmons PS16 09-04 James Simmons PS17 09-04 James Simmons PS18 09-04 James Simmons PS19 09-06 James Simmons PS20 10-09 James Simmons PS21 10-09 James Simmons PS22 10-16 James Simmons
PS23 10-20 James Simmons PS24 10-21 James Simmons PS25 10-26 James Simmons PS26 10-31 James Simmons PS27 11-02 James Simmons
your previous vote: +1 on PS18 (2026-09-05 15:29) — now at PS27
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS27 2026-11-04 05:10 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) If the patch is refreshed: the body doesn't mention that yaml_emitter_get_output_version() is reworked to query the family version o
Gerrit AI review for Lustre PS27 · 2026-11-04 05:10
(minor) If the patch is refreshed: the body doesn't mention that yaml_emitter_get_output_version() is reworked to query the family version on its own private netlink socket, rather than the emitter's `ctrl` socket, and now sets the emitter error state on failure. This changes the behaviour of an exported liblnetconfig function, so a sentence about it, and why it was needed, would help.
reply PS27 2026-11-04 05:10 Gerrit AI review for Lustre net_fault.c:979 — (minor) This adds to the overflow point raised on patchset 24. `tmp` is now `s64`, filled by nla_get_s64(), and `la_latency` is a signed `kt
Gerrit AI review for Lustre PS27 · 2026-11-04 05:10
(minor) This adds to the overflow point raised on patchset 24. `tmp` is now `s64`, filled by nla_get_s64(), and `la_latency` is a signed `ktime_t`. So a negative value from the netlink request gets past this check. For example, `--latency_ns` goes through strtoull(), and `-1` comes out as -1 ns. delay_rule_match() then sets `msg_delay_send` in the past and calls hrtimer_start() with a negative relative time. The rule is accepted, but messages are not actually delayed.

With the old `u32` seconds field this value could not be negative. Should this reject `ktime_to_ns(attr->u.delay.la_latency) <= 0`? Values near KTIME_MAX also wrap when `ktime_get_ns()` is added to them in delay_rule_match(), so an upper bound may be worth adding too.
reply PS27 2026-11-04 05:10 Gerrit AI review for Lustre liblnetconfig_netlink.c:1877 — (defect) `out` is still NULL here; it is only set from `request->write_handler_data` further down. So if genl_connect() fails, this derefere
Gerrit AI review for Lustre PS27 · 2026-11-04 05:10
(defect) `out` is still NULL here; it is only set from `request->write_handler_data` further down. So if genl_connect() fails, this dereferences a NULL pointer and lnetctl/lctl segfaults instead of reporting "socket failed to connect". The socket that was just allocated, `sk`, is also leaked.

This path runs on every netlink delay add (`lnetctl fault delay add`, and `lctl net_delay_add` through fault_simul_rule_add()). Should this be `nl_socket_free(sk);`?
tags: pw_shepherd
owner Sohei Koyama · uploader James Simmons · PS27 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-16832 lnet: add nanosecond delay latency support

Introduce nanosecond-resolution latency for LNet delay
fault injection. The previous interface accepted latency
only in seconds (u32). This change promotes the field to
nanoseconds (ktime) and plumbs it so that sub-second delays
in nanoseconds can be expressed precisely. Since this
changes the Netlink output we bump the LNet netlink
family version. The user land code is updated to accept
and process the new latency_ns option for the non ioctl
approach. All ioctl usage only accepts seconds. The
internal timer is moved to hrtimer for finer level of
time resolution.

Test-Parameters: trivial
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I9ed1bd34cef0f0bf647f87d17dd68f05274e2b28
57877 master J –B ✓T ✓R +2/2
LU-8066 quota: migrate quota out of procfs
mine Verified -1 veto by Oleg Drokin
Verified -1 upstream pw_shepherd master-next 2 unresolved L +500 −382
11h
Verified -1 veto by Oleg Drokin
2 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #134181 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-10-27 07:07 · Timothy Day +1 2026-10-28 20:25
no vote yet: Shaun Tancheff, Sergey Cheremencev, Andreas Dilger, Oleg Drokin
patchsets:
+29 earlier PS1 01-24 PS2 02-28 PS3 07-27 PS4 07-30 PS5 08-20 PS6 01-15 PS7 04-20 PS8 08-14 PS9 08-14 PS10 08-14 PS11 08-30 PS12 08-30 PS13 08-30 PS14 09-01 PS15 09-03 PS16 09-03 PS17 09-03 PS18 09-04 PS19 09-05 PS20 09-07 PS21 09-07 PS22 09-07 PS23 09-14 PS24 09-20 PS25 09-22 PS26 09-22 PS27 09-22 PS28 09-23 PS29 09-23
PS30 10-05 PS31 10-05 PS32 10-05 PS33 10-06 PS34 10-21
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS34 2026-10-23 01:49 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) If the patch is refreshed, could the body name the parameters that moved and where they now live? That would make the change findabl
Gerrit AI review for Lustre PS34 · 2026-10-23 01:49
(minor) If the patch is refreshed, could the body name the parameters that moved and where they now live? That would make the change findable with git log, and it would help whoever has to update monitoring scripts. For example:

- sysfs: `osd-*.*.quota_slave{,_md,_dt}.{enabled,force_reint,timeout,verion_mismatch_timeout,root_prj_enable}` and `qmt.*.*.soft_least_qunit`
- debugfs: `info`, `acct_*`, `limit_*` and `glb-*`

The body could also mention two other behaviour changes:

- /proc/fs/lustre/qmt is now gone unconditionally, and /proc/fs/lustre/osd-* only exists when `symlink_brw_stats=1` is set at module load. The parameter is now 0444.
- osd_device_init0() now calls qsd_fini() on the alloc_percpu() failure path. This is needed because the qsd kobjects are children of `dd_kobj`.
reply PS34 2026-10-23 01:49 Gerrit AI review for Lustre qsd_lib.c:55 — (typo) This isn't a bug, but this still says "procfs helpers", and the same comment in qmt_pool.c was updated. If the patch is refreshed, a
Gerrit AI review for Lustre PS34 · 2026-10-23 01:49
(typo) This isn't a bug, but this still says "procfs helpers", and the same comment in qmt_pool.c was updated. If the patch is refreshed, a few other stale mentions could be fixed at the same time:

- the qmt_dev.c header comment and the qmt_device_init0() comment both still say "QMT procfs directory" and "root procfs directory"
- the `out_procfs` label in osd-ldiskfs osd_device_init0() now calls osd_tunables_fini()
tags: pw_shepherd
owner James Simmons · uploader James Simmons · PS34 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-8066 quota: migrate quota out of procfs

With the upstream kernel requirement of not using procfs
move the quota proc entries over to debugfs / sysfs. The
simple entries are placed into sysfs and the complex into
the debugfs tree.

Extend the time to support proc symlink until after the
2.18 LTS release. Now on osd module load the
symlink_brw_stats will determine if procfs is setup at
all.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I003841c4e9131db9ac423763fa817097c09ed83d
66739 master J –B ✓T ✓R 0/2
LU-19921 sec: add disable_rootsquash mount option
reviewing wangdi · PS1→PS57 since your -1 — your objection was dropped
pw_shepherd 1 unresolved L +280 −43
17h
build #135121 SUCCESS · tests all Maloo sessions
no vote yet: Jinshan Xiong, Bruno Faccini, Sebastien Buisson, Andreas Dilger
patchsets:
+52 earlier PS1 06-18 PS2 06-19 PS3 06-20 PS4 06-22 PS5 06-22 PS6 07-10 PS7 07-12 PS8 07-20 PS9 07-24 PS10 07-27 PS11 07-29 PS12 07-30 PS13 08-02 PS14 08-02 PS15 08-02 PS16 08-02 PS17 08-02 PS18 08-04 PS19 08-05 PS20 08-05 PS21 08-06 PS22 08-06 PS23 08-07 PS24 08-07 PS25 08-07 PS26 08-07 PS27 08-08 PS28 08-09 PS29 08-09 PS30 08-10 PS31 08-11 PS32 08-13 PS33 08-13 PS34 08-13 PS35 08-13 PS36 08-14 PS37 08-15 PS38 08-16 PS39 08-17 PS40 08-18 PS41 08-18 PS42 08-18 PS43 08-19 PS44 08-20 PS45 08-21 PS46 08-22 PS47 08-22 PS48 08-22 PS49 08-23 PS50 08-24 PS51 08-25 PS52 08-25
PS53 08-26 PS54 08-27 PS55 09-07 PS56 10-23 PS57 11-01
your previous vote: -1 on PS1 (2026-06-18 21:52) — now at PS57
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS57 2026-11-03 16:03 Sebastien Buisson tgt_gssiam.c:443 — It looks like this concern is valid?
Gerrit AI review for Lustre PS57 · 2026-11-02 11:47
(defect) Is the grant meant to be limited by what the client requested? Right now nothing masks it with the entry's request options (gssiam->gd_options, which also forms part of the cache key). Any helper reply with bit 0x2 set adds GSSIAM_AUTH_DISABLE_ROOT_SQUASH, even when the mount did not pass -o disable_rootsquash.

The PS9 reply to the question about why the client needs a mount option said that a user who holds the no-rootsquash right should still be able to mount with root squash by leaving the option off. The commit message promises the same ("unless explicitly requested at mount and authorized"). With a helper that reports the principal's rights rather than echoing the request, that does not hold:

    mount without disable_rootsquash -> lid_options = 0 -> argv[5] = "0"
    helper writes "rw:600:2:alice"
    -> perm = RW | DISABLE_ROOT_SQUASH
    -> tgt_gssiam_info_alloc() keeps it
    -> gssiam_get_nodemap() -> nodemap_gssiam_attrs_update(..., allow_root = true)

Only the mock l_gssiam_auth checks the request. The l_gssiam_auth.8 text ("to allow disabling root squash if requested by the client") reads as if the kernel does the check.

Would it be safer to test `val & gssiam->gd_options & GSSIAM_OPT_DISABLE_ROOT_SQUASH` here? The OST/remote-MDT callback path goes through this same parser, so that one check would cover both paths.
Sebastien Buisson PS57 · 2026-11-03 16:03
It looks like this concern is valid?
tags: pw_shepherd
owner wangdi · uploader wangdi · PS57 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-19921 sec: add disable_rootsquash mount option

Add the -o disable_rootsquash mount option, allowing users to
explicitly request disabling root squash on GSSIAM mounts when
authorized by the external GSSIAM authority.

Specifically, this patch implements:

- Client Mount Option:
  Adds -o disable_rootsquash parsing in lustre/llite/llite_lib.c
  and packs GSSIAM_OPT_DISABLE_ROOT_SQUASH in the GSSIAM init ctx
  options payload.

- Server Nodemap Privilege Raising:
  When authorized by the external GSSIAM server
  (GSSIAM_AUTH_DISABLE_ROOT_SQUASH), gssiam_get_nodemap() passes
  allow_root=true to nodemap_gssiam_attrs_update(). The per-identity
  dynamic child nodemap is permitted to raise allow_root via the
  parent 'gssiam' nodemap's pre-configured NODEMAP_RAISE_PRIV_ADMIN
  delegation capability. Root squash remains strictly enforced
  (allow_root=false) by default unless explicitly requested at mount
  and authorized by the GSSIAM server.

- Extended Upcall Downcall Format:
  Extends the kernel/userspace downcall contract by adding an
  ":options" field to the downcall string format parsed in
  tgt_gssiam.c ("mount_option:expire:options:principal"), allowing
  l_gssiam_auth to pass authorized permission/option flags to the
  kernel upcall cache.

- Dedicated GSSIAM Option Flags:
  Defines enum gssiam_mount_option_flags (GSSIAM_OPT_RDONLY and
  GSSIAM_OPT_DISABLE_ROOT_SQUASH) in lustre_idl.h, cleanly separating
  the GSSIAM option space from generic OBD_CONNECT_* connection flags.

Signed-off-by: Di Wang <ddiwang@google.com>
Change-Id: I35af55f4ff4193195028b157758a7b30bb2e0f9d
68021 master J –B ✓T ✓R +1/2
LU-19921 tests: add GSSIAM security test
reviewing wangdi · PS24→PS25 since your -1 — your objection was dropped
7 unresolved XL +1368 −22
22h
build #135123 SUCCESS · tests all Maloo sessions
reviews: Sebastien Buisson +1 2026-11-03 16:09
no vote yet: Jinshan Xiong, Bruno Faccini, Andreas Dilger
patchsets:
+20 earlier PS1 08-14 PS2 08-15 PS3 08-16 PS4 08-17 PS5 08-18 PS6 08-18 PS7 08-18 PS8 08-19 PS9 08-20 PS10 08-21 PS11 08-22 PS12 08-22 PS13 08-22 PS14 08-23 PS15 08-24 PS16 08-25 PS17 08-25 PS18 08-26 PS19 08-27 PS20 09-04
PS21 09-07 PS22 09-09 PS23 10-23 PS24 10-27 PS25 11-01
your previous vote: -1 on PS24 (2026-10-28 13:57) — now at PS25
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:7 — (minor) The subject says "tests:", but the patch also changes server behaviour, and the body doesn't describe it:
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) The subject says "tests:", but the patch also changes server behaviour, and the body doesn't describe it:

- tgt_gssiam_verify() now rejects with -EPERM any principal starting with "mock_gssiam_" unless OBD_FAIL_SEC_GSSIAM_MOCK_TEST or OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN is set.
- l_gssiam_auth used to approve every token unconditionally. It now returns "deny" for anything other than the four mock tokens.
- The new lustre_gssiam_mock.h header is shared by the kernel and the utilities.

Together these mean the shipped reference upcall pair no longer authenticates anything on a server without fail_loc set. Could the body say so? It may also be worth choosing a component that covers the target/ptlrpc changes (e.g. "sec:").
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) This patch doesn't change test_300. It was added by the previous patch in the series ("LU-19921 sec: add disable_rootsquash mount op
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) This patch doesn't change test_300. It was added by the previous patch in the series ("LU-19921 sec: add disable_rootsquash mount option"), and the sanity-sec hunks here only touch dyn_nm_helper() and add test_301-310. Is the "test_300 rootsquash check updates" text left over from an earlier patchset?
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:17 — (typo) The patch defines OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN (0x1206), not OBD_FAIL_SEC_GSSIAM_EXP_CLIENT, so a `git log` grep for the real na
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(typo) The patch defines OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN (0x1206), not OBD_FAIL_SEC_GSSIAM_EXP_CLIENT, so a `git log` grep for the real name won't find this commit.
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:21 — (typo) The constants are named GSSIAM_MOCK_RW, GSSIAM_MOCK_RO, GSSIAM_MOCK_EXPIRED and GSSIAM_MOCK_DENY (in lustre/include/lustre_gssiam_moc
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(typo) The constants are named GSSIAM_MOCK_RW, GSSIAM_MOCK_RO, GSSIAM_MOCK_EXPIRED and GSSIAM_MOCK_DENY (in lustre/include/lustre_gssiam_mock.h), not MOCK_GSSIAM_*.
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre l_gssiam_upcall.8:58 — (minor) l_gssiam_upcall.c also registers the long option `--expired` for this. Should the SYNOPSIS and this entry use `.BR -e ", " --expired
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) l_gssiam_upcall.c also registers the long option `--expired` for this. Should the SYNOPSIS and this entry use `.BR -e ", " --expired`, as the other options do?
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre lustre_gssiam_mock.h:6 — (minor) tgt_gssiam_verify() and sptlrpc_rule_set_choose() also accept OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN as the override, not only OBD_FAIL_S
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) tgt_gssiam_verify() and sptlrpc_rule_set_choose() also accept OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN as the override, not only OBD_FAIL_SEC_GSSIAM_MOCK_TEST. Should this comment mention both?
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre l_gssiam_auth.c:127 — (minor) With this branch the reference helper denies every real token. The comment above still says "Validate token by external server", and
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) With this branch the reference helper denies every real token. The comment above still says "Validate token by external server", and l_gssiam_auth(8) still says the helper validates the token against the enterprise GSSIAM service and returns the mapped permissions. If the patch is refreshed, could the comment and the man page say that this helper only recognizes the mock_gssiam_* test tokens? The man page could also note that the target accepts those only with fail_loc 0x1205/0x1206 set.
owner wangdi · uploader wangdi · PS25 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-19921 tests: add GSSIAM security test

Add 301-310 for GSSIAM security flavor in sanity-sec
security test, including dyn_nm_helper() fileset cleanup
and test_300 rootsquash check updates.

Add 180a-e in recovery-small and 204, 205 in
replay-single.sh for GSSIAM.

Add OBD_FAIL_SEC_GSSIAM_MOCK_TEST and
OBD_FAIL_SEC_GSSIAM_EXP_CLIENT fail_loc tunables for
testing GSSIAM in local node environments.

Add -e option to l_gssiam_upcall and update
l_gssiam_upcall(8) man page.  Add MOCK_GSSIAM_RW,
MOCK_GSSIAM_RO, MOCK_GSSIAM_EXPIRED, and
MOCK_GSSIAM_DENY mock principal handling in
l_gssiam_auth.c.

Update sptlrpc_rule_set_choose() loopback selection
in sec_config.c and exclude gssiam in
flvr_cnt_cli2mdt/cli2ost/mdt2mdt/mdt2ost helpers.

Signed-off-by: Di Wang <ddiwang@google.com>
Change-Id: Ic2d797ca7c49ac3df06773f96915b563dcd6c0d8
57671 master J –B ✗T –R +1/2
LU-10499 pcc: add --pin option for 'lfs pcc attach'
mine build failure (#135127)
pccro L +525 −80
2d
build #135127 FAILURE
reviews: Andreas Dilger +1 2026-11-01 20:36
no vote yet: Qian Yingjin, Feng Lei
patchsets: PS1 01-07 PS2 10-31 Andreas Dilger PS3 11-01 Andreas Dilger
tags: pccro
owner James Simmons · uploader Andreas Dilger · PS3 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: add --pin option for 'lfs pcc attach'

Add a --pin|-p option to "lfs pcc attach" and "lfs pcc attach_fid"
to pin each file for the PCC backend before attaching it, so that
users do not need to run "lfs pcc pin" separately.  A file that
cannot be pinned is not attached.  Without --id, the backend is
chosen once, so that the file is pinned for the backend it is
attached to.

Add llapi_pcc_pin_fd(), llapi_pcc_pin_fid(), llapi_pcc_unpin_fd()
and llapi_pcc_unpin_fid() to match the pool pin functions, which
use the same lustre.pin xattr.  attach_fid pins the file with
llapi_pcc_pin_fid(), which also works on subdirectory mounts.  The
pin functions share the pin xattr update and no longer leak the
parsed pin object.

Setting lustre.pin on the MDT took the UPDATE lock as well as the
XATTR lock.  This would cancel a combined UPDATE|LAYOUT lock on the
client and detach a PCC-RO file, so "lfs pcc pin" of an attached
file would detach it.  Do not take the UPDATE lock for the pin,
whether it is set as lustre.pin or as trusted.pin, and do not update
ctime, which clients cache under the UPDATE lock, as for the HSM
state.

Add llapi_pcc_pin_file.3 for the pin functions, and sanity-pcc
test_204d and test_204e.

Was-Change-Id: I35a0e399294020efdb0e4710500e8f7b846c290f
Was-Change-Id: If0120d745418836cfdf449a795b6f524c40f9c27
Test-Parameters: trivial testlist=sanity-pcc
Fixes: 84100d7f7d38 ("LU-10499 pcc: tunable GID to pin/unpin files")
Signed-off-by: Lei Feng <flei@whamcloud.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Iee873821ff5815fd6b56ed8f4c48147f5ef9321f
66791 master J –B ✓T ✓R ✗
LU-18687 build: reimplement dist target in plain make
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
needs rebaseCR -1 9 unresolved M +92 −74
3d
needs rebase — checkpatch: cannot be cherry-picked
Timothy Day voted -1
8 unresolved thread(s) await your reply — last from Oleg Drokin
1 thread(s) waiting on others
no vote yet from Shaun Tancheff, Andreas Dilger
build #130840 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-02 15:15 · Arshad Hussain +1 2026-09-14 10:43 · Timothy Day -1 2026-10-21 18:00
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets:
+1 earlier PS1 06-22
PS2 06-22 PS3 06-22 PS4 06-22 PS5 07-10 PS6 09-02 James Simmons
your previous vote: +1 on PS5 (2026-07-10 19:34) — now at PS6
threads: 8 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS6 2026-10-20 15:31 Oleg Drokin patchset comment — I think we need the answers to the ai review as some of them sound at least somewhat scary?
Oleg Drokin PS6 · 2026-10-20 15:31
I think we need the answers to the ai review as some of them sound at least somewhat scary?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile:33 — (minor) This include is unconditional, but `autoMakefile` is still included for every goal outside `ALWAYS_TARGETS`, and automake keeps emit
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(minor) This include is unconditional, but `autoMakefile` is still included for every goal outside `ALWAYS_TARGETS`, and automake keeps emitting a `dist dist-all:` rule in the top-level Makefile (lib/am/distdir.am, guarded only by `TOPDIR_P`). So `make rpms`, `make srpm` and `make install` now parse two recipes for `dist` and print

    config/Makefile.dist:69: warning: overriding recipe for target 'dist'
    autoMakefile:NNNN: warning: ignoring old recipe for target 'dist'

which is what the comment above the conditional include exists to prevent. Could the fragment be included only in the branch that skips autoMakefile?

Separately, being unconditional means every invocation - `make help` included - now runs LUSTRE-VERSION-GEN, `git rev-parse`, a tree-wide `find`, and one `git ls-files` fork per `*.in` file at parse time. None of the other `config/Makefile.*` fragments do shell work at parse time.
reply PS5 2026-07-24 08:28 Gerrit AI review for Lustre Makefile.dist:21 — (minor) These three targets (no-lustre.spec, no-lustre-dkms.spec, no-LUSTRE-VERSION-FILE) are never referenced — dist: has no prerequisites
Gerrit AI review for Lustre PS5 · 2026-07-24 08:28
(minor) These three targets (no-lustre.spec, no-lustre-dkms.spec, no-LUSTRE-VERSION-FILE) are never referenced — dist: has no prerequisites and nothing else depends on them, so they're dead scaffolding. no-lustre-dkms.spec also substitutes @VERSION@ with $(LVF), which is never defined in this file and expands to empty. If they're leftovers, consider dropping them; if they were meant to generate the specs before archiving, dist: should depend on them and $(LVF) should be $(VERSION).
reply PS6 2026-10-20 15:31 Oleg Drokin Makefile.dist:9 — this probaby deserves at least some comment to refute it if there's anything to refute?
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(defect) `VERSION` and `PACKAGE` are also defined by `config/Makefile.exports`, which the top-level Makefile includes on the very next line, so `VERSION = @VERSION@` wins for everything downstream. `TARNAME` is `:=`, so it keeps the LUSTRE-VERSION-GEN value.

That splits the tarball name in two: `dist` writes `lustre-$(LUSTRE-VERSION-GEN).tar.gz`, while `srpm` runs `rpmbuild -ts $(PACKAGE_TARNAME)-$(VERSION).tar.gz` with the configure-time `@VERSION@`. Touch any tracked file after configure and LUSTRE-VERSION-GEN appends `_dirty`, so the names diverge and `make srpm`/`make rpms` fails on a missing tarball. Committing anything after configure does the same. automake derived distdir from `@VERSION@`, so the two could not drift before.

Can this reuse `$(PACKAGE_TARNAME)-$(VERSION)` from Makefile.exports, or at least use names that don't collide with it?
Oleg Drokin PS6 · 2026-10-20 15:31
this probaby deserves at least some comment to refute it if there's anything to refute?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:15 — (minor) This doesn't seem to hold. `Makefile` picks the fragment up with a relative `-include config/Makefile.dist`, and `./LUSTRE-VERSION-G
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(minor) This doesn't seem to hold. `Makefile` picks the fragment up with a relative `-include config/Makefile.dist`, and `./LUSTRE-VERSION-GEN` plus the `--add-file` paths are relative to the cwd as well:

    $ mkdir build && cd build && make -f ../Makefile dist
    make: *** No rule to make target 'dist'.  Stop.

Run from the top of the checkout, `git rev-parse --git-dir` just prints `.git`, which is what plain `git archive` would use anyway. Is the explicit `--git-dir` buying anything?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:70 — (defect) `.ONESHELL:` is in effect from the top-level Makefile, so the whole recipe runs in one shell and the exit status comes from the tra
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(defect) `.ONESHELL:` is in effect from the top-level Makefile, so the whole recipe runs in one shell and the exit status comes from the trailing `echo`, not from `git archive`. A failed archive leaves a 0-byte `$(TAR_DEST)` behind and the target still succeeds:

    $ make dist
    fatal: File not found: nonexistent
      DIST    lustre-....tar.gz
    $ echo $?
    0

`srpm` then feeds that empty file to rpmbuild. config/Makefile.pkg-rpm ends each command with `|| exit 1` for exactly this reason. Should this do the same, and `rm -f $(TAR_DEST)` when the archive fails?

(Same reason the `@` on the echo below has no effect - under .ONESHELL only the first line's prefix counts, so the full git command is echoed.)
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:73 — (minor) `--add-file`, and the "last `--prefix` before it wins" behaviour the ADD_FILES construction relies on, arrived in git 2.38. `lustre/
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(minor) `--add-file`, and the "last `--prefix` before it wins" behaviour the ADD_FILES construction relies on, arrived in git 2.38. `lustre/kernel_patches/targets/` still carries 4.18-rhel8.x and 5.3/5.14-sles15sp* targets, and those distros ship git 2.31/2.35. On such a host `make dist` fails outright - silently, given the exit-status issue above. Worth a minimum-git check here, or a note in the commit message?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:77 — (defect) `git archive HEAD` packages the committed tree; the automake `distdir` copied from `$(srcdir)`, i.e. the working tree. Building RPM
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(defect) `git archive HEAD` packages the committed tree; the automake `distdir` copied from `$(srcdir)`, i.e. the working tree. Building RPMs from a modified checkout is the normal edit/test loop, and the result is now labelled `_dirty` by LUSTRE-VERSION-GEN while the contents come from HEAD. Is dropping uncommitted work intended?

It also makes `dist` git-only. From an unpacked release tarball `git rev-parse --git-dir` fails, `GIT_DIR` is empty, and:

    $ git --git-dir= archive --format=tar.gz --prefix=x/ HEAD
    fatal: not a git repository: ''

so `make dist`/`make srpm` no longer work there. That's a supported path today - should the commit message call it out?
owner Timothy Day · uploader James Simmons · PS6 uploaded 63d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: reimplement dist target in plain make

Presently, automake handles the dist and install targets.
Reimplement the automake dist target in plain make using
git archive (along with allowlisting files generated
by autotools).

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ifaacd294a03f9c54279d935f7cbc9b8ab926624d
39910 master J –B ✓T ✓R 0/2
LU-13745 tests: test splice() reads with PCC-RO
mine 4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
4 unresolved M +84 −3
3d
4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green — no vote yet from Wang Shilong, Qian Yingjin, Andreas Dilger
build #134957 SUCCESS · tests all Maloo sessions
no vote yet: Wang Shilong, Qian Yingjin, Andreas Dilger
patchsets: PS4 02-07 PS5 10-30 Andreas Dilger
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) On newer kernels the O_DIRECT runs don't reach pcc_file_splice_read(). In 6.12 (RHEL10), vfs_splice_read() sends O_DIRECT files to c
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(minor) On newer kernels the O_DIRECT runs don't reach pcc_file_splice_read(). In 6.12 (RHEL10), vfs_splice_read() sends O_DIRECT files to copy_splice_read() before it looks at ->splice_read:

    if ((in->f_flags & O_DIRECT) || IS_DAX(...))
        return copy_splice_read(in, ppos, pipe, len, flags);

That path is copy_splice_read()->ll_file_read_iter()->pcc_file_read_iter(). So -n and -nr test the PCC read_iter path there, not pcc_file_splice_read(). Should the message say that only el8-era kernels route O_DIRECT splice through pcc_file_splice_read()?
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre COMMIT_MSG:22 — (suggestion) An earlier patchset asked whether this should use 'trivial'. The kernel difference above is a new reason to ask. The el8.10/el9
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(suggestion) An earlier patchset asked whether this should use 'trivial'. The kernel difference above is a new reason to ask. The el8.10/el9.8 sessions that trivial now runs won't cover the 6.12 copy_splice_read() path. Would adding a RHEL10 client run, e.g. 'clientdistro=el10.2', be worthwhile here?
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre sanity-pcc.sh:2269 — (minor) Can this check pass when splice skips PCC? `lfs pcc attach` fills the Lustre page cache:
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(minor) Can this check pass when splice skips PCC? `lfs pcc attach` fills the Lustre page cache:

pcc_readonly_attach()->pcc_attach_data_archive() clears O_DIRECT, then pcc_copy_data() reads the whole file with kernel_read(). That happens after pcc_layout_rdonly_set(), and nothing drops those pages afterward.

For -nd and -ndr, a splice that fell back to the normal Lustre path would read from that cache. That sends no ost_read RPCs, and cmp still matches. Dropping the client's cached pages after the attach would make the check meaningful, e.g.:

    do_facet $SINGLEAGT $LCTL set_param -n ldlm.namespaces.*osc*.lru_size=clear
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre splice-test.c:169 — (minor) With -n, `size` comes from fstat() on the Lustre file, but the data comes from the PCC copy. If that copy is shorter, which is the k
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(minor) With -n, `size` comes from fstat() on the Lustre file, but the data comes from the PCC copy. If that copy is shorter, which is the kind of bug this test looks for, splice() returns 0 at its EOF. do_splice1() and do_splice2() then loop forever on `while (size)` with spliced == 0. The test hangs until the test session times out instead of failing. The loop is pre-existing, but -n makes it reachable. Could spliced == 0 be treated as an unexpected EOF, as read_from_pipe() already does?
owner James Simmons · uploader Andreas Dilger · PS5 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-13745 tests: test splice() reads with PCC-RO

There is no test that splice() of a PCC-RO cached file reads from
the PCC copy through pcc_file_splice_read().  splice-test writes the
file before splicing it, which would invalidate a PCC-RO copy.

Add a -n option to splice-test to splice an existing file without
writing it, and copy the spliced data to stdout, so that it can be
compared with the expected data.  Also count the bytes actually read
from the pipe, not the requested size.

Add sanity-pcc test_21k to splice a PCC-RO cached file, with and
without O_DIRECT and a concurrent pipe reader, and check that no
read RPCs are sent to the OSTs and the data matches the PCC copy.

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Iae2517110c7332a81d0334232772ef1844d320ae
69872 master J –B ✓T ✓R +1/2
LU-18687 build: rework Lustre headers for upstreaming
mine 8 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 8 unresolved M +62 −23
4d
8 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
no vote yet from patrick bot, Arshad Hussain, Andreas Dilger
build #134774 SUCCESS · tests all Maloo sessions
reviews: Timothy Day +1 2026-10-29 19:03
no vote yet: patrick bot, Arshad Hussain, Andreas Dilger
patchsets: PS1 10-21 PS2 10-22 PS3 10-22 PS4 10-29
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre COMMIT_MSG:11 — (style) The biggest change in this patch isn't described: lustre_compat.h is no longer included by lu_object.h or lustre_mdc.h. Through lust
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(style) The biggest change in this patch isn't described: lustre_compat.h is no longer included by lu_object.h or lustre_mdc.h. Through lustre_net.h, about 200 kernel .c files used to get lustre_compat.h, and now they don't. The fixups in obdo.c, fid_lib.c, dt_object.c and lustre_mdc.h follow from that. Could the body say so, and also name what "headers we need to build against the Linux kernel" means? That part is uapi/linux/lustre/lustre_ver.h for LUSTRE_VERSION_STRING in ec_kmod.c, ec_test.c and kinode.c.
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre sha2.h:3 — (suggestion) lustre_compat/fs/crypto/hkdf.c and lustre_compat/fs/crypto/keysetup.c still carry the same #ifdef HAVE_CRYPTO_SHA2_HEADER / <cr
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(suggestion) lustre_compat/fs/crypto/hkdf.c and lustre_compat/fs/crypto/keysetup.c still carry the same #ifdef HAVE_CRYPTO_SHA2_HEADER / <crypto/sha.h> block. Could they include this header instead?
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre filelock.h:3 — (suggestion) lustre/llite/file.c and lustre/ldlm/ldlm_flock.c still open-code the same #ifdef HAVE_LINUX_FILELOCK_HEADER. Since the goal is
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(suggestion) lustre/llite/file.c and lustre/ldlm/ldlm_flock.c still open-code the same #ifdef HAVE_LINUX_FILELOCK_HEADER. Since the goal is to remove these ifdefs, could they use this header too? Also, filelock.h, sha2.h and mm_types.h have no include guards, while prandom.h and stdarg.h added in the same patch do. This is harmless, but inconsistent.
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre stdarg.h:10 — (minor) On kernels that have linux/stdarg.h, this header now includes nothing. Before, lu_object.h included <linux/stdarg.h> explicitly, and
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(minor) On kernels that have linux/stdarg.h, this header now includes nothing. Before, lu_object.h included <linux/stdarg.h> explicitly, and va_list in lu_object.h now only works because some other header pulls it in. The other headers in this patch (prandom.h, filelock.h, sha2.h) include the real header in both branches. Should this one too?

    #ifdef HAVE_LINUX_STDARG_HEADER
    #include <linux/stdarg.h>
    #else
    #include <stdarg.h>
    #endif
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre fid_lib.c:21 — (nit) fid_lib.c doesn't seem to use anything from <linux/fs.h>, and obd.h already includes it. Is this include needed? <dt_object.h> makes s
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(nit) fid_lib.c doesn't seem to use anything from <linux/fs.h>, and obd.h already includes it. Is this include needed? <dt_object.h> makes sense because of struct dt_device.
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre lu_object.h:887 — (minor) struct lu_rdpg still declares `struct folio **rp_folios`. On kernels without folios (el8), that name only means `struct page` once l
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(minor) struct lu_rdpg still declares `struct folio **rp_folios`. On kernels without folios (el8), that name only means `struct page` once lustre_compat/linux/folio.h has done `#define folio page`. lu_object.h used to get that header through lustre_compat.h. With that include removed, the header is no longer self-contained.

Any file that includes lu_object.h before folio.h now sees this field as a pointer to an opaque `struct folio`. Its own code then uses `struct page`, which gives an incompatible-pointer-type build error on el8. dt_object.c only builds because the new mm_types.h include sits above obd_class.h. Without that line, lu_object.h is processed before folio.h in that file.

Would it be more robust for lu_object.h to include lustre_compat/linux/folio.h itself, instead of relying on each user's include order?
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre lustre_mdc.h:25 — (minor) Nothing in lustre_mdc.h uses the compat fs.h helpers. The include appears to be there so lmv_intent.c gets the compat inode_set_atim
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(minor) Nothing in lustre_mdc.h uses the compat fs.h helpers. The include appears to be there so lmv_intent.c gets the compat inode_set_atime()/inode_set_mtime(), which lmv_revalidate_slaves() calls. obdo.c got the same fix directly in the .c file. For consistency, and to avoid another hidden transitive dependency, should lmv_intent.c include lustre_compat/linux/fs.h itself, with lustre_mdc.h keeping <linux/fs.h>?
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre dt_object.c:22 — (style) This isn't a bug, but the new lustre_compat/linux/mm_types.h doesn't include <linux/mm_types.h>. It is only an alias for lustre_comp
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(style) This isn't a bug, but the new lustre_compat/linux/mm_types.h doesn't include <linux/mm_types.h>. It is only an alias for lustre_compat/linux/folio.h, and what dt_object.c needs from it is ll_kmap_local_folio(). The include also only works because it sits between <linux/list.h> and <linux/module.h>, ahead of obd_class.h (see the lu_object.h comment). If lu_object.h included folio.h itself, could this file include folio.h directly, or nothing extra, and mm_types.h be dropped?
owner James Simmons · uploader James Simmons · PS4 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: rework Lustre headers for upstreaming

We have many ifdef HAVE_HEADER which makes upstreaming
more difficult. Create compat headers to clean up the
ifdefs. Also include headers we need to build against
the Linux kernel

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I2e32960dc2203f03f348821ffa33f5a169add42a
68287 master J !B ✗T –R -1/2−
LU-14291 obdclass: unwind server code out of llog
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase XL +1100 −1073
6d
needs rebase — checkpatch: cannot be cherry-picked
build failure (#130151)
janitor run: build failed — no tests ran — janitor results
build #130151 FAILURE
owner James Simmons · uploader James Simmons · PS1 uploaded 71d ago · NEW · open in Gerrit ↗
commit message
LU-14291 obdclass: unwind server code out of llog

Currently server internals are being pulled into llog. Break out
all the server code which limits the scope of the DT API.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ia11f6c26289f43260c1606fb031c4b90df10f87f
65110 master J ✗7B ✓T ✓R -1/2−
LU-9680 utils: remove forced debugfs mounting
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 5 unresolved S +0 −24
6d
needs rebase — checkpatch: cannot be cherry-picked
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green, no reviews yet — add reviewers
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity1@ldiskfs+DNE:test_5gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_29NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_30bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs:test_5gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs:test_29NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs:test_30bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-pcc@ldiskfs+DNE:test_20seen in 27 other reviews
build #129044 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-06 PS2 08-10
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre COMMIT_MSG:11 — (typo) "so are current actions voliates this feature" -> "so our current actions violate this feature".
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(typo) "so are current actions voliates this feature" -> "so our current actions violate this feature".
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre COMMIT_MSG:14 — (defect) Is this claim accurate? The controls the test suite leans on hardest are debugfs-only and have no netlink or sysfs equivalent.
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(defect) Is this claim accurate? The controls the test suite leans on hardest are debugfs-only and have no netlink or sysfs equivalent.

fail_loc, fail_val, fail_err, debug, subsystem_debug, dump_kernel (lctl dk), daemon_file and debug_marker are all created by lnet_insert_debugfs() from lnet_table in lnet/libcfs/module.c, so they exist only under /sys/kernel/debug/lnet/.

Every suite that does `$LCTL set_param fail_loc=...` or `$LCTL dk` needs those. So the suite still requires debugfs to be mounted; the patch only stops mounting it on our own.
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre param.c:26 — (style) Not a bug, but cfs_try_mount_sys_kernel_debug() was the only user of <sys/vfs.h> (statfs), <linux/magic.h> (DEBUGFS_MAGIC), <sys/mou
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(style) Not a bug, but cfs_try_mount_sys_kernel_debug() was the only user of <sys/vfs.h> (statfs), <linux/magic.h> (DEBUGFS_MAGIC), <sys/mount.h> (mount) and <stdbool.h> (the static bool). Worth dropping those four includes in the same patch.
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre param.c:28 — (defect) conf-sanity test_5g "handle missing debugfs" still checks for this auto-mount and is not updated here:
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(defect) conf-sanity test_5g "handle missing debugfs" still checks for this auto-mount and is not updated here:

    umount /sys/kernel/debug
    $LCTL get_param -n devices | grep -E -v "error" && error "lctl can't access debugfs data"
    grep " debugfs " /etc/mtab || error "debugfs failed to remount"

With the mount gone nothing remounts it, so the last line fails.

Worse, the test now leaves /sys/kernel/debug unmounted for the remainder of the conf-sanity run, so later subtests reading debugfs parameters, the `lctl dk` log dump on error(), and the KMEMLEAK check at /sys/kernel/debug/kmemleak all break too. Should test_5g be removed in this patch?
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre param.c:55 — (defect) The netlink alternative cited in the commit message only applies to non-root callers.
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(defect) The netlink alternative cited in the commit message only applies to non-root callers.

lctl get_param / list_param / set_param fall back to llapi_param_display_value() / llapi_param_set_value() only under `rc == -ENOENT && getuid() != 0` (lustre/utils/lustre_param.c:1181, 1243, 1349, 1416, 1640). Root always stays on the glob path.

mount(2) needs CAP_SYS_ADMIN, so the code being deleted only ever did anything for root — non-root already got EPERM, which was silently ignored. That means the one caller class this removal changes is exactly the one with no netlink fallback: on a node where debugfs is not mounted, root now gets ENOENT for everything under /sys/kernel/debug/{lnet,lustre} and has no other route to it.

This was raised on patchset 1 (keep trying to mount for systems that can still use it, just don't print on failure) and the code is unchanged in patchset 2. Dropping only the fprintf() would keep the working case working while satisfying the secure-boot concern.
owner James Simmons · uploader James Simmons · PS2 uploaded 86d ago · NEW · open in Gerrit ↗
commit message
LU-9680 utils: remove forced debugfs mounting

For older platforms debugfs wasn't always mounted but lustre
had a heavy dependence on it. Today Linux secure boot enforces
the lack of debugfs so are current actions voliates this
feature. With the implementation of Netlink we have an
alternative to using debugfs so we can remove this
forced mounting. We will be able to run our test suite
without debugfs after this patch.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Iaaa2b54d8352a5b9636338b0d10191428c89adaf
▶

Longstanding (signal older than a week)

(78)
66253 master J –B ✓T ✓R +2/2
LU-19712 utils: Add only and not-pool options to lfs pool pin
reviewing Nikos Papakonstantinou · PS24→PS30 since your -1 — your objection was dropped
master-next L +718 −154
2d
build #134249 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-29 08:40 · Sebastien Buisson +1 2026-10-22 08:52
patchsets:
+25 earlier PS1 05-28 PS2 05-28 PS3 05-29 PS4 06-04 PS5 06-05 PS6 06-08 PS7 06-10 PS8 06-14 PS9 06-15 PS10 06-22 PS11 07-09 PS12 07-10 PS13 07-14 PS14 07-15 PS15 07-16 PS16 07-30 PS17 07-30 PS18 07-31 PS19 08-20 PS20 08-26 PS21 08-27 PS22 09-01 PS23 09-04 PS24 09-04 PS25 09-14
PS26 09-23 PS27 10-01 PS28 10-08 PS29 10-14 PS30 10-22
your previous vote: -1 on PS24 (2026-09-12 15:01) — now at PS30
owner Nikos Papakonstantinou · uploader Nikos Papakonstantinou · PS30 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-19712 utils: Add only and not-pool options to lfs pool pin

Introduce --only and --not-pool options to lfs pool pin. The --only
option makes the pin exclusive to the set of pools the target is
already positively pinned to (including the one this operation itself
pins), while the --not-pool option prevents the file from being
migrated or mirrored to the specified pool.

Also add a matching --not-pool option to lfs pool unpin, via a new
llapi_pool_undeny_fd(), to remove a deny rule without disturbing a
same-named positive pin (a pool can never be both, since --not-pool on
pin already refuses to deny an already-pinned pool). --not-pool always
takes an explicit pool name; unlike --pool, it is never inferred from
the target's layout, since a denied pool cannot appear there.

Also rename verify_pin_xattr_object(), dump_pin_object(),
read_pin_xattr_object() and read_pin_xattr_object_fd() to their
llapi_-prefixed equivalents, so their generic names cannot clash with
application symbols. The prefix also puts them under the llapi_*
export glob in liblustreapi.map, which lfs needs once it reads
lustre.pin itself later in this series. --only/--not-pool themselves
go through the new llapi_pool_pin_only_fd()/llapi_pool_deny_fd()/
llapi_pool_undeny_fd() entry points.

Signed-off-by: Nikos Papakonstantinou <npapakonstantinou@ddn.com>
Change-Id: Icc35bf87444edd74c1fcda927cead5e3b34a0fcd
56526 master J !B ✓T ✗2R -1/2−
LU-18076 llite: add $MOUNT/.lustre/uuid
reviewing Emoly Liu · PS1→PS10 since your -1 — your objection was dropped
needs rebase 5 unresolved M +125 −3
6d
PS1→PS10 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-zfs-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
build #128269 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Etienne AUJAMES, Andreas Dilger, Oleg Drokin
patchsets:
+5 earlier PS1 09-28 PS2 10-12 PS3 01-16 PS4 09-22 PS5 04-21
PS6 06-17 PS7 06-23 PS8 06-24 PS9 07-09 PS10 07-29
your previous vote: -1 on PS1 (2024-09-28 13:31) — now at PS10
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre file.c:6775 — (minor) llite.*.uuid prints the UUID with a trailing newline, this returns it without one, so cat $MOUNT/.lustre/uuid runs straight into the
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(minor) llite.*.uuid prints the UUID with a trailing newline, this returns it without one, so cat $MOUNT/.lustre/uuid runs straight into the shell prompt. Since this is a new user-visible interface, is it worth matching the sysfs form now?
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre llite_lib.c:3383 — (style) Extra parentheses around the argument - fid_is_uuid(&lli->lli_fid) reads better, and matches the PFID(&lli->lli_fid) a few lines up.
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(style) Extra parentheses around the argument - fid_is_uuid(&lli->lli_fid) reads better, and matches the PFID(&lli->lli_fid) a few lines up. ll_inode2fid(inode) would work too.
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre mdd_device.c:1033 — (style) Not a bug, but the tab alignment between type and name is back after being asked about on earlier patchsets - a single space is what
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(style) Not a bug, but the tab alignment between type and name is back after being asked about on earlier patchsets - a single space is what new code uses:

    struct md_object *mdo;
    struct mdd_object *mdd_uuid;
    struct lu_fid fid = LU_UUID_FID;
    int rc;
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre mdd_device.c:1051 — (suggestion) Nothing ever reads m->mdd_dot_lustre_objs.mdd_uuid. mdd_obf and mdd_lpf are kept because they carry mo_dir_ops, but this one ha
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(suggestion) Nothing ever reads m->mdd_dot_lustre_objs.mdd_uuid. mdd_obf and mdd_lpf are kept because they carry mo_dir_ops, but this one has no ops attached, so the mdo_locate() / new field / mdd_object_put() trio only pins the object in the lu_site cache. Would mdd_local_file_create() on its own be enough here?
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre llapi_fid_test.c:489 — (defect) .lustre/uuid only exists on an MDS that carries this patch, so against an older server llapi_open_by_fid() returns -ENOENT here and
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(defect) .lustre/uuid only exists on an MDS that carries this patch, so against an older server llapi_open_by_fid() returns -ENOENT here and ASSERTF() -> DIE() exits the whole binary.

sanity.sh test_154g, which runs llapi_fid_test, is gated only on MDS1_VERSION >= 2.6.92, so on an interop run test_154g fails and test40/test41/test42 in this binary never execute.

Can this be gated on the server version - e.g. tolerate -ENOENT here, or move the check into a version-gated shell test instead?
owner Emoly Liu · uploader Emoly Liu · PS10 uploaded 98d ago · NEW · open in Gerrit ↗
commit message
LU-18076 llite: add $MOUNT/.lustre/uuid

Add a virtual $MOUNT/.lustre/uuid file to print the UUID for that
specific mountpoint.
Also, conf-sanity.sh test_44 is modified to verify this patch.

Signed-off-by: Emoly Liu <emoly@whamcloud.com>
Change-Id: I74d22c012dbc623d35e4fdf8594d8e7c83e01b1a
65204 master J –B ✗T –R 0/2
LU-19768 mdd: add MDD/changelog genetlink family
carrying Timothy Day · build failure (#134469)
5 unresolved L +644 −1
6d
build failure (#134469)
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
build #134469 FAILURE
patchsets:
+3 earlier PS1 04-09 PS2 07-22 PS3 07-29
PS4 09-29 PS5 09-29 PS6 10-20 James Simmons PS7 10-23 James Simmons PS8 10-26 James Simmons
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre lustre_kernelcomm.h:550 — This isn't a bug, but the size is hard-coded with the constant only in a comment. CHANGELOG_USER_NAMELEN_FULL is available from uapi/linux/l
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
This isn't a bug, but the size is hard-coded with the constant only in a comment. CHANGELOG_USER_NAMELEN_FULL is available from uapi/linux/lustre/lustre_idl.h; using it keeps the strscpy() in changelog_collect_user_cb() from silently truncating if the constant ever grows. (lustre_user.h has the same literal, but that one can't include lustre_idl.h - this header can.)
reply PS3 2026-07-30 09:42 Gerrit AI review for Lustre kernelcomm.c:399 — (minor) Nothing ever sends on this multicast group - there is no genlmsg_multicast()/genl_notify() call in mdd. Registering it publishes a "
Gerrit AI review for Lustre PS3 · 2026-07-30 09:42
(minor) Nothing ever sends on this multicast group - there is no genlmsg_multicast()/genl_notify() call in mdd. Registering it publishes a "changelog" group name that userspace can subscribe to and then never hear anything on. Is it meant to be wired up in a later patch, or can it be dropped until there is a notification to send?
reply PS5 2026-10-05 10:53 Gerrit AI review for Lustre kernelcomm.c:145 — (defect) What keeps ctxt->loc_handle alive while this runs? The llog_ctxt reference from llog_get_context() pins the context, but not the ca
Gerrit AI review for Lustre PS5 · 2026-10-05 10:53
(defect) What keeps ctxt->loc_handle alive while this runs? The llog_ctxt reference from llog_get_context() pins the context, but not the catalog handle.

On umount, mdt_stack_fini() sends LCFG_CLEANUP down the stack, and mdd_process_config() -> mdd_device_shutdown() -> mdd_changelog_fini() then does:

    ctxt = llog_get_context(obd, LLOG_CHANGELOG_USER_ORIG_CTXT);
    llog_cat_close(env, ctxt->loc_handle);  /* NULLs loc_handle, llog_close() frees it */
    llog_cleanup(env, ctxt);                /* only now waits for our ctxt ref */

The MDD obd still has OBDF_SET_UP and no OBDF_STOPPING at that point, and those flags are only checked once before this long, sleeping catalog walk anyway. A dump in progress keeps walking a freed cat_llh. A dump that arrives after llog_cat_close() but before llog_cleanup() finishes gets ctxt->loc_handle == NULL, and llog_cat_process_or_fork() dereferences cat_llh->lgh_hdr on its first line.

The debugfs changelog_users reader avoids this because mdd_procfs_fini() runs before mdd_device_shutdown(). Here, would it work to hold mdd->mdd_changelog_mutex around the llog_get_context()/llog_cat_process() pair and skip the device unless CLM_INIT_DONE is set under the mutex? mdd_changelog_fini() takes the same mutex and resets mc_flags to CLM_CLEANUP_DONE.
reply PS5 2026-10-05 10:53 Gerrit AI review for Lustre kernelcomm.c:406 — (suggestion) Should this op have .flags = GENL_ADMIN_PERM? As written, any local user in init_net can dump it.
Gerrit AI review for Lustre PS5 · 2026-10-05 10:53
(suggestion) Should this op have .flags = GENL_ADMIN_PERM? As written, any local user in init_net can dump it.

The same data under mdd.*.changelog_users is in debugfs, which only root can read. The LNet family's show dumps (LNET_CMD_NETS, PEERS, ROUTES, STATS, ...) are all GENL_ADMIN_PERM.

Each dump also runs a synchronous llog_cat_process() over every MDT's users catalog from .start. For a family without parallel_ops, that runs under genl_mutex. So an unprivileged caller can repeatedly drive disk I/O on every MDT while blocking all other genetlink families, and can also hit the umount window noted above.
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre mdd_netlink.c:144 — Should this check CLM_INIT_DONE before using `ctxt->loc_handle`? Every other changelog llog consumer in mdd does - mdd_changelog_users_seq_s
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
Should this check CLM_INIT_DONE before using `ctxt->loc_handle`? Every other changelog llog consumer in mdd does - mdd_changelog_users_seq_show()@lustre/mdd/mdd_lproc.c:209 and mdd_changelog_size_seq_show()@:247 both return -ENXIO when the flag is clear, and mdd_changelog_recalc_mask() takes mdd_changelog_mutex.

llog_setup() for LLOG_CHANGELOG_USER_ORIG_CTXT happens at mdd_device.c:556 but loc_handle is only assigned by the llog_open_create() that follows at :567, so for the whole duration of that create (and llog_init_handle() after it) the context is registered with loc_handle still NULL. mdd_prepare() runs from server_start_targets() long after class_setup() has set OBDF_SET_UP, so the obd is already visible to this loop during that window.

llog_cat_process() -> llog_cat_process_or_fork() dereferences `cat_llh->lgh_hdr` on its first line, so a dump landing in that window is a NULL dereference.

The teardown side has the same exposure: mdd_changelog_fini() does llog_cat_close(env, ctxt->loc_handle) then llog_cleanup(env, ctxt) under mdd_changelog_mutex, which this path does not take.
owner Timothy Day · uploader James Simmons · PS8 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-19768 mdd: add MDD/changelog genetlink family

Add a new MDD genetlink family that exposes per-MDT changelog
consumer state via the table-driven netlink framework. The dump
handler iterates MDD devices and reports per-consumer details
(endrec index, idle time, event mask). Implement changelog_users
and wire it in liblustreapi so the traditional tools continue to
work when debugfs is not available.

TLC-bug-id: TLU-56
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I3ae11dc2a992bc5cd9911e51fec8148cfb1dcfed
68228 master J !B ✓T ✓R 0/2
LU-11850 lov: create Netlink interface for pools
mine 2 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
3 unresolved XL +980 −361
8d
2 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green, no reviews yet — add reviewers
1 thread(s) waiting on others
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #132342 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-23 PS2 08-28 PS3 09-01 PS4 09-03 PS5 09-26
threads: 2 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-23 09:19 Gerrit AI review for Lustre COMMIT_MSG:16 — Several hunks aren't accounted for by the description, and it isn't obvious which are deliberate:
Gerrit AI review for Lustre PS1 · 2026-08-23 09:19
Several hunks aren't accounted for by the description, and it isn't obvious which are deliberate:

- lnet/utils/lnetconfig/liblnetconfig_netlink.c empty-flow-set handling
- lov_obd.c switching class_register_type() from enable_proc=true to false
- llapi_param_display_value() changing its success return from 0 to the raw yaml rc
- llapi_get_poolbuf() gaining `poolname++`
- lu_tgt_pool.op_array changing from __u32 to u32
- lod_pool.c setting op_obd_idx (LOD has no .o_pool_find, so nothing reads it yet)

Could the message name the new symbols too - LUSTRE_CMD_POOLS, o_pool_find()/lov_pool_list(), lustre_pools_dump() - so the change is findable via git log?
reply PS4 2026-09-04 12:51 Gerrit AI review for Lustre lproc_lov.c:287 — (defect) With pools now living only under obd_debugfs_entry, the old world-readable /proc/fs/lustre/lov/<dev>/pools/<pool> is gone and the o
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(defect) With pools now living only under obd_debugfs_entry, the old world-readable /proc/fs/lustre/lov/<dev>/pools/<pool> is gone and the only copy is under /sys/kernel/debug, which is mode 0700.

llapi_get_poollist() and llapi_get_poolmembers() grew a Netlink fallback for that, but llapi_search_ost() did not - it still does poolpath() -> fopen(), and poolpath() -> get_lustre_param_path() -> cfs_get_param_paths() globs /sys/kernel/debug/lustre/lov/<fs>-*/pools, which a normal user cannot traverse (GLOB_NOMATCH -> -ENOENT).

That propagates to llapi_stripe_param_verify(), which turns it into "pool '%s fsname %s' does not exist" and -EINVAL, so `lfs setstripe -p <pool>` fails for an unprivileged user. `lfs df --pool` and llapi_layout_sanity() -> llapi_search_ost() hit the same path.

This change is the top of the relation chain, so nothing later picks it up. Should llapi_search_ost() get the same Netlink fallback in this patch?
owner James Simmons · uploader James Simmons · PS5 uploaded 39d ago · NEW · open in Gerrit ↗
commit message
LU-11850 lov: create Netlink interface for pools

With the need to move pools handling to debugfs this prevents
non-root user land applications and libraries from accessing
this information. Create a Netlink interface that provides the
same needed information. Update liblustreapi to use the
Netlink YAML approach to gather pools information. Pool source
defines itself by the obd device source and pool name so its
not the typical single collection of data to obd device. This
makes pools require its own dump function.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I769567270e45f2de074fad2fab78a2f0c3a741b4
66886 master J !B ✓T ✓R -1/2−
LU-18687 build: iov_iter_iovec to iter_iov_len, iter_iov_addr
carrying Shaun Tancheff · needs rebase — checkpatch: cannot be cherry-picked
needs rebase 7 unresolved M +42 −31
13d
needs rebase — checkpatch: cannot be cherry-picked
7 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green — no vote yet from Andreas Dilger, Timothy Day
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #131723 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets: PS1 06-26 PS2 06-27 PS3 09-14 James Simmons
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) Nothing in the patch makes an iter_iov_len() available: what is added is compat_iter_iov_len(), under a guard that makes it the only
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(minor) Nothing in the patch makes an iter_iov_len() available: what is added is compat_iter_iov_len(), under a guard that makes it the only thing vvp_io.c ever calls. Could the body also say that vvp_mmap_locks() gains an iter_is_ubuf() special case, since that is a behaviour change rather than a rename?
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre lustre-core.m4:2233 — (defect) `len` is not declared - the declaration above is `ssize_t nr`. With -Werror this test fails to compile on every kernel, so HAVE_ITE
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(defect) `len` is not declared - the declaration above is `ssize_t nr`. With -Werror this test fails to compile on every kernel, so HAVE_ITER_IOV_LEN is never defined and the result is silently "no".

iter_iov_len() returns size_t, so this probably wants the same form as the neighbouring LC_SRC_HAVE_IOVEC_WITH_IOV_MEMBER test:

    size_t len __attribute__ ((unused));
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre uio.h:36 — (typo) `384492c48e6e` does not resolve; the commit is 384492c48e6a ("net: devmem: support single IOV with sendmsg").
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(typo) `384492c48e6e` does not resolve; the commit is 384492c48e6a ("net: devmem: support single IOV with sendmsg").
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre uio.h:40 — (defect) Once the autoconf test compiles, a 6.3+ kernel defines both HAVE_ITER_IOV_LEN and HAVE_USER_BACKED_ITER, so this helper is not comp
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(defect) Once the autoconf test compiles, a 6.3+ kernel defines both HAVE_ITER_IOV_LEN and HAVE_USER_BACKED_ITER, so this helper is not compiled - but vvp_mmap_locks() calls compat_iter_iov_len() unconditionally, so vvp_io.c stops building. Right now the only thing preventing that is the broken test above; fixing either one alone breaks the build.

Would it be simpler to follow the iter_iov_addr() pattern just above and supply the upstream name, `#ifndef HAVE_ITER_IOV_LEN` / `static inline size_t iter_iov_len(...)`, and call iter_iov_len() from vvp_io.c? Then the call site really does match upstream, and there is no Lustre-only name to keep in sync.
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre vvp_io.c:462 — (defect) The advance expression now uses `bytes`, which the loop body modifies: `bytes += addr & ~PAGE_MASK` below, and `bytes -= vma->vm_en
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(defect) The advance expression now uses `bytes`, which the loop body modifies: `bytes += addr & ~PAGE_MASK` below, and `bytes -= vma->vm_end - addr` in the inner while loop. The old code advanced by `iov.iov_len` from the iovec copy, which the body never touched (it worked on `bytes` instead).

So for an unaligned multi-segment iovec the iterator is advanced by `iov_len + (addr & ~PAGE_MASK)` per segment. The following segment is then scanned from a bogus offset, and a segment shorter than the overshoot is skipped completely, so no mmap lock is taken for it.

Keeping the segment length in its own variable, used only by iov_iter_advance(), would preserve the old behaviour.
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre vvp_io.c:463 — (minor) Can this branch be reached? The early return above returns 0 unless the iter is ITER_IOVEC or ITER_KVEC, and iter_is_iovec() is fals
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(minor) Can this branch be reached? The early return above returns 0 unless the iter is ITER_IOVEC or ITER_KVEC, and iter_is_iovec() is false for ITER_UBUF, so a ubuf iter never gets to the loop. Either the branch is dead code, or the gate above is what needs relaxing - the ubuf iter missing its mmap locks entirely looks like the pre-existing problem here.
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre vvp_io.c:468 — (minor) compat_iter_iov_len() returns `iov_len - iov_offset`, while the iov_iter_iovec() being replaced returned `min(count, iov_len - iov_o
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(minor) compat_iter_iov_len() returns `iov_len - iov_offset`, while the iov_iter_iovec() being replaced returned `min(count, iov_len - iov_offset)`.

The clamp is reachable: vvp_io_rw_lock() calls vvp_io_update_iov() -> iov_iter_truncate(vui_iter, crw_bytes) immediately before this, and lov_io_rw_iter_init() has already clipped crw_bytes to the current stripe chunk. A 4M read into a single 4M buffer on a 1M-striped file now asks policy_from_vma() for a 4M extent instead of 1M, and that extent can run past the end of the vma.

Clamping with the remaining iov_iter_count() would keep the old extent.
owner Shaun Tancheff · uploader James Simmons · PS3 uploaded 50d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: iov_iter_iovec to iter_iov_len, iter_iov_addr

Add HAVE_ITER_IOV_LEN to ensure an iter_iov_len() is
available.

iov_iter_iovec() is dropped and the address and bytes from the
segment are accessed directly.

This is done to align with the upstream linux kernel.

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I906b248d03f30a765f27b0916419b88ee178d6a5
55818 master J ✗2B ✓T ✗30R -2/2−
LU-18884 osp: use UUIDs instead of NIDs for LWP setup
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures IPv6 1 unresolved S +24 −11
13d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — runtests-ssk@ldiskfs+SharedKey:test_1, runtests@zfs:test_1
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-ubuntu, review-zfs
Mikhail Pershin voted -1
1 unresolved thread(s) await your reply — last from Andreas Dilger
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests-ssk@ldiskfs+SharedKey:test_1seen in 100 other reviews
runtests@zfs:test_1seen in 5 other reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 2 tests failed: sanity-sec, sanity. session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 6 tests failed: sanity-lsnapshot, insanity, replay-ost-single, replay-single, sanity-flr, sanit session
3 optional test failure(s) — informational
build #114072 SUCCESS · tests all Maloo sessions
reviews: Mikhail Pershin -1 2025-06-11 07:38
no vote yet: Chris Horn, Timothy Day
patchsets:
+5 earlier PS1 07-20 PS2 07-20 PS3 09-06 PS4 09-06 PS5 09-06
PS6 09-10 PS7 09-19 PS8 10-02 PS9 06-08 PS10 06-08 Janitor Bot
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2025-09-23 16:42 Andreas Dilger lwp_dev.c:95 — (defect?) I doubt the UUID should have a linefeed at the end?
Andreas Dilger PS10 · 2025-09-23 16:42
(defect?) I doubt the UUID should have a linefeed at the end?
owner James Simmons · uploader Janitor Bot · PS10 uploaded 514d ago · NEW · open in Gerrit ↗
commit message
LU-18884 osp: use UUIDs instead of NIDs for LWP setup

The osp when setting up LWP uses NIDs instead of UUIDs for
LCFG_SETUP. This is wrong and NIDs can easily over flow the
obd_uuid structure. A side effect of this mistake is that
the ptlrpc conn to UUID mapping just ends up being a NID
looking up a NID which happens to be itself. That is very
wrong. Replace using an NID with a real UUID.

Test-Parameters: env=FORCE_LARGE_NID=true,LOAD_MODULES_REMOTE=true
Change-Id: I1e08a9475a8dddcfd7f212b6a1b37559c00bf84e
Signed-off-by: James Simmons <jsimmons@infradead.org>
68164 master J ✓B ✓T ✓R -1/2−
LU-20587 lnet: expand Netlink support for more peers
mine Alexey Lyashkov voted -1
7 unresolved M +102 −0
19d
Alexey Lyashkov voted -1
6 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
no vote yet from Serguei Smirnov, Chris Horn
build #132251 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov -1 2026-10-16 08:23
no vote yet: Serguei Smirnov, Chris Horn
patchsets: PS1 08-20 PS2 08-27 PS3 08-27 PS4 08-29 PS5 09-24
threads: 6 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-20 13:33 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) LU-20587 is filed as "lnetctl peer show -v 2 causes kernel oops", but the body only describes a capacity limit. Could it say that th
Gerrit AI review for Lustre PS1 · 2026-08-20 13:33
(style) LU-20587 is filed as "lnetctl peer show -v 2 causes kernel oops", but the body only describes a capacity limit. Could it say that this is fixing a crash, and describe how running out of skb space in lnet_peer_ni_show_dump() leads to the oops? That makes it much easier to decide whether the change needs backporting.
reply PS1 2026-08-20 13:33 Gerrit AI review for Lustre COMMIT_MSG:16 — (defect) This fixes a kernel oops, so it should carry a Fixes: tag. lnet_peer_ni_show_dump() and its single-skb dump came in with:
Gerrit AI review for Lustre PS1 · 2026-08-20 13:33
(defect) This fixes a kernel oops, so it should carry a Fixes: tag. lnet_peer_ni_show_dump() and its single-skb dump came in with:

Fixes: f0be00678cc8 ("LU-9680 lnet: collect data about peer_ni by using Netlink")
reply PS3 2026-08-28 13:13 Gerrit AI review for Lustre api-ni.c:7887 — Carrying forward the unbounded-allocation point from patchset 1, which does not look addressed yet: nothing caps cb->min_dump_alloc, and the
Gerrit AI review for Lustre PS3 · 2026-08-28 13:13
Carrying forward the unbounded-allocation point from patchset 1, which does not look addressed yet: nothing caps cb->min_dump_alloc, and there is no error when the computed size is unreasonable. The sibling handlers in this file and in obdclass do bound it, e.g. lnet_route_show_start():

    len += ROUTER_MSG_VALUES_SIZE * rlist->lgrl_count;
    if (len > BIT(sizeof(cb->min_dump_alloc) << 3)) {
            NL_SET_ERR_MSG(extack, "Netlink msg is too large");
            rc = -EMSGSIZE;
    } else {
            cb->min_dump_alloc = len;
    }

Peers are unbounded (unlike NIs, which are capped by lnet_interfaces_max), so the same guard - or a cap on how many peers one dump covers - seems needed here too.
reply PS4 2026-08-30 07:06 Gerrit AI review for Lustre api-ni.c:7868 — (defect) Nothing caps cb->min_dump_alloc and there is no error when the computed total is unreasonable. This was raised on patchset 1 ("allo
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(defect) Nothing caps cb->min_dump_alloc and there is no error when the computed total is unreasonable. This was raised on patchset 1 ("allocating an 4G in kernel - very very bad style") and the reply agreed peers still need overflow handling since, unlike NIs, they are not bounded by lnet_interfaces_max - but patchset 4 still accumulates straight into the field.

The sibling handler in this file bounds it, in lnet_route_show_start():

    len += ROUTER_MSG_VALUES_SIZE * rlist->lgrl_count;
    if (len > BIT(sizeof(cb->min_dump_alloc) << 3)) {
            NL_SET_ERR_MSG(extack, "Netlink msg is too large");
            rc = -EMSGSIZE;
    } else {
            cb->min_dump_alloc = len;
    }

and lustre/obdclass/kernelcomm.c does the same. Two reasons that guard matters here:

min_dump_alloc is u16 in netlink_callback before v5.7, so on the older supported kernels the += silently wraps modulo 65536 - and can wrap to less than PEER_KEY_TABLE_MSG_SIZE.

On newer kernels the skb head is still one contiguous kmalloc, not a kvmalloc: netlink_dump() calls alloc_skb(alloc_min_size, GFP_KERNEL), and __alloc_skb() -> kmalloc_reserve() ends in kmalloc_node_track_caller(). So above KMALLOC_MAX_SIZE the dump can only fail with -ENOBUFS, and below it every dump invocation is asking for a high-order allocation.
reply PS4 2026-08-30 07:06 Gerrit AI review for Lustre api-ni.c:8233 — (defect) None of the nla_nest_start() results in this handler are checked, and nla_nest_end() writes through the pointer without a NULL test
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(defect) None of the nla_nest_start() results in this handler are checked, and nla_nest_end() writes through the pointer without a NULL test:

    static inline int nla_nest_end(struct sk_buff *skb, struct nlattr *start)
    {
            unsigned long diff = skb_tail_pointer(skb) - (unsigned char *)start;
            start->nla_len = diff;

So once the skb runs out of room, nla_nest_start() returns NULL and the matching nla_nest_end() at the bottom of the loop faults. The nests opened for the -v 2 stats (send/recv/drop/health) are the ones LU-20587 names in its title.

Enlarging the skb makes this less likely, but any residual under-estimate still lands here. Should the dump bail out with -EMSGSIZE when a nest cannot be opened, so a short estimate degrades into a truncated dump instead of an oops?
reply PS5 2026-09-25 01:14 Gerrit AI review for Lustre api-ni.c:7868 — (defect) Nothing caps cb->min_dump_alloc and there is no error return when the computed total is unreasonable - it just accumulates. This is
Gerrit AI review for Lustre PS5 · 2026-09-25 01:14
(defect) Nothing caps cb->min_dump_alloc and there is no error return when the computed total is unreasonable - it just accumulates. This is the objection from patchset 1 ("allocating an 4G in kernel - very very bad style. Please use a multipart messages."), which was answered with "I do agree peer needs to still handle overflows since peers unlike NI (lnet_interfaces_max) is not bounded". Patchset 5 still has no bound.

The sibling handler in this file does bound it, lnet_route_show_start():

    len += ROUTER_MSG_VALUES_SIZE * rlist->lgrl_count;
    if (len > BIT(sizeof(cb->min_dump_alloc) << 3)) {
            NL_SET_ERR_MSG(extack, "Netlink msg is too large");
            rc = -EMSGSIZE;
    } else {
            cb->min_dump_alloc = len;
    }

At version 4/5 this charges roughly 945 bytes for a single-NI peer, so a few thousand peers already asks for a multi-megabyte buffer on every `lnetctl peer show`. Could the same guard, or a cap on how many peers one dump covers, be applied here?
owner James Simmons · uploader James Simmons · PS5 uploaded 41d ago · NEW · open in Gerrit ↗
commit message
LU-20587 lnet: expand Netlink support for more peers

Currently the LNet Netlink peer interface uses the default size
of 64K for it struct sk_buf. This limits the number of peers
that can be reported with the Netlink layer. We can manually
calculate the cb->min_dump_alloc to allocate the struct sk_buf
of the needed size.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I900ae18d6098df0df699df6a64d1d462702c2b4a
65688 master J –B ✓T ✗11R -2/2−
LU-18041 obd: mgc uses real uuid for its uuid to NID mapping
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 11 unresolved M +67 −48
22d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-2, review-dne-part-3, review-dne-part-7, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-7, review-ldiskfs-arm, review-ldiskfs-ubuntu, review-zfs
Andreas Dilger voted -1
9 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
2 thread(s) waiting on others
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-sec. session
review-dne-part-3 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-7 RHEL 9.8 / x86_64 ran 6 tests. 1 tests failed: sanity-scrub. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 2 tests failed: sanity-pfl, sanity-sec. session
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-3 RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-3 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-7 RHEL 9.8 / x86_64 ran 6 tests. 1 tests failed: sanity-scrub. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 6 tests. 1 tests failed: sanity-sec. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
review-zfs RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: sanity-lsnapshot. session
build #132962 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-10-06 16:36
no vote yet: Serguei Smirnov, Mikhail Pershin
patchsets: PS1 05-06 PS2 07-14 PS3 07-16 PS4 07-24 PS5 10-06
threads: 9 need your reply · 2 waiting on others · 0 own notes · 0 bot
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but `obd:` isn't a component tag used elsewhere in the tree. The change is mostly in obdclass (plus ldlm), so `obd
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(style) This isn't a bug, but `obd:` isn't a component tag used elsewhere in the tree. The change is mostly in obdclass (plus ldlm), so `obdclass:` would fit better.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "This is problem" -> "This is a problem", and "is to small" -> "is too small".
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(typo) "This is problem" -> "This is a problem", and "is to small" -> "is too small".
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre COMMIT_MSG:17 — The message describes only the MGC uuid change. Several behavior changes in the diff aren't mentioned:
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
The message describes only the MGC uuid change. Several behavior changes in the diff aren't mentioned:

- import_set_conn() now parses NID-shaped uuids directly and matches existing connections by `c_peer` NID instead of `oic_uuid`. This affects every OSC/MDC/OSP/LWP import, not just the MGC.
- lustre_start_simple() now ignores `s2` for every caller.
- lustre_add_mgc_failnodes() now creates one connection per failover NID instead of one per failover node, and maps every failover NID to the MGC's uuid.

Were these intended? If so, could the message explain why they are safe?
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre ldlm_lib.c:77 — (minor) ptlrpc_connection_get() returns NULL (not an ERR_PTR) when allocation fails, and only ptlrpc_uuid_to_connection() converts that to E
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(minor) ptlrpc_connection_get() returns NULL (not an ERR_PTR) when allocation fails, and only ptlrpc_uuid_to_connection() converts that to ERR_PTR(-ENOENT). On this branch the IS_ERR() check below misses NULL, so `oic_conn` can be stored as NULL and dereferenced later in import_select_connection(). It's an ENOMEM-only path, but the same `c ? c : ERR_PTR(-ENOMEM)` conversion would keep it consistent.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre ldlm_lib.c:99 — (defect) Matching on the peer NID string instead of `oic_uuid` breaks lookups whose uuid isn't the peer NID string. The MGC's primary connec
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) Matching on the peer NID string instead of `oic_uuid` breaks lookups whose uuid isn't the peer NID string. The MGC's primary connection is the clearest case: its uuid is now the random MGC uuid, so it never matches here. import_set_conn_priority() then returns -ENOENT, and ptlrpc_recover_import(imp, uuid) fails, e.g. `lctl set_param mgc.*.import=connection=<uuid>`.

It also fails for NID-shaped uuids when LNetPrimaryNID() replaced the peer NID with a different primary in ptlrpc_connection_get(). Repeated adds then create duplicate connections, and the IR reconnect in mgc_apply_recover_logs() -> ptlrpc_recover_import(imp, uuid.uuid, 1) can't find the connection.

client_import_del_conn() and client_import_add_nids_to_conn() still key on `oic_uuid`, so these lookups are now inconsistent. Also, `strncmp(..., sizeof(uuid->uuid))` is effectively strcmp() for a NUL-terminated 40-byte uuid, so the truncated-uuid case described in the comment above won't match either.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:162 — (defect) `node` is now the MGC's own obd_uuid, the same key lustre_start_mgc() used for the primary MGS NIDs. So every failover MGS NID is a
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) `node` is now the MGC's own obd_uuid, the same key lustre_start_mgc() used for the primary MGS NIDs. So every failover MGS NID is added to the same uuid_nid_data entry as the primary MGS NIDs. class_add_uuid() then calls LNetAddPeer() with the whole entry, telling LNet that the primary and failover MGS nodes are one multi-rail peer. With the default lock_prim_nid=1, LNetAddPeer() can call lnet_peer_force_merge() and merge an existing failover-node peer into the primary MGS peer.

The old code used a separate uuid per failover node for exactly this reason. Two other side effects:

- The primary connection's ptlrpc_uuid_to_peer() can now pick a failover node's NID.
- The entry is capped at MTI_NIDS_MAX (32) NIDs across all MGS nodes, and on reuse of an existing MGC, across every mount's mgsnode list.

Should the failover NIDs keep a per-node key that differs from the primary's?
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:170 — (minor) class_nid2uuid() doesn't truncate. It returns -EOVERFLOW when the NID string doesn't fit in UUID_MAX, and the `break` then skips thi
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(minor) class_nid2uuid() doesn't truncate. It returns -EOVERFLOW when the NID string doesn't fit in UUID_MAX, and the `break` then skips this NID's connection and the rest of the current node. So a failover MGS with a long IPv6 NID still gets no connection, which is the case the commit message says is fixed. Separately, the "can't add failover peer" CWARN below prints `node` (the MGC uuid) where the failover NID was probably intended.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:241 — (defect) This replaces `s2` with `uuid` for every lustre_start_simple() caller, not only lustre_start_mgc(). The OSD start in tgt_mount.c pa
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) This replaces `s2` with `uuid` for every lustre_start_simple() caller, not only lustre_start_mgc(). The OSD start in tgt_mount.c passes the mount flags in `s2`:

    snprintf(flagstr, sizeof(flagstr), "%lu:%u", mflags, lmd_flags);
    lustre_start_simple(lsi->lsi_osd_obdname, lsi->lsi_osd_type,
                        lsi->lsi_osd_uuid, lmd->lmd_dev, flagstr, ...);

Now buf 2 holds the OSD uuid string instead. osd-ldiskfs osd_mount() runs `sscanf(str, "%lu:%lu", &s_flags, &lmd_flags)` on it, the parse fails, and both stay 0. So MS_RDONLY, LMD_FLG_DEV_RDONLY and LMD_FLG_NOSCRUB are silently dropped: an `-o ro` target mounts read-write, and `noscrub` is ignored. osd-zfs does `strstr(str, ":")` and loses rdonly_dev/noscrub the same way. That would explain the sanity-scrub failures seen on every patchset, since that suite mounts with `noscrub`.

It would be safer to pass the uuid as `s2` from lustre_start_mgc() only (and keep the kernel-doc for `s2` accurate).
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:329 — (defect) Every new MGC now registers its NIDs under a fresh random uuid, but nothing calls class_del_uuid() for that key when the MGC is sto
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) Every new MGC now registers its NIDs under a fresh random uuid, but nothing calls class_del_uuid() for that key when the MGC is stopped (lustre_stop_mgc() doesn't touch the uuid table). Before this patch the key was the NID string, so repeated mounts reused one entry. Now each mount/umount cycle (autofs, for example) leaves another uuid_nid_data (~700 bytes) on g_uuid_list until module unload. lustre_uuid_to_peer() and class_add_uuid() scan that list linearly, so they get slower as it grows. Should the MGC remove its entry on cleanup?
owner James Simmons · uploader James Simmons · PS5 uploaded 28d ago · NEW · open in Gerrit ↗
commit message
LU-18041 obd: mgc uses real uuid for its uuid to NID mapping

Lustre creates a mapping, struct uuid_nid_data, using an 'uuid'
to many NIDs. That 'uuid' happens to be the primary NID. This
is problem for two reasons. First reason is that struct obd_uuid
is to small for full length IPv6 based NID addresses so it
ends up truncated. Second reason is for some systems the IP
addresses expire for the network interfaces during the file
system run time. This means the primary NID is not permanent.
What is a better node identifier for the mgc is the UUID
generated for it. Use that for the mappings.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ib00ac7c3e282be924f2a64245cfcc4fc4e5744a7
45608 master J !B ✓T ✓R -2/2−
LU-10824 llite: remove may_umount() loop
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase upstream 5 unresolved S +27 −18
22d
needs rebase — checkpatch: cannot be cherry-picked
Arshad Hussain voted -1
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
no vote yet from Shaun Tancheff, Andreas Dilger, Neil Brown, Feng Lei
janitor run: 15 failing config(s), none unique to this patch — janitor results
build #132335 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain -1 2026-09-28 05:12
no vote yet: Shaun Tancheff, Andreas Dilger, Neil Brown, Feng Lei, Timothy Day
patchsets:
+17 earlier PS1 11-18 PS2 11-18 PS3 11-18 PS4 11-18 Charlie Olmstead PS5 01-07 PS6 03-02 PS7 03-03 Andreas Dilger PS8 03-03 PS9 03-03 PS10 03-03 Andreas Dilger PS11 06-11 PS12 06-11 PS13 06-11 PS14 06-11 PS15 08-09 PS16 08-09 PS17 08-19
PS18 08-20 PS19 09-21 Arshad Hussain PS20 09-22 PS21 09-23 PS22 09-25
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS22 2026-09-26 06:56 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) If the patch is refreshed, consider saying concretely what was wrong with the old code. ll_mnt.mnt was set to current->fs->root.mnt,
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(minor) If the patch is refreshed, consider saying concretely what was wrong with the old code. ll_mnt.mnt was set to current->fs->root.mnt, which is the mounting process's root vfsmount, not the Lustre mount, and no reference was held on it. So may_umount() was testing the wrong mount (in practice always busy, so every umount -f slept the full 10s), and it could touch a freed vfsmount if that root went away, e.g. when a container exits. The body also doesn't mention the test-framework.sh change that bind-mounts the helper for build-tree testing.
reply PS22 2026-09-28 05:12 Arshad Hussain umount.lustre:12 — (trivial) (( .... ))
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(minor) This line can never fire. A successful umount already leaves via "&& exit 0" on line 10, so by this point rc is always non-zero. If the patch is refreshed, it can be dropped.
Arshad Hussain PS22 · 2026-09-28 05:12
(trivial) (( .... ))
reply PS22 2026-09-28 05:02 Arshad Hussain test-framework.sh:1237 — (defect) This is not your code. But worth fixing. 'continue' is wrong here.
Arshad Hussain PS22 · 2026-09-28 05:02
(defect) This is not your code. But worth fixing. 'continue' is wrong here.

```
[[ -f "$sbin_mount" ]] || touch "$sbin_mount" || true	
[[ -f "$sbin_umount" ]] || touch "$sbin_umount" || true		

```

-1 only for this.
reply PS22 2026-09-28 05:02 Arshad Hussain test-framework.sh:1253 — (trivial) can be fixed.
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(defect) A bind mount needs its target to exist, but nothing creates $sbin_umount first. The mount.lustre bind just above writes a "STUB MARK" file for exactly this reason. On a build-tree node that does not have the lustre RPM installed, /sbin/umount.lustre is missing, so the mount fails with "mount point does not exist" and error() aborts load_modules_local(). That means llmount.sh and every suite fail at setup. Autotest runs from installed RPMs, where $LUSTRE/utils/mount.lustre does not exist, so it never takes this branch and won't catch it.

Could this create a stub the same way sbin_mount does, or only bind when [[ -e $sbin_umount ]]?

(typo) "bund" -> "bind".
Arshad Hussain PS22 · 2026-09-28 05:02
(trivial) can be fixed.
reply PS22 2026-09-26 06:56 Gerrit AI review for Lustre test-framework.sh:1373 — (minor) This does not undo what load_modules_local() set up. When the bind succeeded, /sbin/umount.lustre is still a mount point here, so rm
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(minor) This does not undo what load_modules_local() set up. When the bind succeeded, /sbin/umount.lustre is still a mount point here, so rm fails with EBUSY and the bind stays in place. The next load_modules_local() call then finds mount.lustre unbound and stacks a second bind on top of it. Should this follow the sbin_mount pattern just above? That is: umount $sbin_umount if it appears in /proc/mounts, then remove it only if it is a stub.
owner James Simmons · uploader James Simmons · PS22 uploaded 39d ago · NEW · open in Gerrit ↗
commit message
LU-10824 llite: remove may_umount() loop

Al Viro pointed out the work around for LU-1882 is incorrect. It
can even lead to kernel panics under the right conditions. The
reason for this work around is that PtlRPC messages can still be
received after unmounting. With today's util-linux you can provide
umount helper scripts. Create one for Lustre that does nearly the
same thing that the kernel tried to accomplish. The difference is
umount.lustre is run always instead of the umount -f condition.

Test-Parameters: trivial testlist=conf-sanity env=ONLY=45,ONLY_REPEAT=100
Fixes: 205a57df2787 ("LU-1882 llite: Adding timed wait in ll_umount_begin")
Signed-off-by: Rick Mohr <rmohr@ornl.gov>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I1498c6348022bdd6a74db887ffc8836a7a03bab6
36612 master J ✗1B ✓T ✗2R -1/2−
LU-8585 tests: re-enable fid2path sanity test for subdir mount
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure M +125 −10
22d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — sanity-quota@ldiskfs+DNE:test_48
enforced failed: custom-1001, review-ldiskfs-dne-arm
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-quota@ldiskfs+DNE:test_48seen in 25 other reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #124513 SUCCESS · tests all Maloo sessions
no vote yet: Guillaume Courrier, Etienne AUJAMES, Andreas Dilger, Timothy Day
patchsets:
+13 earlier PS2 12-08 PS3 03-12 PS4 03-14 PS5 03-16 PS6 03-18 PS7 03-22 PS8 10-16 PS9 11-03 PS10 12-18 PS11 01-18 PS12 01-22 PS13 03-08 PS14 03-08
PS15 04-23 PS16 12-12 PS17 12-20 PS18 12-22 PS19 04-30
owner James Simmons · uploader James Simmons · PS19 uploaded 187d ago · NEW · open in Gerrit ↗
commit message
LU-8585 tests: re-enable fid2path sanity test for subdir mount

When a subdirectory is mounted, the .lustre directory cannot be
seen. With the move of llapi_fid2path() from using .lustre/fid to
name_to_handle_at() previous sanity test that failed due to
file sets being enabled should now pass since name_to_handle_at()
should be file set aware. We update a few test applications to
work with llapi_open_by_fid() if we can't access .lustre. Same
is done with liblustreapi.so as well.

Fixes: f71554200 ("LU-11208 tests: add version check to sanity tests")
Fixes: e2ac6e1ea ("LU-9341 lod: Add special O_APPEND striping")
Fixes: 9bd3e64b8 ("LU-28 fileset: add fileset mount support")
Test-Parameters: trivial envdefinitions="FILESET=/subdir" testlist=sanity
Change-Id: Iddbcea298613e1dcc0af5c6f3cab4f0de01dbb5c
Signed-off-by: James Simmons <jsimmons@infradead.org>
57454 master J !B ✓T ✗1R 0/2
LU-18461 layout: allow to be started from zero offset.
reviewing Alexey Lyashkov · PS11→PS38 since your -1 — your objection was dropped
70 unresolved XL +1309 −65
30d
PS11→PS38 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-5 RHEL 9.7 / x86_64 ran 7 tests. 1 tests failed: lustre-rsync-test. session
build #132562 SUCCESS · tests all Maloo sessions
no vote yet: Alexander Boyko, Andreas Dilger, Mikhail Pershin, Zhenyu Xu
patchsets:
+33 earlier PS1 12-16 PS2 12-17 PS3 12-27 PS4 01-10 PS5 02-18 PS6 02-19 PS7 02-21 PS8 02-27 PS9 02-28 PS10 03-18 PS11 05-23 PS12 08-22 PS13 09-09 PS14 09-22 PS15 10-15 PS16 10-17 PS17 10-22 PS18 11-03 PS19 12-18 PS20 12-18 PS21 12-25 PS22 01-13 PS23 01-27 PS24 02-20 PS25 02-28 PS26 03-02 PS27 03-02 PS28 04-24 PS29 04-27 PS30 05-19 PS31 05-21 PS32 05-26 PS33 06-02
PS34 08-20 PS35 08-25 PS36 09-14 PS37 09-23 PS38 09-29
your previous vote: -1 on PS11 (2025-07-17 17:15) — now at PS38
threads: 70 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS30 2026-05-21 21:31 Andreas Dilger COMMIT_MSG:10 — (typo) "Do object"?
Andreas Dilger PS30 · 2026-05-21 21:31
(typo) "Do object"?
reply PS34 2026-08-21 02:39 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) The subject has no grammatical subject - "allow to be started" leaves out what is being started. Something like "allow components to
Gerrit AI review for Lustre PS34 · 2026-08-21 02:39
(style) The subject has no grammatical subject - "allow to be started" leaves out what is being started. Something like "allow components to start at offset zero" reads better, and the trailing period is not usual for Lustre subjects.

More importantly, neither the subject nor the body names anything that this patch actually adds: `LOV_PATTERN_ZEROSTART`, `LLAPI_LAYOUT_ZEROSTART`, the `zerostart` layout type, or `lfs setstripe --zerostart`. That makes the change hard to find later with `git log --grep`.
reply PS34 2026-08-21 02:39 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "Do object" - DoM?
Gerrit AI review for Lustre PS34 · 2026-08-21 02:39
(typo) "Do object" - DoM?

This was raised on an earlier patchset and still reads the same way here.
reply PS34 2026-08-21 02:39 Gerrit AI review for Lustre COMMIT_MSG:19 — Several hunks are not accounted for by the description; could they be explained, or split out?
Gerrit AI review for Lustre PS34 · 2026-08-21 02:39
Several hunks are not accounted for by the description; could they be explained, or split out?

- osc_cache.c: the LASSERTF message gains `io %px`, which looks like debug instrumentation for this work rather than part of the feature.
- lfs.c `case 'C'`: the guard changes from `lsa_pattern == LLAPI_LAYOUT_MDT` to `(lsa_pattern & LLAPI_LAYOUT_RAID0) == 0`, a behaviour change to `-C|--overstripe-count` validation.
- lov_io.c `lov_io_layout_at()` and lov_offset.c `lov_stripe_offset()`: `return` converted to `RETURN()`.
- lov_offset.c: blank line after the SPDX tag removed.
- sanity-pfl.sh test_16b: two blank lines removed.
- lov_cl_internal.h: `lov_foreach_io_layout()` split into two macros.

It would also help to state the interop story here: `LOV_PATTERN_ZEROSTART` is a new on-disk/on-wire pattern bit, so a client older than this patch fails `lov_pattern_supported()` on such a layout and cannot open the file, and an older MDS rejects the setstripe. Is a version/feature gate expected, or is "both ends must be new" the intended contract?
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "Do object" -> "DoM object". This was raised on patchset 30 and is still here.
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(typo) "Do object" -> "DoM object". This was raised on patchset 30 and is still here.
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre COMMIT_MSG:19 — The body describes the motivation well but never names anything the patch adds, so this won't be findable later with `git log --grep`. Could
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
The body describes the motivation well but never names anything the patch adds, so this won't be findable later with `git log --grep`. Could it mention `--zerostart`, `LOV_PATTERN_ZEROSTART`/`LLAPI_LAYOUT_ZEROSTART` and `lsme_is_zerostart()` explicitly?

It also doesn't cover the largest kernel-side piece: the rework of `lov_io_iter_init()` that pulls the last stripe of the preceding component into a truncate so the KMS survives when a ZEROSTART component is truncated to its own start. That deserves a paragraph.

A few hunks are not explained at all and read as leftovers - should they be split out, or described?

- `lustre/osc/osc_cache.c`: the `osc_extent_find()` LASSERTF() gains the `io %px` argument; it looks like a debugging aid rather than part of the feature.
- `lustre/utils/lfs.c`: the `-C|--overstripe-count` check changes from `== LLAPI_LAYOUT_MDT` to `& LLAPI_LAYOUT_RAID0` and the message text changes. That is a user-visible behaviour change and isn't needed for `--zerostart` to work.
- `lustre/tests/sanity-dom.sh`: dropping the explicit `mkdir -p $MOUNT2` / `mount_client $MOUNT2` is unrelated to this feature (it is redundant with `MOUNT_2=yes` + `check_and_setup_lustre`, so it looks correct, just out of scope).
reply PS38 2026-10-05 11:26 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "Do object" was pointed out on patch set 30 and is still here. Should it be "DoM object"?
Gerrit AI review for Lustre PS38 · 2026-10-05 11:26
(typo) "Do object" was pointed out on patch set 30 and is still here. Should it be "DoM object"?
reply PS38 2026-10-05 11:26 Gerrit AI review for Lustre COMMIT_MSG:13 — (style) The body explains the motivation but not what the patch actually changes, so it is hard to find later with git log. If the patch is
Gerrit AI review for Lustre PS38 · 2026-10-05 11:26
(style) The body explains the motivation but not what the patch actually changes, so it is hard to find later with git log. If the patch is refreshed, could it name:

- the new `LOV_PATTERN_ZEROSTART` / `LLAPI_LAYOUT_ZEROSTART` pattern bit
- the `lfs setstripe --zerostart` and `-L raid0,zerostart` options
- the truncate change in lov_io_iter_init(), which pulls the last stripe of the preceding component into a truncate landing on a ZEROSTART component start
- the new sanity-zero.sh suite

Also, the subject should not end with a period.
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre lfs-setstripe.1:189 — (minor) There is no `lfs join` command or `lfs-join.1` man page in the tree - the join-file feature was removed, as the commit message itsel
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(minor) There is no `lfs join` command or `lfs-join.1` man page in the tree - the join-file feature was removed, as the commit message itself notes. This cross-reference will be a dangling link; could the sentence just describe the property directly?
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre lfs-setstripe.1:219 — (typo) "below" - the `--zerostart` description is above this one in the page.
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(typo) "below" - the `--zerostart` description is above this one in the page.
reply PS37 2026-09-24 09:18 Gerrit AI review for Lustre lfs-setstripe.1:599 — (minor) EXAMPLES doesn't gain a `--zerostart` case. A short composite example, e.g. a DoM or plain first component followed by a zerostart o
Gerrit AI review for Lustre PS37 · 2026-09-24 09:18
(minor) EXAMPLES doesn't gain a `--zerostart` case. A short composite example, e.g. a DoM or plain first component followed by a zerostart one, would show how the option is meant to be combined - the option description alone leaves that to the reader.
reply PS38 2026-10-05 11:26 Gerrit AI review for Lustre lfs-setstripe.1:217 — (typo) "see --zerostart below": the --zerostart option is described above this point in the page.
Gerrit AI review for Lustre PS38 · 2026-10-05 11:26
(typo) "see --zerostart below": the --zerostart option is described above this point in the page.
owner Alexey Lyashkov · uploader Alexey Lyashkov · PS38 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-18461 layout: allow to be started from zero offset.

Traditional PFL objects have a hole at the start to accommodate the
Do object if it needs to be migrated. This is not always necessary,
however, as the hole can prevent the use of large files with a small
number of OST objects in the ldiskfs backend.

Introducing the ability to eliminate this hole at the beginning could
provide an opportunity for OST objects to be moved across components
and offsets, and allow for a greater number of OST objects to be
stored in larger files. Additionally, multiple files could be combined
into one, similar to the join file feature of the past, once
components are able to be relocated.

Test-Parameters: testlist=sanity-zero
Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Change-Id: I730c66c695a3ff718c78cb82dab878b4f720bf55
63767 master J ✗1B ✓T ✗4R -1/2−
LU-20108 sec: support fscrypt natively for Linux 5.15
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure upstream 18 unresolved L +474 −208
36d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — runtests@ldiskfs+DNE:test_1
enforced failed: custom-1001, review-ldiskfs-dne, review-ldiskfs-dne-arm
18 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests@ldiskfs+DNE:test_1NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
custom-1001 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-dne RHEL 9.8 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 7 tests. 1 tests failed: sanity. session
build #131457 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Sebastien Buisson, Timothy Day
patchsets: PS1 02-03 PS2 07-14 PS3 08-10 PS4 09-09 PS5 09-09
threads: 18 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 11:35 Gerrit AI review for Lustre COMMIT_MSG:10 — The body says this handles the replacement of fscrypt_inherit_context(), but all three call sites are still there and unguarded:
Gerrit AI review for Lustre PS2 · 2026-07-28 11:35
The body says this handles the replacement of fscrypt_inherit_context(), but all three call sites are still there and unguarded:

    lustre/llite/namei.c:1230
    lustre/llite/namei.c:1851
    lustre/llite/dir.c:537

llcrypt_set_context() is only wired up in one place (ll_new_node_finish() for symlinks); everywhere else the new call is commented out. Should the message say the conversion is partial?
reply PS2 2026-07-28 11:35 Gerrit AI review for Lustre COMMIT_MSG:12 — A few hunks aren't accounted for by the description - can they be explained, or split out?
Gerrit AI review for Lustre PS2 · 2026-07-28 11:35
A few hunks aren't accounted for by the description - can they be explained, or split out?

    - config/Makefile.exports.in + lnet/libcfs/Makefile + lustre_compat/fs/crypto/Makefile: switching the llcrypt build gate from a config.h grep to an exported make variable
    - lustre/llite/statahead.c: ll_xattr_cache_insert() -> ll_set_encflags()
    - lustre/llite/namei.c: dropping the -ERANGE retry loop around get_context()
    - lustre/llite/namei.c: dropping the `encrypt && (open_flags & O_CREAT) && d_inode(dentry)` branch that used to call ll_set_encflags() with preload=true
    - the CDEBUG text changes ("it_finish server returned ...", "statahead server returned ...")
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre COMMIT_MSG:16 — (defect) Two hunks aren't accounted for by the description:
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) Two hunks aren't accounted for by the description:

- a new UAPI ioctl, LL_IOC_GET_ENCRYPTION_NONCE / llcrypt_ioctl_get_nonce()
- the folio signature change of llcrypt_encrypt_pagecache_blocks(), llcrypt_decrypt_pagecache_blocks() and llcrypt_finalize_bounce_page(), plus the new lustre_compat/linux/folio.h include

Both are independently landable. Should they be split out, or at least named in the body?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre lustre_crypto.h:50 — (defect) These now hand a folio to the in-kernel helpers, but on 5.15 - the kernel this patch is targeting - fscrypt_encrypt_pagecache_block
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) These now hand a folio to the in-kernel helpers, but on 5.15 - the kernel this patch is targeting - fscrypt_encrypt_pagecache_blocks() and fscrypt_decrypt_pagecache_blocks() take a `struct page *`, and fscrypt_finalize_bounce_page() at line 77 takes a `struct page **` (osc_request.c passes `foliop`). The folio conversions are much more recent.

There is no HAVE_* guard or compat shim here, so the in-kernel build looks like it would still fail on 5.15 with incompatible-pointer errors. Should a config/*.m4 test cover the page-vs-folio variants?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre lustre_crypto.h:138 — (defect) FS_IOC_GET_ENCRYPTION_NONCE and fscrypt_ioctl_get_nonce() only appeared in v5.7, and the mapping at line 96 is unguarded. Since the
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) FS_IOC_GET_ENCRYPTION_NONCE and fscrypt_ioctl_get_nonce() only appeared in v5.7, and the mapping at line 96 is unguarded. Since the commit message says in-kernel fscrypt is supported down to 5.8-era kernels today, is a HAVE_FSCRYPT_IOCTL_GET_NONCE test needed before this can be mapped unconditionally?
reply PS5 2026-09-10 19:30 Gerrit AI review for Lustre lustre_crypto.h:138 — (defect) This `#else` arm also covers the `--disable-crypto` build (no HAVE_LUSTRE_CRYPTO, no CONFIG_LL_ENCRYPTION), and llcrypt_context_for
Gerrit AI review for Lustre PS5 · 2026-09-10 19:30
(defect) This `#else` arm also covers the `--disable-crypto` build (no HAVE_LUSTRE_CRYPTO, no CONFIG_LL_ENCRYPTION), and llcrypt_context_for_new_inode() has no declaration there -- it is declared only at line 67 for the native branch, and in include/lustre_compat/linux/llcrypt.h only inside `#ifdef CONFIG_LL_ENCRYPTION`. dir.c and namei.c call it unguarded, so the build stops on an implicit declaration.

llcrypt_prepare_new_inode() has the matching problem on the link side: it is declared here, but keysetup.c only defines it under `#if !defined(HAVE_FSCRYPT_SET_CONTEXT) || defined(CONFIG_LL_ENCRYPTION)`. On a kernel where HAVE_FSCRYPT_SET_CONTEXT is set (the autoconf test at config/lustre-core.m4:787 runs regardless of --enable-crypto), neither condition holds and nothing defines it. Should the no-crypto section of llcrypt.h grow stubs for both?
reply PS5 2026-09-10 19:30 Gerrit AI review for Lustre dir.c:514 — (style) Not a bug, but this `len` shadows the `size_t len` parameter that is handed to md_create() further down, which makes the block harde
Gerrit AI review for Lustre PS5 · 2026-09-10 19:30
(style) Not a bug, but this `len` shadows the `size_t len` parameter that is handed to md_create() further down, which makes the block harder to follow. If the patch is refreshed, something like `ctxsize` would read better.
reply PS2 2026-07-28 11:35 Gerrit AI review for Lustre namei.c:1668 — Since `encrypt` is forced to true a few lines up whenever IS_ENCRYPTED(dir) and open_flags is non-zero, the value passed in by ll_lookup_it_
Gerrit AI review for Lustre PS2 · 2026-07-28 11:35
Since `encrypt` is forced to true a few lines up whenever IS_ENCRYPTED(dir) and open_flags is non-zero, the value passed in by ll_lookup_it_finish() is now only meaningful for the open_flags == 0 case. Was the parameter meant to stay?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre namei.c:685 — (defect) This runs on every lookup, not just creates - ll_lookup_it_finish() is reached from plain ll_lookup_nd() too.
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) This runs on every lookup, not just creates - ll_lookup_it_finish() is reached from plain ll_lookup_nd() too.

Two consequences for an encrypted parent:

- llcrypt_prepare_new_inode() returns -ENOKEY when the master key isn't loaded, so `ls` / `stat` of anything inside an encrypted directory without the key now fails instead of showing no-key names.
- with the key loaded it ends in llcrypt_get_encryption_info(inode), i.e. a getxattr RPC for the child's context, issued *before* the server-supplied context is stored. That is exactly what the comment three lines below says this code is arranged to avoid ("save an extra getxattr and avoid deadlock").

Was this meant to be gated on the create disposition?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre namei.c:1197 — (defect) GOTO(free_fake_inode, ...) lands on a label that is still inside this `if` block, and nothing after the label rechecks the error -
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) GOTO(free_fake_inode, ...) lands on a label that is still inside this `if` block, and nothing after the label rechecks the error - control just falls through to the security-context setup, ll_intent_lock() and ll_lookup_it_finish(), and `retval` is overwritten by the success assignment at the end.

So a failure from llcrypt_prepare_new_inode() or llcrypt_context_for_new_inode() is silently discarded, and the OBD_ALLOC failure at the -ENOMEM goto continues with op_file_encctx == NULL, creating the file in the encrypted directory with no encryption context at all.

ll_dir_setdirstripe() and ll_new_node_prepare() both put an `if (err) GOTO(out..., err)` after the label; that seems to be missing here.
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre namei.c:1210 — (defect) The volatile branch above takes a reference via volatile_ref_file() and the old code released it with fput() once the context had b
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) The volatile branch above takes a reference via volatile_ref_file() and the old code released it with fput() once the context had been fetched. Now the only fput() left is on the !ref_inode error path, so the reference leaks on every volatile-file create in an encrypted directory.

The fake-inode branch also skips llcrypt_put_encryption_info(ref_inode) before destroy_inode(), so the llcrypt_info that llcrypt_prepare_new_inode() attached leaks too - dir.c:539 and namei.c:1843 both call it.
reply PS5 2026-09-10 19:30 Gerrit AI review for Lustre namei.c:705 — (defect) Swapping ll_xattr_cache_insert() for llcrypt_set_context() ties caching the server-supplied context to the *parent's* policy, which
Gerrit AI review for Lustre PS5 · 2026-09-10 19:30
(defect) Swapping ll_xattr_cache_insert() for llcrypt_set_context() ties caching the server-supplied context to the *parent's* policy, which it did not depend on before.

For a directory that has its own policy but sits under an unencrypted parent, mdt_pack_encctx_in_reply() still sets OBD_MD_ENCCTX because the child carries LUSTRE_ENCRYPT_FL. Here `parent` is not encrypted, so llcrypt_prepare_new_inode() above returns 0 and leaves `encrypt` false, and then:

    llcrypt_set_context() -> llcrypt_inherit_context(parent, ...)
      -> llcrypt_get_encryption_info(parent) -> get_context() -> -ENODATA

(native path: fscrypt_set_context() hits WARN_ON_ONCE(!ci) and returns -ENOKEY).

The CWARN reads as non-fatal, but `rc` is no longer cleared on the way out -- the old `GOTO(out, rc = 0)` before the `out:` label is gone and `if (encrypt)` does not run to overwrite it, so ll_lookup_it_finish() returns the error and ll_lookup_it() turns it into ERR_PTR(). Does that make `ls`/`stat` of such a directory fail?
owner James Simmons · uploader James Simmons · PS5 uploaded 55d ago · NEW · open in Gerrit ↗
commit message
LU-20108 sec: support fscrypt natively for Linux 5.15

Currently Lustre only supports up to 5.8 kernels. This work
handles the replacement of fscrypt_inherit_context() with
fscrypt_prepare_new_inode() and fscrypt_set_context(). So the
encrypt context is done in a two step process.

Test-Parameters: trivial testlist=sanity-sec
Change-Id: Ie8defa6e71fecddfd773e01f93d7ae3cb8d6e18e
Signed-off-by: James Simmons <jsimmons@infradead.org>
45882 master J ✗1B ✓T ✗5R -1/2−
LU-8130 ldlm: convert ldlm_resource hash to rhashtable
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure upstream 19 unresolved L +441 −347
36d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — sanity-pcc@ldiskfs+DNE:test_22
enforced failed: review-dne-part-1, review-dne-part-5, review-dne-selinux-ssk-part-2, review-dne-zfs-part-3
18 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-pcc@ldiskfs+DNE:test_22seen in 13 other reviews
failed enforced testplatformdetail
review-dne-part-1 crashed RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 crashed RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-3 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
build #129749 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Shaun Tancheff, Alexey Lyashkov, Neil Brown, Vitaly Fertman, Timothy Day, Sergey Cheremencev, Andreas Dilger, Oleg Drokin, Patrick Farrell
patchsets:
+80 earlier PS1 12-17 PS2 12-17 PS3 12-18 PS4 12-21 PS5 12-08 PS6 12-12 Neil Brown PS7 10-15 PS8 10-18 PS9 10-19 PS10 10-28 PS11 12-13 PS12 02-08 PS13 02-08 PS14 02-08 PS15 02-10 PS16 02-15 PS17 02-22 PS18 02-23 PS19 03-23 PS20 03-29 PS21 03-30 PS22 03-31 PS23 03-31 PS24 04-01 PS25 04-02 PS26 04-02 PS27 04-02 PS28 04-02 PS29 04-02 PS30 04-08 PS31 04-12 PS32 04-17 PS33 04-23 PS34 06-04 PS35 06-05 PS36 06-24 PS37 06-30 PS38 06-30 PS39 09-07 Shaun Tancheff PS40 09-08 Shaun Tancheff PS41 09-08 Shaun Tancheff PS42 09-08 PS43 10-15 Shaun Tancheff PS44 11-25 Shaun Tancheff PS45 12-21 Shaun Tancheff PS46 04-23 Shaun Tancheff PS47 05-02 PS48 05-03 PS49 07-25 PS50 12-12 PS51 12-15 PS52 12-19 PS53 01-26 PS54 02-05 PS55 02-09 PS56 02-13 PS57 02-14 PS58 02-14 PS59 02-19 PS60 03-06 PS61 04-13 PS62 04-16 PS63 04-30 PS64 05-11 Shaun Tancheff PS65 05-12 Shaun Tancheff PS66 05-13 Shaun Tancheff PS67 05-26 Shaun Tancheff PS68 05-28 Shaun Tancheff PS69 05-28 Janitor Bot PS70 05-28 Shaun Tancheff PS71 05-28 Shaun Tancheff PS72 05-28 PS73 05-29 Shaun Tancheff PS74 05-29 Shaun Tancheff PS75 05-29 Shaun Tancheff PS76 06-04 Shaun Tancheff PS77 06-06 Shaun Tancheff PS78 06-19 Shaun Tancheff PS79 06-20 PS80 08-05
PS81 08-07 PS82 08-09 PS83 08-12 PS84 08-14 PS85 08-19
your previous vote: -1 on PS71 (2026-05-28 16:40) — now at PS85
threads: 18 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS83 2026-08-13 04:17 Gerrit AI review for Lustre COMMIT_MSG:41 — cl2osc() is container_of_safe() on oo_cl, which sits at offset 0, so IS_ERR_OR_NULL(cl2osc(obj)) is the same test as IS_ERR_OR_NULL(obj). It
Gerrit AI review for Lustre PS83 · 2026-08-13 04:17
cl2osc() is container_of_safe() on oo_cl, which sits at offset 0, so IS_ERR_OR_NULL(cl2osc(obj)) is the same test as IS_ERR_OR_NULL(obj). It checks the cl_object pointer that was passed in, not whether the osc_object still exists; an object that was freed while still referenced is an ordinary pointer, not NULL or an ERR_PTR.

Could the message name the pointer that actually becomes NULL or an error, and where it is set that way?
reply PS84 2026-08-14 15:22 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldlm/ldlm_resource.c:
Misc Code Checks Robot (Gatekeeper helper) PS84 · 2026-08-14 15:22
ldlm/ldlm_resource.c:
 warn: ldlm_resource_get():inconsistent indenting
reply PS84 2026-08-15 08:31 Gerrit AI review for Lustre COMMIT_MSG:27 — This paragraph explains the bucket-array sizing change, but not that the bucket selection function changed shape as well. ldlm_res_hop_hash(
Gerrit AI review for Lustre PS84 · 2026-08-15 08:31
This paragraph explains the bucket-array sizing change, but not that the bucket selection function changed shape as well. ldlm_res_hop_hash() summed all four words of the res_id; ldlm_res_hop_fid_hash() hashes only the FID in name[0] and name[1]. Worth a sentence, since it changes which resources share an ldlm_ns_bucket.

The new LDLM_FL_KUNIT_TESTING flag in lustre_dlm_flags.h isn't mentioned anywhere in the body either - is that meant to be part of this patch, or a separate cleanup of the bare BIT(63) uses?
reply PS85 2026-08-19 18:22 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldlm/ldlm_resource.c:
Misc Code Checks Robot (Gatekeeper helper) PS85 · 2026-08-19 18:22
ldlm/ldlm_resource.c:
 warn: ldlm_resource_get():inconsistent indenting
reply PS85 2026-08-20 10:47 Gerrit AI review for Lustre COMMIT_MSG:42 — (suggestion) No Test-Parameters: line for a change of this reach - it rewrites the resource lookup path for MDC/MDT/OSC/OST/MGC/MGT namespac
Gerrit AI review for Lustre PS85 · 2026-08-20 10:47
(suggestion) No Test-Parameters: line for a change of this reach - it rewrites the resource lookup path for MDC/MDT/OSC/OST/MGC/MGT namespaces and touches recovery, eviction and quota. Something like

    Test-Parameters: testlist=recovery-small,replay-single,replay-dual,conf-sanity,sanity-quota

would get the paths this rewrites covered by the test run.
reply PS83 2026-08-13 04:17 Gerrit AI review for Lustre lustre_dlm.h:1204 — lr_hash and lr_rcu share storage, so call_rcu(&res->lr_rcu, ...) writes over lr_hash.next. That was safe with cfs_hash because every chain w
Gerrit AI review for Lustre PS83 · 2026-08-13 04:17
lr_hash and lr_rcu share storage, so call_rcu(&res->lr_rcu, ...) writes over lr_hash.next. That was safe with cfs_hash because every chain walk held the bucket lock; rhashtable readers walk the chain under rcu_read_lock() alone.

ldlm_resource_putref() -> __ldlm_resource_putref_final() does rhashtable_remove_fast(), then ldlm_resource_free(res, true) -> call_rcu(), and call_rcu() sets head->next = NULL right away. RCU removal requires the removed node's next pointer to stay intact for a grace period, because a reader can already be sitting on that node when it is unlinked.

A concurrent ldlm_resource_get() walking that bucket then loads NULL as the next pointer. rht_is_a_nulls() only tests bit 0, so NULL is not recognised as end-of-chain: the loop body runs with pos == NULL, rht_obj() subtracts head_offset, and rs_cmp() dereferences the result.

struct lu_object_header keeps loh_hash and loh_rcu as separate fields, with a comment about exactly this requirement. Should lr_rcu be split out of the union the same way?
reply PS84 2026-08-15 08:31 Gerrit AI review for Lustre lustre_dlm_flags.h:387 — This isn't a bug, but BIT() is unsigned long while l_flags is __u64, so BIT(63) is out of range on a 32-bit build. Every other flag in this
Gerrit AI review for Lustre PS84 · 2026-08-15 08:31
This isn't a bug, but BIT() is unsigned long while l_flags is __u64, so BIT(63) is out of range on a 32-bit build. Every other flag in this file spells the value out as 0x...ULL with a /* bit N */ comment and provides ldlm_is_/ldlm_set_ helpers - consider matching that:

    #define LDLM_FL_KUNIT_TESTING 0x8000000000000000ULL /* bit 63 */
    #define ldlm_is_kunit_testing(_l) LDLM_TEST_FLAG((_l), 1ULL << 63)
    #define ldlm_set_kunit_testing(_l) LDLM_SET_FLAG((_l), 1ULL << 63)

which would also let the two ldlm_lock.c users read like the surrounding flag tests.
reply PS84 2026-08-15 08:31 Gerrit AI review for Lustre l_lock.c:34 — This gives lock_res_and_lock() a new failure return, but only 8 of the 111 call sites look at the result; the rest go straight on to unlock_
Gerrit AI review for Lustre PS84 · 2026-08-15 08:31
This gives lock_res_and_lock() a new failure return, but only 8 of the 111 call sites look at the result; the rest go straight on to unlock_res_and_lock(), which is unlock_res(lock->l_resource) on the very pointer that produced the error.

As far as I can tell the error can't fire today: l_resource is only cleared by the rcu_assign_pointer(lock->l_resource, NULL) in ldlm_lock_put(), which runs after h_ref has already reached zero, so no caller that holds a lock reference can observe it, and nothing assigns an ERR_PTR to l_resource at all.

So either it is unreachable, and the error plumbing added through ldlm_lock_enqueue(), ldlm_callback_handler(), osc_ldlm_glimpse_ast() and osc_extent_release() could go, or it is reachable and the other 103 callers need converting in the same patch. Which is it?
reply PS85 2026-08-20 10:47 Gerrit AI review for Lustre ldlm_lock.c:196 — (minor) This critical section only spans the two pointer loads - res is dereferenced at the lr_type test below and handed to ldlm_resource_p
Gerrit AI review for Lustre PS85 · 2026-08-20 10:47
(minor) This critical section only spans the two pointer loads - res is dereferenced at the lr_type test below and handed to ldlm_resource_putref(), and ns is used by lprocfs_counter_decr(), all after rcu_read_unlock(). If l_resource really needed RCU protection here the section would have to reach as far as the putref; as written it protects nothing that the lock's own resource reference doesn't already cover.

The LASSERT(lock->l_resource != LP_POISON) a few lines up reads the same field bare, which suggests the plain read was fine. Could this just go back to a direct load?
reply PS83 2026-08-13 04:17 Gerrit AI review for Lustre ldlm_reclaim.c:176 — ns_reclaim_start is now only ever assigned 0 in ldlm_namespace_new(); the ldlm_res_to_ns(res)->ns_reclaim_start++ that used to advance it we
Gerrit AI review for Lustre PS83 · 2026-08-13 04:17
ns_reclaim_start is now only ever assigned 0 in ldlm_namespace_new(); the ldlm_res_to_ns(res)->ns_reclaim_start++ that used to advance it went away with the per-bucket bookkeeping in ldlm_reclaim_lock_cb(). rcd_start is therefore always 0, the rcd_skip/rcd_cursor fast-forward below can never trigger, and every reclaim pass restarts on the same resources. nsb_reclaim_start is incremented but no longer read either.

That drops the round-robin scan the ldlm_reclaim_res() comment still describes, and it is not mentioned in the commit message. Is the intent to keep the round-robin, or to remove it and the now-dead rcd_skip/rcd_cursor/rcd_start fields with it?

Also worth noting the units no longer match: rcd_cursor counts resources while tbl->size is a bucket count.
reply PS80 2026-08-07 07:20 Gerrit AI review for Lustre ldlm_resource.c:1166 — (minor) This comment doesn't match the new scheme. With the rhashtable the table holds no reference of its own: an entry is removed exactly
Gerrit AI review for Lustre PS80 · 2026-08-07 07:20
(minor) This comment doesn't match the new scheme. With the rhashtable the table holds no reference of its own: an entry is removed exactly when `lr_refcount` hits zero in `__ldlm_resource_putref_final()`, and `rs_cmp()` hides zero-refcount entries from lookups. During the walk the only extra reference is the `refcount_inc_not_zero()` in `ldlm_resource_for_each()`.

So the count printed below is one lower than the number of stray references, and a resource holding exactly one leaked reference no longer produces the message at all.
reply PS82 2026-08-10 03:20 Gerrit AI review for Lustre ldlm_resource.c:1174 — (style) This is a new exported API and it has no kerneldoc, unlike `ldlm_resource_get()` right below. Worth documenting the callback contrac
Gerrit AI review for Lustre PS82 · 2026-08-10 03:20
(style) This is a new exported API and it has no kerneldoc, unlike `ldlm_resource_get()` right below. Worth documenting the callback contract, in particular that the callback owns no reference (it must not putref), that a non-zero return stops the walk, and that a callback can be invoked more than once for the same resource - `rhashtable_walk_start()` here is the void variant, so the `-EAGAIN` a resize produces is discarded and the walk restarts from slot 0. That last property is what forced the `l_pending_chain` check in `ldlm_chain_lock_for_replay()`, and every future callback author needs to know about it.
owner James Simmons · uploader James Simmons · PS85 uploaded 76d ago · NEW · open in Gerrit ↗
commit message
LU-8130 ldlm: convert ldlm_resource hash to rhashtable

Using an rhashtable allows lockless lookup at the cost
of rcu freeing of entries.

When we find an entry, we need to atomically check the
reference hasn't dropped to zero.

When adding an entry, we might find an existing entry which is in the
process of being removed - with a zero refcount.  In that case
we loop around and repeat the lookup.  To ensure this doesn't
spin, the 'cmp' function will fail any comparison with a resource
which has a zero refcount.

Now that we are using resizing hash tables, we don't need to preconfig
suitable sizes for each namespace.  We can just use the default and
let it grow as needed.  We keep the pre-configured sizes
for the bucket array.  Previously the size of the bucket array was the
difference between nsd_all_bits and nsd_bkt_bits.  As we don't need
nsd_all_bits any more, nsd_bkt_bits is changed to the number of bits
used to choose a bucket.

Walking an rhashtable requires that we manage refcounts ourself, so
a new function, ldlm_resource_for_each() is added to do that.
Note that with this patch we now update a per-table counter
on every insert/remove, which might cause more contention
between CPUs on a busy system.  Hopefully rhashtable will
be enhanced in the near future to support a per-CPU counter
for nelems.

Only use call_rcu() to free slab resources that have been removed
from the rhashtable, other cases can be free immediately.

This change exposes new race conditions in the osc layer so
we add code to check if osc_objects still exist.

Signed-off-by: NeilBrown <neil@brown.name>
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ie65f6c5f6e246ed6684ade05ddab8740ac8137dd
37246 master J ✗14B ✗T –R 0/2
LU-13139 obdclass: collect stats for OSD methods
carrying Alex Zhuravlev · build failure (#131784)
14 unique failures 1 unresolved L +447 −114
49d
build failure (#131784)
janitor: 14 test failures unique to this patch — ost-pools@ldiskfs+DNE:test_25, ost-pools@zfs:test_25, recovery-small@ldiskfs+DNE:test_29a +11 more
1 unresolved thread(s) await your reply — last from Andreas Dilger
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
ost-pools@ldiskfs+DNE:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@ldiskfs+DNE:test_29aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@zfs:test_29aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_56odseen in 6 other reviews
sanity2@ldiskfs+DNE:test_65kseen in 2 other reviews
sanity2@zfs:test_65kseen in 2 other reviews
sanity-slow@zfs:test_255cseen in 3 other reviews
sanity-lfsck@ldiskfs+DNE:test_43NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lfsck@ldiskfs+DNE:test_45NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lfsck@zfs:test_45NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_16cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_80seen in 81 other reviews
sanity-quota@zfs:test_16cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #131784 FAILURE
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+55 earlier PS2 01-19 PS3 01-19 PS4 01-30 PS5 02-09 PS6 02-14 PS7 02-17 PS8 02-21 PS9 03-04 PS10 03-27 PS11 04-10 PS12 04-12 PS13 04-24 PS14 05-04 PS15 07-03 PS16 07-05 PS17 08-01 PS18 01-27 PS19 02-12 Andreas Dilger PS20 02-13 PS21 02-14 PS22 02-16 PS23 02-27 PS24 02-29 PS25 04-30 PS26 06-01 PS27 06-21 PS28 07-09 PS29 08-06 PS30 08-11 PS31 08-22 PS32 09-04 PS33 09-09 PS34 10-09 PS35 10-30 PS36 11-24 PS37 12-10 PS38 12-10 PS39 12-23 PS40 01-23 PS41 02-14 PS42 03-27 PS43 04-10 PS44 04-18 PS45 04-28 PS46 05-19 PS47 05-22 PS48 06-05 PS49 06-16 PS50 06-23 PS51 07-08 PS52 07-09 James Simmons PS53 07-24 James Simmons PS54 05-14 PS55 05-19 PS56 05-28
PS57 05-30 James Simmons PS58 06-03 James Simmons PS59 06-16 James Simmons PS60 07-13 James Simmons PS61 09-15 James Simmons
your previous vote: +1 on PS53 (2025-07-24 16:49) — now at PS61
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS52 2025-07-13 15:42 Andreas Dilger dt_object.c:1980 — It would be better to have a table declaring the stats, then have a loop iterating over all entries in the table to call lpricfs_counter_ini
Andreas Dilger PS52 · 2025-07-13 15:42
It would be better to have a table declaring the stats, then have a loop iterating over all entries in the table to call lpricfs_counter_init() for each entry.
owner Alex Zhuravlev · uploader James Simmons · PS61 uploaded 50d ago · NEW · open in Gerrit ↗
commit message
LU-13139 obdclass: collect stats for OSD methods

frequency and time spent in each method is collected,
then can be found in os[dp].*.osd_stats and lod.*.osd_stats:

osd-ldiskfs.lustre-MDT0000.osd_stats=
snapshot_time             1674142976.044241006 secs.nsecs
start_time                1674142916.072747822 secs.nsecs
elapsed_time              59.971493184 secs.nsecs
trans_create              259 samples [usecs] 2 18 2000 18560
trans_start               259 samples [usecs] 0 249 505 64715
trans_stop                259 samples [usecs] 0 1906 11820 10291894
read_lock                 332 samples [usecs] 0 1 3 3
write_lock                284 samples [usecs] 0 0 0 0
decl_create               100 samples [usecs] 0 12 57 491
create                    94 samples [usecs] 11 96 4060 198414
decl_destroy              2 samples [usecs] 4 12 16 160
attr_get                  493 samples [usecs] 0 23 24 530
decl_ref_add              36 samples [usecs] 0 0 0 0
ref_add                   24 samples [usecs] 0 1 1 1
decl_ref_del              2 samples [usecs] 0 0 0 0
decl_xattr_set            102 samples [usecs] 0 0 0 0
xattr_set                 15 samples [usecs] 0 5 10 32
xattr_get                 35 samples [usecs] 0 7 17 91
decl_insert               116 samples [usecs] 0 0 0 0
insert                    116 samples [usecs] 0 31 441 5607
...
osp.lustre-MDT0000-osp-MDT0001.osd_stats=
snapshot_time             1734959321.493552049 secs.nsecs
start_time                1734959257.142508748 secs.nsecs
elapsed_time              64.351043301 secs.nsecs
trans_create              5 samples [usecs] 0 0 0 0
trans_start               5 samples [usecs] 0 0 0 0
trans_stop                5 samples [usecs] 0 306 324 93870
read_lock                 4 samples [usecs] 0 0 0 0
write_lock                13 samples [usecs] 0 0 0 0
decl_create               3 samples [usecs] 0 1 1 1
create                    3 samples [usecs] 0 2 2 4
attr_get                  16 samples [usecs] 0 34 68 2312

Change-Id: I1efe3eb5e646cd638a5fe558886468faa528a9d1
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
58592 master J !B ✓T ✗46R 0/2
LU-8130 obd: replace gen hash with Xarray
mine enforced failed: review-dne-ipv6, review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-arm, review-ldiskfs-ubuntu, review-zfs
upstream 10 unresolved M +30 −155
57d
enforced failed: review-dne-ipv6, review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-arm, review-ldiskfs-ubuntu, review-zfs
10 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-ipv6 crashed RHEL 9.7 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-ipv6 crashed RHEL 9.8 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 crashed RHEL 9.7 / x86_64 ran 20 tests. 8 tests failed: sanity-pfl, sanity-lnet, lnet-selftest, pjdfstest, sanity-sec, sanity-lfsck, ru session
review-dne-part-3 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-3 crashed RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 9.7 / x86_64 ran 15 tests. 7 tests failed: sanity-quota, sanity-hsm, sanity-flr, sanity-dom, replay-ost-single, mmp, insan session
review-dne-part-5 crashed RHEL 9.7 / x86_64 ran 8 tests. 2 tests failed: sanityn, recovery-small. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 9.8 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.8 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.7 / x86_64 ran 10 tests. 4 tests failed: sanity-ec, sanity-scrub, sanity-pcc, large-scale. %% THIS TEST SESSION CRASHED session
review-dne-part-8 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-8 crashed RHEL 10.1 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-8 crashed RHEL 9.8 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-1 crashed RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 crashed RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 9.8 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 9.8 / x86_64 ran 19 tests. 9 tests failed: sanity-pfl, sanity-lnet, lnet-selftest, pjdfstest, sanity-sec, sanity-lfsck, ru session
review-dne-zfs-part-3 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 9.8 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 9.7 / x86_64 ran 13 tests. 7 tests failed: sanity-quota, sanity-hsm, sanity-flr, sanity-dom, replay-ost-single, mmp, insan session
review-dne-zfs-part-5 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 9.8 / x86_64 ran 4 tests. 2 tests failed: ost-pools, replay-single. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-7 crashed RHEL 9.8 / x86_64 ran 6 tests. 3 tests failed: sanity-ec, sanity-pcc, large-scale. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-7 crashed RHEL 9.7 / x86_64 ran 10 tests. 4 tests failed: sanity-ec, sanity-scrub, sanity-pcc, large-scale. %% THIS TEST SESSION CRASHED session
review-ldiskfs crashed RHEL 8.10 / x86_64 ran 7 tests. 3 tests failed: sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, SLES 15.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, RHEL 9.8 / x86_64 ran 7 tests. 3 tests failed: sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, RHEL 10.1 / x86_64 ran 9 tests. 3 tests failed: sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm crashed RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 8 tests. 4 tests failed: sanity-sec, sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-ubuntu crashed RHEL 8.10 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-zfs crashed RHEL 8.10 / x86_64 ran 14 tests. 6 tests failed: sanity-lsnapshot, insanity, replay-ost-single, replay-single, sanity-flr, sanit session
build #131254 SUCCESS · tests all Maloo sessions
no vote yet: Mikhail Pershin
patchsets: PS1 03-30 PS2 03-30 PS3 04-10 PS4 01-10 PS5 09-07
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre COMMIT_MSG:11 — The body explains the data-structure swap but not the reference-counting changes that come with it. class_export_put() is added in class_unl
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
The body explains the data-structure swap but not the reference-counting changes that come with it. class_export_put() is added in class_unlink_export() and tgt_client_free(), and removed in tgt_reply_data_init() and update_recovery_update_ses(). Those are behavior changes, not a mechanical hash->xarray conversion, and it would help to say what the intended ownership rule for obd_gen_ids is.

The old gen_kepcmp() also filtered on !exp->exp_failed, so lookups could never return a failed export; xa_load() has no such filter. That change deserves a line in the message too.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre COMMIT_MSG:13 — (style) Signed-off-by: normally comes before Change-Id:; the reversed order usually means the Lustre commit hook is not installed locally.
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(style) Signed-off-by: normally comes before Change-Id:; the reversed order usually means the Lustre commit hook is not installed locally.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre obd.h:722 — (style) The comment above still calls this a hash body. While renaming the field, `obd_gen_ids` reads as if it stores ids rather than export
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(style) The comment above still calls this a hash body. While renaming the field, `obd_gen_ids` reads as if it stores ids rather than exports keyed by generation - something like obd_gen_exports would say what it holds.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre genops.c:1152 — (defect) Two problems with this put.
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) Two problems with this put.

First, ted_lcd is non-NULL for every target export (tgt_client_alloc() allocates it for all non-self exports), while an obd_gen_ids entry only exists for exports inserted by tgt_clients_data_init() when tgt_is_multimodrpcs_record() is true. So a regular client that connected after mount was never in the xarray, yet still gets a put here. The old code was guarded by hlist_unhashed(&exp->exp_gen_hash), which was exactly the "is it in the table" test; xa_erase()'s return value can serve the same purpose.

Second, nothing takes a matching reference on insert any more, so even for exports that are in the xarray this put has no counterpart.

Worth noting too: this runs with obd_dev_lock held, and if it ever is the final reference, class_export_put() -> obd_zombie_export_add() takes obd_dev_lock again.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre obd_config.c:963 — (minor) xa_destroy() on the next line already erases every entry and frees the nodes, so this loop looks like a no-op. If the intent was to
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(minor) xa_destroy() on the next line already erases every entry and frees the nodes, so this loop looks like a no-op. If the intent was to release the export references held by the xarray, the loop needs a class_export_put() on each entry (and a reference has to be taken on insert first).

Reusing `flag`, the char * used above for parsing the lcfg flag string, as the xa_for_each() entry variable is also confusing to read.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:467 — (defect) This drops a reference the xarray never took, and it does so from a context where the refcount is already zero.
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) This drops a reference the xarray never took, and it does so from a context where the refcount is already zero.

The main caller chain is class_export_put() -> obd_zombie_exp_cull() -> class_export_destroy() -> obd_destroy_export() -> mdt_destroy_export()/ofd_destroy_export() -> tgt_client_free(). class_export_destroy() opens with

    LASSERT(refcount_read(&exp->exp_handle.h_ref) == 0);

so the class_export_put() here hits its own LASSERT(refcount_read(...) > 0) and LBUGs. That is on the teardown path of every regular server export, not just the ones recovered from last_rcvd.

mdt_init_export()'s err_free: path also calls tgt_client_free() directly, where the export is still live, so there it silently loses a reference instead.

The old code only removed the export when it was actually hashed (hlist_unhashed()); the xarray entry only exists for exports added by tgt_clients_data_init() with a non-zero lcd_generation, so an unconditional put cannot be right either way. xa_erase() returning the old entry could be used to tell the two cases apart.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:1773 — (defect) The old cfs_hash_add_unique() took a reference on the export through gen_hash_ops.hs_get()->class_export_get(). ll_xa_insert() does
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) The old cfs_hash_add_unique() took a reference on the export through gen_hash_ops.hs_get()->class_export_get(). ll_xa_insert() does not, so after the class_export_put() two lines below the xarray holds a bare pointer with no reference at all.

Every surviving class_export_put() that was paired with that reference is now unbalanced - see class_unlink_export(), tgt_client_free(), the error path below at tgt_set_reply_slot(), and distribute_txn_replay_handle(). Should this be class_export_get(exp) before the insert?
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:1775 — (minor) GFP_KERNEL here; Lustre server allocations in this path normally use GFP_NOFS (OBD_ALLOC_PTR() a few lines up does). This runs durin
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(minor) GFP_KERNEL here; Lustre server allocations in this path normally use GFP_NOFS (OBD_ALLOC_PTR() a few lines up does). This runs during target mount while reading last_rcvd, so reclaim recursing back into the same device seems worth avoiding.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:2252 — (defect) The success-path class_export_put() below was removed with the switch to xa_load(), but this one on the tgt_set_reply_slot() error
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) The success-path class_export_put() below was removed with the switch to xa_load(), but this one on the tgt_set_reply_slot() error path was left behind. xa_load() returns no reference, so this drops one that belongs to someone else.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre update_recovery.c:1091 — (defect) cfs_hash_lookup() returned a referenced export, and that reference was handed to tsi->tsi_exp and released later by distribute_txn_
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) cfs_hash_lookup() returned a referenced export, and that reference was handed to tsi->tsi_exp and released later by distribute_txn_replay_handle():

    if (tgt_ses_info(env)->tsi_exp != NULL) {
            class_export_put(tgt_ses_info(env)->tsi_exp);

xa_load() returns an unreferenced pointer, so that put now drops a reference this path never acquired, and tsi_exp can be freed under the replay while it is still in use.

Separately, gen_kepcmp() used to reject exports with exp_failed set, so an evicted export could never end up in tsi_exp. xa_load() has no such filter - is update replay expected to cope with a failed export here?
owner James Simmons · uploader James Simmons · PS5 uploaded 57d ago · NEW · open in Gerrit ↗
commit message
LU-8130 obd: replace gen hash with Xarray

Using a hash table for sequential values doesn't make sense in
this case. Instead track the recovery generation values for
exports using a Xarray.

Change-Id: Iccff86b7473c61a25caf336b30342ce2dc12e148
Signed-off-by: James Simmons <jsimmons@infradead.org>
65273 master J –B ✓T ✗1R -1/2−
LU-14291 utils: don't build gss server utilies for clients
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 5 unresolved S +11 −6
58d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: custom-1001
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #127068 SUCCESS · tests all Maloo sessions
patchsets:
+2 earlier PS1 04-13 PS2 04-14
PS3 04-14 PS4 04-14 PS5 04-18 PS6 04-30 PS7 06-29
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre COMMIT_MSG:7 — (typo) "utilies" -> "utilities" in the subject, and "utilites" -> "utilities" on the body line below.
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(typo) "utilies" -> "utilities" in the subject, and "utilites" -> "utilities" on the body line below.
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) The body only covers the lsvcgssd/l_getauth split, but the diff also appends $(UTILS_CFLAGS) to AM_CFLAGS. Is that intended to ride
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(minor) The body only covers the lsvcgssd/l_getauth split, but the diff also appends $(UTILS_CFLAGS) to AM_CFLAGS. Is that intended to ride along here, or should it be a separate change? Either way it should be mentioned so the hunk isn't a surprise.
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre Makefile.am:4 — (minor) This hunk isn't part of the client/server split. If the intent is to pick up the distro build flags the way lustre/utils/Makefile.am
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(minor) This hunk isn't part of the client/server split. If the intent is to pick up the distro build flags the way lustre/utils/Makefile.am does, note that file also sets

    AM_LDFLAGS := $(UTILS_LDFLAGS)

and UTILS_LDFLAGS is exported alongside UTILS_CFLAGS in lustre.spec.in. Here the link flags are still unset, and each program overrides them with its own lsvcgssd_LDFLAGS/l_getauth_LDFLAGS/lgss_keyring_LDFLAGS/lgss_sk_LDFLAGS = $(KRBLDFLAGS), so an AM_LDFLAGS alone wouldn't take effect either - $(UTILS_LDFLAGS) would have to be added to each of those lines. Should the hardening flags be applied consistently, in a patch of their own?
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre Makefile.am:15 — (suggestion) While completing the client/server split: lustre/scripts/systemd/Makefile.am still installs lsvcgss.service unconditionally und
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(suggestion) While completing the client/server split: lustre/scripts/systemd/Makefile.am still installs lsvcgss.service unconditionally under HAVE_SYSTEMD, and the spec adds it to lustre.files the same way, even though lsvcgss_sysd and the init script are already SERVER-only. So a client package keeps shipping a unit for a daemon it no longer builds. Worth wrapping in SERVER here too?
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre Makefile.am:15 — With these two now server-only, a client-only install has no l_getauth and no lsvcgssd, but test-framework.sh still resolves both on the loc
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
With these two now server-only, a client-only install has no l_getauth and no lsvcgssd, but test-framework.sh still resolves both on the local (client) node and has no /usr/sbin fallback:

    export L_GETAUTH=${L_GETAUTH:-"$LUSTRE/utils/gss/l_getauth"}
    [ ! -f "$L_GETAUTH" ] && export L_GETAUTH=$(which l_getauth 2> /dev/null)
    export LSVCGSSD=${LSVCGSSD:-"$LUSTRE/utils/gss/lsvcgssd"}
    [ ! -f "$LSVCGSSD" ] && export LSVCGSSD=$(which lsvcgssd 2> /dev/null)

When the test node runs a client build both expand to the empty string, and the values are then used on the server nodes:

    do_nodes $nodes "$LSVCGSSD -vvv -s -m -o -z $options" || return 1
    do_nodesv $node "$L_GETAUTH -d"
    do_nodesv $servers "$LCTL set_param sptlrpc.gss.rsi_upcall=$L_GETAUTH"

start_gss_daemons() then runs "-vvv -s -m -o -z" remotely and returns 1, and init_gss() does start_gss_daemons() || error_exit, so setup aborts for any SHARED_KEY/krb5 run on a mixed client/server install. Should this patch also give L_GETAUTH/LSVCGSSD a "/usr/sbin/..." fallback (the way LR_READER and LSOM_SYNC do a few lines above), or resolve them on a server facet instead?
owner James Simmons · uploader James Simmons · PS7 uploaded 127d ago · NEW · open in Gerrit ↗
commit message
LU-14291 utils: don't build gss server utilies for clients

Both lsvcgssd and l_getauth are server only utilites.

Test-Parameters: trivial env=SHARED_KEY=true testlist=sanity,sanity-sec
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Iba4830ea74cad3b6c615663bd7ebe135cf39515f
57948 master J !B ✓T ✗2R +0/2−
LU-18689 ptlrpc: ensure import exist for sec debugfs files
carrying Oleg Drokin · needs rebase — checkpatch: cannot be cherry-picked
needs rebase M +63 −55
61d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-1, review-dne-selinux-ssk-part-2
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-selinux. session
3 optional test failure(s) — informational
build #114988 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-07-11 13:40
no vote yet: Andreas Dilger, Alex Zhuravlev, Timothy Day
patchsets:
+4 earlier PS1 02-03 PS2 02-05 James Simmons PS3 02-08 James Simmons PS4 02-10 James Simmons
PS5 02-18 James Simmons PS6 03-28 James Simmons PS7 04-25 James Simmons PS8 05-24 PS9 07-11 James Simmons
owner Oleg Drokin · uploader James Simmons · PS9 uploaded 481d ago · NEW · open in Gerrit ↗
commit message
LU-18689 ptlrpc: ensure import exist for sec debugfs files

Access sec imports safely under with_imp_locked.

This fixes crashes in recovery-small test 57 that look like this:

BUG: unable to handle kernel NULL pointer dereference at 00000000000000d0
IP: [<ffffffff81411a45>] do_raw_read_lock+0x5/0x30
RIP: 0010:[<ffffffff81411a45>]  [<ffffffff81411a45>] do_raw_read_lock+0x5/0x30
Call Trace:
 [<ffffffff817e333e>] _raw_read_lock+0x1e/0x20
 [<ffffffffa0666f0e>] sptlrpc_import_sec_ref+0x1e/0x40 [ptlrpc]
 [<ffffffffa06742f0>] srpc_sptlrpc_sepol_seq_show+0x30/0x130 [ptlrpc]
 [<ffffffff8126f0b5>] seq_read+0x135/0x470
 [<ffffffff81245839>] vfs_read+0xb9/0x1c0
 [<ffffffff817edf49>] ? system_call_after_swapgs+0x96/0x13a
 [<ffffffff8124676f>] SyS_read+0x7f/0xf0
 [<ffffffff817edf55>] ? system_call_after_swapgs+0xa2/0x13a
 [<ffffffff817ee00c>] system_call_fastpath+0x1f/0x24
 [<ffffffff817edf55>] ? system_call_after_swapgs+0xa2/0x13a

Signed-off-by: Oleg Drokin <green@whamcloud.com>
Change-Id: Id84c8803317b621cb80a21977eafe5b9cf96a9be
49732 master J ✓B ✓T ✗1R 0/2
LU-12661 tests: re-enable sanity 817
mine enforced failed: review-ldiskfs-dne-arm
8 unresolved XS +0 −4
82d
enforced failed: review-ldiskfs-dne-arm
8 unresolved thread(s) await your reply — last from Andreas Dilger
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #129258 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown
patchsets: PS1 01-23 PS2 05-13 PS3 08-13
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-05-13 17:36 Andreas Dilger COMMIT_MSG:13 — (style) presumably should have a `Fixes:` line?
Andreas Dilger PS2 · 2026-05-13 17:36
(style) presumably should have a `Fixes:` line?
reply PS2 2026-05-13 17:36 Andreas Dilger COMMIT_MSG:14 — (style) prefer `Change-Id:` after `Signed-off-by:`
Andreas Dilger PS2 · 2026-05-13 17:36
(style) prefer `Change-Id:` after `Signed-off-by:`
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:9 — Could the message name the fixes it is relying on, and the minimum kernel version they are in? As written "newer kernels and fixes landed fo
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
Could the message name the fixes it is relying on, and the minimum kernel version they are in? As written "newer kernels and fixes landed for better NFS support" is not verifiable, and LU-12661 is still Open with summary "sanity test_817: FAIL: failed to execute 'true' command".

The exclusion 3e2c28437404 removed here was widened from 4.14 to 4.12 specifically because SLES 4.12.14 hit it, and 4fed33473ca2 recorded that the failure happens "regardless of whether the nfs export is backed by a lustre mount or not" - i.e. it is nfsd holding the file open, not something llite can fix. That makes it worth spelling out which change is expected to have altered this.
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "sanity tets 817" -> "tests".
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
(typo) "sanity tets 817" -> "tests".
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:13 — (style) carried over from the previous revision, which was rebased without changes: a `Fixes:` line still seems appropriate here since this
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
(style) carried over from the previous revision, which was rebased without changes: a `Fixes:` line still seems appropriate here since this undoes the exclusion added by

    Fixes: 3e2c28437404 ("LU-12661 tests: skip sanity 817 for kernel 4.12+")
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:14 — (style) also carried over from the previous revision: `Change-Id:` is still before `Signed-off-by:`.
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
(style) also carried over from the previous revision: `Change-Id:` is still before `Signed-off-by:`.
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre sanity.sh:52 — Dropping the block entirely re-enables 817 on every kernel, not just new ones. All currently supported clients in lustre/ChangeLog are above
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
Dropping the block entirely re-enables 817 on every kernel, not just new ones. All currently supported clients in lustre/ChangeLog are above the 4.12 threshold - RHEL 8.10 (4.18.0-553), RHEL 9.7/9.8 (5.14.0), SLES15 SP5 (5.14.21), Ubuntu 22.04 (5.15) - so the test now runs on exactly the kernels the exclusion was added for, with nothing gating it on the "newer kernels" the commit message refers to.

If the fix really is version dependent, would a bounded guard be safer, e.g.

    if (( $LINUX_VERSION_CODE < $(version_code X.Y.0) )); then
            always_except LU-12661 817
    fi

with X.Y.0 being the first kernel where nfsd releases the file?
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre sanity.sh:36565 — With the exclusion gone this line runs again, and it execs immediately after the copy with no wait. exec() returns ETXTBSY while any writer
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
With the exclusion gone this line runs again, and it execs immediately after the copy with no wait. exec() returns ETXTBSY while any writer holds the inode, and nfsd drops its write reference asynchronously (filecache / NFSv4 open state), not at the point `cp` returns - which is what 4fed33473ca2 described as "nfsd is not releasing the file after write".

Even on a kernel where nfsd does eventually release it, checking once immediately after the copy looks racy. Could this either unmount $tmpdir first to force the client CLOSE, or retry, e.g.

    wait_update $HOSTNAME "$DIR/nfsexp/true && echo ok" "ok" 30 ||
            error "failed to execute 'true' command"
owner James Simmons · uploader James Simmons · PS3 uploaded 83d ago · NEW · open in Gerrit ↗
commit message
LU-12661 tests: re-enable sanity 817

With newer kernels and fixes landed for better NFS support lets
re-enable sanity tets 817.

Test-Parameters: trivial
Test-Parameters: testlist=sanity env=ONLY=817
Change-Id: I993165efdf5a7472676c5af20e079d6fbee5a098
Signed-off-by: James Simmons <jsimmons@infradead.org>
66820 master J !B ✓T ✓R ✗
LU-20422 lod: fix lockdep bug
carrying Timothy Day · Timothy Day voted -1
CR -1 2 unresolved S +24 −8
92d
Timothy Day voted -1
2 unresolved thread(s) await your reply — last from Timothy Day
no vote yet from Andreas Dilger, Alex Zhuravlev
janitor run: 3 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #127623 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-07-20 10:11 · Timothy Day -1 2026-07-20 14:50
no vote yet: Andreas Dilger, Alex Zhuravlev
patchsets: PS1 06-23 PS2 07-10 James Simmons PS3 07-15 James Simmons
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-08-03 14:54 Timothy Day COMMIT_MSG:8 — Sure, I can do that when I refresh.
Arshad Hussain PS3 · 2026-07-20 10:11
(comment) Fix lockdep bug by splitting function lod_obj_for_each_stripe() into lock/unlocked version
James Simmons PS3 · 2026-08-02 23:27
Could we change this to LU-18658 LU ticket number
Timothy Day PS3 · 2026-08-03 14:54
Sure, I can do that when I refresh.
reply PS3 2026-07-20 14:50 Timothy Day lod_qos.c:515 — Nesting the mutexes is fine, as long as they're consistently nested in the same order. I can see if I can rework this - might require a larg
Alex Zhuravlev PS3 · 2026-07-20 11:45
what if the layout is changing in another thread at the moment?
James Simmons PS3 · 2026-07-20 14:43
Sadly this function is called by both the qos and lod object code using two different mutex. Normally we do nested but I don't think nesting the mutexs in this case would be the right fit. Maybe we can use wait_on_bit() which would tell us when the layout_mutex is in use?
Timothy Day PS3 · 2026-07-20 14:50
Nesting the mutexes is fine, as long as they're consistently nested in the same order. I can see if I can rework this - might require a larger refactor.
owner Timothy Day · uploader James Simmons · PS3 uploaded 112d ago · NEW · open in Gerrit ↗
commit message
LU-20422 lod: fix lockdep bug

WARNING: possible circular locking dependency detected
...
mdt_io00_000/394 is trying to acquire lock:
ffff8881b1c26740 (&ltd->ltd_rw_sem){++++}-{4:4}, at: lod_initialize_objects+0x503/0xba0

but task is already holding lock:
ffff888260077538 (&lod_obj->ldo_layout_mutex){+.+.}-{4:4}, at: lod_striping_load+0x147/0x530
...
 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&lod_obj->ldo_layout_mutex);
                               lock(&ltd->ltd_qos.lq_rw_sem);
                               lock(&lod_obj->ldo_layout_mutex);
  rlock(&ltd->ltd_rw_sem);

 *** DEADLOCK ***
...
 dump_stack_lvl+0x54/0x70
 print_circular_bug+0x2e8/0x300
 check_noncircular+0x12e/0x150
 __lock_acquire+0x1447/0x2830
 ? __lock_acquire+0x5d3/0x2830
 ? __kmalloc_noprof+0x1a1/0x640
 ? lock_acquire+0xd5/0x290
 ? lod_initialize_objects+0x503/0xba0
 lock_acquire+0xd5/0x290
 ? lod_initialize_objects+0x503/0xba0
 ? lock_is_held_type+0xc7/0x120
 down_read+0x42/0x160
 ? lod_initialize_objects+0x503/0xba0
 lod_initialize_objects+0x503/0xba0
 lod_parse_striping+0x8e5/0x10a0
 ? lod_get_ea+0x17a/0x350
 lod_striping_load+0x20a/0x530
 lod_declare_destroy+0xd8/0x670
 ? lod_declare_attr_set+0xca/0x660
 ? lod_declare_attr_set+0xca/0x660
 mdd_declare_finish_unlink+0x62/0x160
 mdd_declare_rename+0x49f/0x4f0
 mdd_rename+0x98e/0x1a40
 ? __mutex_lock+0x283/0xd80
 mdt_reint_rename+0x1fda/0x2f60
 mdt_reint_rec+0xa2/0x200
 mdt_reint_internal+0x605/0x880
 mdt_reint+0xaf/0x110
 tgt_request_handle+0x1297/0x1990
 ? obd_export_timed_fini+0xa2/0xb0
 ptlrpc_main+0x2b7d/0x3ac0
 ? lockdep_hardirqs_on+0x7a/0x110
 ? __pfx_ptlrpc_main+0x10/0x10
 kthread+0x11b/0x140
 ? __pfx_kthread+0x10/0x10
 ret_from_fork+0x1a5/0x370
 ? __pfx_kthread+0x10/0x10
 ret_from_fork_asm+0x1a/0x30

Change-Id: I21e38a0b6fe7cda0c0c0566178d3137c792a5fc7
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
58003 master J !B ✓T ✗1R -1/2−
LU-18652 tests: no compression with zfs create / zpool setup
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase rocky8 S +9 −11
94d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: custom-1001
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #112064 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Brian Behlendorf
patchsets: PS1 02-07 PS2 02-07 PS3 02-24 PS4 03-20 PS5 03-28
owner James Simmons · uploader James Simmons · PS5 uploaded 585d ago · NEW · open in Gerrit ↗
commit message
LU-18652 tests: no compression with zfs create / zpool setup

Several of the conf-sanity test are disabled due to ZFS by default using
compression. Update all the zpool and zcreate calls to turn off
compression by default. With this change we can re-enable several test.

Test-Parameters: trivial fstype=zfs testlist=conf-sanity
Change-Id: I00751a6a3e7c925e8d89c8697fb8e8705d46c8bf
Signed-off-by: James Simmons <jsimmons@infradead.org>
65426 master J ✓B ✓T ✓R -1/2−
LU-20154 ldiskfs: fix credit calculation for xattr
reviewing Alexey Lyashkov · PS9→PS12 since your -1 — your objection was dropped
18 unresolved XL +1330 −87
99d
9 optional test failure(s) — informational
build #127257 SUCCESS · tests all Maloo sessions
reviews: Alex Zhuravlev -1 2026-07-07 06:23
no vote yet: Qian Yingjin, Alexander Zarochentsev, Andrew Perepechko, Oleg Drokin
patchsets:
+7 earlier PS1 04-20 PS2 04-20 Janitor Bot PS3 04-21 PS4 04-21 Janitor Bot PS5 04-21 PS6 04-21 Janitor Bot PS7 04-22
PS8 04-22 PS9 04-24 PS10 05-31 PS11 07-07 Jian Yu PS12 07-07 Jian Yu
your previous vote: -1 on PS9 (2026-05-29 01:06) — now at PS12
threads: 18 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS11 2026-07-07 02:16 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldiskfs/xattr.c:
Misc Code Checks Robot (Gatekeeper helper) PS11 · 2026-07-07 02:16
ldiskfs/xattr.c:
 warning: sparse:no newline at end of file
reply PS12 2026-07-07 02:19 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldiskfs/xattr.c:
Misc Code Checks Robot (Gatekeeper helper) PS12 · 2026-07-07 02:19
ldiskfs/xattr.c:
 warning: sparse:no newline at end of file
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre COMMIT_MSG:9 — The body only describes the ldiskfs credit reuse. Several hunks aren't accounted for:
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
The body only describes the ldiskfs credit reuse. Several hunks aren't accounted for:

- `lnet/libcfs/tracefile.c` drops `static` from `cfs_trace_data` - nothing else in the patch touches libcfs. Is this a debugging leftover that should be dropped?
- `osd_trans_dump_creds()` changes from `struct thandle *` to `struct osd_thandle *`, touching four call sites. That's a standalone cleanup.
- The ldiskfs patches add `EXPORT_SYMBOL(ext4_xattr_ibody_get)` alongside the one that is actually needed.
- `osd_declare_attr_set()` stops declaring `OSD_OT_XATTR_SET` unconditionally and gates it on the LMA flags. That is a behaviour change worth a sentence of its own.

Also a few wording slips: "old code don't able to account" -> "the old code cannot account", "lets reuse" -> "let's reuse".
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre COMMIT_MSG:12 — (typo) The quoted subject doesn't match the referenced commit. `git log -1 --format=%s 278fa1fb23` gives:
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(typo) The quoted subject doesn't match the referenced commit. `git log -1 --format=%s 278fa1fb23` gives:

    LU-12652 ldiskfs: disable credits check in 4.18

The leading `35750: ` is the Gerrit change number, not part of the subject.
reply PS9 2026-05-12 08:22 Alexey Lyashkov patchset comment — I checked again with 5.14.0-570.62.1.el9_6.x86_64 and 5.14.0-611.35.1.el9_7.x86_64.
Oleg Drokin PS9 · 2026-05-11 02:33
I manually reverted rhel9.6/9.7 series so it points back at 5.14 patch again and the build is restored so I believe this patch is just broken.
Alexey Lyashkov PS9 · 2026-05-12 07:58
It looks like RHEL9.6/9.7 kernel have a changes in ext4 version. sometimes it have ext4/crypto.c - sometimes not. I have tested with lastes 9.6/9.7 version but our code it looks not a last.
Alexey Lyashkov PS9 · 2026-05-12 08:22
I checked again with 5.14.0-570.62.1.el9_6.x86_64 and 5.14.0-611.35.1.el9_7.x86_64.
It looks you needs to update a kernel versions.
reply PS12 2026-07-13 11:00 Alex Zhuravlev ext4-xattr-disable-credits-check.patch:36 — this is
Alex Zhuravlev PS12 · 2026-07-07 06:23
ext4 never sets few EAs in a single transaction AFAIU. so it's unlikely this kind of change can make into vanilla kernel.
Alexey Lyashkov PS12 · 2026-07-10 08:44
sure. it's sets. example of this in the patch. You lost it ?
Alex Zhuravlev PS12 · 2026-07-13 11:00
sorry? how many EAs an user can set using clean ext4 in a single transaction?
Alex Zhuravlev PS12 · 2026-07-13 11:00
this is
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre ext4-xattr-disable-credits-check.patch:233 — (defect) This `Index:` header has no `---`/`+++` lines and no hunks - the crypto.c change is missing from this file (the linux-6.12 copy has
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(defect) This `Index:` header has no `---`/`+++` lines and no hunks - the crypto.c change is missing from this file (the linux-6.12 copy has it). This file also never patches `fs/ext4/super.c`.

`ext4_set_context()` lives in `fs/ext4/crypto.c` on 5.16+ and in `fs/ext4/super.c` before that, and in both it calls

    ext4_xattr_set_credits(inode, len, false, &credits)

while the xattr.h hunk above changes the prototype to 6 arguments. `ldiskfs/Makefile.in` copies every `@EXT4_SRC_DIR@/*.c` for patching and only filters `crypto.c` out of the object list when `CONFIG_FS_ENCRYPTION` is unset, so with encryption enabled this is `error: too few arguments to function 'ldiskfs_xattr_set_credits'`.

That breaks every series still pointing at this file - rhel9.1 through 9.5, sles15sp4/sp5, oe2203, the 5.15/5.19 ubuntu20 series, ubuntu24 -45/-100/-106, ubuntu26, and all of 6.1/6.6/6.7/6.10/6.11/6.12/6.18/7.0-ml.

This is the same breakage that was reported earlier on rhel9.6/9.7; switching those two series to the linux-6.12 copy moved the failure rather than fixing it.
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre ext4-xattr-disable-credits-check.patch:134 — (minor) `ext4_xattr_ibody_get` doesn't seem to have any caller outside ldiskfs - grepping the tree for `ldiskfs_xattr_ibody_get` finds nothi
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(minor) `ext4_xattr_ibody_get` doesn't seem to have any caller outside ldiskfs - grepping the tree for `ldiskfs_xattr_ibody_get` finds nothing. Is this export needed, or left over from an earlier version?
reply PS9 2026-05-11 02:31 Oleg Drokin ldiskfs-5.14-rhel9.6.series:34 — does not look like it actually applies to rhel9.6?
Oleg Drokin PS9 · 2026-05-11 02:31
does not look like it actually applies to rhel9.6?
reply PS9 2026-05-11 02:31 Oleg Drokin ldiskfs-5.14-rhel9.7.series:34 — I wonder if this also works?
Oleg Drokin PS9 · 2026-05-11 02:31
I wonder if this also works?
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre ldiskfs-6.8.0-90-ubuntu24.series:32 — (defect) Only `6.8.0-90` was moved to the linux-6.12 copy. `ldiskfs-6.8.0-45-ubuntu24.series`, `ldiskfs-6.8.0-100-ubuntu24.series` and `ldis
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(defect) Only `6.8.0-90` was moved to the linux-6.12 copy. `ldiskfs-6.8.0-45-ubuntu24.series`, `ldiskfs-6.8.0-100-ubuntu24.series` and `ldiskfs-6.8.0-106-ubuntu24.series` still reference `linux-5.14/ext4-xattr-disable-credits-check.patch`, and those kernels have `fs/ext4/crypto.c`.

Same for the mainline series (6.6/6.12/6.18/7.0-ml) and 7.0.0-14-ubuntu26. Should the remaining series be switched too, or should the linux-5.14 copy be completed instead?
reply PS11 2026-07-07 02:16 Misc Code Checks Robot (Gatekeeper helper) tracefile.c:36 — warning: sparse:symbol 'cfs_trace_data' was not declared. Should it be static?
Misc Code Checks Robot (Gatekeeper helper) PS11 · 2026-07-07 02:16
warning: sparse:symbol 'cfs_trace_data' was not declared. Should it be static?
owner Alexey Lyashkov · uploader Jian Yu · PS12 uploaded 120d ago · NEW · open in Gerrit ↗
commit message
LU-20154 ldiskfs: fix credit calculation for xattr

old code don't able to account an EA inode credits,
lets reuse an ldiskfs code to avoid this.

Fixes: 278fa1fb23 ("35750: LU-12652 ldiskfs: disable credits check in 4.18")

HPe-bug-id: LUS-12937
Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Change-Id: Id7eca1783dd4f6848f8d235b6159b8d34eb398db
66875 master J –B ✓T ✓R +1/2
LU-20418 build: Move lnet common checks to ksym
carrying Shaun Tancheff · 4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
4 unresolved L +96 −179
99d
4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
no vote yet from Andreas Dilger, Timothy Day
reviews: James Simmons +1 2026-07-10 13:56
no vote yet: Andreas Dilger, Timothy Day
patchsets: PS1 06-26 PS2 06-26 PS3 07-09 James Simmons PS4 07-09 James Simmons
your previous vote: +1 on PS2 (2026-06-28 14:03) — now at PS4
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_IBDEV_TO_NODE.ksym:9 — (minor) This one is not a pure move. The old check sat inside the `--enable-efa` block and ran with EXTRA_CHECK_INCLUDE set, so with `--with
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(minor) This one is not a pure move. The old check sat inside the `--enable-efa` block and ran with EXTRA_CHECK_INCLUDE set, so with `--with-o2ib=<MOFED>` it resolved `<rdma/ib_verbs.h>` out of the external OFED tree; the ksym always reads the in-kernel header, and it now runs unconditionally.

The new answer looks like the correct one for efalnd, since lnet/klnds/efalnd/Makefile only adds `-I $(EFA_INCLUDE_PATH)` and not the OFED includes. Since it changes what gets detected on MOFED builds, worth a line in the commit message rather than listing it as a plain move.
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_IN_DEV_FOR_EACH_IFA_RTNL.ksym:7 — (minor) The comment being dropped recorded two things this file doesn't: that 4.18.0-193.el8 carries the backport, and why the _rtnl variant
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(minor) The comment being dropped recorded two things this file doesn't: that 4.18.0-193.el8 carries the backport, and why the _rtnl variant is used instead of _rcu (the current locking is rtnl). ksymfind() has an `extra` field for exactly this kind of note, so the rationale could be carried over.
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_STRUCT_SOCKADDR_UNSIZED.ksym:11 — (suggestion) The test being replaced compiled `kernel_bind(NULL, (struct sockaddr_unsized *)0, 0)` under -Werror, so it proved the prototype
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(suggestion) The test being replaced compiled `kernel_bind(NULL, (struct sockaddr_unsized *)0, 0)` under -Werror, so it proved the prototype that lnet_sock_bind()/lnet_sock_connect() and gss_svc_upcall.c actually depend on. Grepping for the struct definition only proves the type exists.

Upstream split those apart: bf33247a90d3e adds the struct to linux/socket.h, and the `kernel_bind()`/`kernel_connect()` conversions land in later commits (0e50474fa514, 85cb0757d7e1). On a tree carrying only the struct, HAVE_STRUCT_SOCKADDR_UNSIZED is defined, the `sockaddr_unsized` -> `sockaddr` fallback is skipped, and the casts in lnet/lnet/lib-socket.c hit an incompatible pointer type.

Would matching the converted prototype in include/linux/net.h be a closer equivalent?
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre lustre-lnet.m4:946 — (style) Not a bug, but collapsing the double space before `=` in the GNILND/KFILND conditionals has nothing to do with moving the lnet check
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(style) Not a bug, but collapsing the double space before `=` in the GNILND/KFILND conditionals has nothing to do with moving the lnet checks to ksym, and the commit message doesn't mention it. Drop it or split it out?
owner Shaun Tancheff · uploader James Simmons · PS4 uploaded 117d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move lnet common checks to ksym

Move checks for:
  HAVE_IBDEV_TO_NODE
  HAVE_IN_DEV_FOR_EACH_IFA_RTNL
  HAVE_SOCK_INUSE_ADD
  HAVE_SOCK_NOT_OWNED_BY_ME
  HAVE_NETDEV_LOCK_OPS
  HAVE_SENDPAGE_OK
  HAVE_STRUCT_SOCKADDR_UNSIZED
  sockaddr_unsized

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Iaf1759e7d88480254983b2d79c41f12d43974ef6
65397 master J !B ✗T –R -1/2−
LU-0000 obdclass: rollback testing
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 116d S +2 −17
116d
needs rebase — checkpatch: cannot be cherry-picked
build failure (#124346)
janitor run: 16 failing config(s), none unique to this patch — janitor results
build #124346 FAILURE
patchsets: PS1 04-17 PS2 04-18 PS3 04-19 PS4 04-20 PS5 04-24
owner James Simmons · uploader James Simmons · PS5 uploaded 193d ago · NEW · open in Gerrit ↗
commit message
LU-0000 obdclass: rollback testing

find breakage

Test-Parameters: trivial
Change-Id: I93c1ca71984efd3b66e56d549141c78883abebc6
Signed-off-by: James Simmons <jsimmons@infradead.org>
55821 master J !B ✓T ✗8R 0/2
LU-12607 osd-zfs: use proper locking for dnodes
mine enforced failed: review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-zfs
stalled 123d S +13 −15
123d
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-1 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-2 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-3 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-4 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-5 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-6 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-7 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-zfs failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
20 optional test failure(s) — informational
build #106283 SUCCESS · tests all Maloo sessions
no vote yet: Brian Behlendorf, Timothy Day
owner James Simmons · uploader James Simmons · PS1 uploaded 836d ago · NEW · open in Gerrit ↗
commit message
LU-12607 osd-zfs: use proper locking for dnodes

Currently lustre uses the DB_DNODE_[ENTER|EXIT] macros which is
incorrect as pointed out by the ZFS developers. OpenZFS ticket

https://github.com/openzfs/zfs/pull/9027

exported the proper dnode management functions so move Lustre
to these new functions.

Change-Id: If1165c4db149a1eb46bf00df9b48589d90acb7c6
Signed-off-by: James Simmons <jsimmons@infradead.org>
63209 master J –B ✓T ✓R -1/2−
LU-13903 build: allow building for a kernel with native client
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 134d 1 unresolved S +21 −11
134d
needs rebase — checkpatch: cannot be cherry-picked
Timothy Day voted -1
1 unresolved thread(s) await your reply — last from Shaun Tancheff
no vote yet from Shaun Tancheff
build #120080 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-01-02 18:00 · Timothy Day -1 2026-01-29 15:49
no vote yet: Shaun Tancheff
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-03-07 11:23 Shaun Tancheff patchset comment — Maybe you are asking about user space utilities? Those do now know anything about the kernel headers, they should build just like any other
Timothy Day PS1 · 2026-01-29 15:49
```
checking for /tmp/ktest-out/kernel_build.x86_64/.config... noconfigure: error: 

Kernel config could not be found.
```
The userland build shouldn't depend on the kernel config. I think we'd need to skip this check somehow.
Timothy Day PS1 · 2026-01-30 01:11
I think I know what's wrong: --disable-modules isn't propagated when we try to make the debian packages. There's a couple other tweaks we need as well. I can push an updated patch.
Timothy Day PS1 · 2026-01-31 17:49
The kernel really doesn't like it if you attempt to build userspace components against the Linux source tree. They recommend (https://kernelnewbies.org/KernelHeaders) either building against the installed headers (i.e. what you already have implemented) or building against a version of the headers copied from Linux. This would be equivalent to building against the openSFS headers. I think this should be supported somehow. Perhaps --disable-modules could have an argument to decided whether to use the installed headers or openSFS headers?
James Simmons PS1 · 2026-02-02 16:28
The question is which UAPI headers to test against? Some of the autoconf test for the utilities look at the UAPI headers to decided what is supported.
James Simmons PS1 · 2026-02-02 16:39
Oops. I added Shaun so we can verify. Do the autoconf test use the kernel UAPI pointed to by --with-kernel. I do agree we don't need to look at the .config for the kernel. The only complex case is the dummy fscrypt kernel option that changed.
Shaun Tancheff PS1 · 2026-03-07 11:21
> Do the autoconf test use the kernel UAPI pointed to by --with-kernel

Yes.
The test builds work the same as any kernel module build. You can see generated examples with:

$ export PARALLEL_BUILD_OPT=debug
$ ./configure ...
Shaun Tancheff PS1 · 2026-03-07 11:23
Maybe you are asking about user space utilities? Those do now know anything about the kernel headers, they should build just like any other user space utility looking under /usr/include and /usr/lib
owner James Simmons · uploader James Simmons · PS1 uploaded 307d ago · NEW · open in Gerrit ↗
commit message
LU-13903 build: allow building for a kernel with native client

Currently we can build just the Lustre utilites on a system with
a installed kernel with native Lustre client support. This doesn't
work for building against a kernel tree with the native lustre
client i.e

./configure --disable-modules --disable-server --with-linux=~/lustre-upstream

This patch adds takes the kernel header location and adds it to
the CPPFLAGS. The tools then can be built against that set of
headers.

Test-Parameters: trivial
Change-Id: I3348f90474d0dd87da5fc8e779b71c9d6a2953df
Signed-off-by: James Simmons <jsimmons@infradead.org>
24554 master J –B ✓T ✓R +1/2−
LU-8980 libcfs: add tracepoint support for libcfs
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 141d XL +3118 −254
141d
needs rebase — checkpatch: cannot be cherry-picked
John Hammond voted -1
reviews: Dmitry Eremin +1 2017-09-01 15:14 · Gu Zheng +1 2017-08-10 01:15 · Olaf Weber +1 2017-08-24 18:19 · John Hammond -1 2017-11-29 22:47
no vote yet: Jinshan Xiong, Timothy Day, Jesse Hanley, Andreas Dilger, Brian Behlendorf, Matt Ezell, Lustre Buildbot
owner James Simmons · uploader James Simmons · PS18 uploaded 3375d ago · NEW · open in Gerrit ↗
commit message
LU-8980 libcfs: add tracepoint support for libcfs

Add initial trace events to the libcfs module. With
this we can now collect data using the perf utility.
Each traditonal lustre debug macro is turned into
an unique tracepoint event. Any debugging macros
moved over to trace point will now handling printing
message to the console.

Change-Id: I0fc6efc24fd9495fae2829990f74b1a72491baf8
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
64565 master J ✗1B ✓T ✗2R -1/2−
LU-14291 gss: seperate out the client from server code.
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure stalled 159d M +86 −44
159d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — sanity-flr@ldiskfs+DNE:test_70a
enforced failed: review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-flr@ldiskfs+DNE:test_70aseen in 92 other reviews
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 failed 4× RHEL 8.10 / x86_64 ran 8 tests. 3 tests failed: lustre-initialization, sanity-sec, recovery-small. session
5 optional test failure(s) — informational
build #124507 SUCCESS · tests all Maloo sessions
no vote yet: Sebastien Buisson
patchsets: PS1 03-13 PS2 03-13 Janitor Bot PS3 03-31 Janitor Bot PS4 04-13 PS5 04-30
owner James Simmons · uploader James Simmons · PS5 uploaded 187d ago · NEW · open in Gerrit ↗
commit message
LU-14291 gss: seperate out the client from server code.

The gss code is all lumped together. Lets separate the code
out.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: If249e56e27054aa8accd4754e9bddec010ff0e7a
63361 master J ✗1B ✓T ✗0R -1/2−
LU-19323 lnet: add IPv6 support to lnet_selftest
reviewing Serguei Smirnov · PS4→PS6 since your -1 — your objection was dropped
needs rebase 1 unique failure stalled 177d 12 unresolved XL +2239 −574
177d
PS4→PS6 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
replay-dual@zfs+DNE:test_26seen in 17 other reviews
build #122607 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+1 earlier PS1 01-13
PS2 01-13 Janitor Bot PS3 01-13 PS4 02-25 PS5 03-04 PS6 03-16
your previous vote: -1 on PS4 (2026-02-25 20:06) — now at PS6
threads: 8 need your reply · 3 waiting on others · 1 own notes · 0 bot
reply PS6 2026-03-26 02:24 Andreas Dilger COMMIT_MSG:11 — (minor) this looks like an `sptlrpc` parameter. Also, version numbers never really explain what they are for. It would be better to name t
Andreas Dilger PS6 · 2026-03-26 02:24
(minor) this looks like an `sptlrpc` parameter.  Also, version numbers never really explain what they are for.  It would be better to name this something more clear like `lst_force_large_nid`.
reply PS6 2026-04-25 00:38 Serguei Smirnov COMMIT_MSG:11 — srpc_force_v2 is for disabling v1 on v2 hosts. If it is not used, there's "handshaking": v2 is able to initiate a session with v1 (ipv4) or
James Simmons PS6 · 2026-04-25 00:27
Yucky. Can't we do version handshaking instead. My next patch in this area will try the hand shaking approach.
Serguei Smirnov PS6 · 2026-04-25 00:38
srpc_force_v2 is for disabling v1 on v2 hosts. If it is not used, there's "handshaking": v2 is able to initiate a session with v1 (ipv4) or v2 (both ipv6 and ipv4), v1 is able to initiate an ipv4 session to v2 and v1.
reply PS6 2026-03-26 02:24 Andreas Dilger COMMIT_MSG:12 — Is there no mechanism that LNet (and LST) can use to automatically negotiate protocol feature support? If not, then this should be added as
Andreas Dilger PS6 · 2026-03-26 02:24
Is there no mechanism that LNet (and LST) can use to automatically negotiate protocol feature support?  If not, then this should be added as part of this compatibility-breaking change.

Or do I misread this, and the `srpc_force_v2` is only used to force the new large-NID functionality on systems that don't need it?
reply PS6 2026-04-23 21:41 Andreas Dilger COMMIT_MSG:15 — (defect) this should have `env=FORCE_LARGE_NID=true` to run IPv6 sessions?
Andreas Dilger PS6 · 2026-04-23 21:41
(defect) this should have `env=FORCE_LARGE_NID=true` to run IPv6 sessions?
reply PS3 2026-01-13 21:58 Andreas Dilger lnetst.h:72 — (minor) variable-sized `lnet_processid` should go after `nde_state`
Andreas Dilger PS3 · 2026-01-13 21:58
(minor) variable-sized `lnet_processid` should go after `nde_state`
reply PS3 2026-01-13 21:58 Andreas Dilger lnetst.h:123 — (minor) These should all be replaced with fixed-size types (e.g. `__u32`)
Andreas Dilger PS3 · 2026-01-13 21:58
(minor) These should all be replaced with fixed-size types (e.g. `__u32`)
reply PS3 2026-01-13 21:58 Andreas Dilger lnetst.h:301 — (minor) should remove pointers from UAPI structs, especially in the middle
Andreas Dilger PS3 · 2026-01-13 21:58
(minor) should remove pointers from UAPI structs, especially in the middle
note PS4 2026-02-25 20:02 James Simmons conrpc.c:39 — I thought I ported the SID handling to Netlink.
James Simmons PS4 · 2026-02-25 20:02
I thought I ported the SID handling to Netlink.
reply PS3 2026-01-13 21:58 Andreas Dilger module.c:73 — ??
Andreas Dilger PS3 · 2026-01-13 21:58
??
owner Serguei Smirnov · uploader Serguei Smirnov · PS6 uploaded 232d ago · NEW · open in Gerrit ↗
commit message
LU-19323 lnet: add IPv6 support to lnet_selftest

Adds IPv6 support to lnet_selftest.
Is backwardly-compatible to earlier versions of selftest.
Adds module parameter srpc_force_v2 which can optionally
force large-NID (v2) protocol on wire (breaks v1-compatibility)

Test-Parameters: fortestonly
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: I3879dc88f0c89ebbaa21adb9faca6782a855ee3a
53005 master J !B ✓T ✗3R -1/2−
LU-17266 mdt: purge objects via procfs
reviewing Alex Zhuravlev · PS57→PS62 since your -1 — your objection was dropped
needs rebase stalled 199d 3 unresolved M +124 −3
199d
PS57→PS62 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-5 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: lustre-rsync-test. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 2 tests failed: sanity-sec, sanity-lnet. session
5 optional test failure(s) — informational
build #117204 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger
patchsets:
+57 earlier PS1 11-06 PS2 11-07 PS3 11-07 PS4 11-07 PS5 11-07 PS6 11-07 PS7 11-07 PS8 11-08 PS9 11-08 PS10 11-14 PS11 11-17 PS12 01-06 PS13 01-10 PS14 01-19 PS15 01-22 PS16 01-24 PS17 01-24 PS18 02-27 PS19 02-27 PS20 02-27 PS21 03-11 PS22 03-12 PS23 03-22 PS24 04-09 PS25 04-12 PS26 04-15 PS27 04-25 PS28 04-30 PS29 06-21 PS30 07-27 PS31 08-11 PS32 08-22 PS33 09-09 PS34 09-09 PS35 10-09 PS36 10-20 PS37 10-30 PS38 11-20 PS39 11-29 PS40 12-04 PS41 12-11 PS42 12-19 PS43 12-24 PS44 12-25 PS45 01-23 PS46 02-14 PS47 03-03 PS48 03-13 PS49 04-11 PS50 04-18 PS51 04-28 PS52 05-11 PS53 05-22 PS54 05-22 PS55 05-22 PS56 06-12 PS57 06-16
PS58 09-05 PS59 09-10 PS60 09-15 PS61 09-19 PS62 10-07
your previous vote: -1 on PS57 (2025-06-16 14:25) — now at PS62
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS58 2025-09-09 14:21 Andreas Dilger lproc_llite.c:408 — (minor) Most parameters allow other values to be written to clear it, like "0", and not just "clear".
Andreas Dilger PS58 · 2025-09-09 14:21
(minor) Most parameters allow other values to be written to clear it, like "0", and not just "clear".
reply PS58 2025-09-09 14:21 Andreas Dilger mdt_lproc.c:491 — same
Andreas Dilger PS58 · 2025-09-09 14:21
same
reply PS58 2025-09-09 14:21 Andreas Dilger lproc_ofd.c:897 — ...
Andreas Dilger PS58 · 2025-09-09 14:21
...
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS62 uploaded 393d ago · NEW · open in Gerrit ↗
commit message
LU-17266 mdt: purge objects via procfs

sometimes it can be useful for testing to drop/reload lu objects.
lctl set_param mdt.*.site_stats=clear
lctl set_param ofd.*.site_stats=clear

it should be possible to replace total system cache drop
(echo 3 > /proc/sys/vm/drop_caches) with this lustre-only version.

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I9055be3b53d0af22758eac0acac8771e40c371f7
33259 master J !B ✓T ✗1R 0/2
LU-9868 llite: remove directory-specific code from ll_find_alias()
mine enforced failed: review-dne-part-5
upstream stalled 207d S +9 −18
207d
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-5 RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
build #123698 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown, Andreas Dilger
patchsets:
+2 earlier PS2 04-01 PS3 06-20
PS4 02-27 PS5 02-27 PS6 10-14 PS7 04-09 PS8 04-10
owner James Simmons · uploader James Simmons · PS8 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: remove directory-specific code from ll_find_alias()

Now that ll_find_alias() is never called for directories,
we can remove code that only applies to directories.

Linux-commit: ac63774689265d50bc1d83ac9b7889ac7e645b5a

Signed-off-by: Mr. NeilBrown <neil@brown.name>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I54f726eac648374cd631319095cfdab8b1f5dfff
44846 master J ✗4B ✓T ✗6R -1/2−
LU-11501 llite: use d_real for directories in fid cache.
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 4 unique failures stalled 208d 1 unresolved M +105 −28
208d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 4 test failures unique to this patch — runtests-ssk@ldiskfs+SharedKey:test_1, runtests-ssk@ldiskfs+SharedKey:test_cleanup, runtests@zfs:test_1 +1 more
enforced failed: review-dne-part-4, review-dne-selinux-ssk-part-1, review-dne-zfs-part-4, review-ldiskfs, review-ldiskfs-arm
Neil Brown voted -1
1 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests-ssk@ldiskfs+SharedKey:test_1seen in 3 other reviews
runtests-ssk@ldiskfs+SharedKey:test_cleanupNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
runtests@zfs:test_1seen in 3 other reviews
runtests@zfs:test_cleanupNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-4 RHEL 8.8/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-selinux-ssk-part-1 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 8.8/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-ldiskfs crashed RHEL 8.8/x86_64, RHEL 9.2/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.8/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm crashed RHEL 8.7/aarch64, RHEL 8.8/x86_64 ran 8 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
4 optional test failure(s) — informational
build #96374 SUCCESS · tests all Maloo sessions
reviews: Neil Brown -1 2023-08-07 03:48 · Andreas Dilger +1 2023-07-20 16:10
no vote yet: Qian Yingjin
patchsets:
+13 earlier PS1 09-05 PS2 09-06 PS3 09-07 PS4 09-07 PS5 09-07 PS6 09-07 PS7 09-08 PS8 09-10 PS9 09-22 PS10 09-27 PS11 10-07 PS12 10-17 PS13 10-19
PS14 11-14 PS15 04-01 PS16 04-21 PS17 06-20 PS18 07-20
threads: 0 need your reply · 1 waiting on others · 0 own notes · 0 bot
owner James Simmons · uploader James Simmons · PS18 uploaded 1203d ago · NEW · open in Gerrit ↗
commit message
LU-11501 llite: use d_real for directories in fid cache.

Lustre has a special directory called .lustre which contains a
collection of directories whose name matches a fid. This is
used in a similar way as open by fhandle but we use this
functionality since it allows opens by normal users. For
opening a file by proxy with the .lustre/fid/"FID" directory
we use a dcache alias. While this is valid Lustre does the
same thing for open a directory with this .lustre FID which
means we have multiple hard links to directories which is
forbidden. More modern kernels report this as an error and
we risk a future kernel pruning such dentry entries. The
solution is to look at how overlayfs does this since .lustre
is sort of a pseudo file system. We can use d_real() to lookup
the real dentry that maps to the special .lustre/fid/"FID".

Change-Id: I02d8a54465d685430d9290c24faf1ef6bfd6a876
Signed-off-by: James Simmons <jsimmons@infradead.org>
33261 master J ✗2B ✓T ✗9R 0/2
LU-9868 llite: refine ll_find_alias based on d_exact_alias
mine janitor: 2 test failures unique to this patch — sanity3@zfs:test_233a, sanityn@zfs:test_108a
2 unique failures upstream stalled 208d S +20 −10
208d
janitor: 2 test failures unique to this patch — sanity3@zfs:test_233a, sanityn@zfs:test_108a
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-selinux-ssk-part-1, review-dne-zfs-part-1, review-ldiskfs, review-ldiskfs-ubuntu
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity3@zfs:test_233aseen in 3 other reviews
sanityn@zfs:test_108aseen in 11 other reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
build #123622 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown
patchsets:
+1 earlier PS2 04-01
PS3 06-20 PS4 02-27 PS5 02-27 PS6 10-14 PS7 04-09
owner James Simmons · uploader James Simmons · PS7 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: refine ll_find_alias based on d_exact_alias

The task of ll_find_alias() is now very similar to d_exact_alias().
We cannot use that function directly, but we can copy much of
the structure so that the similarities and differences are more
obvious.
Examining d_exact_alias() shows that the d_lock spinlock does not
need to be held in ll_find_alias as much as it currently is.

Linux-commit: 8016ab9ebbda3dee637ac66b9e0f7a74ef6fe9e6

Signed-off-by: Mr. NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I52ba4bc35cb84f523551816df7df2d4d0b1573b7
33260 master J !B ✓T ✗8R 0/2
LU-9868 llite: simplify ll_find_alias()
mine enforced failed: review-dne-part-1, review-dne-selinux-ssk-part-1, review-dne-zfs-part-1, review-ldiskfs, review-ldiskfs-ubuntu
upstream stalled 208d S +8 −15
208d
janitor run: 23 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
build #123621 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown
patchsets:
+1 earlier PS2 04-01
PS3 06-20 PS4 02-27 PS5 02-27 PS6 10-14 PS7 04-09
owner James Simmons · uploader James Simmons · PS7 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: simplify ll_find_alias()

Now that ll_find_alias is only searching for one type
of dentry, we can return as soon as we find it.
This allows substantial simplification, and brings the
bonus that we don't need to take the d_lock again just
to increment the ref-count.  We can increment it immediately
that the dentry is found.

Linux-commit: 7e08e9a8942dfc38693edf2e389cde620e918356

Signed-off-by: Mr. NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I18d6130c27186e1a7c9254e50b4d1242b7ada383
18012 master J –B ✓T ✗0R 0/2
LU-7672 tests: Update Kerberos set up script
carrying James Nunez · Maloo voted -1 — tests failed (details on the change)
stalled 211d L +154 −115
211d
no vote yet: Sebastien Buisson, Nathan Lavender, Chris Hanna
owner James Nunez · uploader James Simmons · PS4 uploaded 3442d ago · NEW · open in Gerrit ↗
commit message
LU-7672 tests: Update Kerberos set up script

Update and clean up the Kerberos set up script setup_kerberos.sh.

Test-Parameter: forbuildonly

Signed-off-by: James Nunez <james.a.nunez@intel.com>
Change-Id: Iae7b1a7a524759c524bc0a69f4755a8c6eed3f9a
62479 master J !B ✓T ✗10R -1/2−
LU-19298 lod: use Xarray instead of static arrays for comp entires
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 217d 1 unresolved L +442 −423
217d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-2, review-dne-part-4, review-dne-part-7, review-dne-zfs-part-2, review-dne-zfs-part-4, review-dne-zfs-part-7, review-zfs
1 unresolved thread(s) await your reply — last from Andreas Dilger
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 crashed RHEL 9.5 / x86_64 ran 13 tests. 2 tests failed: sanity-pfl, sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 crashed RHEL 8.10 / x86_64 ran 13 tests. 2 tests failed: sanity-pfl, sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 8.10 / x86_64 ran 11 tests. 2 tests failed: sanity-quota, sanity-flr. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 9.5 / x86_64 ran 11 tests. 2 tests failed: sanity-quota, sanity-flr. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.5 / x86_64 ran 7 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 8.10 / x86_64 ran 13 tests. 2 tests failed: sanity-pfl, sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-flr. session
review-dne-zfs-part-7 crashed RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 1 tests failed: sanity-flr. session
build #119712 SUCCESS · tests all Maloo sessions
no vote yet: Ronnie Sahlberg, Qian Yingjin, Alexey Lyashkov, Andreas Dilger, Zhenyu Xu, Patrick Farrell
patchsets: PS1 11-10 PS2 11-16 PS3 12-12
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2025-12-18 13:27 Andreas Dilger patchset comment — James, file layout join/migrate/mirror happen _maybe_ only once or twice in the lifetime of a file, so it doesn't make sense to add a comple
Patrick Farrell PS3 · 2025-12-15 17:25
James, the lack of ability to remove other components than the last one is a deliberate choice to prevent the creation of incomplete layouts.  There is nothing about the current approach that can’t support removing other components, it’s just a sanity restriction.
James Simmons PS3 · 2025-12-18 00:33
Think about file join work with 2 mirrors each with 3 components and another file with also 2 mirrors also with 3 components. Its going to be merged right. The current approach would require allocating a new larger array. Then copying items from file 1 static array and then copying items from file 2 static array. Then deleting the old array. Some slicing is needed due the 2 mirrors. Compared to Xarray its erasing the reference to pointers in file 2 xarray and adding a reference of that same pointer into file 1 Xarray. Do you feel the former approach is way better?

Honestly the biggest impact is for the file join project so the really important opinion I need is from Alexey. Alexey what do you think?
Patrick Farrell PS3 · 2025-12-18 01:29
Yes, I do - it's very simple.  You allocate a larger array and write the layout to it.  Very simple.

It requires no complex data structures and no locking.  The idea that we should have references across two xarrays is very concerning - that means the layout components need reference counting then, I guess?  They do not today.

There is no particular impact on file join - it is just as easy to do file join via layout copy as any other operation.
Andreas Dilger PS3 · 2025-12-18 13:27
James, file layout join/migrate/mirror happen _maybe_ only once or twice in the lifetime of a file, so it doesn't make sense to add a complex data structure and overhead to optimize a 0.00001% usage case.  That is doubly a problem if it means many small allocations and/or additional locking needs to be added to handle this extremely rare use case.
owner James Simmons · uploader James Simmons · PS3 uploaded 326d ago · NEW · open in Gerrit ↗
commit message
LU-19298 lod: use Xarray instead of static arrays for comp entires

The LOD layer implements very large static arrays to manage the
component entries for each layout. This works well for the case
that all the components are for block I/O that are expected to
be aligned to each other in a specific order. In such cases the
API works to add or delete components at the end of such layouts.
With the upcoming introducting of parity and foreign components
the rules change in that you can delete or add a component
located in the middle of the layout. This would be very
complicated when using static arrays.

To make life easier for upcoming projects we move away from
static arrays to using Xarrays. We no longer requires creating
a whole new array and copying components over. Instead we just
insert or delete components into the Xarray. This current
implementation just does the change from static arrary to
Xarray without truly introducing gaps in the Xarray. This can
be done in follow on patches and can be used to greatly simplify
the code. For example since "gaps" are allowed in the Xarray
we can place components in the Xarray using the mirror id as
apart of the index which mirrors the component ID. This removes
the need to manage the new mirror ranges in the Xarray.

Change-Id: I67020f899ad89bfa6095c4b22f7f1b07b6de3e86
Signed-off-by: James Simmons <jsimmons@infradead.org>
60897 master J ✗2B ✓T ✗4R -1/2−
LU-19298 lod: merge different lmm handling togther.
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures stalled 218d L +225 −300
218d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — sanity-pfl@ldiskfs+DNE:test_1c, sanity-pfl@zfs:test_1c
enforced failed: review-dne-part-2, review-dne-zfs-part-2, review-ldiskfs-ubuntu
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-pfl@ldiskfs+DNE:test_1cNEW unique failure for this branch in the last 30 days, and was seen 2 times across 1 other branches 1 reviews
sanity-pfl@zfs:test_1cNEW unique failure for this branch in the last 30 days, and was seen 2 times across 1 other branches 1 reviews
failed enforced testplatformdetail
review-dne-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
4 optional test failure(s) — informational
build #116154 SUCCESS · tests all Maloo sessions
no vote yet: Alexey Lyashkov, Andreas Dilger, Patrick Farrell
patchsets:
+1 earlier PS1 08-25
PS2 08-27 PS3 08-28 PS4 08-31 PS5 08-31 Janitor Bot PS6 08-31
owner James Simmons · uploader James Simmons · PS6 uploaded 429d ago · NEW · open in Gerrit ↗
commit message
LU-19298 lod: merge different lmm handling togther.

For PFL handling the LOD has developed very similar code independently.
Besides code duplication we end up not having consistent PFL handling.
For example lod_layout_add() handling doesn't support specific OST
indexes being requested by the user for the new component. We merge
all the code into lod_comp_for_each_lcm(). In the future any change
here will impact many code paths at the same time. For EC developement
we don't need to touch any many places in the code.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ic2392dd84eb397e87e384d6916ccb2de04b6d083
52875 master J ✗30B ✓T ✗11R 0/2
LU-8980 debug: redefine CDEBUG to use tracing
reviewing Timothy Day · PS1→PS7 since your -1 — your objection was dropped
30 unique failures stalled 243d 8 unresolved XL +643 −2491
243d
PS1→PS7 since your -1 — your objection was dropped
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_35aseen in 4 other reviews
conf-sanity2@ldiskfs+DNE:test_35bseen in 18 other reviews
conf-sanity2@ldiskfs+DNE:test_37seen in 18 other reviews
conf-sanity2@ldiskfs+DNE:test_38seen in 16 other reviews
conf-sanity2@ldiskfs+DNE:test_39seen in 28 other reviews
conf-sanity2@ldiskfs+DNE:test_40seen in 30 other reviews
conf-sanity2@ldiskfs+DNE:test_41aseen in 27 other reviews
conf-sanity2@zfs:test_35aseen in 4 other reviews
conf-sanity2@zfs:test_35bseen in 8 other reviews
conf-sanity2@zfs:test_38seen in 11 other reviews
conf-sanity2@zfs:test_39seen in 25 other reviews
conf-sanity2@zfs:test_40seen in 25 other reviews
conf-sanity2@zfs:test_41aseen in 12 other reviews
recovery-small@ldiskfs+DNE:test_10aNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
recovery-small@ldiskfs+DNE:test_24bseen in 4 other reviews
recovery-small@ldiskfs+DNE:test_106seen in 4 other reviews
recovery-small@ldiskfs+DNE:test_108NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@zfs:test_10aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@zfs:test_24bseen in 2 other reviews
recovery-small@zfs:test_106seen in 4 other reviews
replay-single@ldiskfs+DNE:test_65bseen in 6 other reviews
replay-single@zfs:test_65bseen in 6 other reviews
sanity2@ldiskfs+DNE:test_60fseen in 1 other review
sanity2@ldiskfs+DNE:test_170NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity2@ldiskfs+DNE:test_360NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity2@ldiskfs+DNE:test_401aNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity2@ldiskfs+DNE:test_818seen in 7 other reviews
sanity2@zfs:test_60fseen in 1 other review
sanity2@zfs:test_170seen in 1 other review
sanity2@zfs:test_401aNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: sanity. session
review-dne-part-3 RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. This build will be scored -1 since fortestonly was specified. session
review-dne-part-5 RHEL 9.3/x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-dne-part-6 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-single. session
review-dne-selinux-ssk-part-1 RHEL 8.9/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.9/x86_64 ran 5 tests. 1 tests failed: recovery-small. session
review-ldiskfs RHEL 8.9/x86_64, RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9/x86_64, SLES 15.5/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-zfs RHEL 8.9/x86_64 ran 8 tests. 1 tests failed: replay-single. session
3 optional test failure(s) — informational
build #105198 SUCCESS · tests all Maloo sessions
no vote yet: Yang Sheng, Alexey Lyashkov, Andreas Dilger, Neil Brown
patchsets:
+2 earlier PS1 10-28 PS2 11-01
PS3 06-03 PS4 06-03 PS5 06-04 PS6 06-04 PS7 06-05
your previous vote: -1 on PS1 (2023-10-28 20:53) — now at PS7
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2023-10-31 14:16 Timothy Day libcfs_debug.h:143 — I'm hoping to use the tracepoints to enable/disable subsystem logging. There's a tracepoint enabled macro I could use to restore this check.
Alexey Lyashkov PS1 · 2023-10-31 07:20
never kill a subsystem check. I will make developers work harder.
Timothy Day PS1 · 2023-10-31 14:16
I'm hoping to use the tracepoints to enable/disable subsystem logging. There's a tracepoint enabled macro I could use to restore this check.
reply PS1 2023-10-30 14:37 Timothy Day libcfs_debug.h:179 — Yes. This is super hack-y. There's definitely a better way to do this.
Andreas Dilger PS1 · 2023-10-30 06:09
Does this add 256 bytes of stack usage to every function that calls CDEBUG()?  That could be pretty bad in some call chains.
Timothy Day PS1 · 2023-10-30 14:37
Yes. This is super hack-y. There's definitely a better way to do this.
reply PS1 2023-10-31 14:16 Timothy Day libcfs_debug.h:182 — This entire __ltrace_printk() macro sucks. I need to rewrite it entirely. I have an idea that should make this macro much better.
Alexey Lyashkov PS1 · 2023-10-31 07:20
you are really want to kill a performance? I think yes.
Timothy Day PS1 · 2023-10-31 14:16
This entire __ltrace_printk() macro sucks. I need to rewrite it entirely. I have an idea that should make this macro much better.
reply PS1 2023-10-30 14:37 Timothy Day libcfs_debug.h:196 — I'll probably have to, since old kernels don't like '#include <linux/ratelimit_types.h>'. I was hoping that these macro would be simpler.
Andreas Dilger PS1 · 2023-10-30 06:09
There are tunable parameters for the CDEBUG rate limiting, why not use them here?
Timothy Day PS1 · 2023-10-30 14:37
I'll probably have to, since old kernels don't like '#include <linux/ratelimit_types.h>'. I was hoping that these macro would be simpler.
reply PS1 2023-10-31 04:01 Andreas Dilger libcfs_debug.h:220 — Sorry, I was thinking this was the no-op version of the actual libcfs_debug_msg() which had been removed. Carry on.
Andreas Dilger PS1 · 2023-10-30 06:09
This will also need to be fixed.
Timothy Day PS1 · 2023-10-30 14:37
I think this is fine? This is just redefining this function to be always false is debugging is disabled.
Andreas Dilger PS1 · 2023-10-31 04:01
Sorry, I was thinking this was the no-op version of the actual libcfs_debug_msg() which had been removed.  Carry on.
reply PS2 2023-11-01 04:31 Timothy Day libcfs_debug.h:136 — Doesn't build on aarch64 and ppc. Needs to go in debug.c probably. These are pretty huge functions anyway.
Timothy Day PS2 · 2023-11-01 04:31
Doesn't build on aarch64 and ppc. Needs to go in debug.c probably. These are pretty huge functions anyway.
reply PS2 2023-11-01 04:31 Timothy Day libcfs_debug.h:167 — Same.
Timothy Day PS2 · 2023-11-01 04:31
Same.
reply PS2 2023-11-01 04:31 Timothy Day libcfs_debug.h:196 — Same.
Timothy Day PS2 · 2023-11-01 04:31
Same.
owner Timothy Day · uploader Timothy Day · PS7 uploaded 882d ago · NEW · open in Gerrit ↗
commit message
LU-8980 debug: redefine CDEBUG to use tracing

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TODO:
1) Look at debug upcalls
2) Test/verify/update userspace helpers
3) Clean up more code
4) Validate LBUG, LASSERT
5) Write kernel doc comments for everything
6) Make sure various userspace settings actually
   work
7) Fix CDEBUG_LIMIT/CDEBUG_LIMIT_LOC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The custom Lustre debugging infrastruction should be
refactored to use existing kernel debugging infrastructure.
We should aim to:

1) Improve the current developer experience: Writing code
   for Lustre shouldn't be made harder. Existing userspace
   debugging tools should still work and should be improved.
2) Maintain or improve performance: Lustre is a high
   performance filesystem, not a low performance one.
3) Significantly reduce divergence with upstream: The custom
   Lustre debugging must go. The code in libcfs and various
   Lustre subsystem must be refactored.

The first step towards that is pushing all debug message into
the trace log. This will allow use to retain the features of
current Lustre debugging while significantly reducing the need
for custom code.

This patch removes old Lustre debugging code at the same time.
Also, it implements the minimum userspace code needed to
make Lustre debugging tools still function.

Test-Parameters: fortestonly
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I8004049eb97a3fdc9a5725aa8402355107494950
57348 master J !B ✓T ✗11R -1/2−
LU-18175 ldlm: replace namespace lock with RCU
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase rocky8 stalled 280d M +62 −75
280d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-1, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-selinux-ssk-part-1, review-dne-zfs-part-2, review-dne-zfs-part-4, review-dne-zfs-part-6, review-ldiskfs
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 crashed RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 crashed RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: ost-pools. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 9.5 / x86_64 ran 4 tests. 1 tests failed: ost-pools. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-1 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: ost-pools. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
3 optional test failure(s) — informational
build #115080 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Neil Brown, Timothy Day
patchsets:
+4 earlier PS1 12-09 PS2 01-16 PS3 01-22 PS4 01-22
PS5 02-23 PS6 03-06 PS7 04-02 PS8 06-03 PS9 07-16
owner James Simmons · uploader James Simmons · PS9 uploaded 475d ago · NEW · open in Gerrit ↗
commit message
LU-18175 ldlm: replace namespace lock with RCU

With newer kernels you can enable a debugfs interface to flush
out the shrinkers. When enabled in testing the below was
discovered:

BUG: sleeping function called from invalid context at kernel/mutex.c:104
in_atomic(): 1, irqs_disabled(): 0, pid: 18286, name: lctl
CPU: 3 PID: 18286 Comm: lctl Kdump: loaded Tainted: G           OE  ------------   3.10.0-7.9-debug #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-1.fc38 04/01/2014
 Call Trace:
  [<ffffffff817ded29>] dump_stack+0x19/0x1b
  [<ffffffff810c8ec9>] __might_sleep+0xd9/0x100
  [<ffffffff817e5540>] mutex_lock+0x20/0x40
  [<ffffffffa08ae00c>] ldlm_pools_shrink+0x6c/0x330 [ptlrpc]
  [<ffffffffa08ae2eb>] ldlm_pools_cli_shrink+0x1b/0x20 [ptlrpc]
  [<ffffffffa022be76>] shrinker_debugfs_count_show+0x106/0x200 [libcfs]
  [<ffffffff8126e115>] seq_read+0x135/0x470
  [<ffffffff81244899>] vfs_read+0xb9/0x1c0
  [<ffffffff812457cf>] SyS_read+0x7f/0xf0
  [<ffffffff817f400c>] system_call_fastpath+0x1f/0x24

This is due to the debugfs interface taking its own mutex lock
and our own ldlm pools using a mutex lock as well. Replace our
mutex lock with RCU list handling. Special note is that their is
no list_empty_rcu(). We have to use list_first_or_null_rcu() instead.
This is due to list_empty() and the next list operation performing
separate READ_ACCESS which can give different results.

Change-Id: I175f345b5a8cf7d29e32c7e192620f9c896e6a9d
Signed-off-by: James Simmons <jsimmons@infradead.org>
27028 master J ✗1B ✓T ✗1R 0/2
LU-8875 lnet: Change to new RDMA done callback mechanism
carrying Doug Oucharek · janitor: 1 test failure unique to this patch — sanity-quota@zfs+DNE:test_12b
1 unique failure stalled 292d M +221 −5
292d
janitor: 1 test failure unique to this patch — sanity-quota@zfs+DNE:test_12b
enforced failed: review-dne-zfs-part-2
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-quota@zfs+DNE:test_12bseen in 100 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 13 tests. 1 tests failed: sanity-sec. session
2 optional test failure(s) — informational
build #13782 SUCCESS
no vote yet: Alexey Lyashkov, Ian Ziemba, Doug Oucharek, Serguei Smirnov, Amir Shehata, Sonia Sharma
owner Doug Oucharek · uploader James Simmons · PS8 uploaded 2379d ago · NEW · open in Gerrit ↗
commit message
LU-8875 lnet: Change to new RDMA done callback mechanism

Adapt to changes made to the RDMA API:

- change call to ib_create_cq() to ib_alloc_cq() (use SOFTIRQ
  for callbacks)
- change call to ib_destroy_cq() to ib_free_cq()
- introduce a new struct kib_sched_element as the items we
  put on the kib scheduler work list (rather than putting connections
  to be processed)
- added a kib_sched_element to kib_tx and kib_rx so they can be
  scheduled to be processed by the kib scheduler
- have separate callbacks for each CQ operation type
- set the proper callback to be called when setting up CQ elements
- change kiblnd_scheduler() to process work items (kib_sched_element)
  rather than process connections

All of this means we are making good use of the new RDMA CQ
callback mechanism and focusing our scheduler to process complete
items rather than letting it process connections and have to poll
for completions.

Test-Parameter: trivial nettype=o2ib
Signed-off-by: Doug Oucharek <dougso@me.com>
Change-Id: I4ba719578086fedb68ca554eeec191c839ceaca2
59802 master J ✓B ✓T ✓R +2/2
LU-18162 obdclass: standardize class_(un)register_type
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
needs rebaseVerified -1 stalled 293d 2 unresolved L +216 −201
293d
needs rebase — checkpatch: cannot be cherry-picked
Verified -1 veto by Oleg Drokin
2 reviewer comment(s) to address if a respin is needed — last from Oleg Drokin
2 optional test failure(s) — informational
build #115316 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-07-27 01:40 · Shaun Tancheff +1 2025-07-28 09:47 · Andreas Dilger +1 2025-07-29 14:38
no vote yet: Oleg Drokin
patchsets: PS1 06-17 PS2 06-17 Janitor Bot PS3 06-17 PS4 06-17 PS5 07-27 James Simmons
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2025-08-12 05:25 Oleg Drokin patchset comment — I am really suspicious about this patch.
Oleg Drokin PS5 · 2025-08-12 05:25
I am really suspicious about this patch.
current master-next on boilpot started to get strange use after free problems which seem to be accessing OBD device that's already freed.

Four distinct trace so far: 
https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73710

https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73714
https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73724
https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73725

I am going to omit it next time over and we'll see how it works. Not setting -1 just yet
reply PS5 2025-08-24 18:19 Timothy Day patchset comment — Odd. I wonder if this is exposing an issue introduced in a previous patch somehow?
Oleg Drokin PS5 · 2025-08-18 18:30
dropping this patch resulted in total disappearance of the problems reported in the latest master-next over the last week
Timothy Day PS5 · 2025-08-24 18:19
Odd. I wonder if this is exposing an issue introduced in a previous patch somehow?
owner Timothy Day · uploader James Simmons · PS5 uploaded 465d ago · NEW · open in Gerrit ↗
commit message
LU-18162 obdclass: standardize class_(un)register_type

Rather than passing many arguments to class_register_type(),
statically define all of the fields of the LU type and
pass only that LU type to the class register/unregister
functions.

This makes it easier to see what methods are defined on each
LU device type and also aligns more closely with Linux
kernel style. This patch precedes the unification of
OBD and LU type.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ie33f55abaeaa76d9ede2c11a84a82660827a61f4
56527 master J !B ✓T ✗10R 0/2
LU-13118 lustre: use UUID for naming instead of internal pointers
mine enforced failed: review-dne-part-4, review-dne-part-5, review-dne-part-7, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-5, review-dne-zfs-part-7, review-ldiskfs
upstream stalled 325d 7 unresolved M +58 −50
325d
enforced failed: review-dne-part-4, review-dne-part-5, review-dne-part-7, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-5, review-dne-zfs-part-7, review-ldiskfs
7 unresolved thread(s) await your reply — last from Aurelien Degremont
janitor run: 5 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-4 RHEL 9.4 / x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-part-5 RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: recovery-small. session
review-dne-part-5 RHEL 9.4 / x86_64 ran 8 tests. 1 tests failed: recovery-small. session
review-dne-part-7 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-part-7 RHEL 9.4 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: recovery-small. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 8 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
5 optional test failure(s) — informational
build #112739 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets:
+3 earlier PS1 09-28 PS2 09-28 PS3 10-01
PS4 10-15 PS5 12-03 PS6 01-11 PS7 03-08 PS8 04-24
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2024-12-03 19:04 Aurelien Degremont COMMIT_MSG:13 — would be nice to have some examples of the new names, or before/after
Aurelien Degremont PS5 · 2024-12-03 19:04
would be nice to have some examples of the new names, or before/after
reply PS8 2025-04-25 05:56 Shaun Tancheff llite_lib.c:1371 — Do the extra embedded '-' separators cause parsing issues later on?
Shaun Tancheff PS8 · 2025-04-25 05:56
Do the extra embedded '-' separators cause parsing issues later on?
reply PS8 2025-04-25 05:56 Shaun Tancheff llite_lib.c:1513 — %pU is not correct here as sbi->ll_sb_uuid.uuid is a max 40 byte string.
Shaun Tancheff PS8 · 2025-04-25 05:56
%pU is not correct here as sbi->ll_sb_uuid.uuid is a max 40 byte string.
reply PS8 2025-04-25 05:56 Shaun Tancheff mdc_changelog.c:731 — It is safe to require the '-mdc-' naming? Probably but I have not looked to be positive.
Shaun Tancheff PS8 · 2025-04-25 05:56
It is safe to require the '-mdc-' naming? Probably but I have not looked to be positive.
reply PS8 2025-04-25 09:05 Andreas Dilger obd_config.c:1900 — That is my concern as well if the format of the parameters is suddenly getting much longer and having extra dashes in them. In the past we
Shaun Tancheff PS8 · 2025-04-25 05:56
Extra '-' separators ... do the confuse a parser somewhere?
Andreas Dilger PS8 · 2025-04-25 09:05
That is my concern as well if the format of the parameters is suddenly getting much longer and having extra dashes in them.  In the past we had to deal with fsname that contained multiple '-' in them, so some code is using "strrchr()" to find the fsname from the end of the instance name.

The current parameters look like:
 
# lctl list_param llite.*.max*
llite.myth-ffff909824e7f800.max_easize
llite.myth-ffff909824e7f800.max_read_ahead_async_active
llite.myth-ffff909824e7f800.max_read_ahead_mb
llite.myth-ffff909824e7f800.max_read_ahead_per_file_mb
llite.myth-ffff909824e7f800.max_read_ahead_whole_mb
llite.myth-ffff909824e7f800.max_cached_mb

but with this patch they would become:
 
# lctl list_param llite.*.max*
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_easize
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_async_active
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_mb
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_per_file_mb
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_whole_mb
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_cached_mb

which not only makes them longer and harder to parse, but also much less readable.  If the main concern here is ASLR then we can avoid printing
the raw pointer in the parameter name and work out something else.

For example, the kernel could save a random 64-bit number at startup time and XOR with that, and if it needs the original pointer back it can XOR again.
reply PS7 2025-03-10 08:46 Aurelien Degremont liblustreapi_util.c:484 — you probably wants to update this comment to be inline with the syntax.
Aurelien Degremont PS7 · 2025-03-10 08:46
you probably wants to update this comment to be inline with the syntax.
reply PS8 2025-04-25 05:56 Shaun Tancheff liblustreapi_util.c:467 — The check could be done before trying the copy
Shaun Tancheff PS8 · 2025-04-25 05:56
The check could be done before trying the copy
owner James Simmons · uploader James Simmons · PS8 uploaded 559d ago · NEW · open in Gerrit ↗
commit message
LU-13118 lustre: use UUID for naming instead of internal pointers

According to ASLR it is considered a security violation to publish
internal kernel addresses to user land. Currently lustre uses
internal pointer addresses to create an unique identifier that
ends up being used to build the sysfs tree. This patch switches
this to using the UUID generated. The reason for using UUID is
that in the ptlrpc layer there is a mapping between NIDs and
UUIDs and many client interfaces have the same UUIDs so we
could cheat and use the device name instead.

Change-Id: Id91ceece847402658d1e2a364b3602572daaef87
Signed-off-by: James Simmons <jsimmons@infradead.org>
58304 master J !B ✓T ✗1R -1/2−
LU-18657 pcc: invalidate instead of truncate inode mapping
mine enforced failed: custom-1001
stalled 330d 1 unresolved XS +2 −2
330d
enforced failed: custom-1001
Jian Yu voted -1
1 unresolved thread(s) await your reply — last from Jian Yu
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
1 optional test failure(s) — informational
build #119366 SUCCESS · tests all Maloo sessions
reviews: Jian Yu -1 2025-12-05 20:32
no vote yet: Qian Yingjin, Neil Brown, Sebastien Buisson, Timothy Day
patchsets:
+3 earlier PS1 03-05 PS2 03-05 PS3 03-06
PS4 03-11 PS5 03-11 PS6 03-11 PS7 04-25 PS8 12-05
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS8 2025-12-08 17:29 Jian Yu patchset comment — [ 2231.421259] ------------[ cut here ]------------
Jian Yu PS8 · 2025-12-08 17:29
[ 2231.421259] ------------[ cut here ]------------
[ 2231.422249] kernel BUG at fs/jbd2/transaction.c:2148!
[ 2231.423289] invalid opcode: 0000 [#1] SMP PTI
[ 2231.424158] CPU: 0 PID: 129424 Comm: ldlm_bl_03 Kdump: loaded Tainted: G           OE     -------- -  - 4.18.0-553.85.1.el8_10.x86_64 #1
[ 2231.426385] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[ 2231.427473] RIP: 0010:jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.428770] Code: 00 75 f4 eb a7 5b 4c 89 ef 5d 41 5c 41 5d 41 5e 41 5f e9 f9 7f ef de 5b 31 c0 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc 0f 0b <0f> 0b 0f 1f 40 00 66 66 66 66 90 41 56 41 55 41 54 55 53 4c 8b 2f
[ 2231.432135] RSP: 0018:ffffa4c40584b9e8 EFLAGS: 00010246
[ 2231.433142] RAX: 000fffffc001206d RBX: ffffedd9006f92c0 RCX: 0000000000000000
[ 2231.434497] RDX: 0000000000000000 RSI: ffffedd9006f92c0 RDI: ffff9313873d5000
[ 2231.435845] RBP: ffff9312ac220b80 R08: 0000000000000000 R09: ffffa4c40584b9b8
[ 2231.437180] R10: ffffffffffffffff R11: 000000000000003f R12: 0000000000000000
[ 2231.438513] R13: ffffedd9006f92c0 R14: 0000000000000000 R15: 0000000000000000
[ 2231.439846] FS:  0000000000000000(0000) GS:ffff9313bbc00000(0000) knlGS:0000000000000000
[ 2231.441346] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 2231.442443] CR2: 00005654730b7f44 CR3: 000000001ee10005 CR4: 00000000000606f0
[ 2231.443776] Call Trace:
[ 2231.444312]  ? __die_body+0x1a/0x60
[ 2231.445060]  ? die+0x2a/0x50
[ 2231.445662]  ? do_trap+0xe7/0x110
[ 2231.446327]  ? jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.447503]  ? do_invalid_op+0x36/0x40
[ 2231.448243]  ? jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.449410]  ? invalid_op+0x14/0x20
[ 2231.450127]  ? jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.451286]  invalidate_inode_page+0x72/0x90
[ 2231.452153]  __invalidate_mapping_pages+0x156/0x3c0
[ 2231.453100]  ? vsnprintf+0x340/0x520
[ 2231.453821]  ? snprintf+0x49/0x70
[ 2231.454488]  pcc_inode_put+0x118/0x140 [lustre]
[ 2231.455579]  pcc_layout_invalidate+0x12a/0x550 [lustre]
[ 2231.456629]  vvp_conf_set+0xbc/0xe0 [lustre]
[ 2231.457505]  cl_conf_set+0x62/0x140 [obdclass]
[ 2231.458613]  ll_layout_conf+0x14d/0x420 [lustre]
[ 2231.459553]  ? ll_lock_cancel_bits+0x484/0x9b0 [lustre]
[ 2231.460612]  ll_lock_cancel_bits+0x484/0x9b0 [lustre]
[ 2231.461630]  ll_md_blocking_ast+0x2d9/0x450 [lustre]
[ 2231.462624]  ldlm_cancel_callback+0x7b/0x260 [ptlrpc]
[ 2231.463897]  ldlm_cli_cancel_local+0xa3/0x490 [ptlrpc]
[ 2231.464949]  ldlm_cli_cancel_list_local+0x113/0x330 [ptlrpc]
[ 2231.466082]  ldlm_bl_thread_main+0x74b/0x8b0 [ptlrpc]
[ 2231.467122]  ? finish_wait+0x80/0x80
[ 2231.467875]  ? ldlm_handle_bl_callback+0x400/0x400 [ptlrpc]
[ 2231.468993]  kthread+0x134/0x150
[ 2231.469678]  ? set_kthread_struct+0x50/0x50
[ 2231.470499]  ret_from_fork+0x35/0x40
[ 2231.471222] Modules linked in: loop mgc(OE) lustre(OE) mdc(OE) lov(OE) osc(OE) lmv(OE) fid(OE) fld(OE) ksocklnd(OE) ptlrpc(OE) obdclass(OE) lnet(OE) libcfs(OE) rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache intel_rapl_msr intel_rapl_common crct10dif_pclmul crc32_pclmul ghash_clmulni_intel joydev pcspkr i2c_piix4 virtio_balloon sunrpc ext4 mbcache jbd2 ata_generic ata_piix libata virtio_net crc32c_intel serio_raw net_failover virtio_blk failover
owner James Simmons · uploader James Simmons · PS8 uploaded 334d ago · NEW · open in Gerrit ↗
commit message
LU-18657 pcc: invalidate instead of truncate inode mapping

When releasing the PCC inode the current code releases the pages
related to both the pcc inode and original inode. It is possible
additional references exist for these inode so we are not
allowed to flush all the pages. Instead use the function
invalidate_mapping_pages() that only handles pages that can be
cleaned up.

Fixes: 9e37963fa0 ("LU-10499 sec: support of PCC-RO for encrypted files")
Test-Parameters: trivial testlist=sanity-pcc
Change-Id: If979b19d68004221909450641de461b92818d243
Signed-off-by: James Simmons <jsimmons@infradead.org>
48231 master J –B ✓T ✗1R +1/2
LU-14799 tests: run stand along mgs test
mine enforced failed: custom-1001
stalled 365d 1 unresolved XS +1 −1
365d
enforced failed: custom-1001
1 unresolved thread(s) await your reply — last from Colin Faber
failed enforced testplatformdetail
custom-1001 RHEL 9.3 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. This build will be scored -1 since fortestonly was specified. session
build #108444 SUCCESS · tests all Maloo sessions
reviews: Colin Faber +1 2025-11-03 15:29
no vote yet: Andreas Dilger
patchsets: PS1 08-16 PS2 08-16 PS3 08-17 PS4 10-22
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2025-11-03 15:29 Colin Faber patchset comment — Sure
Colin Faber PS4 · 2025-11-03 15:29
Sure
owner James Simmons · uploader James Simmons · PS4 uploaded 742d ago · NEW · open in Gerrit ↗
commit message
LU-14799 tests: run stand along mgs test

See what breaks for maloo setup.

Test-Parameters: fortestonly testlist=conf-sanity standalonemgs=true
Change-Id: I0588dc958af7c37b120f146753e898949d9cb599
Signed-off-by: James Simmons <jsimmons@infradead.org>
43861 master J !B ✓T ✗1R 0/2
LU-14717 osd-ldiskfs: set readcache_max_filesize properly
reviewing Qian Yingjin · PS1→PS2 since your -1 — your objection was dropped
stalled 372d XS +5 −0
372d
PS1→PS2 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 crashed RHEL 8.8/x86_64 ran 6 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
2 optional test failure(s) — informational
build #98522 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Andreas Dilger, Li Xi
your previous vote: -1 on PS1 (2021-05-29 14:58) — now at PS2
owner Qian Yingjin · uploader Andreas Dilger · PS2 uploaded 1145d ago · NEW · open in Gerrit ↗
commit message
LU-14717 osd-ldiskfs: set readcache_max_filesize properly

When set readcache_max_filesize with a negative value from the
proc/sysfs interface, we should set it with maximal value
OSD_MAX_CACHE_SIZE.

Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: If5d41211b2b1016a70f470f3242a17f8d5c9d3b8
60909 master J ✗2B ✓T ✗3R -1/2−
LU-18544 utils: handle special lnetctl import for route setup
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures IPv6 stalled 392d 2 unresolved M +155 −0
392d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — sanity-lnet@ldiskfs+DNE:test_255, sanity-lnet@zfs:test_255
enforced failed: custom-1001, review-ldiskfs-dne
2 unresolved thread(s) await your reply — last from Chris Horn
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_255NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity-lnet@zfs:test_255NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #116068 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-26 PS2 08-26 Janitor Bot PS3 08-27
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2025-08-26 16:39 Chris Horn COMMIT_MSG:9 — It would be better to say something like:
Chris Horn PS2 · 2025-08-26 16:39
It would be better to say something like:

The lnetctl tool supports gateways specified with a nidrange syntax.
For example:
gateway: 10.151.0.[1,2,3,4,5,6,7,8]@o2ib
reply PS2 2025-08-26 16:37 Chris Horn lnetctl.c:5375 — Is strncmp needed vs. strcmp? We use strcmp everywhere else.
Chris Horn PS2 · 2025-08-26 16:37
Is strncmp needed vs. strcmp? We use strcmp everywhere else.

I would prefer you remove "route" from the cmd_mappings array (line 4363), and then move this conditional block to same level as the ip2nets conditional:

```
  if (mapping) {
    ...
  } else if (!strcmp(scalar_value, "route")) {
    ...
  } else if (!strcmp(scalar_value, "ip2nets")) {
```

The cmd_mappings array should only be for items that don't require a custom handler.
owner James Simmons · uploader James Simmons · PS3 uploaded 433d ago · NEW · open in Gerrit ↗
commit message
LU-18544 utils: handle special lnetctl import for route setup

The lnetctl tool supports the following:

gateway: 10.151.0.[1,2,3,4,5,6,7,8]@o2ib

in YAML config files as a short hand to setup many gateways. This
actually voilates the YAML spec and our code doesn't handle this
correctly. We need to support this incorrect behavior since it
was allowed with cYAML for a long time. To do this we need to
intercept route handling and unroll the gateway entries. The good
news is that the '/' used by netmask will not break the YAML spec.
Support for netmask has not been implemented yet.

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I6a14659f62ab50d0cb521a2b8e34b1638e4f980d
51901 master J !B ✓T ✗1R -1/2−
LU-17022 obdclass: convert more flags to bitops
carrying Neil Brown · needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 405d M +57 −41
405d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-ldiskfs-ubuntu
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
build #111391 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-09 PS2 11-24 PS3 11-24 PS4 02-27 James Simmons
owner Neil Brown · uploader James Simmons · PS4 uploaded 614d ago · NEW · open in Gerrit ↗
commit message
LU-17022 obdclass: convert more flags to bitops

        obd_version_recov:1,    /* obd uses version checking */
        obd_replayable:1,       /* recovery enabled; inform clients */
        obd_no_recov:1,         /* fail instead of retry messages */

are now

        OBDF_VERSION_RECOV,     /* obd uses version checking */
        OBDF_REPLAYABLE,        /* recovery enabled; inform clients */
        OBDF_NO_RECOV,          /* fail instead of retry messages */

Introduce odb_copy_flag() to copy a flag from one obd to another.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Id7827b7739ca16f682ec11a216c2b35028d099de
8027 master J –B ✓T ✓R +0/2−
LU-5960 lnet: add in functionality of lctl to DLC
carrying Amir Shehata · Christopher J. Morrone voted -1
stalled 456d XL +1916 −144
456d
reviews: Christopher J. Morrone -1 2016-06-23 02:31 · Olaf Weber +1 2016-03-24 16:31
no vote yet: Doug Oucharek, Isaac Huang, James Shimek, Chuck Fossen, Liang Zhen
owner Amir Shehata · uploader James Simmons · PS23 uploaded 3883d ago · NEW · open in Gerrit ↗
commit message
LU-5960 lnet: add in functionality of lctl to DLC

One of the barriers to moving from lctl to lnetctl
is the lack of certain functionality. This patch
adds some of the feature that are missing back.

The following commands have been added:
. show peers
. add peer
. del peer
. show connections
. close connection
. push connection

Besides adding in the missing pieces I have added
new features such as filtering the listing of peer
or connections based on properties such as NID,PID
or even LNet type (e.g o2ib1) to the lnetconfig
library. From the lnetctl command line one can
call lnetctl peer show --nid 10.0.0.1@tcp and it will
only show that specific peer. Listing of a grouping
of peers is also possible with for example lnetctl
peer show --nid o2ib12 which will display all peers
belong to the o2ib12 net configuration. Lastly the
ability to use DNS hostnames was also added.

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Change-Id: Id102e8a6148d9e2ef8c88880df86e237a14c5ebb
13135 master J –B ✓T ✓R +1/2−
LU-6034 lnet: Enable lnetctl to handle checksum settings for LNet
mine Oleg Drokin voted -1
stalled 456d S +33 −7
456d
reviews: Doug Oucharek +1 2015-08-17 17:01 · Oleg Drokin -1 2015-08-28 02:01 · Liang Zhen +1 2015-08-25 12:49
no vote yet: Dmitry Eremin, Isaac Huang, Jian Yu, Frank Zago, Amir Shehata
owner James Simmons · uploader James Simmons · PS12 uploaded 4110d ago · NEW · open in Gerrit ↗
commit message
LU-6034 lnet: Enable lnetctl to handle checksum settings for LNet

Add the ability for lnetctl to query or set the checksum algorithm
for an LNet interface. This patch only enables user land side of
setting this.

Change-Id: I40ec55e73032d24baf3133703efc59d49446d692
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
13243 master J ✗8B ✓T ✗10R -2/2−
LU-6081 hsm: adding migration support
carrying Frank Zago · janitor: 8 test failures unique to this patch — sanity-hsm@ldiskfs+DNE:test_113a, sanity-hsm@ldiskfs+DNE:test_113b, sanity-hsm@ldiskfs+DNE:test_113c +5 more
8 unique failures stalled 456d L +789 −117
456d
janitor: 8 test failures unique to this patch — sanity-hsm@ldiskfs+DNE:test_113a, sanity-hsm@ldiskfs+DNE:test_113b, sanity-hsm@ldiskfs+DNE:test_113c +5 more
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-4, review-dne-selinux, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-4, review-ldiskfs, review-ldiskfs-arm, review-zfs
Qian Yingjin voted -1
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-hsm@ldiskfs+DNE:test_113aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_113bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_113cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_113dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: sanity-hsm. session
review-dne-part-4 CentOS 7.0/x86_64 ran 10 tests. 2 tests failed: sanity-flr, sanity-pfl. session
review-dne-selinux CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 2 tests failed: sanityn, sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: sanity-hsm. session
review-dne-zfs-part-4 crashed CentOS 7.0/x86_64 ran 12 tests. 2 tests failed: sanity-flr, replay-single. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-arm CentOS 7.0/x86_64, CentOS 8.0/aarch64 ran 5 tests. 1 tests failed: sanity. session
review-zfs CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity-flr. session
4 optional test failure(s) — informational
build #14378 SUCCESS
reviews: Qian Yingjin -1 2020-06-07 14:57
no vote yet: jacques-Charles Lafoucriere, Yohan Pipereau, Vitaly Fertman, Henri Doreau, Nikitas Angelinas, Patrick Farrell, Thomas LEIBOVICI, Aurelien Degremont, nathan r, Ben Evans, Shaun Tancheff, Alexander Zarochentsev, Sergey Cheremencev, Andreas Dilger, Quentin Bouget
owner Frank Zago · uploader James Simmons · PS32 uploaded 2360d ago · NEW · open in Gerrit ↗
commit message
LU-6081 hsm: adding migration support

Currently file migration is done by "lfs migrate". This has a couple
problems. It doesn't scale well to large files and/or large number of
files to copy. If an external tool (such as Robinhood) wants to
migrate a file, it has to spawn lfs to do the job, for every file,
which has a large overhead, or copy the file itself.

A solution to this issue is to move the copy operation into the HSM
copytool. The copytool already knows how to copy files, and Lustre has
control over these files. Migrating a file, from an application point
of view, becomes more or less the same as archiving a file. Since the
file copy is done by the copytool, this copy can be optimized in one
place.

This patch adds the ability for HSM to migrate a file within a single
Lustre filesystem. The posix copytool is enhanced to support the file
migration, and the lfs migrate command now supports that option with
--hsm and -a flags.

HPE-bug-id: LUS-5669
Signed-off-by: Ben Evans <beevans@whamcloud.com>
Change-Id: Id72db5acb3f84292b081efac4657520f0054778b
31407 master J !B ✓T ✗5R 0/2
LU-10756 ptlrpc: send uevents when import state changes
mine enforced failed: review-dne-part-2, review-dne-selinux-ssk-part-2, review-dne-zfs-part-2, review-ldiskfs-arm, review-ldiskfs-ubuntu
stalled 456d L +297 −19
456d
failed enforced testplatformdetail
review-dne-part-2 crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm crashed CentOS 8.3/aarch64, CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-ubuntu CentOS 8.3/x86_64, Ubuntu 20.04/x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
build #23252 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown, Joe Grund, Andreas Dilger, Oleg Drokin, Ben Evans
owner James Simmons · uploader James Simmons · PS27 uploaded 1862d ago · NEW · open in Gerrit ↗
commit message
LU-10756 ptlrpc: send uevents when import state changes

When the import for a client changes state such as when the client
is evicted send a uevent to make user land so it can be aware that
the import state has changed. This allows the use of udev rules to
perform site specific actions.

Change-Id: I959700f13bca9ee7889244e1cf75eda4d128c8ca
Signed-off-by: James Simmons <jsimmons@infradead.org>
32941 master J –B ✓T ✗3R 0/2
LU-7659 hsm: Use netlink for KUC communication
carrying Yohan Pipereau · enforced failed: custom-101, review-dne-part-2, review-dne-zfs-part-2
stalled 456d L +346 −147
456d
failed enforced testplatformdetail
custom-101 CentOS 7.0/x86_64, RHEL 7.6/x86_64 ran 5 tests. 1 tests failed: sanity-hsm. session
review-dne-part-2 CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-hsm. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-hsm. session
build #5656 SUCCESS
no vote yet: Nikitas Angelinas, Andreas Dilger, John Hammond, Ben Evans, Quentin Bouget, Sonia Sharma
your previous vote: -1 on PS14 (2019-02-18 18:11) — now at PS16
owner Yohan Pipereau · uploader James Simmons · PS16 uploaded 2710d ago · NEW · open in Gerrit ↗
commit message
LU-7659 hsm: Use netlink for KUC communication

Make communications between MDC and copytools rely on asynchronous
netlink communications instead of pipe based communication. Currently
how the communications is done is considered incorrect as described
here:
https://www.linuxjournal.com/article/8110

This new netlink API uses generic netlink to avoid taking a dedicated
netlink family number. Kernel now initiates communication by creating
socket at module load time and message sending from kernel has
changed from synchronous vfs writing to asynchronous netlink sending.

As for now, copytools subscribe to both netlink & KUC groups.
Copytools registration still rely on ioctls to populate KUC groups,
but no more file descriptors are sent to the kernel to perform VFS
writing.

Change-Id: I777a24831ad3ef4bdb2be6deb57ed45be91bcf9e
Test-Parameters: testlist=sanity-hsm clientcount=3 osscount=2 mdscount=2
Signed-off-by: Yohan Pipereau <yohan.pipereau.ocre@cea.fr>
33126 master J !B ✓T ✗1R 0/2
LU-11234 lod: add data placement policy (DPP) for OST pools
reviewing Teddy Zheng · PS16→PS18 since your -1 — your objection was dropped
stalled 456d XL +1743 −1123
456d
PS16→PS18 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
1 optional test failure(s) — informational
build #12017 SUCCESS
no vote yet: Qian Yingjin, Andreas Dilger, Oleg Drokin, Li Xi
your previous vote: -1 on PS16 (2019-11-13 15:13) — now at PS18
owner Teddy Zheng · uploader Teddy Zheng · PS18 uploaded 2453d ago · NEW · open in Gerrit ↗
commit message
LU-11234 lod: add data placement policy (DPP) for OST pools

This patch provides a mechanism to place files into different pools according
to filename, jobid, fsuid, fsgid, projid and client nid. filename and jobid
support the qualifier '*'. Fsuid, fsgid, projid and client nid support range
expression. This feature is useful when Lustre is built up with different type
of devices, such as OSTs composed of SSDs and disks. To use this feature, the
same type of OSTs firstly make up one pool and DPP rules are added to
the system. Then, when handling file creation, MDT checks the operation
according to the predefined DPP rules, and put the file's object(s) into the
corresponding pool.

The usage of the rule is similar to NRS TBF. Commands for the rule are like:

Add a rule named "rule_sourcecode" according to which filename matching "*.c"
or "*.h" will be put into the pool named "pool0"
	lctl set_param lod.*.dpp=\
		"add rule_sourcecode pool={pool0} fname={*.h *.c}"

Add a rule named "rule_vip_users" according to which files with uid = 500 or
uid = 100 will be put into the pool named "pool1"
	lctl set_param lod.*.dpp=\
		"add rule_vip_users pool={pool1} uid={500 1000}"

Add a rule named "rule_vip_groups" according to which files with gid = 500 or
gid = 1000 will be put into the pool named "pool2"
	lctl set_param lod.*.dpp=\
		"add rule_vip_groups pool={pool2} gid={500 1000}"

Add a rule named "rule1" according to which files with projid between 500 and
600 or between 800 and 1000 will be put into the pool named "pool2"
	lctl set_param lod.*.dpp=\
		"add rule1 pool={pool2} projid={500-600 800-1000}"

Add a rule named "vip_client" according to which files creation from client
with nid of 10.0.0.200@tcp will be put into the pool named "pool3"
	lctl set_param lod.*.dpp=\
		"add vip_client pool={pool3} nid={10.0.0.200@tcp}"

It also supports complex rules. The following command will add a rule which
will put files that match any condition of 1) its uid is 500 and gid is 1000,
or 2) it has a suffix of ".h" or ".c" into the pool named "pool4"
	lctl set_param lod.*.dpp=\
		"add rule2 pool={pool4} uid={500}&gid={1000},fname={*.c *.h}"

Delete a rule named "rule1"
	lctl set_param lod.*.dpp="del rule1"

This patch also combines the command parse functions that are shared with NRS TBF
and pcc codes.

Change-Id: Ie4876a78adcc561f79005817433a7bbdf5fbc65b
Signed-off-by: Teddy Zheng <teddy@ddn.com>
Signed-off-by: Li Xi <lixi@ddn.com>
33363 master J –B ✓T ✓R +2/2
LU-11058 obd: manage checksum state
mine Verified -1 veto by Oleg Drokin
Verified -1 stalled 456d M +61 −24
456d
1 optional test failure(s) — informational
build #2303 SUCCESS
reviews: Andreas Dilger +1 2018-12-10 16:31 · Li Xi +1 2018-12-10 16:31
no vote yet: Emoly Liu, Qian Yingjin, Oleg Drokin
owner James Simmons · uploader James Simmons · PS3 uploaded 2885d ago · NEW · open in Gerrit ↗
commit message
LU-11058 obd: manage checksum state

Currently the checksum dump, checksum tunable and the checksum
mount options don't affect each other. With this patch:

1) mount option checksum/nochecksum will turn on or off both
   checksumming and checksum dump. Additionally it will
   control access to all checksum related sysfs files.

2) Disabling the checksums sysfs file will also disable
   checksum_dump as well as prevent enabling checksum_dump.

Change-Id: I0781cda49933b0f9f19f968ca211872ab3b34692
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
34603 master J –B ✓T –R 0/2
LU-10026: Configuration for compression support and lz4 module backport
reviewing Anna Fuchs · PS1→PS7 since your -1 — your objection was dropped
stalled 456d XL +2713 −2
456d
build #11484 SUCCESS
no vote yet: Patrick Farrell, Neil Brown, Sebastien Buisson, Andreas Dilger
your previous vote: -1 on PS1 (2019-04-05 17:31) — now at PS7
owner Anna Fuchs · uploader Anna Fuchs · PS7 uploaded 2473d ago · NEW · open in Gerrit ↗
commit message
LU-10026: Configuration for compression support and lz4 module backport

This patch adds build system changes for compression:
- If lz4 is not available in the kernel (< 3.11), we build a private module for it.
- Always build compression module except when ldiskfs is enabled.
- An option cl_compression, settable via lctl, enables or disables compression.

Change-Id: I7f843ed7ca822a3f3246bd5c3e4ccb6e6f0ec90f
Test-Parameters: forbuildonly, fstype=zfs
Signed-off-by: Anna Fuchs <anna.fuchs@informatik.uni-hamburg.de>
34954 master J !B ✓T ✗2R 0/2
LU-8585 utils: enable fileset use with liblustreapi HSM handling
mine enforced failed: review-dne-part-4, review-dne-zfs-part-4
stalled 456d S +4 −9
456d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-4 RHEL 9.3/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-zfs-part-4 RHEL 8.9/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
5 optional test failure(s) — informational
build #108370 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Minh Diep, John Hammond, Timothy Day
patchsets: PS10 03-22 PS11 03-23 PS12 10-16
owner James Simmons · uploader James Simmons · PS12 uploaded 749d ago · NEW · open in Gerrit ↗
commit message
LU-8585 utils: enable fileset use with liblustreapi HSM handling

Currently using the special .lustre/fid/X path doesn't work with
filesets but the llapi_fid_* API in liblustreapi does. Move the
HSM handling in liblustreapi to the llapi_fid_* handling. While
sites that need to use fileset can create their own copy agent
that uses the llapi_fid_* most sites are reluctant to replace
liblustreapi with their own version that can work with fileset.
Note sanity-hsm test will not work FILESET since the copy agent
for testing will not be updated to use the llapi_fid_* API.

Change-Id: Iaa37d0c585f84c15769e415e0fd73be7b25dd296
Signed-off-by: James Simmons <jsimmons@infradead.org>
35422 master J –B ✗T –R 0/2
LU-9897 zfs: migrate autoconf detection to pkgconfig
mine build failure (#78732)
stalled 456d S +10 −36
456d
build #78732 FAILURE
no vote yet: Minh Diep, Alex Zhuravlev
owner James Simmons · uploader James Simmons · PS8 uploaded 2119d ago · NEW · open in Gerrit ↗
commit message
LU-9897 zfs: migrate autoconf detection to pkgconfig

Currently we have extra complexity to determine where packages are
installed. This approach is also fragile if packages are not
installed in the standard location. This can be handled in a much
cleaner way with pkgconfig. Update ZFS handling to use its
supplied pkgconfig files it provides.

Test-Parameter: trivial

Change-Id: I752997a940b0a8c56772bd737f42a5acbd010abb
Signed-off-by: James Simmons <jsimmons@infradead.org>
35648 master J ✓B ✓T ✓R -1/2−
LU-11380 utils: split llapi_fid2path() in three functions
reviewing Andreas Dilger · PS11→PS23 since your -1 — your objection was dropped
stalled 456d L +359 −184
456d
1 optional test failure(s) — informational
build #13229 SUCCESS
reviews: Quentin Bouget -1 2020-04-08 00:30
no vote yet: Qian Yingjin, Olaf Faaland
your previous vote: -1 on PS11 (2020-01-27 16:01) — now at PS23
owner Andreas Dilger · uploader Andreas Dilger · PS23 uploaded 2401d ago · NEW · open in Gerrit ↗
commit message
LU-11380 utils: split llapi_fid2path() in three functions

Split llapi_fid2path() into separate llapi_lufid2path() to avoid
hoop jumping in the next patch that adds llapi_lufid2parent().

Add helper llapi_fsname_open() to open a descriptor on a filesystem
by fsname or directory for llapi_lufid2path() and other functions.
Use it in "lfs fid2path" to fix bug when passed a non-mount directory.

Add ability to run a single subtest of llapi_fid_test with the "-o"
option, or to exclude a single test with "-e" to speed up debugging.

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I05abfaf888a5474d62feebab4e8db543b93ebbe5
36235 master J !B ✗T –R 0/2
LU-10968 hsm: create external HSM queue interface
carrying Ben Evans · build failure (#86410)
stalled 456d XL +4700 −204
456d
janitor run: build failed — no tests ran — janitor results
build #86410 FAILURE
no vote yet: Qian Yingjin, Vitaly Fertman, Nikitas Angelinas, Joe Atzinger, Ellis Wilson, Aurelien Degremont, Sergey Cheremencev, nathan r, Andreas Dilger, Quentin Bouget, Dominique Martinet
patchsets: PS12 10-05 James Simmons PS13 03-02 James Simmons
your previous vote: -1 on PS10 (2020-06-17 21:50) — now at PS13
owner Ben Evans · uploader James Simmons · PS13 uploaded 1708d ago · NEW · open in Gerrit ↗
commit message
LU-10968 hsm: create external HSM queue interface

Add more, consistent, information to messages
including HSM action.

Create an interface for an external HSM queue
Create a demonstration external HSM coordinator
Create llapi calls for external cdt to communicate
with Lustre

sanity-hsm can be set to use an external coordinator
by specifying COORDINATOR=external on the command line

You must run the external coordinator on the MDS

Handles all current HSM activities.  No changes to
any other programs are needed.

Signed-off-by: Ben Evans <beevans@whamcloud.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Cray-bug-id: LUS-5990
Test-Parameters: env=COORDINATOR=external testlist=sanity-hsm
Change-Id: I2cbd2f8b641d8fdca427d6de82f58af58be4a477
37033 master J ✗282B ✓T ✗11R 0/2
LU-8066 obd: remove server sysfs symlinks handling
mine janitor: 282 test failures unique to this patch — conf-sanity2@ldiskfs+DNE:test_48, conf-sanity2@ldiskfs+DNE:test_66, conf-sanity2@ldiskfs+DNE:test_68 +279 more
282 unique failures stalled 456d M +4 −151
456d
janitor: 282 test failures unique to this patch — conf-sanity2@ldiskfs+DNE:test_48, conf-sanity2@ldiskfs+DNE:test_66, conf-sanity2@ldiskfs+DNE:test_68 +279 more
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-ldiskfs, review-ldiskfs-arm, review-zfs
janitor flagged test failures unique to this patch
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_48seen in 1 other review
conf-sanity2@ldiskfs+DNE:test_66NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity2@ldiskfs+DNE:test_68NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_103NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_108bseen in 1 other review
conf-sanity3@ldiskfs+DNE:test_109aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_109bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_112seen in 2 other reviews
conf-sanity-slow@ldiskfs+DNE:test_32aseen in 2 other reviews
conf-sanity-slow@ldiskfs+DNE:test_32dseen in 2 other reviews
conf-sanity-slow@ldiskfs+DNE:test_32eseen in 2 other reviews
conf-sanity3@zfs:test_103NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@zfs:test_108aseen in 1 other review
conf-sanity3@zfs:test_112seen in 1 other review
conf-sanity3@zfs:test_117seen in 6 other reviews
conf-sanity3@zfs:test_123aaseen in 6 other reviews
conf-sanity3@zfs:test_123abseen in 6 other reviews
conf-sanity3@zfs:test_123acseen in 6 other reviews
conf-sanity3@zfs:test_123adseen in 6 other reviews
conf-sanity3@zfs:test_123aeseen in 5 other reviews
conf-sanity3@zfs:test_123Fseen in 5 other reviews
conf-sanity-slow@zfs:test_32aseen in 2 other reviews
conf-sanity-slow@zfs:test_32dseen in 2 other reviews
conf-sanity-slow@zfs:test_32eseen in 2 other reviews
ost-pools@ldiskfs+DNE:test_1aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1mNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1nNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_2cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_2dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_2eseen in 1 other review
ost-pools@ldiskfs+DNE:test_3dseen in 1 other review
ost-pools@ldiskfs+DNE:test_4cseen in 1 other review
ost-pools@ldiskfs+DNE:test_5aseen in 1 other review
ost-pools@ldiskfs+DNE:test_5bseen in 1 other review
ost-pools@ldiskfs+DNE:test_6seen in 1 other review
ost-pools@ldiskfs+DNE:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_11seen in 1 other review
ost-pools@ldiskfs+DNE:test_15seen in 1 other review
ost-pools@ldiskfs+DNE:test_16seen in 1 other review
ost-pools@ldiskfs+DNE:test_17seen in 1 other review
ost-pools@ldiskfs+DNE:test_18seen in 1 other review
ost-pools@ldiskfs+DNE:test_19seen in 1 other review
ost-pools@ldiskfs+DNE:test_20seen in 1 other review
ost-pools@ldiskfs+DNE:test_21seen in 1 other review
ost-pools@ldiskfs+DNE:test_22seen in 1 other review
ost-pools@ldiskfs+DNE:test_23aseen in 1 other review
ost-pools@ldiskfs+DNE:test_23bseen in 1 other review
ost-pools@ldiskfs+DNE:test_24seen in 1 other review
ost-pools@ldiskfs+DNE:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_27seen in 1 other review
ost-pools@ldiskfs+DNE:test_28NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1mNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1nNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_2cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_2dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_2eseen in 1 other review
ost-pools@zfs:test_3dseen in 1 other review
ost-pools@zfs:test_4cseen in 1 other review
ost-pools@zfs:test_5aseen in 1 other review
ost-pools@zfs:test_5bseen in 1 other review
ost-pools@zfs:test_6seen in 1 other review
ost-pools@zfs:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_11seen in 1 other review
ost-pools@zfs:test_15seen in 1 other review
ost-pools@zfs:test_16seen in 1 other review
ost-pools@zfs:test_17seen in 1 other review
ost-pools@zfs:test_18seen in 1 other review
ost-pools@zfs:test_19seen in 1 other review
ost-pools@zfs:test_20seen in 1 other review
ost-pools@zfs:test_21seen in 1 other review
ost-pools@zfs:test_22seen in 1 other review
ost-pools@zfs:test_23aseen in 1 other review
ost-pools@zfs:test_23bseen in 1 other review
ost-pools@zfs:test_24seen in 1 other review
ost-pools@zfs:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_27seen in 1 other review
ost-pools@zfs:test_28NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27CeNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27DNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27GNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27Iseen in 1 other review
sanity1@ldiskfs+DNE:test_27Lseen in 1 other review
sanity1@ldiskfs+DNE:test_27Mseen in 1 other review
sanity1@ldiskfs+DNE:test_56wbseen in 1 other review
sanity2@ldiskfs+DNE:test_65nseen in 1 other review
sanity2@ldiskfs+DNE:test_134aseen in 1 other review
sanity2@ldiskfs+DNE:test_134bseen in 1 other review
sanity2@ldiskfs+DNE:test_140seen in 1 other review
sanity2@ldiskfs+DNE:test_150seen in 1 other review
sanity2@ldiskfs+DNE:test_151seen in 1 other review
sanity2@ldiskfs+DNE:test_154Aseen in 1 other review
sanity2@ldiskfs+DNE:test_154Bseen in 1 other review
sanity2@ldiskfs+DNE:test_154aseen in 1 other review
sanity2@ldiskfs+DNE:test_154bseen in 1 other review
sanity2@ldiskfs+DNE:test_154fseen in 1 other review
sanity2@ldiskfs+DNE:test_154gseen in 5 other reviews
sanity2@ldiskfs+DNE:test_155eseen in 1 other review
sanity2@ldiskfs+DNE:test_155fseen in 1 other review
sanity2@ldiskfs+DNE:test_155gseen in 1 other review
sanity2@ldiskfs+DNE:test_155hseen in 1 other review
sanity2@ldiskfs+DNE:test_156seen in 1 other review
sanity2@ldiskfs+DNE:test_160aseen in 1 other review
sanity2@ldiskfs+DNE:test_160bseen in 1 other review
sanity2@ldiskfs+DNE:test_160cseen in 1 other review
sanity2@ldiskfs+DNE:test_160dseen in 1 other review
sanity2@ldiskfs+DNE:test_160eseen in 1 other review
sanity2@ldiskfs+DNE:test_160fseen in 1 other review
sanity2@ldiskfs+DNE:test_160gseen in 1 other review
sanity2@ldiskfs+DNE:test_160hseen in 1 other review
sanity2@ldiskfs+DNE:test_160iseen in 1 other review
sanity2@ldiskfs+DNE:test_160jseen in 1 other review
sanity2@ldiskfs+DNE:test_160kseen in 1 other review
sanity2@ldiskfs+DNE:test_161aseen in 1 other review
sanity2@ldiskfs+DNE:test_161bseen in 1 other review
sanity2@ldiskfs+DNE:test_161cseen in 1 other review
sanity2@ldiskfs+DNE:test_161dseen in 1 other review
sanity2@ldiskfs+DNE:test_162aseen in 1 other review
sanity2@ldiskfs+DNE:test_162bseen in 1 other review
sanity2@ldiskfs+DNE:test_162cseen in 1 other review
sanity2@ldiskfs+DNE:test_169seen in 2 other reviews
sanity2@ldiskfs+DNE:test_180aseen in 1 other review
sanity2@ldiskfs+DNE:test_181seen in 1 other review
sanity2@ldiskfs+DNE:test_183seen in 1 other review
sanity2@ldiskfs+DNE:test_185seen in 2 other reviews
sanity2@ldiskfs+DNE:test_185aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_187aseen in 1 other review
sanity2@ldiskfs+DNE:test_187bseen in 2 other reviews
sanity2@ldiskfs+DNE:test_200seen in 1 other review
sanity2@ldiskfs+DNE:test_204aseen in 1 other review
sanity2@ldiskfs+DNE:test_204bseen in 1 other review
sanity2@ldiskfs+DNE:test_204cseen in 1 other review
sanity2@ldiskfs+DNE:test_204dseen in 1 other review
sanity2@ldiskfs+DNE:test_204eseen in 1 other review
sanity2@ldiskfs+DNE:test_204fseen in 1 other review
sanity2@ldiskfs+DNE:test_204gseen in 1 other review
sanity2@ldiskfs+DNE:test_204hseen in 1 other review
sanity2@ldiskfs+DNE:test_208seen in 2 other reviews
sanity2@ldiskfs+DNE:test_218seen in 2 other reviews
sanity2@ldiskfs+DNE:test_220seen in 3 other reviews
sanity2@ldiskfs+DNE:test_222aseen in 1 other review
sanity2@ldiskfs+DNE:test_222bseen in 1 other review
sanity2@ldiskfs+DNE:test_223seen in 1 other review
sanity2@ldiskfs+DNE:test_224cseen in 1 other review
sanity2@ldiskfs+DNE:test_226aseen in 1 other review
sanity2@ldiskfs+DNE:test_226bseen in 1 other review
sanity2@ldiskfs+DNE:test_228aseen in 1 other review
sanity2@ldiskfs+DNE:test_228bseen in 1 other review
sanity2@ldiskfs+DNE:test_228cseen in 1 other review
sanity2@ldiskfs+DNE:test_229seen in 2 other reviews
sanity2@ldiskfs+DNE:test_230aseen in 1 other review
sanity2@ldiskfs+DNE:test_230bseen in 1 other review
sanity2@ldiskfs+DNE:test_230cseen in 1 other review
sanity2@ldiskfs+DNE:test_230dseen in 1 other review
sanity2@ldiskfs+DNE:test_230eseen in 2 other reviews
sanity2@ldiskfs+DNE:test_230fseen in 2 other reviews
sanity2@ldiskfs+DNE:test_230iseen in 1 other review
sanity2@ldiskfs+DNE:test_230jseen in 1 other review
sanity2@ldiskfs+DNE:test_230lseen in 1 other review
sanity2@ldiskfs+DNE:test_230mseen in 1 other review
sanity2@ldiskfs+DNE:test_231aseen in 1 other review
sanity2@ldiskfs+DNE:test_232aseen in 1 other review
sanity2@ldiskfs+DNE:test_232bseen in 1 other review
sanity2@ldiskfs+DNE:test_233aseen in 1 other review
sanity2@ldiskfs+DNE:test_233bseen in 1 other review
sanity2@ldiskfs+DNE:test_238seen in 1 other review
sanity2@ldiskfs+DNE:test_240seen in 1 other review
sanity2@ldiskfs+DNE:test_241bseen in 1 other review
sanity2@ldiskfs+DNE:test_242seen in 1 other review
sanity2@ldiskfs+DNE:test_243seen in 1 other review
sanity2@ldiskfs+DNE:test_244aseen in 1 other review
sanity2@ldiskfs+DNE:test_244bseen in 1 other review
sanity2@ldiskfs+DNE:test_248bseen in 1 other review
sanity2@ldiskfs+DNE:test_250seen in 1 other review
sanity2@ldiskfs+DNE:test_252seen in 2 other reviews
sanity2@ldiskfs+DNE:test_257seen in 1 other review
sanity2@ldiskfs+DNE:test_270aseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270bseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270cseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270dseen in 1 other review
sanity2@ldiskfs+DNE:test_270eseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270fseen in 2 other reviews
sanity2@ldiskfs+DNE:test_271cseen in 1 other review
sanity2@ldiskfs+DNE:test_271fseen in 2 other reviews
sanity2@ldiskfs+DNE:test_272aseen in 4 other reviews
sanity2@ldiskfs+DNE:test_272bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_272cseen in 1 other review
sanity2@ldiskfs+DNE:test_272dseen in 1 other review
sanity2@ldiskfs+DNE:test_272eseen in 1 other review
sanity2@ldiskfs+DNE:test_272fseen in 1 other review
sanity2@ldiskfs+DNE:test_275seen in 1 other review
sanity2@ldiskfs+DNE:test_277seen in 1 other review
sanity2@ldiskfs+DNE:test_300aseen in 1 other review
sanity2@ldiskfs+DNE:test_300bseen in 1 other review
sanity2@ldiskfs+DNE:test_300cseen in 1 other review
sanity2@ldiskfs+DNE:test_300dseen in 1 other review
sanity2@ldiskfs+DNE:test_300eseen in 1 other review
sanity2@ldiskfs+DNE:test_300fseen in 1 other review
sanity2@ldiskfs+DNE:test_300gseen in 1 other review
sanity2@ldiskfs+DNE:test_300hseen in 1 other review
sanity2@ldiskfs+DNE:test_300iseen in 1 other review
sanity2@ldiskfs+DNE:test_300jseen in 1 other review
sanity2@ldiskfs+DNE:test_300kseen in 1 other review
sanity2@ldiskfs+DNE:test_300lseen in 1 other review
sanity2@ldiskfs+DNE:test_300nseen in 1 other review
sanity2@ldiskfs+DNE:test_300qseen in 1 other review
sanity2@ldiskfs+DNE:test_300rseen in 1 other review
sanity2@ldiskfs+DNE:test_310aseen in 1 other review
sanity2@ldiskfs+DNE:test_310bseen in 1 other review
sanity2@ldiskfs+DNE:test_311seen in 1 other review
sanity2@ldiskfs+DNE:test_313seen in 1 other review
sanity2@ldiskfs+DNE:test_314seen in 2 other reviews
sanity2@ldiskfs+DNE:test_315seen in 2 other reviews
sanity2@ldiskfs+DNE:test_316seen in 3 other reviews
sanity2@ldiskfs+DNE:test_317seen in 1 other review
sanity2@ldiskfs+DNE:test_318seen in 1 other review
sanity2@ldiskfs+DNE:test_319seen in 1 other review
sanity2@ldiskfs+DNE:test_399bseen in 1 other review
sanity2@ldiskfs+DNE:test_402seen in 1 other review
sanity2@ldiskfs+DNE:test_406seen in 1 other review
sanity2@ldiskfs+DNE:test_409seen in 1 other review
sanity2@ldiskfs+DNE:test_412seen in 1 other review
sanity2@ldiskfs+DNE:test_413aseen in 1 other review
sanity2@ldiskfs+DNE:test_413bseen in 1 other review
sanity2@ldiskfs+DNE:test_415seen in 1 other review
sanity2@ldiskfs+DNE:test_417seen in 1 other review
sanity2@ldiskfs+DNE:test_418seen in 1 other review
sanity2@ldiskfs+DNE:test_421aseen in 1 other review
sanity2@ldiskfs+DNE:test_421bseen in 1 other review
sanity2@ldiskfs+DNE:test_421cseen in 1 other review
sanity2@ldiskfs+DNE:test_421dseen in 1 other review
sanity2@ldiskfs+DNE:test_421eseen in 1 other review
sanity2@ldiskfs+DNE:test_421fseen in 1 other review
sanity2@ldiskfs+DNE:test_421gseen in 1 other review
sanity2@ldiskfs+DNE:test_422seen in 1 other review
sanity2@ldiskfs+DNE:test_423NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_801aseen in 1 other review
sanity2@ldiskfs+DNE:test_801bseen in 1 other review
sanity2@ldiskfs+DNE:test_801cseen in 1 other review
sanity2@ldiskfs+DNE:test_803seen in 1 other review
sanity2@ldiskfs+DNE:test_804seen in 1 other review
sanity2@ldiskfs+DNE:test_806seen in 3 other reviews
sanity2@ldiskfs+DNE:test_807seen in 3 other reviews
sanity2@ldiskfs+DNE:test_808seen in 3 other reviews
sanity2@ldiskfs+DNE:test_809seen in 4 other reviews
sanity2@ldiskfs+DNE:test_810seen in 1 other review
sanity2@ldiskfs+DNE:test_812aseen in 1 other review
sanity2@ldiskfs+DNE:test_812bseen in 1 other review
sanity2@ldiskfs+DNE:test_816seen in 1 other review
sanity2@ldiskfs+DNE:test_817seen in 1 other review
sanity2@ldiskfs+DNE:test_818seen in 1 other review
sanity2@ldiskfs+DNE:test_820NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_901seen in 1 other review
sanity1@zfs:test_27CeNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27DNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27GNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27Iseen in 1 other review
sanity1@zfs:test_27LNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27Mseen in 1 other review
sanity1@zfs:test_56wbseen in 1 other review
sanity-flr@ldiskfs+DNE:test_204fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-flr@zfs:test_204fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_3seen in 1 other review
sanity-quota@ldiskfs+DNE:test_5NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_6NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_12aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_16NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_17seen in 1 other review
sanity-sec@ldiskfs+DNE:test_18NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_19NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_20NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_21NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_22NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 3 tests failed: sanity-sec, ost-pools, runtests. session
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 CentOS 7.0/x86_64 ran 14 tests. 6 tests failed: insanity, replay-ost-single, sanity-quota, sanity-flr, sanity-pfl, replay-singl session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: ost-pools. session
review-dne-zfs-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 CentOS 7.0/x86_64 ran 16 tests. 4 tests failed: sanity-quota, sanity-flr, sanity-pfl, replay-single. session
review-ldiskfs CentOS 7.0/x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-arm CentOS 7.0/x86_64, CentOS 8.0/aarch64 ran 7 tests. 1 tests failed: sanity. session
review-zfs CentOS 7.0/x86_64 ran 9 tests. 2 tests failed: replay-single, sanity-flr. session
build #72814 SUCCESS
owner James Simmons · uploader James Simmons · PS4 uploaded 2419d ago · NEW · open in Gerrit ↗
commit message
LU-8066 obd: remove server sysfs symlinks handling

Before the lustre 2.4 OSD work the lov and osc code was used on
both servers and clients. With the OSD layer work we saw the new
lod and osp layers created that are server specific. To avoid
breakage symlinks were created that went from the lod / osp to
lov / osc directories in the proc tree on the server side. This
required some extra complex code to handle this. It has been a
very long time since that change so we can now safely remove all
the extra symlink handling to make life easier.

Change-Id: I41fd5abab3d648db6d4fa1a355bd7147a34ee478
Signed-off-by: James Simmons <jsimmons@infradead.org>
37407 master J !B ✓T ✗6R 0/2
LU-8066 mgc: remove no longer needed class_del_profiles()
mine enforced failed: review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4
stalled 456d S +0 −29
456d
failed enforced testplatformdetail
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 6 tests failed: sanity-pcc, large-scale, mds-survey, sanity-sec, sanity-lfsck, sanity-scrub. session
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 CentOS 7.0/x86_64 ran 10 tests. 8 tests failed: insanity, replay-ost-single, sanity-quota, sanity-dom, sanity-flr, sanity-pfl, session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 6 tests failed: sanity-pcc, large-scale, mds-survey, sanity-sec, sanity-lfsck, sanity-scrub. session
review-dne-zfs-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: mmp. session
build #11671 SUCCESS
no vote yet: Andreas Dilger
owner James Simmons · uploader James Simmons · PS1 uploaded 2466d ago · NEW · open in Gerrit ↗
commit message
LU-8066 mgc: remove no longer needed class_del_profiles()

While cleaning up obd_type handling some code to handle lustre
1.14 was found in mgc_cleanup(). This code is obsolete so lets
remove class_del_profiles() handling.

Change-Id: Ib1e9f9cec060667972b9fa97b1a737f7dbe7edfe
Signed-off-by: James Simmons <jsimmons@infradead.org>
41664 master J ✓B ✗T –R -1/2−
LU-14428 libcfs: replace tracefile buffer with ring_buffer
carrying Neil Brown · build failure (#108522)
stalled 456d 2 unresolved L +220 −766
456d
build failure (#108522)
Alexey Lyashkov voted -1
1 unresolved thread(s) await your reply — last from Oleg Drokin
1 thread(s) waiting on others
build #108522 FAILURE
reviews: Alexey Lyashkov -1 2024-10-28 11:36
no vote yet: Thomas Bertschinger, Nikitas Angelinas, Andreas Dilger, Oleg Drokin
patchsets:
+18 earlier PS12 11-22 James Simmons PS13 11-30 James Simmons PS14 07-03 PS15 07-03 PS16 07-03 PS17 07-03 PS18 07-03 PS19 07-04 PS20 08-07 PS21 08-08 James Simmons PS22 09-27 PS23 10-17 PS24 11-12 James Simmons PS25 12-13 James Simmons PS26 12-13 James Simmons PS27 12-14 James Simmons PS28 12-20 James Simmons PS29 12-28 James Simmons
PS30 02-05 James Simmons PS31 02-15 James Simmons PS32 02-23 James Simmons PS33 10-23 James Simmons PS34 10-25 James Simmons
your previous vote: +1 on PS30 (2024-02-05 23:54) — now at PS34
threads: 1 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS21 2023-09-25 07:19 Oleg Drokin tracefile.c:189 — I am nto sure where exactly ther's some sort of a calculation error, but I have a whole bunch of this message triggering for seemingly rando
Oleg Drokin PS21 · 2023-09-25 07:19
I am nto sure where exactly ther's some sort of a calculation error, but I have a whole bunch of this message triggering for seemingly random prints all around (tend to be longish)in master-next (this is where I am carrying this patch for a while) even though this patch itself did nto trigger it.

Example: http://testing.linuxhacker.ru/lustre-reports/35860/testresults/sanity2-ldiskfs-DNE-centos7_x86_64-centos7_x86_64/oleg342-server-console.txt

[ 2711.693691] Lustre: DEBUG MARKER: == sanity test 103e: inheritance of big amount of default ACLs ========================================================== 15:41:10 (1695584470)
[ 2930.646958] Lustre: lustre-MDT0000: Client 229219ca-e0b5-499a-9ab0-176123ac3994 (at 192.168.203.42@tcp) reconnecting
[ 3211.379426] Lustre: format at ldlm_lib.c:3286:target_send_reply_msg doesn't end in newline
[ 3211.806304] Lustre: format at service.c:2323:ptlrpc_server_handle_request doesn't end in newline
[ 3211.984069] Lustre: format at ldlm_resource.c:1799:ldlm_resource_dump doesn't end in newline
[ 3212.219257] Lustre: format at ldlm_resource.c:1660:ldlm_resource_add_lock doesn't end in newline
owner Neil Brown · uploader James Simmons · PS34 uploaded 739d ago · NEW · open in Gerrit ↗
commit message
LU-14428 libcfs: replace tracefile buffer with ring_buffer

Linux has a generic ring-buffer API which uses minimal locking and
allows entries to be appended from any context.  This is essentially
the same functionality provided by trace_data abstraction in
tracefile.c, though with less locking overhead.

This patch removes the trace_data support and switches to use
ring_buffer.

The API functionality is not identical so some adjustments need to be
made.  In particular once an entry in the log has been reserved, it is
not possible to reduce the size of the reservation, only to use it or
discard it, where discarding might result in the space being wasted in
the rare case that more space is reserved from a different context
(e.g.  interrupt).

So instead we use a modest sized on-stack buffer to hold the formatted
result, and strcpy() that to a ring_buffer.  If the on-stack buffer
isn't big enough (approximately 20% of messages in some testings) we
need to format a second time, though we do that less often than the
current code.  The strcpy should be fast compared to vsprintf so this
should be a net win.

ring_buffer doesn't record whether a message was generated in
interrupt or process context and the information is not generally
useful, so that field in the ptldebug_header is now always set to
zero.

The pages stored in ring_buffer are not the same format as are
expected by user-space, so we cannot extract whole pages and copy them
to the file, but instead extract individual entries and write them to
the file.

Similarly, pages cannot be moved to the daemon_list, but the contents
need to be copied.

Also discard libcfs_debug_binary as it is ALWAYS 1 and the code would
be buggy if it were zero.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Iab259c0538e970f5a77d15c453d72bf378c59c32
41683 master J –B ✗T –R 0/2
LU-14439 utils: skip server mount libs on client
carrying Andreas Dilger · build failure (#111134)
stalled 456d S +13 −13
456d
build #111134 FAILURE
patchsets:
+5 earlier PS6 10-23 PS7 10-24 PS8 10-24 PS9 11-08 PS10 11-08
PS11 01-31 PS12 10-03 PS13 10-04 PS14 10-10 PS15 02-18 James Simmons
owner Andreas Dilger · uploader James Simmons · PS15 uploaded 623d ago · NEW · open in Gerrit ↗
commit message
LU-14439 utils: skip server mount libs on client

Do not include ldiskfs or zfs files in the Makefile when
"./configure --disable-server" is used, or if configure does
not detect any server-side support.

Move server-side utilities under server conditionals.

Test-Parameters: trivial
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I244e10dfaee3470e9ad48e78dcb8d0d18f3ebbe5
44114 master J ✓B ✓T ✗1R +1/2
LU-14799 test: setup and tear down stand alone MGS for conf-sanity
mine enforced failed: custom-102
stalled 456d XS +4 −1
456d
failed enforced testplatformdetail
custom-102 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #81635 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2021-07-02 00:54
no vote yet: Elena
owner James Simmons · uploader James Nunez · PS3 uploaded 1952d ago · NEW · open in Gerrit ↗
commit message
LU-14799 test: setup and tear down stand alone MGS for conf-sanity

While running conf-sanity I found if I have a stand alone MGS
server it doesn't even run. For setup() just start the MGS server
if stand alone and shut down the stand alone MGS when stop_mds()
is called just in case someone forgets to call stop_mgs().

Test-Parameters: trivial testlist=conf-sanity
Test-Parameters: standalonemgs=true testlist=conf-sanity

Change-Id: Ifc8794e2c9fbb489183e4f205f0b8b9766e13160
Signed-off-by: James Simmons <jsimmons@infradead.org>
45029 master J !B ✓T ✗5R 0/2
LU-15030 osp: add debugfs for sync progress
reviewing Hongchao Zhang · PS2→PS6 since your -1 — your objection was dropped
stalled 456d S +31 −0
456d
PS2→PS6 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
failed enforced testplatformdetail
review-dne-part-2 CentOS 8.3/x86_64 ran 7 tests. 2 tests failed: runtests, replay-dual. session
review-dne-part-4 CentOS 8.3/x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-part-5 CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanityn. session
review-dne-zfs-part-4 CentOS 8.3/x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-zfs CentOS 8.3/x86_64 ran 8 tests. 1 tests failed: sanity-quota. session
build #83618 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+1 earlier PS1 09-23
PS2 09-23 PS3 09-30 PS4 10-11 PS5 10-13 PS6 10-14
your previous vote: -1 on PS2 (2021-09-24 14:33) — now at PS6
owner Hongchao Zhang · uploader Hongchao Zhang · PS6 uploaded 1847d ago · NEW · open in Gerrit ↗
commit message
LU-15030 osp: add debugfs for sync progress

During sync between MDT and OSTs, it could need much more time
if the load on OST is very high, it will be better to have some
some kind of debugfs interface to know the sync progress and make
sure the sync is moving forward.

Signed-off-by: Hongchao Zhanng <hongchao@whamcloud.com>
Change-Id: Id24f3a481c5d28b7dc9714a80905541c88cf0f5a
49165 master J !B ✓T ✗24R 0/2
LU-12514 ptlrpc: move thread creation out of module initialization
mine enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-arm, review-zfs
stalled 456d M +86 −34
456d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: sanity-pfl, sanity. session
review-dne-part-2 RHEL 8.8/x86_64 ran 13 tests. 4 tests failed: sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-part-3 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 8.8/x86_64 ran 13 tests. 3 tests failed: sanity-quota, mmp, insanity. session
review-dne-part-5 RHEL 8.8/x86_64 ran 8 tests. 2 tests failed: sanityn, sanity-scrub. session
review-dne-part-6 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-part-7 RHEL 8.8/x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-part-8 RHEL 8.8/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
review-dne-selinux-ssk-part-1 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.8/x86_64 ran 7 tests. 2 tests failed: sanity-selinux, sanity-sec. session
review-dne-zfs-part-1 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: sanity-pfl, sanity. session
review-dne-zfs-part-2 RHEL 8.8/x86_64 ran 13 tests. 4 tests failed: sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-zfs-part-3 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 RHEL 8.8/x86_64 ran 13 tests. 3 tests failed: sanity-quota, mmp, insanity. session
review-dne-zfs-part-5 RHEL 8.8/x86_64 ran 8 tests. 2 tests failed: sanityn, sanity-scrub. session
review-dne-zfs-part-6 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-zfs-part-7 RHEL 8.8/x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-ldiskfs RHEL 8.8/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 9.2/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 8.8/x86_64, SLES 15.4/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 8.8/x86_64, SLES 15.5/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 8.8/x86_64, RHEL 9.2/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs-arm RHEL 8.8/aarch64, RHEL 8.8/x86_64 ran 10 tests. 3 tests failed: sanity-sec, sanity-lnet, sanity. session
review-zfs RHEL 8.8/x86_64 ran 18 tests. 6 tests failed: sanity-lsnapshot, insanity, replay-ost-single, replay-single, sanity-flr, sanit session
4 optional test failure(s) — informational
build #100841 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Neil Brown
patchsets:
+6 earlier PS1 11-15 PS2 12-08 PS3 12-12 Neil Brown PS4 02-05 PS5 02-05 PS6 04-05
PS7 05-21 PS8 05-22 PS9 05-22 PS10 12-13 PS11 12-14
owner James Simmons · uploader James Simmons · PS11 uploaded 1056d ago · NEW · open in Gerrit ↗
commit message
LU-12514 ptlrpc: move thread creation out of module initialization

When the ptlrpc module is loaded, it calls ptlrpc_init_portals() which
starts ptlrpcd threads, and starts the pinger work-queue.

We don't need these threads until the module is actually being
used, such as when a lustre filesystem is mounted.

So move the thread creation into new ptlrpc_inc_ref() (modelled on
ptlrpcd_incref()), and call that when needed, such as at mount time.

Linux-commit: 26f7a294e5ecd46856cb9f5b718e995f1ec46779
Linux-commit: ffd87a7b1efeb8f56a229d2ab06d71be7d932d52

Change-Id: Iee077c7dfdeb67ceeeacefc4e6c7f70efef2a864
Signed-off-by: Mr. NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
40878 master J –B ✓T ✓R -2/2−
LU-9897 build: add real versioning to liblustreapi
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 456d XS +7 −2
456d
needs rebase — checkpatch: cannot be cherry-picked
Andreas Dilger voted -1
no vote yet from Olaf Weber
build #18099 SUCCESS
reviews: Andreas Dilger -1 2020-12-06 03:36
no vote yet: Olaf Weber
owner James Simmons · uploader James Simmons · PS2 uploaded 2159d ago · NEW · open in Gerrit ↗
commit message
LU-9897 build: add real versioning to liblustreapi

Originally we added -version-info to increment liblustreapi
version every time a new abi was added or changed. This never
happened so lets number liblustreapi based the Lustre sovftware
version.

Test-Parameters: trivial
Change-Id: I9f638c0a95b72329325b774d23f73239fcbade03
Signed-off-by: James Simmons <jsimmons@infradead.org>
32475 master J ✗2B ✓T ✗9R -1/2−
LU-2096 sysfs: symlinks for forward compatibility
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures stalled 456d M +101 −12
456d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — conf-sanity3@ldiskfs+DNE:test_76a, conf-sanity3@zfs:test_76a
enforced failed: review-dne-part-4, review-dne-part-5, review-dne-selinux-ssk-part-2, review-dne-zfs-part-4, review-dne-zfs-part-5, review-ldiskfs-ubuntu, review-zfs
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity3@ldiskfs+DNE:test_76aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@zfs:test_76aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-4 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-quota, sanity-flr, replay-ost-single. session
review-dne-part-4 RHEL 9.4 / x86_64 ran 9 tests. 3 tests failed: sanity-quota, sanity-flr, replay-ost-single. session
review-dne-part-5 RHEL 9.4 / x86_64 ran 6 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-part-5 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: recovery-small. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-quota, sanity-flr, replay-ost-single. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 3 tests failed: replay-ost-single, sanity-flr, sanity-quota. session
4 optional test failure(s) — informational
build #111003 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin, Alex Zhuravlev
patchsets: PS5 01-03 PS6 01-07 PS7 01-15 PS8 01-17 PS9 02-14
owner James Simmons · uploader James Simmons · PS9 uploaded 628d ago · NEW · open in Gerrit ↗
commit message
LU-2096 sysfs: symlinks for forward compatibility

Currently, the "ofd" device is still named "obdfilter" in the Lustre
configuration and in /sys/fs/lustre. It would be better to name it
"ost" which is has been the long term goal.

The per-OST device statistics should really be under "ost/{target}",
like the per-MDT statistics are under "mdt/{target}" already in 2.x.

Similarly, the "OSS" statistics have always been under "ost/OSS", but
would be better in their own "oss" subdirectory much like what is done
for "MDS" statistics.

Add symlinks for "oss -> ost/OSS" and  "ost -> obdfilter" to keep
older compatibility. In time we can remove those symlinks.

Change-Id: I8c4c81eb55f2880edf1d7811395c4837f50e01d5
Signed-off-by: James Simmons <jsimmons@infradead.org>
23552 master J –B ✓T ✗7R +0/2−
LU-8709 llite: implement parallel asynchronous readahead
reviewing Li Xi · PS10→PS14 since your -1 — your objection was dropped
needs rebase stalled 457d XL +1467 −1103
457d
PS10→PS14 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-hsm. session
review-dne-part-4 crashed CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-flr. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-hsm. session
review-ldiskfs CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-zfs crashed CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-flr. %% THIS TEST SESSION CRASHED %% session
2 optional test failure(s) — informational
build #60987 SUCCESS
reviews: Andreas Dilger +1 2019-01-15 06:51
no vote yet: Qian Yingjin, Jinshan Xiong, Zhenyu Xu, Patrick Farrell
your previous vote: -1 on PS10 (2018-12-26 15:11) — now at PS14
owner Li Xi · uploader Wang Shilong · PS14 uploaded 2860d ago · NEW · open in Gerrit ↗
commit message
LU-8709 llite: implement parallel asynchronous readahead

This patch proposes a new design of Lustre readahead framework,
parallel-readahead, which implements a similar algorithm like current
Linux kernel's on-demand readahead, but in a way that is more
optimized for the characteristics of Lustre, more extendable for
differet I/O patterns, and more adaptable to the high bandwidth of
Lustre since data could be prefetched in parallel by multiple
threads.

Like the on-demand readahead, the parallel-readahead maintains a
"readahead window" consisting of a portion of the file starting
with the application's last read. Pages inside the readahead window
are either already in the page cache, or being prefetched into the
page cache of the client. The window moves forward as the reading of
the application moves forward.

The parallel-readahead framework prefetches more agressively than
on-demand readahead using a large readahead window, since Lustre
usually has more overhead than local file systems.

The parallel-readahead can do real asynchronous prefetch in parallel
by multiple threads. The reason of this implement is that, if all
prefetching is done in the process of the application that issued
read() syscall, the overhead caused by logic of Lustre client side
would become the bottleneck.

The parallel-readahead framework provides an extendable I/O pattern
detection mechanism which currently has detection algorithms for both
sequential read and stride read.  And more pattern detection
algorithms and corresponding prefetching policies can be added into
the framework for other I/O patterns, including random read,
semisequential read, backward read, interleaved read, etc.

Todo:
make max_read_ahead_whole_mb really work

Signed-off-by: Li Xi <lixi@ddn.com>
Signed-off-by: Wang Shilong <wshilong@whamcloud.com>
Change-Id: Ida399b9d0b499ba3f6bd08d7bb4528132e8e98e4
58599 master J !B ✓T ✗31R 0/2
LU-18041 msg: use UUIDs instead of NIDs for client setup
mine enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-ubuntu, review-zfs
IPv6 stalled 463d S +10 −18
463d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-zfs RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
13 optional test failure(s) — informational
build #112103 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin
owner James Simmons · uploader James Simmons · PS1 uploaded 583d ago · NEW · open in Gerrit ↗
commit message
LU-18041 msg: use UUIDs instead of NIDs for client setup

For client setups we are sending NID strings instead of actual
UUIDs. This is incorrect.

Change-Id: I7ebd1bfe29a5e59c989b9fa5e4166f19cb2336ce
Signed-off-by: James Simmons <jsimmons@infradead.org>
39337 master J !B ✓T ✓R -1/2−
LU-11621 utils: optimize lustre_rsync with copy_file_range()
mine John Hammond voted -1
stalled 463d S +16 −1
463d
John Hammond voted -1
no vote yet from Shaun Tancheff, Andreas Dilger
build #17526 SUCCESS
reviews: John Hammond -1 2022-05-13 18:53
no vote yet: Shaun Tancheff, Andreas Dilger
owner James Simmons · uploader James Simmons · PS5 uploaded 2189d ago · NEW · open in Gerrit ↗
commit message
LU-11621 utils: optimize lustre_rsync with copy_file_range()

Newer kernels and glibc offer copy_file_range() which avoids
a context switch needed with read() + write() for file data
copying. In the future Lustre can look to optimize this copy
on the server backend. Updating lustre_rsync to use
this new functionality which should give a performance boost.

Test-Parameters: trivial testlist=lustre-rsync-test
Change-Id: Ibd67847f8d876075f77e14e2721d22d4905cb9ff
Signed-off-by: James Simmons <jsimmons@infradead.org>
45152 master J !B ✓T ✗1R 0/2
LU-15073 ptlrpc: An expired request isn't marked timedout
reviewing Andriy Skulysh · PS2→PS6 since your -1 — your objection was dropped
stalled 463d 2 unresolved S +28 −20
463d
PS2→PS6 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 crashed RHEL 9.3 / x86_64 ran 9 tests. 1 tests failed: sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
2 optional test failure(s) — informational
build #109462 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Neil Brown, Vitaly Fertman, Alexander Boyko, Alex Zhuravlev
patchsets:
+1 earlier PS1 10-07
PS2 10-13 PS3 02-04 Shaun Tancheff PS4 02-05 Shaun Tancheff PS5 02-06 Shaun Tancheff PS6 12-08 Shaun Tancheff
your previous vote: -1 on PS2 (2021-10-21 13:56) — now at PS6
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2024-02-06 06:32 Shaun Tancheff client.c:2551 — Yes I think that should be fine.
Neil Brown PS3 · 2024-02-05 03:35
This (and also below) is a little odd.
If timeout is -1  - so nothing in set_requests lists, then timeout is 1.
If timeout is zero - all requests have expired - them timeout is 0.

It would make sense to me for those to both be the same.  Could we make it " < 0 ? 0 : timeout" ??
Shaun Tancheff PS3 · 2024-02-06 06:32
Yes I think that should be fine.
reply PS4 2024-02-06 06:32 Shaun Tancheff ptlrpcd.c:494 — Hmm. this seems to be a problem.
Shaun Tancheff PS4 · 2024-02-06 06:32
Hmm. this seems to be a problem.
owner Andriy Skulysh · uploader Shaun Tancheff · PS6 uploaded 696d ago · NEW · open in Gerrit ↗
commit message
LU-15073 ptlrpc: An expired request isn't marked timedout

New requests can be added to pc_set. It will receive wakups
and timeout can never occur.

Perform check for expired requests
on each round before ptlrpcd_check().

HPE-bug-id: LUS-8784
Signed-off-by: Andriy Skulysh <c17819@cray.com>
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I46f7ab1812601b1c3a78b62a41a578cdac568bd5
49348 master J ✓B ✓T –R -1/2−
LU-12251 tests: re-enable running sanity-flr for PPC
mine Andreas Dilger voted -1
stalled 463d XS +1 −2
463d
Andreas Dilger voted -1
build OK — testing in progress (typically 6–14h)
build #91089 SUCCESS
reviews: Andreas Dilger -1 2022-12-12 19:50
no vote yet: xinliang
patchsets: PS1 12-08 PS2 12-08 PS3 12-08 PS4 12-10
owner James Simmons · uploader James Simmons · PS4 uploaded 1425d ago · NEW · open in Gerrit ↗
commit message
LU-12251 tests: re-enable running sanity-flr for PPC

Its been a long time since PPC had issues with FLR test.
Re-enable those test. We do keep test 50a disabled since
it fails on ARM and PPC platforms.

Test-Parameters: trivial clientarch=ppc64 testlist=sanity-flr

Change-Id: Ia1007f6213b530d4a5695ff6143be14ac2736a6c
Signed-off-by: James Simmons <jsimmons@infradead.org>
49349 master J ✓B ✓T ✓R -1/2−
LU-12252 tests: re-enable running sanity-hsm for PPC
mine Andreas Dilger voted -1
stalled 463d S +0 −22
463d
build #91076 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2022-12-10 19:29
no vote yet: Etienne AUJAMES, xinliang, Jian Yu
patchsets: PS1 12-08 PS2 12-08 PS3 12-08
owner James Simmons · uploader James Simmons · PS3 uploaded 1426d ago · NEW · open in Gerrit ↗
commit message
LU-12252 tests: re-enable running sanity-hsm for PPC

Its been a long time since PPC had issues with HSM test.
Re-enable those test.

Test-Parameters: trivial clientdistro=el8.6 clientarch=ppc64le testlist=sanity-hsm

Change-Id: Ibe18524f6a1a92b66a2b6f9454374910761e8344
Signed-off-by: James Simmons <jsimmons@infradead.org>
50900 master J ✓B ✓T ✗1R 0/2
LU-0000 test: base code
mine enforced failed: custom-102
stalled 463d XS +1 −1
463d
failed enforced testplatformdetail
custom-102 failed 2× CentOS 7.9/x86_64, RHEL 8.7/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #94728 SUCCESS · tests all Maloo sessions
patchsets: PS1 05-10 PS2 05-10 PS3 05-10
owner James Simmons · uploader James Simmons · PS3 uploaded 1274d ago · NEW · open in Gerrit ↗
commit message
LU-0000 test: base code

test patch on this

Test-Parameters: trivial testlist=sanity-lnet
Test-Parameters: serverversion=2.12 serverdistro=el7.9 testlist=runtests
Test-Parameters: clientversion=2.12 testlist=runtests
Change-Id: Ic52e9934283f34fc635d41a656b6cc0dff088a58
Signed-off-by: James Simmons <jsimmons@infradead.org>
52199 master J !B ✓T ✗3R 0/2
LU-17060 tests: verify conf-sanity 21c passes
mine enforced failed: custom-1001, review-dne-part-4, review-dne-part-8
stalled 463d XS +1 −1
463d
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 9.3/x86_64 ran 9 tests. 1 tests failed: replay-ost-single. session
review-dne-part-8 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
1 optional test failure(s) — informational
build #105391 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-31 PS2 11-30 PS3 04-10 PS4 05-31 PS5 06-11
owner James Simmons · uploader James Simmons · PS5 uploaded 875d ago · NEW · open in Gerrit ↗
commit message
LU-17060 tests: verify conf-sanity 21c passes

Make sure patch 52053 fixes the issue.

Test-Parameters: testlist=conf-sanity env=ONLY=21c,ONLY_REPEAT=100
Change-Id: I1092c90b15d0cdc464e251dc07ea310828ce4d15
Signed-off-by: James Simmons <jsimmons@infradead.org>
55878 master J ✗97B ✓T ✗25R 0/2
LU-18041 msg: use UUIDs instead of NIDs for OSP setup
mine janitor: 97 test failures unique to this patch — conf-sanity1@ldiskfs+DNE:test_1, conf-sanity1@ldiskfs+DNE:test_2, conf-sanity1@ldiskfs+DNE:test_3 +94 more
97 unique failures IPv6 stalled 463d S +4 −9
463d
janitor: 97 test failures unique to this patch — conf-sanity1@ldiskfs+DNE:test_1, conf-sanity1@ldiskfs+DNE:test_2, conf-sanity1@ldiskfs+DNE:test_3 +94 more
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs-ubuntu
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity1@ldiskfs+DNE:test_1seen in 5 other reviews
conf-sanity1@ldiskfs+DNE:test_2seen in 8 other reviews
conf-sanity1@ldiskfs+DNE:test_3seen in 12 other reviews
conf-sanity1@ldiskfs+DNE:test_4seen in 18 other reviews
conf-sanity1@ldiskfs+DNE:test_5aseen in 21 other reviews
conf-sanity1@ldiskfs+DNE:test_5cseen in 16 other reviews
conf-sanity1@ldiskfs+DNE:test_5dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_5eseen in 19 other reviews
conf-sanity1@ldiskfs+DNE:test_5hseen in 24 other reviews
conf-sanity1@ldiskfs+DNE:test_5iseen in 26 other reviews
conf-sanity1@ldiskfs+DNE:test_6seen in 28 other reviews
conf-sanity1@ldiskfs+DNE:test_7seen in 33 other reviews
conf-sanity1@ldiskfs+DNE:test_8seen in 34 other reviews
conf-sanity1@ldiskfs+DNE:test_9seen in 36 other reviews
conf-sanity1@ldiskfs+DNE:test_10aseen in 39 other reviews
conf-sanity1@ldiskfs+DNE:test_17seen in 41 other reviews
conf-sanity1@ldiskfs+DNE:test_23aseen in 12 other reviews
conf-sanity1@ldiskfs+DNE:test_23bseen in 14 other reviews
conf-sanity1@ldiskfs+DNE:test_25seen in 3 other reviews
conf-sanity1@ldiskfs+DNE:test_26seen in 4 other reviews
conf-sanity1@ldiskfs+DNE:test_27aseen in 2 other reviews
conf-sanity1@ldiskfs+DNE:test_27bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28ANEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_29seen in 2 other reviews
conf-sanity1@ldiskfs+DNE:test_30aseen in 2 other reviews
conf-sanity1@ldiskfs+DNE:test_30bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity-slow@ldiskfs+DNE:test_69seen in 6 other reviews
sanity2@ldiskfs+DNE:test_134aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_134bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_150aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_150bbseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150cseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150dseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150eseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150gseen in 3 other reviews
sanity2@ldiskfs+DNE:test_151seen in 3 other reviews
sanity2@ldiskfs+DNE:test_154Aseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154Bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154aseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154fseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154gseen in 8 other reviews
sanity2@ldiskfs+DNE:test_154hseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154iNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_155eseen in 3 other reviews
sanity2@ldiskfs+DNE:test_155fseen in 3 other reviews
sanity2@ldiskfs+DNE:test_155gseen in 3 other reviews
sanity2@ldiskfs+DNE:test_155hseen in 3 other reviews
sanity2@ldiskfs+DNE:test_156seen in 3 other reviews
sanity2@ldiskfs+DNE:test_160aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160hNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160iNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160jNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160kNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160lNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160mNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160nNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160oNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160pNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160qNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160sNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160tNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160uNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_161aseen in 8 other reviews
sanity2@ldiskfs+DNE:test_161bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_161cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_161dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_162aseen in 4 other reviews
sanity2@ldiskfs+DNE:test_162bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_162cseen in 3 other reviews
sanity2@ldiskfs+DNE:test_165bseen in 4 other reviews
sanity2@ldiskfs+DNE:test_165dseen in 4 other reviews
sanity2@ldiskfs+DNE:test_165eseen in 3 other reviews
sanity2@ldiskfs+DNE:test_169seen in 5 other reviews
sanity2@ldiskfs+DNE:test_170aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_170bseen in 1 other review
sanity2@ldiskfs+DNE:test_172seen in 3 other reviews
sanity2@ldiskfs+DNE:test_182bseen in 5 other reviews
sanity2@ldiskfs+DNE:test_183seen in 4 other reviews
sanity2@ldiskfs+DNE:test_185seen in 10 other reviews
sanity2@ldiskfs+DNE:test_185aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_187aseen in 4 other reviews
sanity2@ldiskfs+DNE:test_187bseen in 4 other reviews
sanity3@ldiskfs+DNE:test_901seen in 1 other review
sanity3@ldiskfs+DNE:test_904seen in 1 other review
sanity3@ldiskfs+DNE:test_905seen in 2 other reviews
sanity3@ldiskfs+DNE:test_907seen in 7 other reviews
sanity3@ldiskfs+DNE:test_908bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
2 optional test failure(s) — informational
build #114199 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin, Timothy Day
patchsets:
+3 earlier PS1 07-28 PS2 08-05 PS3 08-17
PS4 01-14 PS5 01-15 PS6 06-08 PS7 06-08 Janitor Bot PS8 06-11
owner James Simmons · uploader James Simmons · PS8 uploaded 511d ago · NEW · open in Gerrit ↗
commit message
LU-18041 msg: use UUIDs instead of NIDs for OSP setup

The mgs when processing logs for OSP uses NIDs instead of
UUIDs for LCFG_SETUP. This is wrong and NIDs can easily
over flow the obd_uuid structure. A side effect of this
mistake is that the ptlrpc conn to UUID mapping just ends
up being a NID looking up a NID which happens to be itself.
That is very wrong. Change from NID string to the real UUID.

Test-Parameters: env=FORCE_LARGE_NID=true,LOAD_MODULES_REMOTE=true
Change-Id: Ie291b2fd85b6096779d7cf5ee94060edc0e3a590
Signed-off-by: James Simmons <jsimmons@infradead.org>
53594 master J ✗4B ✓T ✗2R -1/2−
LU-10391 tests: debug ping failures
mine needs rebase — checkpatch: cannot be cherry-picked
needs rebase 4 unique failures IPv6 stalled 670d XS +1 −1
670d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 4 test failures unique to this patch — sanity-lnet@ldiskfs+DNE:test_253, sanity-lnet@ldiskfs+DNE:test_254, sanity-lnet@zfs:test_253 +1 more
enforced failed: custom-1001, review-ldiskfs-dne
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_253seen in 1 other review
sanity-lnet@ldiskfs+DNE:test_254seen in 1 other review
sanity-lnet@zfs:test_253seen in 1 other review
sanity-lnet@zfs:test_254seen in 1 other review
failed enforced testplatformdetail
custom-1001 RHEL 9.3 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #108441 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn
patchsets:
+1 earlier PS1 01-04
PS2 01-04 PS3 01-05 PS4 04-04 PS5 06-25 PS6 10-22
owner James Simmons · uploader James Simmons · PS6 uploaded 743d ago · NEW · open in Gerrit ↗
commit message
LU-10391 tests: debug ping failures

Re-enable failing test.

Test-Parameters: trivial testlist=sanity-lnet env=ONLY=253,ONLY_REPEAT=10
Change-Id: I1a55149adbc1413dc26eb004d2832baf96ead3fd
Signed-off-by: James Simmons <jsimmons@infradead.org>
15713 master J –B ✓T ✗0R 0/2
LU-6034 lnet: Create a checksum value for LNet package data
mine Maloo voted -1 — tests failed (details on the change)
stalled 4115d L +194 −74
4115d
no vote yet: Frank Zago
owner James Simmons · uploader James Simmons · PS1 uploaded 4120d ago · NEW · open in Gerrit ↗
commit message
LU-6034 lnet: Create a checksum value for LNet package data

Using the check sum selected by the adminstrator for a LNet
interface check sum the data being handled by the LNet layer.

Change-Id: I069fc3a83ec8392174a5b1c6bfe1fca223e3a3af
Signed-off-by: James Simmons <uja.ornl@yahoo.com>

Mentions

0 waiting on you · 0 open

Unresolved threads where someone @-mentioned you (username, email or full name) — the pings that drown in Gerrit's email. Red: you have not replied since the ping. Muted: you replied, but the thread is still open, so it stays on the list until someone resolves it. Both clear on the refresh after the thread is resolved.

No unanswered pings — nobody is waiting on a mention.
0 watched
Nothing watched. Add a change above — e.g. after rebasing someone's patch — and its build/test state shows up here.
70 open
▶

Failed / broken

(48)
70336 master J –B ✓T ✗1R 0/2
LU-18687 ptlrpc: handle CONFIG_LUSTRE_FS_SERVER tristate
enforced failed: review-ldiskfs-dne
upstream pw_shepherd 3 unresolved M +42 −43
5h
enforced failed: review-ldiskfs-dne
3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity. session
build #135255 SUCCESS · tests all Maloo sessions
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-11-04 08:33 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) This isn't a bug, but the body is one line and only repeats the subject. It would help to explain why the change is needed: in-tree
Gerrit AI review for Lustre PS1 · 2026-11-04 08:33
(style) This isn't a bug, but the body is one line and only repeats the subject. It would help to explain why the change is needed: in-tree Kbuild with =m only defines CONFIG_LUSTRE_FS_SERVER_MODULE, so a plain #ifdef drops the server code. It should also say that out-of-tree builds are unchanged, since config.h defines both macros, and that lustre/ptlrpc/wiretest.c is a generated file being edited by hand.
reply PS1 2026-11-04 08:33 Gerrit AI review for Lustre niobuf.c:295 — (defect) With CONFIG_LUSTRE_FS_SERVER=m, this block is now compiled, but ptlrpc_server_bulk_active() is a static inline that is only defined
Gerrit AI review for Lustre PS1 · 2026-11-04 08:33
(defect) With CONFIG_LUSTRE_FS_SERVER=m, this block is now compiled, but ptlrpc_server_bulk_active() is a static inline that is only defined inside `#ifdef CONFIG_LUSTRE_FS_SERVER` in lustre/include/lustre_net.h. When only CONFIG_LUSTRE_FS_SERVER_MODULE is defined, the call is an implicit declaration, and the build fails because of -Werror-implicit-function-declaration.

The same header mismatch also drops the prototypes for other functions this patch now builds: server_bulk_callback() and ptlrpc_prep_bulk_exp() (lustre_net.h), sptlrpc_svc_{prep,wrap,unwrap}_bulk() and sptlrpc_has_gssiam_rules() (lustre_sec.h), and lustre_swab_orphan_ent*() (lustre_swab.h). That gives -Wmissing-prototypes warnings. Should lustre_net.h, lustre_sec.h, lustre_swab.h and the other headers be converted to IS_ENABLED() first?
reply PS1 2026-11-04 08:33 Gerrit AI review for Lustre wiretest.c:272 — (minor) lustre/ptlrpc/wiretest.c is generated by `make newwiretest` from the same wirecheck output as lustre/utils/wiretest.c. After the pre
Gerrit AI review for Lustre PS1 · 2026-11-04 08:33
(minor) lustre/ptlrpc/wiretest.c is generated by `make newwiretest` from the same wirecheck output as lustre/utils/wiretest.c. After the previous patch in the series, CHECK_COND_START() emits `#ifdef HAVE_SERVER_SUPPORT`. So the next regeneration will replace every IS_ENABLED() guard here with `#ifdef HAVE_SERVER_SUPPORT`, which is not defined in an in-kernel Kbuild build. It will also restore the blank line removed after the lustre_mdt_attrs guard. Could wirecheck emit a guard that is correct for both copies, so the kernel copy can stay generated instead of hand-edited?
tags: pw_shepherd
owner James Simmons · uploader James Simmons · PS1 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 ptlrpc: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert ptlrpc to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ie12208b585377aec3885c89a67e4197565e86ed7
70332 master J –B ✓T ✗1R 0/2
LU-18687 fld: handle CONFIG_LUSTRE_FS_SERVER tristate
enforced failed: review-ldiskfs-dne-arm
upstream CI@PS1 S +8 −9
5h
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 5 tests. 1 tests failed: lnet-selftest. session
build #135245 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
build/test results are from PS1 — PS2…PS2 changed only the commit message (votes copied, CI not re-run)
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 fld: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert fld to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I749ceae35a936daad21a1a0e0078023b534634fe
57877 master J –B ✓T ✓R +2/2
LU-8066 quota: migrate quota out of procfs
Verified -1 veto by Oleg Drokin
Verified -1 upstream pw_shepherd master-next 2 unresolved L +500 −382
11h
Verified -1 veto by Oleg Drokin
2 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #134181 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-10-27 07:07 · Timothy Day +1 2026-10-28 20:25
no vote yet: Shaun Tancheff, Sergey Cheremencev, Andreas Dilger, Oleg Drokin
patchsets:
+29 earlier PS1 01-24 PS2 02-28 PS3 07-27 PS4 07-30 PS5 08-20 PS6 01-15 PS7 04-20 PS8 08-14 PS9 08-14 PS10 08-14 PS11 08-30 PS12 08-30 PS13 08-30 PS14 09-01 PS15 09-03 PS16 09-03 PS17 09-03 PS18 09-04 PS19 09-05 PS20 09-07 PS21 09-07 PS22 09-07 PS23 09-14 PS24 09-20 PS25 09-22 PS26 09-22 PS27 09-22 PS28 09-23 PS29 09-23
PS30 10-05 PS31 10-05 PS32 10-05 PS33 10-06 PS34 10-21
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS34 2026-10-23 01:49 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) If the patch is refreshed, could the body name the parameters that moved and where they now live? That would make the change findabl
Gerrit AI review for Lustre PS34 · 2026-10-23 01:49
(minor) If the patch is refreshed, could the body name the parameters that moved and where they now live? That would make the change findable with git log, and it would help whoever has to update monitoring scripts. For example:

- sysfs: `osd-*.*.quota_slave{,_md,_dt}.{enabled,force_reint,timeout,verion_mismatch_timeout,root_prj_enable}` and `qmt.*.*.soft_least_qunit`
- debugfs: `info`, `acct_*`, `limit_*` and `glb-*`

The body could also mention two other behaviour changes:

- /proc/fs/lustre/qmt is now gone unconditionally, and /proc/fs/lustre/osd-* only exists when `symlink_brw_stats=1` is set at module load. The parameter is now 0444.
- osd_device_init0() now calls qsd_fini() on the alloc_percpu() failure path. This is needed because the qsd kobjects are children of `dd_kobj`.
reply PS34 2026-10-23 01:49 Gerrit AI review for Lustre qsd_lib.c:55 — (typo) This isn't a bug, but this still says "procfs helpers", and the same comment in qmt_pool.c was updated. If the patch is refreshed, a
Gerrit AI review for Lustre PS34 · 2026-10-23 01:49
(typo) This isn't a bug, but this still says "procfs helpers", and the same comment in qmt_pool.c was updated. If the patch is refreshed, a few other stale mentions could be fixed at the same time:

- the qmt_dev.c header comment and the qmt_device_init0() comment both still say "QMT procfs directory" and "root procfs directory"
- the `out_procfs` label in osd-ldiskfs osd_device_init0() now calls osd_tunables_fini()
tags: pw_shepherd
owner James Simmons · uploader James Simmons · PS34 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-8066 quota: migrate quota out of procfs

With the upstream kernel requirement of not using procfs
move the quota proc entries over to debugfs / sysfs. The
simple entries are placed into sysfs and the complex into
the debugfs tree.

Extend the time to support proc symlink until after the
2.18 LTS release. Now on osd module load the
symlink_brw_stats will determine if procfs is setup at
all.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I003841c4e9131db9ac423763fa817097c09ed83d
57671 master J –B ✗T –R +1/2
LU-10499 pcc: add --pin option for 'lfs pcc attach'
build failure (#135127)
pccro L +525 −80
2d
build #135127 FAILURE
reviews: Andreas Dilger +1 2026-11-01 20:36
no vote yet: Qian Yingjin, Feng Lei
patchsets: PS1 01-07 PS2 10-31 Andreas Dilger PS3 11-01 Andreas Dilger
tags: pccro
owner James Simmons · uploader Andreas Dilger · PS3 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: add --pin option for 'lfs pcc attach'

Add a --pin|-p option to "lfs pcc attach" and "lfs pcc attach_fid"
to pin each file for the PCC backend before attaching it, so that
users do not need to run "lfs pcc pin" separately.  A file that
cannot be pinned is not attached.  Without --id, the backend is
chosen once, so that the file is pinned for the backend it is
attached to.

Add llapi_pcc_pin_fd(), llapi_pcc_pin_fid(), llapi_pcc_unpin_fd()
and llapi_pcc_unpin_fid() to match the pool pin functions, which
use the same lustre.pin xattr.  attach_fid pins the file with
llapi_pcc_pin_fid(), which also works on subdirectory mounts.  The
pin functions share the pin xattr update and no longer leak the
parsed pin object.

Setting lustre.pin on the MDT took the UPDATE lock as well as the
XATTR lock.  This would cancel a combined UPDATE|LAYOUT lock on the
client and detach a PCC-RO file, so "lfs pcc pin" of an attached
file would detach it.  Do not take the UPDATE lock for the pin,
whether it is set as lustre.pin or as trusted.pin, and do not update
ctime, which clients cache under the UPDATE lock, as for the HSM
state.

Add llapi_pcc_pin_file.3 for the pin functions, and sanity-pcc
test_204d and test_204e.

Was-Change-Id: I35a0e399294020efdb0e4710500e8f7b846c290f
Was-Change-Id: If0120d745418836cfdf449a795b6f524c40f9c27
Test-Parameters: trivial testlist=sanity-pcc
Fixes: 84100d7f7d38 ("LU-10499 pcc: tunable GID to pin/unpin files")
Signed-off-by: Lei Feng <flei@whamcloud.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Iee873821ff5815fd6b56ed8f4c48147f5ef9321f
68287 master J !B ✗T –R -1/2−
LU-14291 obdclass: unwind server code out of llog
needs rebase — checkpatch: cannot be cherry-picked
needs rebase XL +1100 −1073
6d
needs rebase — checkpatch: cannot be cherry-picked
build failure (#130151)
janitor run: build failed — no tests ran — janitor results
build #130151 FAILURE
owner James Simmons · uploader James Simmons · PS1 uploaded 71d ago · NEW · open in Gerrit ↗
commit message
LU-14291 obdclass: unwind server code out of llog

Currently server internals are being pulled into llog. Break out
all the server code which limits the scope of the DT API.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ia11f6c26289f43260c1606fb031c4b90df10f87f
65110 master J ✗7B ✓T ✓R -1/2−
LU-9680 utils: remove forced debugfs mounting
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 5 unresolved S +0 −24
6d
needs rebase — checkpatch: cannot be cherry-picked
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green, no reviews yet — add reviewers
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity1@ldiskfs+DNE:test_5gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_29NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_30bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs:test_5gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs:test_29NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs:test_30bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-pcc@ldiskfs+DNE:test_20seen in 27 other reviews
build #129044 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-06 PS2 08-10
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre COMMIT_MSG:11 — (typo) "so are current actions voliates this feature" -> "so our current actions violate this feature".
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(typo) "so are current actions voliates this feature" -> "so our current actions violate this feature".
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre COMMIT_MSG:14 — (defect) Is this claim accurate? The controls the test suite leans on hardest are debugfs-only and have no netlink or sysfs equivalent.
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(defect) Is this claim accurate? The controls the test suite leans on hardest are debugfs-only and have no netlink or sysfs equivalent.

fail_loc, fail_val, fail_err, debug, subsystem_debug, dump_kernel (lctl dk), daemon_file and debug_marker are all created by lnet_insert_debugfs() from lnet_table in lnet/libcfs/module.c, so they exist only under /sys/kernel/debug/lnet/.

Every suite that does `$LCTL set_param fail_loc=...` or `$LCTL dk` needs those. So the suite still requires debugfs to be mounted; the patch only stops mounting it on our own.
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre param.c:26 — (style) Not a bug, but cfs_try_mount_sys_kernel_debug() was the only user of <sys/vfs.h> (statfs), <linux/magic.h> (DEBUGFS_MAGIC), <sys/mou
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(style) Not a bug, but cfs_try_mount_sys_kernel_debug() was the only user of <sys/vfs.h> (statfs), <linux/magic.h> (DEBUGFS_MAGIC), <sys/mount.h> (mount) and <stdbool.h> (the static bool). Worth dropping those four includes in the same patch.
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre param.c:28 — (defect) conf-sanity test_5g "handle missing debugfs" still checks for this auto-mount and is not updated here:
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(defect) conf-sanity test_5g "handle missing debugfs" still checks for this auto-mount and is not updated here:

    umount /sys/kernel/debug
    $LCTL get_param -n devices | grep -E -v "error" && error "lctl can't access debugfs data"
    grep " debugfs " /etc/mtab || error "debugfs failed to remount"

With the mount gone nothing remounts it, so the last line fails.

Worse, the test now leaves /sys/kernel/debug unmounted for the remainder of the conf-sanity run, so later subtests reading debugfs parameters, the `lctl dk` log dump on error(), and the KMEMLEAK check at /sys/kernel/debug/kmemleak all break too. Should test_5g be removed in this patch?
reply PS2 2026-08-11 03:55 Gerrit AI review for Lustre param.c:55 — (defect) The netlink alternative cited in the commit message only applies to non-root callers.
Gerrit AI review for Lustre PS2 · 2026-08-11 03:55
(defect) The netlink alternative cited in the commit message only applies to non-root callers.

lctl get_param / list_param / set_param fall back to llapi_param_display_value() / llapi_param_set_value() only under `rc == -ENOENT && getuid() != 0` (lustre/utils/lustre_param.c:1181, 1243, 1349, 1416, 1640). Root always stays on the glob path.

mount(2) needs CAP_SYS_ADMIN, so the code being deleted only ever did anything for root — non-root already got EPERM, which was silently ignored. That means the one caller class this removal changes is exactly the one with no netlink fallback: on a node where debugfs is not mounted, root now gets ENOENT for everything under /sys/kernel/debug/{lnet,lustre} and has no other route to it.

This was raised on patchset 1 (keep trying to mount for systems that can still use it, just don't print on failure) and the code is unchanged in patchset 2. Dropping only the fprintf() would keep the working case working while satisfying the secure-boot concern.
owner James Simmons · uploader James Simmons · PS2 uploaded 86d ago · NEW · open in Gerrit ↗
commit message
LU-9680 utils: remove forced debugfs mounting

For older platforms debugfs wasn't always mounted but lustre
had a heavy dependence on it. Today Linux secure boot enforces
the lack of debugfs so are current actions voliates this
feature. With the implementation of Netlink we have an
alternative to using debugfs so we can remove this
forced mounting. We will be able to run our test suite
without debugfs after this patch.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Iaaa2b54d8352a5b9636338b0d10191428c89adaf
55818 master J ✗2B ✓T ✗30R -2/2−
LU-18884 osp: use UUIDs instead of NIDs for LWP setup
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures IPv6 1 unresolved S +24 −11
13d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — runtests-ssk@ldiskfs+SharedKey:test_1, runtests@zfs:test_1
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-ubuntu, review-zfs
Mikhail Pershin voted -1
1 unresolved thread(s) await your reply — last from Andreas Dilger
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests-ssk@ldiskfs+SharedKey:test_1seen in 100 other reviews
runtests@zfs:test_1seen in 5 other reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 2 tests failed: sanity-sec, sanity. session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 6 tests failed: sanity-lsnapshot, insanity, replay-ost-single, replay-single, sanity-flr, sanit session
3 optional test failure(s) — informational
build #114072 SUCCESS · tests all Maloo sessions
reviews: Mikhail Pershin -1 2025-06-11 07:38
no vote yet: Chris Horn, Timothy Day
patchsets:
+5 earlier PS1 07-20 PS2 07-20 PS3 09-06 PS4 09-06 PS5 09-06
PS6 09-10 PS7 09-19 PS8 10-02 PS9 06-08 PS10 06-08 Janitor Bot
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2025-09-23 16:42 Andreas Dilger lwp_dev.c:95 — (defect?) I doubt the UUID should have a linefeed at the end?
Andreas Dilger PS10 · 2025-09-23 16:42
(defect?) I doubt the UUID should have a linefeed at the end?
owner James Simmons · uploader Janitor Bot · PS10 uploaded 514d ago · NEW · open in Gerrit ↗
commit message
LU-18884 osp: use UUIDs instead of NIDs for LWP setup

The osp when setting up LWP uses NIDs instead of UUIDs for
LCFG_SETUP. This is wrong and NIDs can easily over flow the
obd_uuid structure. A side effect of this mistake is that
the ptlrpc conn to UUID mapping just ends up being a NID
looking up a NID which happens to be itself. That is very
wrong. Replace using an NID with a real UUID.

Test-Parameters: env=FORCE_LARGE_NID=true,LOAD_MODULES_REMOTE=true
Change-Id: I1e08a9475a8dddcfd7f212b6a1b37559c00bf84e
Signed-off-by: James Simmons <jsimmons@infradead.org>
65688 master J –B ✓T ✗11R -2/2−
LU-18041 obd: mgc uses real uuid for its uuid to NID mapping
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 11 unresolved M +67 −48
22d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-2, review-dne-part-3, review-dne-part-7, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-7, review-ldiskfs-arm, review-ldiskfs-ubuntu, review-zfs
Andreas Dilger voted -1
9 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
2 thread(s) waiting on others
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-sec. session
review-dne-part-3 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-7 RHEL 9.8 / x86_64 ran 6 tests. 1 tests failed: sanity-scrub. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 2 tests failed: sanity-pfl, sanity-sec. session
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-3 RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-3 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-7 RHEL 9.8 / x86_64 ran 6 tests. 1 tests failed: sanity-scrub. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 6 tests. 1 tests failed: sanity-sec. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
review-zfs RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: sanity-lsnapshot. session
build #132962 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-10-06 16:36
no vote yet: Serguei Smirnov, Mikhail Pershin
patchsets: PS1 05-06 PS2 07-14 PS3 07-16 PS4 07-24 PS5 10-06
threads: 9 need your reply · 2 waiting on others · 0 own notes · 0 bot
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but `obd:` isn't a component tag used elsewhere in the tree. The change is mostly in obdclass (plus ldlm), so `obd
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(style) This isn't a bug, but `obd:` isn't a component tag used elsewhere in the tree. The change is mostly in obdclass (plus ldlm), so `obdclass:` would fit better.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "This is problem" -> "This is a problem", and "is to small" -> "is too small".
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(typo) "This is problem" -> "This is a problem", and "is to small" -> "is too small".
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre COMMIT_MSG:17 — The message describes only the MGC uuid change. Several behavior changes in the diff aren't mentioned:
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
The message describes only the MGC uuid change. Several behavior changes in the diff aren't mentioned:

- import_set_conn() now parses NID-shaped uuids directly and matches existing connections by `c_peer` NID instead of `oic_uuid`. This affects every OSC/MDC/OSP/LWP import, not just the MGC.
- lustre_start_simple() now ignores `s2` for every caller.
- lustre_add_mgc_failnodes() now creates one connection per failover NID instead of one per failover node, and maps every failover NID to the MGC's uuid.

Were these intended? If so, could the message explain why they are safe?
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre ldlm_lib.c:77 — (minor) ptlrpc_connection_get() returns NULL (not an ERR_PTR) when allocation fails, and only ptlrpc_uuid_to_connection() converts that to E
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(minor) ptlrpc_connection_get() returns NULL (not an ERR_PTR) when allocation fails, and only ptlrpc_uuid_to_connection() converts that to ERR_PTR(-ENOENT). On this branch the IS_ERR() check below misses NULL, so `oic_conn` can be stored as NULL and dereferenced later in import_select_connection(). It's an ENOMEM-only path, but the same `c ? c : ERR_PTR(-ENOMEM)` conversion would keep it consistent.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre ldlm_lib.c:99 — (defect) Matching on the peer NID string instead of `oic_uuid` breaks lookups whose uuid isn't the peer NID string. The MGC's primary connec
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) Matching on the peer NID string instead of `oic_uuid` breaks lookups whose uuid isn't the peer NID string. The MGC's primary connection is the clearest case: its uuid is now the random MGC uuid, so it never matches here. import_set_conn_priority() then returns -ENOENT, and ptlrpc_recover_import(imp, uuid) fails, e.g. `lctl set_param mgc.*.import=connection=<uuid>`.

It also fails for NID-shaped uuids when LNetPrimaryNID() replaced the peer NID with a different primary in ptlrpc_connection_get(). Repeated adds then create duplicate connections, and the IR reconnect in mgc_apply_recover_logs() -> ptlrpc_recover_import(imp, uuid.uuid, 1) can't find the connection.

client_import_del_conn() and client_import_add_nids_to_conn() still key on `oic_uuid`, so these lookups are now inconsistent. Also, `strncmp(..., sizeof(uuid->uuid))` is effectively strcmp() for a NUL-terminated 40-byte uuid, so the truncated-uuid case described in the comment above won't match either.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:162 — (defect) `node` is now the MGC's own obd_uuid, the same key lustre_start_mgc() used for the primary MGS NIDs. So every failover MGS NID is a
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) `node` is now the MGC's own obd_uuid, the same key lustre_start_mgc() used for the primary MGS NIDs. So every failover MGS NID is added to the same uuid_nid_data entry as the primary MGS NIDs. class_add_uuid() then calls LNetAddPeer() with the whole entry, telling LNet that the primary and failover MGS nodes are one multi-rail peer. With the default lock_prim_nid=1, LNetAddPeer() can call lnet_peer_force_merge() and merge an existing failover-node peer into the primary MGS peer.

The old code used a separate uuid per failover node for exactly this reason. Two other side effects:

- The primary connection's ptlrpc_uuid_to_peer() can now pick a failover node's NID.
- The entry is capped at MTI_NIDS_MAX (32) NIDs across all MGS nodes, and on reuse of an existing MGC, across every mount's mgsnode list.

Should the failover NIDs keep a per-node key that differs from the primary's?
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:170 — (minor) class_nid2uuid() doesn't truncate. It returns -EOVERFLOW when the NID string doesn't fit in UUID_MAX, and the `break` then skips thi
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(minor) class_nid2uuid() doesn't truncate. It returns -EOVERFLOW when the NID string doesn't fit in UUID_MAX, and the `break` then skips this NID's connection and the rest of the current node. So a failover MGS with a long IPv6 NID still gets no connection, which is the case the commit message says is fixed. Separately, the "can't add failover peer" CWARN below prints `node` (the MGC uuid) where the failover NID was probably intended.
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:241 — (defect) This replaces `s2` with `uuid` for every lustre_start_simple() caller, not only lustre_start_mgc(). The OSD start in tgt_mount.c pa
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) This replaces `s2` with `uuid` for every lustre_start_simple() caller, not only lustre_start_mgc(). The OSD start in tgt_mount.c passes the mount flags in `s2`:

    snprintf(flagstr, sizeof(flagstr), "%lu:%u", mflags, lmd_flags);
    lustre_start_simple(lsi->lsi_osd_obdname, lsi->lsi_osd_type,
                        lsi->lsi_osd_uuid, lmd->lmd_dev, flagstr, ...);

Now buf 2 holds the OSD uuid string instead. osd-ldiskfs osd_mount() runs `sscanf(str, "%lu:%lu", &s_flags, &lmd_flags)` on it, the parse fails, and both stay 0. So MS_RDONLY, LMD_FLG_DEV_RDONLY and LMD_FLG_NOSCRUB are silently dropped: an `-o ro` target mounts read-write, and `noscrub` is ignored. osd-zfs does `strstr(str, ":")` and loses rdonly_dev/noscrub the same way. That would explain the sanity-scrub failures seen on every patchset, since that suite mounts with `noscrub`.

It would be safer to pass the uuid as `s2` from lustre_start_mgc() only (and keep the kernel-doc for `s2` accurate).
reply PS5 2026-10-07 06:25 Gerrit AI review for Lustre obd_mount.c:329 — (defect) Every new MGC now registers its NIDs under a fresh random uuid, but nothing calls class_del_uuid() for that key when the MGC is sto
Gerrit AI review for Lustre PS5 · 2026-10-07 06:25
(defect) Every new MGC now registers its NIDs under a fresh random uuid, but nothing calls class_del_uuid() for that key when the MGC is stopped (lustre_stop_mgc() doesn't touch the uuid table). Before this patch the key was the NID string, so repeated mounts reused one entry. Now each mount/umount cycle (autofs, for example) leaves another uuid_nid_data (~700 bytes) on g_uuid_list until module unload. lustre_uuid_to_peer() and class_add_uuid() scan that list linearly, so they get slower as it grows. Should the MGC remove its entry on cleanup?
owner James Simmons · uploader James Simmons · PS5 uploaded 28d ago · NEW · open in Gerrit ↗
commit message
LU-18041 obd: mgc uses real uuid for its uuid to NID mapping

Lustre creates a mapping, struct uuid_nid_data, using an 'uuid'
to many NIDs. That 'uuid' happens to be the primary NID. This
is problem for two reasons. First reason is that struct obd_uuid
is to small for full length IPv6 based NID addresses so it
ends up truncated. Second reason is for some systems the IP
addresses expire for the network interfaces during the file
system run time. This means the primary NID is not permanent.
What is a better node identifier for the mgc is the UUID
generated for it. Use that for the mappings.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ib00ac7c3e282be924f2a64245cfcc4fc4e5744a7
45608 master J !B ✓T ✓R -2/2−
LU-10824 llite: remove may_umount() loop
needs rebase — checkpatch: cannot be cherry-picked
needs rebase upstream 5 unresolved S +27 −18
22d
needs rebase — checkpatch: cannot be cherry-picked
Arshad Hussain voted -1
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
no vote yet from Shaun Tancheff, Andreas Dilger, Neil Brown, Feng Lei
janitor run: 15 failing config(s), none unique to this patch — janitor results
build #132335 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain -1 2026-09-28 05:12
no vote yet: Shaun Tancheff, Andreas Dilger, Neil Brown, Feng Lei, Timothy Day
patchsets:
+17 earlier PS1 11-18 PS2 11-18 PS3 11-18 PS4 11-18 Charlie Olmstead PS5 01-07 PS6 03-02 PS7 03-03 Andreas Dilger PS8 03-03 PS9 03-03 PS10 03-03 Andreas Dilger PS11 06-11 PS12 06-11 PS13 06-11 PS14 06-11 PS15 08-09 PS16 08-09 PS17 08-19
PS18 08-20 PS19 09-21 Arshad Hussain PS20 09-22 PS21 09-23 PS22 09-25
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS22 2026-09-26 06:56 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) If the patch is refreshed, consider saying concretely what was wrong with the old code. ll_mnt.mnt was set to current->fs->root.mnt,
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(minor) If the patch is refreshed, consider saying concretely what was wrong with the old code. ll_mnt.mnt was set to current->fs->root.mnt, which is the mounting process's root vfsmount, not the Lustre mount, and no reference was held on it. So may_umount() was testing the wrong mount (in practice always busy, so every umount -f slept the full 10s), and it could touch a freed vfsmount if that root went away, e.g. when a container exits. The body also doesn't mention the test-framework.sh change that bind-mounts the helper for build-tree testing.
reply PS22 2026-09-28 05:12 Arshad Hussain umount.lustre:12 — (trivial) (( .... ))
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(minor) This line can never fire. A successful umount already leaves via "&& exit 0" on line 10, so by this point rc is always non-zero. If the patch is refreshed, it can be dropped.
Arshad Hussain PS22 · 2026-09-28 05:12
(trivial) (( .... ))
reply PS22 2026-09-28 05:02 Arshad Hussain test-framework.sh:1237 — (defect) This is not your code. But worth fixing. 'continue' is wrong here.
Arshad Hussain PS22 · 2026-09-28 05:02
(defect) This is not your code. But worth fixing. 'continue' is wrong here.

```
[[ -f "$sbin_mount" ]] || touch "$sbin_mount" || true	
[[ -f "$sbin_umount" ]] || touch "$sbin_umount" || true		

```

-1 only for this.
reply PS22 2026-09-28 05:02 Arshad Hussain test-framework.sh:1253 — (trivial) can be fixed.
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(defect) A bind mount needs its target to exist, but nothing creates $sbin_umount first. The mount.lustre bind just above writes a "STUB MARK" file for exactly this reason. On a build-tree node that does not have the lustre RPM installed, /sbin/umount.lustre is missing, so the mount fails with "mount point does not exist" and error() aborts load_modules_local(). That means llmount.sh and every suite fail at setup. Autotest runs from installed RPMs, where $LUSTRE/utils/mount.lustre does not exist, so it never takes this branch and won't catch it.

Could this create a stub the same way sbin_mount does, or only bind when [[ -e $sbin_umount ]]?

(typo) "bund" -> "bind".
Arshad Hussain PS22 · 2026-09-28 05:02
(trivial) can be fixed.
reply PS22 2026-09-26 06:56 Gerrit AI review for Lustre test-framework.sh:1373 — (minor) This does not undo what load_modules_local() set up. When the bind succeeded, /sbin/umount.lustre is still a mount point here, so rm
Gerrit AI review for Lustre PS22 · 2026-09-26 06:56
(minor) This does not undo what load_modules_local() set up. When the bind succeeded, /sbin/umount.lustre is still a mount point here, so rm fails with EBUSY and the bind stays in place. The next load_modules_local() call then finds mount.lustre unbound and stacks a second bind on top of it. Should this follow the sbin_mount pattern just above? That is: umount $sbin_umount if it appears in /proc/mounts, then remove it only if it is a stub.
owner James Simmons · uploader James Simmons · PS22 uploaded 39d ago · NEW · open in Gerrit ↗
commit message
LU-10824 llite: remove may_umount() loop

Al Viro pointed out the work around for LU-1882 is incorrect. It
can even lead to kernel panics under the right conditions. The
reason for this work around is that PtlRPC messages can still be
received after unmounting. With today's util-linux you can provide
umount helper scripts. Create one for Lustre that does nearly the
same thing that the kernel tried to accomplish. The difference is
umount.lustre is run always instead of the umount -f condition.

Test-Parameters: trivial testlist=conf-sanity env=ONLY=45,ONLY_REPEAT=100
Fixes: 205a57df2787 ("LU-1882 llite: Adding timed wait in ll_umount_begin")
Signed-off-by: Rick Mohr <rmohr@ornl.gov>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I1498c6348022bdd6a74db887ffc8836a7a03bab6
36612 master J ✗1B ✓T ✗2R -1/2−
LU-8585 tests: re-enable fid2path sanity test for subdir mount
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure M +125 −10
22d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — sanity-quota@ldiskfs+DNE:test_48
enforced failed: custom-1001, review-ldiskfs-dne-arm
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-quota@ldiskfs+DNE:test_48seen in 25 other reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #124513 SUCCESS · tests all Maloo sessions
no vote yet: Guillaume Courrier, Etienne AUJAMES, Andreas Dilger, Timothy Day
patchsets:
+13 earlier PS2 12-08 PS3 03-12 PS4 03-14 PS5 03-16 PS6 03-18 PS7 03-22 PS8 10-16 PS9 11-03 PS10 12-18 PS11 01-18 PS12 01-22 PS13 03-08 PS14 03-08
PS15 04-23 PS16 12-12 PS17 12-20 PS18 12-22 PS19 04-30
owner James Simmons · uploader James Simmons · PS19 uploaded 187d ago · NEW · open in Gerrit ↗
commit message
LU-8585 tests: re-enable fid2path sanity test for subdir mount

When a subdirectory is mounted, the .lustre directory cannot be
seen. With the move of llapi_fid2path() from using .lustre/fid to
name_to_handle_at() previous sanity test that failed due to
file sets being enabled should now pass since name_to_handle_at()
should be file set aware. We update a few test applications to
work with llapi_open_by_fid() if we can't access .lustre. Same
is done with liblustreapi.so as well.

Fixes: f71554200 ("LU-11208 tests: add version check to sanity tests")
Fixes: e2ac6e1ea ("LU-9341 lod: Add special O_APPEND striping")
Fixes: 9bd3e64b8 ("LU-28 fileset: add fileset mount support")
Test-Parameters: trivial envdefinitions="FILESET=/subdir" testlist=sanity
Change-Id: Iddbcea298613e1dcc0af5c6f3cab4f0de01dbb5c
Signed-off-by: James Simmons <jsimmons@infradead.org>
63767 master J ✗1B ✓T ✗4R -1/2−
LU-20108 sec: support fscrypt natively for Linux 5.15
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure upstream 18 unresolved L +474 −208
36d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — runtests@ldiskfs+DNE:test_1
enforced failed: custom-1001, review-ldiskfs-dne, review-ldiskfs-dne-arm
18 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests@ldiskfs+DNE:test_1NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
custom-1001 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-dne RHEL 9.8 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 7 tests. 1 tests failed: sanity. session
build #131457 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Sebastien Buisson, Timothy Day
patchsets: PS1 02-03 PS2 07-14 PS3 08-10 PS4 09-09 PS5 09-09
threads: 18 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 11:35 Gerrit AI review for Lustre COMMIT_MSG:10 — The body says this handles the replacement of fscrypt_inherit_context(), but all three call sites are still there and unguarded:
Gerrit AI review for Lustre PS2 · 2026-07-28 11:35
The body says this handles the replacement of fscrypt_inherit_context(), but all three call sites are still there and unguarded:

    lustre/llite/namei.c:1230
    lustre/llite/namei.c:1851
    lustre/llite/dir.c:537

llcrypt_set_context() is only wired up in one place (ll_new_node_finish() for symlinks); everywhere else the new call is commented out. Should the message say the conversion is partial?
reply PS2 2026-07-28 11:35 Gerrit AI review for Lustre COMMIT_MSG:12 — A few hunks aren't accounted for by the description - can they be explained, or split out?
Gerrit AI review for Lustre PS2 · 2026-07-28 11:35
A few hunks aren't accounted for by the description - can they be explained, or split out?

    - config/Makefile.exports.in + lnet/libcfs/Makefile + lustre_compat/fs/crypto/Makefile: switching the llcrypt build gate from a config.h grep to an exported make variable
    - lustre/llite/statahead.c: ll_xattr_cache_insert() -> ll_set_encflags()
    - lustre/llite/namei.c: dropping the -ERANGE retry loop around get_context()
    - lustre/llite/namei.c: dropping the `encrypt && (open_flags & O_CREAT) && d_inode(dentry)` branch that used to call ll_set_encflags() with preload=true
    - the CDEBUG text changes ("it_finish server returned ...", "statahead server returned ...")
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre COMMIT_MSG:16 — (defect) Two hunks aren't accounted for by the description:
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) Two hunks aren't accounted for by the description:

- a new UAPI ioctl, LL_IOC_GET_ENCRYPTION_NONCE / llcrypt_ioctl_get_nonce()
- the folio signature change of llcrypt_encrypt_pagecache_blocks(), llcrypt_decrypt_pagecache_blocks() and llcrypt_finalize_bounce_page(), plus the new lustre_compat/linux/folio.h include

Both are independently landable. Should they be split out, or at least named in the body?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre lustre_crypto.h:50 — (defect) These now hand a folio to the in-kernel helpers, but on 5.15 - the kernel this patch is targeting - fscrypt_encrypt_pagecache_block
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) These now hand a folio to the in-kernel helpers, but on 5.15 - the kernel this patch is targeting - fscrypt_encrypt_pagecache_blocks() and fscrypt_decrypt_pagecache_blocks() take a `struct page *`, and fscrypt_finalize_bounce_page() at line 77 takes a `struct page **` (osc_request.c passes `foliop`). The folio conversions are much more recent.

There is no HAVE_* guard or compat shim here, so the in-kernel build looks like it would still fail on 5.15 with incompatible-pointer errors. Should a config/*.m4 test cover the page-vs-folio variants?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre lustre_crypto.h:138 — (defect) FS_IOC_GET_ENCRYPTION_NONCE and fscrypt_ioctl_get_nonce() only appeared in v5.7, and the mapping at line 96 is unguarded. Since the
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) FS_IOC_GET_ENCRYPTION_NONCE and fscrypt_ioctl_get_nonce() only appeared in v5.7, and the mapping at line 96 is unguarded. Since the commit message says in-kernel fscrypt is supported down to 5.8-era kernels today, is a HAVE_FSCRYPT_IOCTL_GET_NONCE test needed before this can be mapped unconditionally?
reply PS5 2026-09-10 19:30 Gerrit AI review for Lustre lustre_crypto.h:138 — (defect) This `#else` arm also covers the `--disable-crypto` build (no HAVE_LUSTRE_CRYPTO, no CONFIG_LL_ENCRYPTION), and llcrypt_context_for
Gerrit AI review for Lustre PS5 · 2026-09-10 19:30
(defect) This `#else` arm also covers the `--disable-crypto` build (no HAVE_LUSTRE_CRYPTO, no CONFIG_LL_ENCRYPTION), and llcrypt_context_for_new_inode() has no declaration there -- it is declared only at line 67 for the native branch, and in include/lustre_compat/linux/llcrypt.h only inside `#ifdef CONFIG_LL_ENCRYPTION`. dir.c and namei.c call it unguarded, so the build stops on an implicit declaration.

llcrypt_prepare_new_inode() has the matching problem on the link side: it is declared here, but keysetup.c only defines it under `#if !defined(HAVE_FSCRYPT_SET_CONTEXT) || defined(CONFIG_LL_ENCRYPTION)`. On a kernel where HAVE_FSCRYPT_SET_CONTEXT is set (the autoconf test at config/lustre-core.m4:787 runs regardless of --enable-crypto), neither condition holds and nothing defines it. Should the no-crypto section of llcrypt.h grow stubs for both?
reply PS5 2026-09-10 19:30 Gerrit AI review for Lustre dir.c:514 — (style) Not a bug, but this `len` shadows the `size_t len` parameter that is handed to md_create() further down, which makes the block harde
Gerrit AI review for Lustre PS5 · 2026-09-10 19:30
(style) Not a bug, but this `len` shadows the `size_t len` parameter that is handed to md_create() further down, which makes the block harder to follow. If the patch is refreshed, something like `ctxsize` would read better.
reply PS2 2026-07-28 11:35 Gerrit AI review for Lustre namei.c:1668 — Since `encrypt` is forced to true a few lines up whenever IS_ENCRYPTED(dir) and open_flags is non-zero, the value passed in by ll_lookup_it_
Gerrit AI review for Lustre PS2 · 2026-07-28 11:35
Since `encrypt` is forced to true a few lines up whenever IS_ENCRYPTED(dir) and open_flags is non-zero, the value passed in by ll_lookup_it_finish() is now only meaningful for the open_flags == 0 case. Was the parameter meant to stay?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre namei.c:685 — (defect) This runs on every lookup, not just creates - ll_lookup_it_finish() is reached from plain ll_lookup_nd() too.
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) This runs on every lookup, not just creates - ll_lookup_it_finish() is reached from plain ll_lookup_nd() too.

Two consequences for an encrypted parent:

- llcrypt_prepare_new_inode() returns -ENOKEY when the master key isn't loaded, so `ls` / `stat` of anything inside an encrypted directory without the key now fails instead of showing no-key names.
- with the key loaded it ends in llcrypt_get_encryption_info(inode), i.e. a getxattr RPC for the child's context, issued *before* the server-supplied context is stored. That is exactly what the comment three lines below says this code is arranged to avoid ("save an extra getxattr and avoid deadlock").

Was this meant to be gated on the create disposition?
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre namei.c:1197 — (defect) GOTO(free_fake_inode, ...) lands on a label that is still inside this `if` block, and nothing after the label rechecks the error -
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) GOTO(free_fake_inode, ...) lands on a label that is still inside this `if` block, and nothing after the label rechecks the error - control just falls through to the security-context setup, ll_intent_lock() and ll_lookup_it_finish(), and `retval` is overwritten by the success assignment at the end.

So a failure from llcrypt_prepare_new_inode() or llcrypt_context_for_new_inode() is silently discarded, and the OBD_ALLOC failure at the -ENOMEM goto continues with op_file_encctx == NULL, creating the file in the encrypted directory with no encryption context at all.

ll_dir_setdirstripe() and ll_new_node_prepare() both put an `if (err) GOTO(out..., err)` after the label; that seems to be missing here.
reply PS3 2026-08-11 05:23 Gerrit AI review for Lustre namei.c:1210 — (defect) The volatile branch above takes a reference via volatile_ref_file() and the old code released it with fput() once the context had b
Gerrit AI review for Lustre PS3 · 2026-08-11 05:23
(defect) The volatile branch above takes a reference via volatile_ref_file() and the old code released it with fput() once the context had been fetched. Now the only fput() left is on the !ref_inode error path, so the reference leaks on every volatile-file create in an encrypted directory.

The fake-inode branch also skips llcrypt_put_encryption_info(ref_inode) before destroy_inode(), so the llcrypt_info that llcrypt_prepare_new_inode() attached leaks too - dir.c:539 and namei.c:1843 both call it.
reply PS5 2026-09-10 19:30 Gerrit AI review for Lustre namei.c:705 — (defect) Swapping ll_xattr_cache_insert() for llcrypt_set_context() ties caching the server-supplied context to the *parent's* policy, which
Gerrit AI review for Lustre PS5 · 2026-09-10 19:30
(defect) Swapping ll_xattr_cache_insert() for llcrypt_set_context() ties caching the server-supplied context to the *parent's* policy, which it did not depend on before.

For a directory that has its own policy but sits under an unencrypted parent, mdt_pack_encctx_in_reply() still sets OBD_MD_ENCCTX because the child carries LUSTRE_ENCRYPT_FL. Here `parent` is not encrypted, so llcrypt_prepare_new_inode() above returns 0 and leaves `encrypt` false, and then:

    llcrypt_set_context() -> llcrypt_inherit_context(parent, ...)
      -> llcrypt_get_encryption_info(parent) -> get_context() -> -ENODATA

(native path: fscrypt_set_context() hits WARN_ON_ONCE(!ci) and returns -ENOKEY).

The CWARN reads as non-fatal, but `rc` is no longer cleared on the way out -- the old `GOTO(out, rc = 0)` before the `out:` label is gone and `if (encrypt)` does not run to overwrite it, so ll_lookup_it_finish() returns the error and ll_lookup_it() turns it into ERR_PTR(). Does that make `ls`/`stat` of such a directory fail?
owner James Simmons · uploader James Simmons · PS5 uploaded 55d ago · NEW · open in Gerrit ↗
commit message
LU-20108 sec: support fscrypt natively for Linux 5.15

Currently Lustre only supports up to 5.8 kernels. This work
handles the replacement of fscrypt_inherit_context() with
fscrypt_prepare_new_inode() and fscrypt_set_context(). So the
encrypt context is done in a two step process.

Test-Parameters: trivial testlist=sanity-sec
Change-Id: Ie8defa6e71fecddfd773e01f93d7ae3cb8d6e18e
Signed-off-by: James Simmons <jsimmons@infradead.org>
45882 master J ✗1B ✓T ✗5R -1/2−
LU-8130 ldlm: convert ldlm_resource hash to rhashtable
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure upstream 19 unresolved L +441 −347
36d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — sanity-pcc@ldiskfs+DNE:test_22
enforced failed: review-dne-part-1, review-dne-part-5, review-dne-selinux-ssk-part-2, review-dne-zfs-part-3
18 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-pcc@ldiskfs+DNE:test_22seen in 13 other reviews
failed enforced testplatformdetail
review-dne-part-1 crashed RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 crashed RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-3 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
build #129749 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Shaun Tancheff, Alexey Lyashkov, Neil Brown, Vitaly Fertman, Timothy Day, Sergey Cheremencev, Andreas Dilger, Oleg Drokin, Patrick Farrell
patchsets:
+80 earlier PS1 12-17 PS2 12-17 PS3 12-18 PS4 12-21 PS5 12-08 PS6 12-12 Neil Brown PS7 10-15 PS8 10-18 PS9 10-19 PS10 10-28 PS11 12-13 PS12 02-08 PS13 02-08 PS14 02-08 PS15 02-10 PS16 02-15 PS17 02-22 PS18 02-23 PS19 03-23 PS20 03-29 PS21 03-30 PS22 03-31 PS23 03-31 PS24 04-01 PS25 04-02 PS26 04-02 PS27 04-02 PS28 04-02 PS29 04-02 PS30 04-08 PS31 04-12 PS32 04-17 PS33 04-23 PS34 06-04 PS35 06-05 PS36 06-24 PS37 06-30 PS38 06-30 PS39 09-07 Shaun Tancheff PS40 09-08 Shaun Tancheff PS41 09-08 Shaun Tancheff PS42 09-08 PS43 10-15 Shaun Tancheff PS44 11-25 Shaun Tancheff PS45 12-21 Shaun Tancheff PS46 04-23 Shaun Tancheff PS47 05-02 PS48 05-03 PS49 07-25 PS50 12-12 PS51 12-15 PS52 12-19 PS53 01-26 PS54 02-05 PS55 02-09 PS56 02-13 PS57 02-14 PS58 02-14 PS59 02-19 PS60 03-06 PS61 04-13 PS62 04-16 PS63 04-30 PS64 05-11 Shaun Tancheff PS65 05-12 Shaun Tancheff PS66 05-13 Shaun Tancheff PS67 05-26 Shaun Tancheff PS68 05-28 Shaun Tancheff PS69 05-28 Janitor Bot PS70 05-28 Shaun Tancheff PS71 05-28 Shaun Tancheff PS72 05-28 PS73 05-29 Shaun Tancheff PS74 05-29 Shaun Tancheff PS75 05-29 Shaun Tancheff PS76 06-04 Shaun Tancheff PS77 06-06 Shaun Tancheff PS78 06-19 Shaun Tancheff PS79 06-20 PS80 08-05
PS81 08-07 PS82 08-09 PS83 08-12 PS84 08-14 PS85 08-19
your previous vote: -1 on PS71 (2026-05-28 16:40) — now at PS85
threads: 18 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS83 2026-08-13 04:17 Gerrit AI review for Lustre COMMIT_MSG:41 — cl2osc() is container_of_safe() on oo_cl, which sits at offset 0, so IS_ERR_OR_NULL(cl2osc(obj)) is the same test as IS_ERR_OR_NULL(obj). It
Gerrit AI review for Lustre PS83 · 2026-08-13 04:17
cl2osc() is container_of_safe() on oo_cl, which sits at offset 0, so IS_ERR_OR_NULL(cl2osc(obj)) is the same test as IS_ERR_OR_NULL(obj). It checks the cl_object pointer that was passed in, not whether the osc_object still exists; an object that was freed while still referenced is an ordinary pointer, not NULL or an ERR_PTR.

Could the message name the pointer that actually becomes NULL or an error, and where it is set that way?
reply PS84 2026-08-14 15:22 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldlm/ldlm_resource.c:
Misc Code Checks Robot (Gatekeeper helper) PS84 · 2026-08-14 15:22
ldlm/ldlm_resource.c:
 warn: ldlm_resource_get():inconsistent indenting
reply PS84 2026-08-15 08:31 Gerrit AI review for Lustre COMMIT_MSG:27 — This paragraph explains the bucket-array sizing change, but not that the bucket selection function changed shape as well. ldlm_res_hop_hash(
Gerrit AI review for Lustre PS84 · 2026-08-15 08:31
This paragraph explains the bucket-array sizing change, but not that the bucket selection function changed shape as well. ldlm_res_hop_hash() summed all four words of the res_id; ldlm_res_hop_fid_hash() hashes only the FID in name[0] and name[1]. Worth a sentence, since it changes which resources share an ldlm_ns_bucket.

The new LDLM_FL_KUNIT_TESTING flag in lustre_dlm_flags.h isn't mentioned anywhere in the body either - is that meant to be part of this patch, or a separate cleanup of the bare BIT(63) uses?
reply PS85 2026-08-19 18:22 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldlm/ldlm_resource.c:
Misc Code Checks Robot (Gatekeeper helper) PS85 · 2026-08-19 18:22
ldlm/ldlm_resource.c:
 warn: ldlm_resource_get():inconsistent indenting
reply PS85 2026-08-20 10:47 Gerrit AI review for Lustre COMMIT_MSG:42 — (suggestion) No Test-Parameters: line for a change of this reach - it rewrites the resource lookup path for MDC/MDT/OSC/OST/MGC/MGT namespac
Gerrit AI review for Lustre PS85 · 2026-08-20 10:47
(suggestion) No Test-Parameters: line for a change of this reach - it rewrites the resource lookup path for MDC/MDT/OSC/OST/MGC/MGT namespaces and touches recovery, eviction and quota. Something like

    Test-Parameters: testlist=recovery-small,replay-single,replay-dual,conf-sanity,sanity-quota

would get the paths this rewrites covered by the test run.
reply PS83 2026-08-13 04:17 Gerrit AI review for Lustre lustre_dlm.h:1204 — lr_hash and lr_rcu share storage, so call_rcu(&res->lr_rcu, ...) writes over lr_hash.next. That was safe with cfs_hash because every chain w
Gerrit AI review for Lustre PS83 · 2026-08-13 04:17
lr_hash and lr_rcu share storage, so call_rcu(&res->lr_rcu, ...) writes over lr_hash.next. That was safe with cfs_hash because every chain walk held the bucket lock; rhashtable readers walk the chain under rcu_read_lock() alone.

ldlm_resource_putref() -> __ldlm_resource_putref_final() does rhashtable_remove_fast(), then ldlm_resource_free(res, true) -> call_rcu(), and call_rcu() sets head->next = NULL right away. RCU removal requires the removed node's next pointer to stay intact for a grace period, because a reader can already be sitting on that node when it is unlinked.

A concurrent ldlm_resource_get() walking that bucket then loads NULL as the next pointer. rht_is_a_nulls() only tests bit 0, so NULL is not recognised as end-of-chain: the loop body runs with pos == NULL, rht_obj() subtracts head_offset, and rs_cmp() dereferences the result.

struct lu_object_header keeps loh_hash and loh_rcu as separate fields, with a comment about exactly this requirement. Should lr_rcu be split out of the union the same way?
reply PS84 2026-08-15 08:31 Gerrit AI review for Lustre lustre_dlm_flags.h:387 — This isn't a bug, but BIT() is unsigned long while l_flags is __u64, so BIT(63) is out of range on a 32-bit build. Every other flag in this
Gerrit AI review for Lustre PS84 · 2026-08-15 08:31
This isn't a bug, but BIT() is unsigned long while l_flags is __u64, so BIT(63) is out of range on a 32-bit build. Every other flag in this file spells the value out as 0x...ULL with a /* bit N */ comment and provides ldlm_is_/ldlm_set_ helpers - consider matching that:

    #define LDLM_FL_KUNIT_TESTING 0x8000000000000000ULL /* bit 63 */
    #define ldlm_is_kunit_testing(_l) LDLM_TEST_FLAG((_l), 1ULL << 63)
    #define ldlm_set_kunit_testing(_l) LDLM_SET_FLAG((_l), 1ULL << 63)

which would also let the two ldlm_lock.c users read like the surrounding flag tests.
reply PS84 2026-08-15 08:31 Gerrit AI review for Lustre l_lock.c:34 — This gives lock_res_and_lock() a new failure return, but only 8 of the 111 call sites look at the result; the rest go straight on to unlock_
Gerrit AI review for Lustre PS84 · 2026-08-15 08:31
This gives lock_res_and_lock() a new failure return, but only 8 of the 111 call sites look at the result; the rest go straight on to unlock_res_and_lock(), which is unlock_res(lock->l_resource) on the very pointer that produced the error.

As far as I can tell the error can't fire today: l_resource is only cleared by the rcu_assign_pointer(lock->l_resource, NULL) in ldlm_lock_put(), which runs after h_ref has already reached zero, so no caller that holds a lock reference can observe it, and nothing assigns an ERR_PTR to l_resource at all.

So either it is unreachable, and the error plumbing added through ldlm_lock_enqueue(), ldlm_callback_handler(), osc_ldlm_glimpse_ast() and osc_extent_release() could go, or it is reachable and the other 103 callers need converting in the same patch. Which is it?
reply PS85 2026-08-20 10:47 Gerrit AI review for Lustre ldlm_lock.c:196 — (minor) This critical section only spans the two pointer loads - res is dereferenced at the lr_type test below and handed to ldlm_resource_p
Gerrit AI review for Lustre PS85 · 2026-08-20 10:47
(minor) This critical section only spans the two pointer loads - res is dereferenced at the lr_type test below and handed to ldlm_resource_putref(), and ns is used by lprocfs_counter_decr(), all after rcu_read_unlock(). If l_resource really needed RCU protection here the section would have to reach as far as the putref; as written it protects nothing that the lock's own resource reference doesn't already cover.

The LASSERT(lock->l_resource != LP_POISON) a few lines up reads the same field bare, which suggests the plain read was fine. Could this just go back to a direct load?
reply PS83 2026-08-13 04:17 Gerrit AI review for Lustre ldlm_reclaim.c:176 — ns_reclaim_start is now only ever assigned 0 in ldlm_namespace_new(); the ldlm_res_to_ns(res)->ns_reclaim_start++ that used to advance it we
Gerrit AI review for Lustre PS83 · 2026-08-13 04:17
ns_reclaim_start is now only ever assigned 0 in ldlm_namespace_new(); the ldlm_res_to_ns(res)->ns_reclaim_start++ that used to advance it went away with the per-bucket bookkeeping in ldlm_reclaim_lock_cb(). rcd_start is therefore always 0, the rcd_skip/rcd_cursor fast-forward below can never trigger, and every reclaim pass restarts on the same resources. nsb_reclaim_start is incremented but no longer read either.

That drops the round-robin scan the ldlm_reclaim_res() comment still describes, and it is not mentioned in the commit message. Is the intent to keep the round-robin, or to remove it and the now-dead rcd_skip/rcd_cursor/rcd_start fields with it?

Also worth noting the units no longer match: rcd_cursor counts resources while tbl->size is a bucket count.
reply PS80 2026-08-07 07:20 Gerrit AI review for Lustre ldlm_resource.c:1166 — (minor) This comment doesn't match the new scheme. With the rhashtable the table holds no reference of its own: an entry is removed exactly
Gerrit AI review for Lustre PS80 · 2026-08-07 07:20
(minor) This comment doesn't match the new scheme. With the rhashtable the table holds no reference of its own: an entry is removed exactly when `lr_refcount` hits zero in `__ldlm_resource_putref_final()`, and `rs_cmp()` hides zero-refcount entries from lookups. During the walk the only extra reference is the `refcount_inc_not_zero()` in `ldlm_resource_for_each()`.

So the count printed below is one lower than the number of stray references, and a resource holding exactly one leaked reference no longer produces the message at all.
reply PS82 2026-08-10 03:20 Gerrit AI review for Lustre ldlm_resource.c:1174 — (style) This is a new exported API and it has no kerneldoc, unlike `ldlm_resource_get()` right below. Worth documenting the callback contrac
Gerrit AI review for Lustre PS82 · 2026-08-10 03:20
(style) This is a new exported API and it has no kerneldoc, unlike `ldlm_resource_get()` right below. Worth documenting the callback contract, in particular that the callback owns no reference (it must not putref), that a non-zero return stops the walk, and that a callback can be invoked more than once for the same resource - `rhashtable_walk_start()` here is the void variant, so the `-EAGAIN` a resize produces is discarded and the walk restarts from slot 0. That last property is what forced the `l_pending_chain` check in `ldlm_chain_lock_for_replay()`, and every future callback author needs to know about it.
owner James Simmons · uploader James Simmons · PS85 uploaded 76d ago · NEW · open in Gerrit ↗
commit message
LU-8130 ldlm: convert ldlm_resource hash to rhashtable

Using an rhashtable allows lockless lookup at the cost
of rcu freeing of entries.

When we find an entry, we need to atomically check the
reference hasn't dropped to zero.

When adding an entry, we might find an existing entry which is in the
process of being removed - with a zero refcount.  In that case
we loop around and repeat the lookup.  To ensure this doesn't
spin, the 'cmp' function will fail any comparison with a resource
which has a zero refcount.

Now that we are using resizing hash tables, we don't need to preconfig
suitable sizes for each namespace.  We can just use the default and
let it grow as needed.  We keep the pre-configured sizes
for the bucket array.  Previously the size of the bucket array was the
difference between nsd_all_bits and nsd_bkt_bits.  As we don't need
nsd_all_bits any more, nsd_bkt_bits is changed to the number of bits
used to choose a bucket.

Walking an rhashtable requires that we manage refcounts ourself, so
a new function, ldlm_resource_for_each() is added to do that.
Note that with this patch we now update a per-table counter
on every insert/remove, which might cause more contention
between CPUs on a busy system.  Hopefully rhashtable will
be enhanced in the near future to support a per-CPU counter
for nelems.

Only use call_rcu() to free slab resources that have been removed
from the rhashtable, other cases can be free immediately.

This change exposes new race conditions in the osc layer so
we add code to check if osc_objects still exist.

Signed-off-by: NeilBrown <neil@brown.name>
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ie65f6c5f6e246ed6684ade05ddab8740ac8137dd
58592 master J !B ✓T ✗46R 0/2
LU-8130 obd: replace gen hash with Xarray
enforced failed: review-dne-ipv6, review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-arm, review-ldiskfs-ubuntu, review-zfs
upstream 10 unresolved M +30 −155
57d
enforced failed: review-dne-ipv6, review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-arm, review-ldiskfs-ubuntu, review-zfs
10 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-ipv6 crashed RHEL 9.7 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-ipv6 crashed RHEL 9.8 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 crashed RHEL 9.7 / x86_64 ran 20 tests. 8 tests failed: sanity-pfl, sanity-lnet, lnet-selftest, pjdfstest, sanity-sec, sanity-lfsck, ru session
review-dne-part-3 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-3 crashed RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 9.7 / x86_64 ran 15 tests. 7 tests failed: sanity-quota, sanity-hsm, sanity-flr, sanity-dom, replay-ost-single, mmp, insan session
review-dne-part-5 crashed RHEL 9.7 / x86_64 ran 8 tests. 2 tests failed: sanityn, recovery-small. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 9.8 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.8 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.7 / x86_64 ran 10 tests. 4 tests failed: sanity-ec, sanity-scrub, sanity-pcc, large-scale. %% THIS TEST SESSION CRASHED session
review-dne-part-8 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-8 crashed RHEL 10.1 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-8 crashed RHEL 9.8 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-1 crashed RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 crashed RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 9.8 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 9.8 / x86_64 ran 19 tests. 9 tests failed: sanity-pfl, sanity-lnet, lnet-selftest, pjdfstest, sanity-sec, sanity-lfsck, ru session
review-dne-zfs-part-3 crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 9.8 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 9.7 / x86_64 ran 13 tests. 7 tests failed: sanity-quota, sanity-hsm, sanity-flr, sanity-dom, replay-ost-single, mmp, insan session
review-dne-zfs-part-5 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 10.1 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 9.8 / x86_64 ran 4 tests. 2 tests failed: ost-pools, replay-single. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-7 crashed RHEL 9.8 / x86_64 ran 6 tests. 3 tests failed: sanity-ec, sanity-pcc, large-scale. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-7 crashed RHEL 9.7 / x86_64 ran 10 tests. 4 tests failed: sanity-ec, sanity-scrub, sanity-pcc, large-scale. %% THIS TEST SESSION CRASHED session
review-ldiskfs crashed RHEL 8.10 / x86_64 ran 7 tests. 3 tests failed: sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, SLES 15.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, RHEL 9.8 / x86_64 ran 7 tests. 3 tests failed: sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, RHEL 10.1 / x86_64 ran 9 tests. 3 tests failed: sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm crashed RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 8 tests. 4 tests failed: sanity-sec, sanity-lnet, sanity, lnet-selftest. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-ubuntu crashed RHEL 8.10 / x86_64, / ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-zfs crashed RHEL 8.10 / x86_64 ran 14 tests. 6 tests failed: sanity-lsnapshot, insanity, replay-ost-single, replay-single, sanity-flr, sanit session
build #131254 SUCCESS · tests all Maloo sessions
no vote yet: Mikhail Pershin
patchsets: PS1 03-30 PS2 03-30 PS3 04-10 PS4 01-10 PS5 09-07
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre COMMIT_MSG:11 — The body explains the data-structure swap but not the reference-counting changes that come with it. class_export_put() is added in class_unl
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
The body explains the data-structure swap but not the reference-counting changes that come with it. class_export_put() is added in class_unlink_export() and tgt_client_free(), and removed in tgt_reply_data_init() and update_recovery_update_ses(). Those are behavior changes, not a mechanical hash->xarray conversion, and it would help to say what the intended ownership rule for obd_gen_ids is.

The old gen_kepcmp() also filtered on !exp->exp_failed, so lookups could never return a failed export; xa_load() has no such filter. That change deserves a line in the message too.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre COMMIT_MSG:13 — (style) Signed-off-by: normally comes before Change-Id:; the reversed order usually means the Lustre commit hook is not installed locally.
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(style) Signed-off-by: normally comes before Change-Id:; the reversed order usually means the Lustre commit hook is not installed locally.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre obd.h:722 — (style) The comment above still calls this a hash body. While renaming the field, `obd_gen_ids` reads as if it stores ids rather than export
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(style) The comment above still calls this a hash body. While renaming the field, `obd_gen_ids` reads as if it stores ids rather than exports keyed by generation - something like obd_gen_exports would say what it holds.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre genops.c:1152 — (defect) Two problems with this put.
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) Two problems with this put.

First, ted_lcd is non-NULL for every target export (tgt_client_alloc() allocates it for all non-self exports), while an obd_gen_ids entry only exists for exports inserted by tgt_clients_data_init() when tgt_is_multimodrpcs_record() is true. So a regular client that connected after mount was never in the xarray, yet still gets a put here. The old code was guarded by hlist_unhashed(&exp->exp_gen_hash), which was exactly the "is it in the table" test; xa_erase()'s return value can serve the same purpose.

Second, nothing takes a matching reference on insert any more, so even for exports that are in the xarray this put has no counterpart.

Worth noting too: this runs with obd_dev_lock held, and if it ever is the final reference, class_export_put() -> obd_zombie_export_add() takes obd_dev_lock again.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre obd_config.c:963 — (minor) xa_destroy() on the next line already erases every entry and frees the nodes, so this loop looks like a no-op. If the intent was to
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(minor) xa_destroy() on the next line already erases every entry and frees the nodes, so this loop looks like a no-op. If the intent was to release the export references held by the xarray, the loop needs a class_export_put() on each entry (and a reference has to be taken on insert first).

Reusing `flag`, the char * used above for parsing the lcfg flag string, as the xa_for_each() entry variable is also confusing to read.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:467 — (defect) This drops a reference the xarray never took, and it does so from a context where the refcount is already zero.
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) This drops a reference the xarray never took, and it does so from a context where the refcount is already zero.

The main caller chain is class_export_put() -> obd_zombie_exp_cull() -> class_export_destroy() -> obd_destroy_export() -> mdt_destroy_export()/ofd_destroy_export() -> tgt_client_free(). class_export_destroy() opens with

    LASSERT(refcount_read(&exp->exp_handle.h_ref) == 0);

so the class_export_put() here hits its own LASSERT(refcount_read(...) > 0) and LBUGs. That is on the teardown path of every regular server export, not just the ones recovered from last_rcvd.

mdt_init_export()'s err_free: path also calls tgt_client_free() directly, where the export is still live, so there it silently loses a reference instead.

The old code only removed the export when it was actually hashed (hlist_unhashed()); the xarray entry only exists for exports added by tgt_clients_data_init() with a non-zero lcd_generation, so an unconditional put cannot be right either way. xa_erase() returning the old entry could be used to tell the two cases apart.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:1773 — (defect) The old cfs_hash_add_unique() took a reference on the export through gen_hash_ops.hs_get()->class_export_get(). ll_xa_insert() does
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) The old cfs_hash_add_unique() took a reference on the export through gen_hash_ops.hs_get()->class_export_get(). ll_xa_insert() does not, so after the class_export_put() two lines below the xarray holds a bare pointer with no reference at all.

Every surviving class_export_put() that was paired with that reference is now unbalanced - see class_unlink_export(), tgt_client_free(), the error path below at tgt_set_reply_slot(), and distribute_txn_replay_handle(). Should this be class_export_get(exp) before the insert?
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:1775 — (minor) GFP_KERNEL here; Lustre server allocations in this path normally use GFP_NOFS (OBD_ALLOC_PTR() a few lines up does). This runs durin
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(minor) GFP_KERNEL here; Lustre server allocations in this path normally use GFP_NOFS (OBD_ALLOC_PTR() a few lines up does). This runs during target mount while reading last_rcvd, so reclaim recursing back into the same device seems worth avoiding.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre tgt_lastrcvd.c:2252 — (defect) The success-path class_export_put() below was removed with the switch to xa_load(), but this one on the tgt_set_reply_slot() error
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) The success-path class_export_put() below was removed with the switch to xa_load(), but this one on the tgt_set_reply_slot() error path was left behind. xa_load() returns no reference, so this drops one that belongs to someone else.
reply PS5 2026-09-07 22:26 Gerrit AI review for Lustre update_recovery.c:1091 — (defect) cfs_hash_lookup() returned a referenced export, and that reference was handed to tsi->tsi_exp and released later by distribute_txn_
Gerrit AI review for Lustre PS5 · 2026-09-07 22:26
(defect) cfs_hash_lookup() returned a referenced export, and that reference was handed to tsi->tsi_exp and released later by distribute_txn_replay_handle():

    if (tgt_ses_info(env)->tsi_exp != NULL) {
            class_export_put(tgt_ses_info(env)->tsi_exp);

xa_load() returns an unreferenced pointer, so that put now drops a reference this path never acquired, and tsi_exp can be freed under the replay while it is still in use.

Separately, gen_kepcmp() used to reject exports with exp_failed set, so an evicted export could never end up in tsi_exp. xa_load() has no such filter - is update replay expected to cope with a failed export here?
owner James Simmons · uploader James Simmons · PS5 uploaded 57d ago · NEW · open in Gerrit ↗
commit message
LU-8130 obd: replace gen hash with Xarray

Using a hash table for sequential values doesn't make sense in
this case. Instead track the recovery generation values for
exports using a Xarray.

Change-Id: Iccff86b7473c61a25caf336b30342ce2dc12e148
Signed-off-by: James Simmons <jsimmons@infradead.org>
65273 master J –B ✓T ✗1R -1/2−
LU-14291 utils: don't build gss server utilies for clients
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 5 unresolved S +11 −6
58d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: custom-1001
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #127068 SUCCESS · tests all Maloo sessions
patchsets:
+2 earlier PS1 04-13 PS2 04-14
PS3 04-14 PS4 04-14 PS5 04-18 PS6 04-30 PS7 06-29
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre COMMIT_MSG:7 — (typo) "utilies" -> "utilities" in the subject, and "utilites" -> "utilities" on the body line below.
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(typo) "utilies" -> "utilities" in the subject, and "utilites" -> "utilities" on the body line below.
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) The body only covers the lsvcgssd/l_getauth split, but the diff also appends $(UTILS_CFLAGS) to AM_CFLAGS. Is that intended to ride
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(minor) The body only covers the lsvcgssd/l_getauth split, but the diff also appends $(UTILS_CFLAGS) to AM_CFLAGS. Is that intended to ride along here, or should it be a separate change? Either way it should be mentioned so the hunk isn't a surprise.
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre Makefile.am:4 — (minor) This hunk isn't part of the client/server split. If the intent is to pick up the distro build flags the way lustre/utils/Makefile.am
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(minor) This hunk isn't part of the client/server split. If the intent is to pick up the distro build flags the way lustre/utils/Makefile.am does, note that file also sets

    AM_LDFLAGS := $(UTILS_LDFLAGS)

and UTILS_LDFLAGS is exported alongside UTILS_CFLAGS in lustre.spec.in. Here the link flags are still unset, and each program overrides them with its own lsvcgssd_LDFLAGS/l_getauth_LDFLAGS/lgss_keyring_LDFLAGS/lgss_sk_LDFLAGS = $(KRBLDFLAGS), so an AM_LDFLAGS alone wouldn't take effect either - $(UTILS_LDFLAGS) would have to be added to each of those lines. Should the hardening flags be applied consistently, in a patch of their own?
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre Makefile.am:15 — (suggestion) While completing the client/server split: lustre/scripts/systemd/Makefile.am still installs lsvcgss.service unconditionally und
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
(suggestion) While completing the client/server split: lustre/scripts/systemd/Makefile.am still installs lsvcgss.service unconditionally under HAVE_SYSTEMD, and the spec adds it to lustre.files the same way, even though lsvcgss_sysd and the init script are already SERVER-only. So a client package keeps shipping a unit for a daemon it no longer builds. Worth wrapping in SERVER here too?
reply PS7 2026-07-27 23:22 Gerrit AI review for Lustre Makefile.am:15 — With these two now server-only, a client-only install has no l_getauth and no lsvcgssd, but test-framework.sh still resolves both on the loc
Gerrit AI review for Lustre PS7 · 2026-07-27 23:22
With these two now server-only, a client-only install has no l_getauth and no lsvcgssd, but test-framework.sh still resolves both on the local (client) node and has no /usr/sbin fallback:

    export L_GETAUTH=${L_GETAUTH:-"$LUSTRE/utils/gss/l_getauth"}
    [ ! -f "$L_GETAUTH" ] && export L_GETAUTH=$(which l_getauth 2> /dev/null)
    export LSVCGSSD=${LSVCGSSD:-"$LUSTRE/utils/gss/lsvcgssd"}
    [ ! -f "$LSVCGSSD" ] && export LSVCGSSD=$(which lsvcgssd 2> /dev/null)

When the test node runs a client build both expand to the empty string, and the values are then used on the server nodes:

    do_nodes $nodes "$LSVCGSSD -vvv -s -m -o -z $options" || return 1
    do_nodesv $node "$L_GETAUTH -d"
    do_nodesv $servers "$LCTL set_param sptlrpc.gss.rsi_upcall=$L_GETAUTH"

start_gss_daemons() then runs "-vvv -s -m -o -z" remotely and returns 1, and init_gss() does start_gss_daemons() || error_exit, so setup aborts for any SHARED_KEY/krb5 run on a mixed client/server install. Should this patch also give L_GETAUTH/LSVCGSSD a "/usr/sbin/..." fallback (the way LR_READER and LSOM_SYNC do a few lines above), or resolve them on a server facet instead?
owner James Simmons · uploader James Simmons · PS7 uploaded 127d ago · NEW · open in Gerrit ↗
commit message
LU-14291 utils: don't build gss server utilies for clients

Both lsvcgssd and l_getauth are server only utilites.

Test-Parameters: trivial env=SHARED_KEY=true testlist=sanity,sanity-sec
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Iba4830ea74cad3b6c615663bd7ebe135cf39515f
49732 master J ✓B ✓T ✗1R 0/2
LU-12661 tests: re-enable sanity 817
enforced failed: review-ldiskfs-dne-arm
8 unresolved XS +0 −4
82d
enforced failed: review-ldiskfs-dne-arm
8 unresolved thread(s) await your reply — last from Andreas Dilger
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #129258 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown
patchsets: PS1 01-23 PS2 05-13 PS3 08-13
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-05-13 17:36 Andreas Dilger COMMIT_MSG:13 — (style) presumably should have a `Fixes:` line?
Andreas Dilger PS2 · 2026-05-13 17:36
(style) presumably should have a `Fixes:` line?
reply PS2 2026-05-13 17:36 Andreas Dilger COMMIT_MSG:14 — (style) prefer `Change-Id:` after `Signed-off-by:`
Andreas Dilger PS2 · 2026-05-13 17:36
(style) prefer `Change-Id:` after `Signed-off-by:`
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:9 — Could the message name the fixes it is relying on, and the minimum kernel version they are in? As written "newer kernels and fixes landed fo
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
Could the message name the fixes it is relying on, and the minimum kernel version they are in? As written "newer kernels and fixes landed for better NFS support" is not verifiable, and LU-12661 is still Open with summary "sanity test_817: FAIL: failed to execute 'true' command".

The exclusion 3e2c28437404 removed here was widened from 4.14 to 4.12 specifically because SLES 4.12.14 hit it, and 4fed33473ca2 recorded that the failure happens "regardless of whether the nfs export is backed by a lustre mount or not" - i.e. it is nfsd holding the file open, not something llite can fix. That makes it worth spelling out which change is expected to have altered this.
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "sanity tets 817" -> "tests".
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
(typo) "sanity tets 817" -> "tests".
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:13 — (style) carried over from the previous revision, which was rebased without changes: a `Fixes:` line still seems appropriate here since this
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
(style) carried over from the previous revision, which was rebased without changes: a `Fixes:` line still seems appropriate here since this undoes the exclusion added by

    Fixes: 3e2c28437404 ("LU-12661 tests: skip sanity 817 for kernel 4.12+")
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre COMMIT_MSG:14 — (style) also carried over from the previous revision: `Change-Id:` is still before `Signed-off-by:`.
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
(style) also carried over from the previous revision: `Change-Id:` is still before `Signed-off-by:`.
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre sanity.sh:52 — Dropping the block entirely re-enables 817 on every kernel, not just new ones. All currently supported clients in lustre/ChangeLog are above
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
Dropping the block entirely re-enables 817 on every kernel, not just new ones. All currently supported clients in lustre/ChangeLog are above the 4.12 threshold - RHEL 8.10 (4.18.0-553), RHEL 9.7/9.8 (5.14.0), SLES15 SP5 (5.14.21), Ubuntu 22.04 (5.15) - so the test now runs on exactly the kernels the exclusion was added for, with nothing gating it on the "newer kernels" the commit message refers to.

If the fix really is version dependent, would a bounded guard be safer, e.g.

    if (( $LINUX_VERSION_CODE < $(version_code X.Y.0) )); then
            always_except LU-12661 817
    fi

with X.Y.0 being the first kernel where nfsd releases the file?
reply PS3 2026-08-14 04:46 Gerrit AI review for Lustre sanity.sh:36565 — With the exclusion gone this line runs again, and it execs immediately after the copy with no wait. exec() returns ETXTBSY while any writer
Gerrit AI review for Lustre PS3 · 2026-08-14 04:46
With the exclusion gone this line runs again, and it execs immediately after the copy with no wait. exec() returns ETXTBSY while any writer holds the inode, and nfsd drops its write reference asynchronously (filecache / NFSv4 open state), not at the point `cp` returns - which is what 4fed33473ca2 described as "nfsd is not releasing the file after write".

Even on a kernel where nfsd does eventually release it, checking once immediately after the copy looks racy. Could this either unmount $tmpdir first to force the client CLOSE, or retry, e.g.

    wait_update $HOSTNAME "$DIR/nfsexp/true && echo ok" "ok" 30 ||
            error "failed to execute 'true' command"
owner James Simmons · uploader James Simmons · PS3 uploaded 83d ago · NEW · open in Gerrit ↗
commit message
LU-12661 tests: re-enable sanity 817

With newer kernels and fixes landed for better NFS support lets
re-enable sanity tets 817.

Test-Parameters: trivial
Test-Parameters: testlist=sanity env=ONLY=817
Change-Id: I993165efdf5a7472676c5af20e079d6fbee5a098
Signed-off-by: James Simmons <jsimmons@infradead.org>
58003 master J !B ✓T ✗1R -1/2−
LU-18652 tests: no compression with zfs create / zpool setup
needs rebase — checkpatch: cannot be cherry-picked
needs rebase rocky8 S +9 −11
94d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: custom-1001
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #112064 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Brian Behlendorf
patchsets: PS1 02-07 PS2 02-07 PS3 02-24 PS4 03-20 PS5 03-28
owner James Simmons · uploader James Simmons · PS5 uploaded 585d ago · NEW · open in Gerrit ↗
commit message
LU-18652 tests: no compression with zfs create / zpool setup

Several of the conf-sanity test are disabled due to ZFS by default using
compression. Update all the zpool and zcreate calls to turn off
compression by default. With this change we can re-enable several test.

Test-Parameters: trivial fstype=zfs testlist=conf-sanity
Change-Id: I00751a6a3e7c925e8d89c8697fb8e8705d46c8bf
Signed-off-by: James Simmons <jsimmons@infradead.org>
65397 master J !B ✗T –R -1/2−
LU-0000 obdclass: rollback testing
needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 116d S +2 −17
116d
needs rebase — checkpatch: cannot be cherry-picked
build failure (#124346)
janitor run: 16 failing config(s), none unique to this patch — janitor results
build #124346 FAILURE
patchsets: PS1 04-17 PS2 04-18 PS3 04-19 PS4 04-20 PS5 04-24
owner James Simmons · uploader James Simmons · PS5 uploaded 193d ago · NEW · open in Gerrit ↗
commit message
LU-0000 obdclass: rollback testing

find breakage

Test-Parameters: trivial
Change-Id: I93c1ca71984efd3b66e56d549141c78883abebc6
Signed-off-by: James Simmons <jsimmons@infradead.org>
55821 master J !B ✓T ✗8R 0/2
LU-12607 osd-zfs: use proper locking for dnodes
enforced failed: review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-zfs
stalled 123d S +13 −15
123d
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-1 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-2 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-3 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-4 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-5 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-6 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-zfs-part-7 failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-zfs failed 2× RHEL 8.9/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
20 optional test failure(s) — informational
build #106283 SUCCESS · tests all Maloo sessions
no vote yet: Brian Behlendorf, Timothy Day
owner James Simmons · uploader James Simmons · PS1 uploaded 836d ago · NEW · open in Gerrit ↗
commit message
LU-12607 osd-zfs: use proper locking for dnodes

Currently lustre uses the DB_DNODE_[ENTER|EXIT] macros which is
incorrect as pointed out by the ZFS developers. OpenZFS ticket

https://github.com/openzfs/zfs/pull/9027

exported the proper dnode management functions so move Lustre
to these new functions.

Change-Id: If1165c4db149a1eb46bf00df9b48589d90acb7c6
Signed-off-by: James Simmons <jsimmons@infradead.org>
63209 master J –B ✓T ✓R -1/2−
LU-13903 build: allow building for a kernel with native client
needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 134d 1 unresolved S +21 −11
134d
needs rebase — checkpatch: cannot be cherry-picked
Timothy Day voted -1
1 unresolved thread(s) await your reply — last from Shaun Tancheff
no vote yet from Shaun Tancheff
build #120080 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-01-02 18:00 · Timothy Day -1 2026-01-29 15:49
no vote yet: Shaun Tancheff
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-03-07 11:23 Shaun Tancheff patchset comment — Maybe you are asking about user space utilities? Those do now know anything about the kernel headers, they should build just like any other
Timothy Day PS1 · 2026-01-29 15:49
```
checking for /tmp/ktest-out/kernel_build.x86_64/.config... noconfigure: error: 

Kernel config could not be found.
```
The userland build shouldn't depend on the kernel config. I think we'd need to skip this check somehow.
Timothy Day PS1 · 2026-01-30 01:11
I think I know what's wrong: --disable-modules isn't propagated when we try to make the debian packages. There's a couple other tweaks we need as well. I can push an updated patch.
Timothy Day PS1 · 2026-01-31 17:49
The kernel really doesn't like it if you attempt to build userspace components against the Linux source tree. They recommend (https://kernelnewbies.org/KernelHeaders) either building against the installed headers (i.e. what you already have implemented) or building against a version of the headers copied from Linux. This would be equivalent to building against the openSFS headers. I think this should be supported somehow. Perhaps --disable-modules could have an argument to decided whether to use the installed headers or openSFS headers?
James Simmons PS1 · 2026-02-02 16:28
The question is which UAPI headers to test against? Some of the autoconf test for the utilities look at the UAPI headers to decided what is supported.
James Simmons PS1 · 2026-02-02 16:39
Oops. I added Shaun so we can verify. Do the autoconf test use the kernel UAPI pointed to by --with-kernel. I do agree we don't need to look at the .config for the kernel. The only complex case is the dummy fscrypt kernel option that changed.
Shaun Tancheff PS1 · 2026-03-07 11:21
> Do the autoconf test use the kernel UAPI pointed to by --with-kernel

Yes.
The test builds work the same as any kernel module build. You can see generated examples with:

$ export PARALLEL_BUILD_OPT=debug
$ ./configure ...
Shaun Tancheff PS1 · 2026-03-07 11:23
Maybe you are asking about user space utilities? Those do now know anything about the kernel headers, they should build just like any other user space utility looking under /usr/include and /usr/lib
owner James Simmons · uploader James Simmons · PS1 uploaded 307d ago · NEW · open in Gerrit ↗
commit message
LU-13903 build: allow building for a kernel with native client

Currently we can build just the Lustre utilites on a system with
a installed kernel with native Lustre client support. This doesn't
work for building against a kernel tree with the native lustre
client i.e

./configure --disable-modules --disable-server --with-linux=~/lustre-upstream

This patch adds takes the kernel header location and adds it to
the CPPFLAGS. The tools then can be built against that set of
headers.

Test-Parameters: trivial
Change-Id: I3348f90474d0dd87da5fc8e779b71c9d6a2953df
Signed-off-by: James Simmons <jsimmons@infradead.org>
24554 master J –B ✓T ✓R +1/2−
LU-8980 libcfs: add tracepoint support for libcfs
needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 141d XL +3118 −254
141d
needs rebase — checkpatch: cannot be cherry-picked
John Hammond voted -1
reviews: Dmitry Eremin +1 2017-09-01 15:14 · Gu Zheng +1 2017-08-10 01:15 · Olaf Weber +1 2017-08-24 18:19 · John Hammond -1 2017-11-29 22:47
no vote yet: Jinshan Xiong, Timothy Day, Jesse Hanley, Andreas Dilger, Brian Behlendorf, Matt Ezell, Lustre Buildbot
owner James Simmons · uploader James Simmons · PS18 uploaded 3375d ago · NEW · open in Gerrit ↗
commit message
LU-8980 libcfs: add tracepoint support for libcfs

Add initial trace events to the libcfs module. With
this we can now collect data using the perf utility.
Each traditonal lustre debug macro is turned into
an unique tracepoint event. Any debugging macros
moved over to trace point will now handling printing
message to the console.

Change-Id: I0fc6efc24fd9495fae2829990f74b1a72491baf8
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
64565 master J ✗1B ✓T ✗2R -1/2−
LU-14291 gss: seperate out the client from server code.
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 1 unique failure stalled 159d M +86 −44
159d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 1 test failure unique to this patch — sanity-flr@ldiskfs+DNE:test_70a
enforced failed: review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-flr@ldiskfs+DNE:test_70aseen in 92 other reviews
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 failed 4× RHEL 8.10 / x86_64 ran 8 tests. 3 tests failed: lustre-initialization, sanity-sec, recovery-small. session
5 optional test failure(s) — informational
build #124507 SUCCESS · tests all Maloo sessions
no vote yet: Sebastien Buisson
patchsets: PS1 03-13 PS2 03-13 Janitor Bot PS3 03-31 Janitor Bot PS4 04-13 PS5 04-30
owner James Simmons · uploader James Simmons · PS5 uploaded 187d ago · NEW · open in Gerrit ↗
commit message
LU-14291 gss: seperate out the client from server code.

The gss code is all lumped together. Lets separate the code
out.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: If249e56e27054aa8accd4754e9bddec010ff0e7a
33259 master J !B ✓T ✗1R 0/2
LU-9868 llite: remove directory-specific code from ll_find_alias()
enforced failed: review-dne-part-5
upstream stalled 207d S +9 −18
207d
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-5 RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
build #123698 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown, Andreas Dilger
patchsets:
+2 earlier PS2 04-01 PS3 06-20
PS4 02-27 PS5 02-27 PS6 10-14 PS7 04-09 PS8 04-10
owner James Simmons · uploader James Simmons · PS8 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: remove directory-specific code from ll_find_alias()

Now that ll_find_alias() is never called for directories,
we can remove code that only applies to directories.

Linux-commit: ac63774689265d50bc1d83ac9b7889ac7e645b5a

Signed-off-by: Mr. NeilBrown <neil@brown.name>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I54f726eac648374cd631319095cfdab8b1f5dfff
44846 master J ✗4B ✓T ✗6R -1/2−
LU-11501 llite: use d_real for directories in fid cache.
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 4 unique failures stalled 208d 1 unresolved M +105 −28
208d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 4 test failures unique to this patch — runtests-ssk@ldiskfs+SharedKey:test_1, runtests-ssk@ldiskfs+SharedKey:test_cleanup, runtests@zfs:test_1 +1 more
enforced failed: review-dne-part-4, review-dne-selinux-ssk-part-1, review-dne-zfs-part-4, review-ldiskfs, review-ldiskfs-arm
Neil Brown voted -1
1 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests-ssk@ldiskfs+SharedKey:test_1seen in 3 other reviews
runtests-ssk@ldiskfs+SharedKey:test_cleanupNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
runtests@zfs:test_1seen in 3 other reviews
runtests@zfs:test_cleanupNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-4 RHEL 8.8/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-selinux-ssk-part-1 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 8.8/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-ldiskfs crashed RHEL 8.8/x86_64, RHEL 9.2/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.8/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm crashed RHEL 8.7/aarch64, RHEL 8.8/x86_64 ran 8 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
4 optional test failure(s) — informational
build #96374 SUCCESS · tests all Maloo sessions
reviews: Neil Brown -1 2023-08-07 03:48 · Andreas Dilger +1 2023-07-20 16:10
no vote yet: Qian Yingjin
patchsets:
+13 earlier PS1 09-05 PS2 09-06 PS3 09-07 PS4 09-07 PS5 09-07 PS6 09-07 PS7 09-08 PS8 09-10 PS9 09-22 PS10 09-27 PS11 10-07 PS12 10-17 PS13 10-19
PS14 11-14 PS15 04-01 PS16 04-21 PS17 06-20 PS18 07-20
threads: 0 need your reply · 1 waiting on others · 0 own notes · 0 bot
owner James Simmons · uploader James Simmons · PS18 uploaded 1203d ago · NEW · open in Gerrit ↗
commit message
LU-11501 llite: use d_real for directories in fid cache.

Lustre has a special directory called .lustre which contains a
collection of directories whose name matches a fid. This is
used in a similar way as open by fhandle but we use this
functionality since it allows opens by normal users. For
opening a file by proxy with the .lustre/fid/"FID" directory
we use a dcache alias. While this is valid Lustre does the
same thing for open a directory with this .lustre FID which
means we have multiple hard links to directories which is
forbidden. More modern kernels report this as an error and
we risk a future kernel pruning such dentry entries. The
solution is to look at how overlayfs does this since .lustre
is sort of a pseudo file system. We can use d_real() to lookup
the real dentry that maps to the special .lustre/fid/"FID".

Change-Id: I02d8a54465d685430d9290c24faf1ef6bfd6a876
Signed-off-by: James Simmons <jsimmons@infradead.org>
33261 master J ✗2B ✓T ✗9R 0/2
LU-9868 llite: refine ll_find_alias based on d_exact_alias
janitor: 2 test failures unique to this patch — sanity3@zfs:test_233a, sanityn@zfs:test_108a
2 unique failures upstream stalled 208d S +20 −10
208d
janitor: 2 test failures unique to this patch — sanity3@zfs:test_233a, sanityn@zfs:test_108a
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-selinux-ssk-part-1, review-dne-zfs-part-1, review-ldiskfs, review-ldiskfs-ubuntu
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity3@zfs:test_233aseen in 3 other reviews
sanityn@zfs:test_108aseen in 11 other reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
build #123622 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown
patchsets:
+1 earlier PS2 04-01
PS3 06-20 PS4 02-27 PS5 02-27 PS6 10-14 PS7 04-09
owner James Simmons · uploader James Simmons · PS7 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: refine ll_find_alias based on d_exact_alias

The task of ll_find_alias() is now very similar to d_exact_alias().
We cannot use that function directly, but we can copy much of
the structure so that the similarities and differences are more
obvious.
Examining d_exact_alias() shows that the d_lock spinlock does not
need to be held in ll_find_alias as much as it currently is.

Linux-commit: 8016ab9ebbda3dee637ac66b9e0f7a74ef6fe9e6

Signed-off-by: Mr. NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I52ba4bc35cb84f523551816df7df2d4d0b1573b7
33260 master J !B ✓T ✗8R 0/2
LU-9868 llite: simplify ll_find_alias()
enforced failed: review-dne-part-1, review-dne-selinux-ssk-part-1, review-dne-zfs-part-1, review-ldiskfs, review-ldiskfs-ubuntu
upstream stalled 208d S +8 −15
208d
janitor run: 23 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
build #123621 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown
patchsets:
+1 earlier PS2 04-01
PS3 06-20 PS4 02-27 PS5 02-27 PS6 10-14 PS7 04-09
owner James Simmons · uploader James Simmons · PS7 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: simplify ll_find_alias()

Now that ll_find_alias is only searching for one type
of dentry, we can return as soon as we find it.
This allows substantial simplification, and brings the
bonus that we don't need to take the d_lock again just
to increment the ref-count.  We can increment it immediately
that the dentry is found.

Linux-commit: 7e08e9a8942dfc38693edf2e389cde620e918356

Signed-off-by: Mr. NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I18d6130c27186e1a7c9254e50b4d1242b7ada383
62479 master J !B ✓T ✗10R -1/2−
LU-19298 lod: use Xarray instead of static arrays for comp entires
needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 217d 1 unresolved L +442 −423
217d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-2, review-dne-part-4, review-dne-part-7, review-dne-zfs-part-2, review-dne-zfs-part-4, review-dne-zfs-part-7, review-zfs
1 unresolved thread(s) await your reply — last from Andreas Dilger
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 crashed RHEL 9.5 / x86_64 ran 13 tests. 2 tests failed: sanity-pfl, sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 crashed RHEL 8.10 / x86_64 ran 13 tests. 2 tests failed: sanity-pfl, sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 8.10 / x86_64 ran 11 tests. 2 tests failed: sanity-quota, sanity-flr. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 9.5 / x86_64 ran 11 tests. 2 tests failed: sanity-quota, sanity-flr. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.5 / x86_64 ran 7 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 8.10 / x86_64 ran 13 tests. 2 tests failed: sanity-pfl, sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-flr. session
review-dne-zfs-part-7 crashed RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 1 tests failed: sanity-flr. session
build #119712 SUCCESS · tests all Maloo sessions
no vote yet: Ronnie Sahlberg, Qian Yingjin, Alexey Lyashkov, Andreas Dilger, Zhenyu Xu, Patrick Farrell
patchsets: PS1 11-10 PS2 11-16 PS3 12-12
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2025-12-18 13:27 Andreas Dilger patchset comment — James, file layout join/migrate/mirror happen _maybe_ only once or twice in the lifetime of a file, so it doesn't make sense to add a comple
Patrick Farrell PS3 · 2025-12-15 17:25
James, the lack of ability to remove other components than the last one is a deliberate choice to prevent the creation of incomplete layouts.  There is nothing about the current approach that can’t support removing other components, it’s just a sanity restriction.
James Simmons PS3 · 2025-12-18 00:33
Think about file join work with 2 mirrors each with 3 components and another file with also 2 mirrors also with 3 components. Its going to be merged right. The current approach would require allocating a new larger array. Then copying items from file 1 static array and then copying items from file 2 static array. Then deleting the old array. Some slicing is needed due the 2 mirrors. Compared to Xarray its erasing the reference to pointers in file 2 xarray and adding a reference of that same pointer into file 1 Xarray. Do you feel the former approach is way better?

Honestly the biggest impact is for the file join project so the really important opinion I need is from Alexey. Alexey what do you think?
Patrick Farrell PS3 · 2025-12-18 01:29
Yes, I do - it's very simple.  You allocate a larger array and write the layout to it.  Very simple.

It requires no complex data structures and no locking.  The idea that we should have references across two xarrays is very concerning - that means the layout components need reference counting then, I guess?  They do not today.

There is no particular impact on file join - it is just as easy to do file join via layout copy as any other operation.
Andreas Dilger PS3 · 2025-12-18 13:27
James, file layout join/migrate/mirror happen _maybe_ only once or twice in the lifetime of a file, so it doesn't make sense to add a complex data structure and overhead to optimize a 0.00001% usage case.  That is doubly a problem if it means many small allocations and/or additional locking needs to be added to handle this extremely rare use case.
owner James Simmons · uploader James Simmons · PS3 uploaded 326d ago · NEW · open in Gerrit ↗
commit message
LU-19298 lod: use Xarray instead of static arrays for comp entires

The LOD layer implements very large static arrays to manage the
component entries for each layout. This works well for the case
that all the components are for block I/O that are expected to
be aligned to each other in a specific order. In such cases the
API works to add or delete components at the end of such layouts.
With the upcoming introducting of parity and foreign components
the rules change in that you can delete or add a component
located in the middle of the layout. This would be very
complicated when using static arrays.

To make life easier for upcoming projects we move away from
static arrays to using Xarrays. We no longer requires creating
a whole new array and copying components over. Instead we just
insert or delete components into the Xarray. This current
implementation just does the change from static arrary to
Xarray without truly introducing gaps in the Xarray. This can
be done in follow on patches and can be used to greatly simplify
the code. For example since "gaps" are allowed in the Xarray
we can place components in the Xarray using the mirror id as
apart of the index which mirrors the component ID. This removes
the need to manage the new mirror ranges in the Xarray.

Change-Id: I67020f899ad89bfa6095c4b22f7f1b07b6de3e86
Signed-off-by: James Simmons <jsimmons@infradead.org>
60897 master J ✗2B ✓T ✗4R -1/2−
LU-19298 lod: merge different lmm handling togther.
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures stalled 218d L +225 −300
218d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — sanity-pfl@ldiskfs+DNE:test_1c, sanity-pfl@zfs:test_1c
enforced failed: review-dne-part-2, review-dne-zfs-part-2, review-ldiskfs-ubuntu
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-pfl@ldiskfs+DNE:test_1cNEW unique failure for this branch in the last 30 days, and was seen 2 times across 1 other branches 1 reviews
sanity-pfl@zfs:test_1cNEW unique failure for this branch in the last 30 days, and was seen 2 times across 1 other branches 1 reviews
failed enforced testplatformdetail
review-dne-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
4 optional test failure(s) — informational
build #116154 SUCCESS · tests all Maloo sessions
no vote yet: Alexey Lyashkov, Andreas Dilger, Patrick Farrell
patchsets:
+1 earlier PS1 08-25
PS2 08-27 PS3 08-28 PS4 08-31 PS5 08-31 Janitor Bot PS6 08-31
owner James Simmons · uploader James Simmons · PS6 uploaded 429d ago · NEW · open in Gerrit ↗
commit message
LU-19298 lod: merge different lmm handling togther.

For PFL handling the LOD has developed very similar code independently.
Besides code duplication we end up not having consistent PFL handling.
For example lod_layout_add() handling doesn't support specific OST
indexes being requested by the user for the new component. We merge
all the code into lod_comp_for_each_lcm(). In the future any change
here will impact many code paths at the same time. For EC developement
we don't need to touch any many places in the code.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ic2392dd84eb397e87e384d6916ccb2de04b6d083
57348 master J !B ✓T ✗11R -1/2−
LU-18175 ldlm: replace namespace lock with RCU
needs rebase — checkpatch: cannot be cherry-picked
needs rebase rocky8 stalled 280d M +62 −75
280d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-1, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-selinux-ssk-part-1, review-dne-zfs-part-2, review-dne-zfs-part-4, review-dne-zfs-part-6, review-ldiskfs
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 crashed RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 crashed RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: ost-pools. %% THIS TEST SESSION CRASHED %% session
review-dne-part-6 crashed RHEL 9.5 / x86_64 ran 4 tests. 1 tests failed: ost-pools. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-1 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: ost-pools. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
3 optional test failure(s) — informational
build #115080 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Neil Brown, Timothy Day
patchsets:
+4 earlier PS1 12-09 PS2 01-16 PS3 01-22 PS4 01-22
PS5 02-23 PS6 03-06 PS7 04-02 PS8 06-03 PS9 07-16
owner James Simmons · uploader James Simmons · PS9 uploaded 475d ago · NEW · open in Gerrit ↗
commit message
LU-18175 ldlm: replace namespace lock with RCU

With newer kernels you can enable a debugfs interface to flush
out the shrinkers. When enabled in testing the below was
discovered:

BUG: sleeping function called from invalid context at kernel/mutex.c:104
in_atomic(): 1, irqs_disabled(): 0, pid: 18286, name: lctl
CPU: 3 PID: 18286 Comm: lctl Kdump: loaded Tainted: G           OE  ------------   3.10.0-7.9-debug #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-1.fc38 04/01/2014
 Call Trace:
  [<ffffffff817ded29>] dump_stack+0x19/0x1b
  [<ffffffff810c8ec9>] __might_sleep+0xd9/0x100
  [<ffffffff817e5540>] mutex_lock+0x20/0x40
  [<ffffffffa08ae00c>] ldlm_pools_shrink+0x6c/0x330 [ptlrpc]
  [<ffffffffa08ae2eb>] ldlm_pools_cli_shrink+0x1b/0x20 [ptlrpc]
  [<ffffffffa022be76>] shrinker_debugfs_count_show+0x106/0x200 [libcfs]
  [<ffffffff8126e115>] seq_read+0x135/0x470
  [<ffffffff81244899>] vfs_read+0xb9/0x1c0
  [<ffffffff812457cf>] SyS_read+0x7f/0xf0
  [<ffffffff817f400c>] system_call_fastpath+0x1f/0x24

This is due to the debugfs interface taking its own mutex lock
and our own ldlm pools using a mutex lock as well. Replace our
mutex lock with RCU list handling. Special note is that their is
no list_empty_rcu(). We have to use list_first_or_null_rcu() instead.
This is due to list_empty() and the next list operation performing
separate READ_ACCESS which can give different results.

Change-Id: I175f345b5a8cf7d29e32c7e192620f9c896e6a9d
Signed-off-by: James Simmons <jsimmons@infradead.org>
56527 master J !B ✓T ✗10R 0/2
LU-13118 lustre: use UUID for naming instead of internal pointers
enforced failed: review-dne-part-4, review-dne-part-5, review-dne-part-7, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-5, review-dne-zfs-part-7, review-ldiskfs
upstream stalled 325d 7 unresolved M +58 −50
325d
enforced failed: review-dne-part-4, review-dne-part-5, review-dne-part-7, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-5, review-dne-zfs-part-7, review-ldiskfs
7 unresolved thread(s) await your reply — last from Aurelien Degremont
janitor run: 5 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-4 RHEL 9.4 / x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-part-5 RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: recovery-small. session
review-dne-part-5 RHEL 9.4 / x86_64 ran 8 tests. 1 tests failed: recovery-small. session
review-dne-part-7 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-part-7 RHEL 9.4 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: recovery-small. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 8 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
5 optional test failure(s) — informational
build #112739 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets:
+3 earlier PS1 09-28 PS2 09-28 PS3 10-01
PS4 10-15 PS5 12-03 PS6 01-11 PS7 03-08 PS8 04-24
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2024-12-03 19:04 Aurelien Degremont COMMIT_MSG:13 — would be nice to have some examples of the new names, or before/after
Aurelien Degremont PS5 · 2024-12-03 19:04
would be nice to have some examples of the new names, or before/after
reply PS8 2025-04-25 05:56 Shaun Tancheff llite_lib.c:1371 — Do the extra embedded '-' separators cause parsing issues later on?
Shaun Tancheff PS8 · 2025-04-25 05:56
Do the extra embedded '-' separators cause parsing issues later on?
reply PS8 2025-04-25 05:56 Shaun Tancheff llite_lib.c:1513 — %pU is not correct here as sbi->ll_sb_uuid.uuid is a max 40 byte string.
Shaun Tancheff PS8 · 2025-04-25 05:56
%pU is not correct here as sbi->ll_sb_uuid.uuid is a max 40 byte string.
reply PS8 2025-04-25 05:56 Shaun Tancheff mdc_changelog.c:731 — It is safe to require the '-mdc-' naming? Probably but I have not looked to be positive.
Shaun Tancheff PS8 · 2025-04-25 05:56
It is safe to require the '-mdc-' naming? Probably but I have not looked to be positive.
reply PS8 2025-04-25 09:05 Andreas Dilger obd_config.c:1900 — That is my concern as well if the format of the parameters is suddenly getting much longer and having extra dashes in them. In the past we
Shaun Tancheff PS8 · 2025-04-25 05:56
Extra '-' separators ... do the confuse a parser somewhere?
Andreas Dilger PS8 · 2025-04-25 09:05
That is my concern as well if the format of the parameters is suddenly getting much longer and having extra dashes in them.  In the past we had to deal with fsname that contained multiple '-' in them, so some code is using "strrchr()" to find the fsname from the end of the instance name.

The current parameters look like:
 
# lctl list_param llite.*.max*
llite.myth-ffff909824e7f800.max_easize
llite.myth-ffff909824e7f800.max_read_ahead_async_active
llite.myth-ffff909824e7f800.max_read_ahead_mb
llite.myth-ffff909824e7f800.max_read_ahead_per_file_mb
llite.myth-ffff909824e7f800.max_read_ahead_whole_mb
llite.myth-ffff909824e7f800.max_cached_mb

but with this patch they would become:
 
# lctl list_param llite.*.max*
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_easize
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_async_active
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_mb
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_per_file_mb
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_read_ahead_whole_mb
llite.myth-f1da1f0c-f89b-473e-b604-8c265d1c1ecd.max_cached_mb

which not only makes them longer and harder to parse, but also much less readable.  If the main concern here is ASLR then we can avoid printing
the raw pointer in the parameter name and work out something else.

For example, the kernel could save a random 64-bit number at startup time and XOR with that, and if it needs the original pointer back it can XOR again.
reply PS7 2025-03-10 08:46 Aurelien Degremont liblustreapi_util.c:484 — you probably wants to update this comment to be inline with the syntax.
Aurelien Degremont PS7 · 2025-03-10 08:46
you probably wants to update this comment to be inline with the syntax.
reply PS8 2025-04-25 05:56 Shaun Tancheff liblustreapi_util.c:467 — The check could be done before trying the copy
Shaun Tancheff PS8 · 2025-04-25 05:56
The check could be done before trying the copy
owner James Simmons · uploader James Simmons · PS8 uploaded 559d ago · NEW · open in Gerrit ↗
commit message
LU-13118 lustre: use UUID for naming instead of internal pointers

According to ASLR it is considered a security violation to publish
internal kernel addresses to user land. Currently lustre uses
internal pointer addresses to create an unique identifier that
ends up being used to build the sysfs tree. This patch switches
this to using the UUID generated. The reason for using UUID is
that in the ptlrpc layer there is a mapping between NIDs and
UUIDs and many client interfaces have the same UUIDs so we
could cheat and use the device name instead.

Change-Id: Id91ceece847402658d1e2a364b3602572daaef87
Signed-off-by: James Simmons <jsimmons@infradead.org>
58304 master J !B ✓T ✗1R -1/2−
LU-18657 pcc: invalidate instead of truncate inode mapping
enforced failed: custom-1001
stalled 330d 1 unresolved XS +2 −2
330d
enforced failed: custom-1001
Jian Yu voted -1
1 unresolved thread(s) await your reply — last from Jian Yu
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
1 optional test failure(s) — informational
build #119366 SUCCESS · tests all Maloo sessions
reviews: Jian Yu -1 2025-12-05 20:32
no vote yet: Qian Yingjin, Neil Brown, Sebastien Buisson, Timothy Day
patchsets:
+3 earlier PS1 03-05 PS2 03-05 PS3 03-06
PS4 03-11 PS5 03-11 PS6 03-11 PS7 04-25 PS8 12-05
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS8 2025-12-08 17:29 Jian Yu patchset comment — [ 2231.421259] ------------[ cut here ]------------
Jian Yu PS8 · 2025-12-08 17:29
[ 2231.421259] ------------[ cut here ]------------
[ 2231.422249] kernel BUG at fs/jbd2/transaction.c:2148!
[ 2231.423289] invalid opcode: 0000 [#1] SMP PTI
[ 2231.424158] CPU: 0 PID: 129424 Comm: ldlm_bl_03 Kdump: loaded Tainted: G           OE     -------- -  - 4.18.0-553.85.1.el8_10.x86_64 #1
[ 2231.426385] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[ 2231.427473] RIP: 0010:jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.428770] Code: 00 75 f4 eb a7 5b 4c 89 ef 5d 41 5c 41 5d 41 5e 41 5f e9 f9 7f ef de 5b 31 c0 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc 0f 0b <0f> 0b 0f 1f 40 00 66 66 66 66 90 41 56 41 55 41 54 55 53 4c 8b 2f
[ 2231.432135] RSP: 0018:ffffa4c40584b9e8 EFLAGS: 00010246
[ 2231.433142] RAX: 000fffffc001206d RBX: ffffedd9006f92c0 RCX: 0000000000000000
[ 2231.434497] RDX: 0000000000000000 RSI: ffffedd9006f92c0 RDI: ffff9313873d5000
[ 2231.435845] RBP: ffff9312ac220b80 R08: 0000000000000000 R09: ffffa4c40584b9b8
[ 2231.437180] R10: ffffffffffffffff R11: 000000000000003f R12: 0000000000000000
[ 2231.438513] R13: ffffedd9006f92c0 R14: 0000000000000000 R15: 0000000000000000
[ 2231.439846] FS:  0000000000000000(0000) GS:ffff9313bbc00000(0000) knlGS:0000000000000000
[ 2231.441346] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 2231.442443] CR2: 00005654730b7f44 CR3: 000000001ee10005 CR4: 00000000000606f0
[ 2231.443776] Call Trace:
[ 2231.444312]  ? __die_body+0x1a/0x60
[ 2231.445060]  ? die+0x2a/0x50
[ 2231.445662]  ? do_trap+0xe7/0x110
[ 2231.446327]  ? jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.447503]  ? do_invalid_op+0x36/0x40
[ 2231.448243]  ? jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.449410]  ? invalid_op+0x14/0x20
[ 2231.450127]  ? jbd2_journal_try_to_free_buffers+0xfa/0x100 [jbd2]
[ 2231.451286]  invalidate_inode_page+0x72/0x90
[ 2231.452153]  __invalidate_mapping_pages+0x156/0x3c0
[ 2231.453100]  ? vsnprintf+0x340/0x520
[ 2231.453821]  ? snprintf+0x49/0x70
[ 2231.454488]  pcc_inode_put+0x118/0x140 [lustre]
[ 2231.455579]  pcc_layout_invalidate+0x12a/0x550 [lustre]
[ 2231.456629]  vvp_conf_set+0xbc/0xe0 [lustre]
[ 2231.457505]  cl_conf_set+0x62/0x140 [obdclass]
[ 2231.458613]  ll_layout_conf+0x14d/0x420 [lustre]
[ 2231.459553]  ? ll_lock_cancel_bits+0x484/0x9b0 [lustre]
[ 2231.460612]  ll_lock_cancel_bits+0x484/0x9b0 [lustre]
[ 2231.461630]  ll_md_blocking_ast+0x2d9/0x450 [lustre]
[ 2231.462624]  ldlm_cancel_callback+0x7b/0x260 [ptlrpc]
[ 2231.463897]  ldlm_cli_cancel_local+0xa3/0x490 [ptlrpc]
[ 2231.464949]  ldlm_cli_cancel_list_local+0x113/0x330 [ptlrpc]
[ 2231.466082]  ldlm_bl_thread_main+0x74b/0x8b0 [ptlrpc]
[ 2231.467122]  ? finish_wait+0x80/0x80
[ 2231.467875]  ? ldlm_handle_bl_callback+0x400/0x400 [ptlrpc]
[ 2231.468993]  kthread+0x134/0x150
[ 2231.469678]  ? set_kthread_struct+0x50/0x50
[ 2231.470499]  ret_from_fork+0x35/0x40
[ 2231.471222] Modules linked in: loop mgc(OE) lustre(OE) mdc(OE) lov(OE) osc(OE) lmv(OE) fid(OE) fld(OE) ksocklnd(OE) ptlrpc(OE) obdclass(OE) lnet(OE) libcfs(OE) rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache intel_rapl_msr intel_rapl_common crct10dif_pclmul crc32_pclmul ghash_clmulni_intel joydev pcspkr i2c_piix4 virtio_balloon sunrpc ext4 mbcache jbd2 ata_generic ata_piix libata virtio_net crc32c_intel serio_raw net_failover virtio_blk failover
owner James Simmons · uploader James Simmons · PS8 uploaded 334d ago · NEW · open in Gerrit ↗
commit message
LU-18657 pcc: invalidate instead of truncate inode mapping

When releasing the PCC inode the current code releases the pages
related to both the pcc inode and original inode. It is possible
additional references exist for these inode so we are not
allowed to flush all the pages. Instead use the function
invalidate_mapping_pages() that only handles pages that can be
cleaned up.

Fixes: 9e37963fa0 ("LU-10499 sec: support of PCC-RO for encrypted files")
Test-Parameters: trivial testlist=sanity-pcc
Change-Id: If979b19d68004221909450641de461b92818d243
Signed-off-by: James Simmons <jsimmons@infradead.org>
48231 master J –B ✓T ✗1R +1/2
LU-14799 tests: run stand along mgs test
enforced failed: custom-1001
stalled 365d 1 unresolved XS +1 −1
365d
enforced failed: custom-1001
1 unresolved thread(s) await your reply — last from Colin Faber
failed enforced testplatformdetail
custom-1001 RHEL 9.3 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. This build will be scored -1 since fortestonly was specified. session
build #108444 SUCCESS · tests all Maloo sessions
reviews: Colin Faber +1 2025-11-03 15:29
no vote yet: Andreas Dilger
patchsets: PS1 08-16 PS2 08-16 PS3 08-17 PS4 10-22
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2025-11-03 15:29 Colin Faber patchset comment — Sure
Colin Faber PS4 · 2025-11-03 15:29
Sure
owner James Simmons · uploader James Simmons · PS4 uploaded 742d ago · NEW · open in Gerrit ↗
commit message
LU-14799 tests: run stand along mgs test

See what breaks for maloo setup.

Test-Parameters: fortestonly testlist=conf-sanity standalonemgs=true
Change-Id: I0588dc958af7c37b120f146753e898949d9cb599
Signed-off-by: James Simmons <jsimmons@infradead.org>
60909 master J ✗2B ✓T ✗3R -1/2−
LU-18544 utils: handle special lnetctl import for route setup
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures IPv6 stalled 392d 2 unresolved M +155 −0
392d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — sanity-lnet@ldiskfs+DNE:test_255, sanity-lnet@zfs:test_255
enforced failed: custom-1001, review-ldiskfs-dne
2 unresolved thread(s) await your reply — last from Chris Horn
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_255NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity-lnet@zfs:test_255NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #116068 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-26 PS2 08-26 Janitor Bot PS3 08-27
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2025-08-26 16:39 Chris Horn COMMIT_MSG:9 — It would be better to say something like:
Chris Horn PS2 · 2025-08-26 16:39
It would be better to say something like:

The lnetctl tool supports gateways specified with a nidrange syntax.
For example:
gateway: 10.151.0.[1,2,3,4,5,6,7,8]@o2ib
reply PS2 2025-08-26 16:37 Chris Horn lnetctl.c:5375 — Is strncmp needed vs. strcmp? We use strcmp everywhere else.
Chris Horn PS2 · 2025-08-26 16:37
Is strncmp needed vs. strcmp? We use strcmp everywhere else.

I would prefer you remove "route" from the cmd_mappings array (line 4363), and then move this conditional block to same level as the ip2nets conditional:

```
  if (mapping) {
    ...
  } else if (!strcmp(scalar_value, "route")) {
    ...
  } else if (!strcmp(scalar_value, "ip2nets")) {
```

The cmd_mappings array should only be for items that don't require a custom handler.
owner James Simmons · uploader James Simmons · PS3 uploaded 433d ago · NEW · open in Gerrit ↗
commit message
LU-18544 utils: handle special lnetctl import for route setup

The lnetctl tool supports the following:

gateway: 10.151.0.[1,2,3,4,5,6,7,8]@o2ib

in YAML config files as a short hand to setup many gateways. This
actually voilates the YAML spec and our code doesn't handle this
correctly. We need to support this incorrect behavior since it
was allowed with cYAML for a long time. To do this we need to
intercept route handling and unroll the gateway entries. The good
news is that the '/' used by netmask will not break the YAML spec.
Support for netmask has not been implemented yet.

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I6a14659f62ab50d0cb521a2b8e34b1638e4f980d
31407 master J !B ✓T ✗5R 0/2
LU-10756 ptlrpc: send uevents when import state changes
enforced failed: review-dne-part-2, review-dne-selinux-ssk-part-2, review-dne-zfs-part-2, review-ldiskfs-arm, review-ldiskfs-ubuntu
stalled 456d L +297 −19
456d
failed enforced testplatformdetail
review-dne-part-2 crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm crashed CentOS 8.3/aarch64, CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanity-sec. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-ubuntu CentOS 8.3/x86_64, Ubuntu 20.04/x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
build #23252 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown, Joe Grund, Andreas Dilger, Oleg Drokin, Ben Evans
owner James Simmons · uploader James Simmons · PS27 uploaded 1862d ago · NEW · open in Gerrit ↗
commit message
LU-10756 ptlrpc: send uevents when import state changes

When the import for a client changes state such as when the client
is evicted send a uevent to make user land so it can be aware that
the import state has changed. This allows the use of udev rules to
perform site specific actions.

Change-Id: I959700f13bca9ee7889244e1cf75eda4d128c8ca
Signed-off-by: James Simmons <jsimmons@infradead.org>
33363 master J –B ✓T ✓R +2/2
LU-11058 obd: manage checksum state
Verified -1 veto by Oleg Drokin
Verified -1 stalled 456d M +61 −24
456d
1 optional test failure(s) — informational
build #2303 SUCCESS
reviews: Andreas Dilger +1 2018-12-10 16:31 · Li Xi +1 2018-12-10 16:31
no vote yet: Emoly Liu, Qian Yingjin, Oleg Drokin
owner James Simmons · uploader James Simmons · PS3 uploaded 2885d ago · NEW · open in Gerrit ↗
commit message
LU-11058 obd: manage checksum state

Currently the checksum dump, checksum tunable and the checksum
mount options don't affect each other. With this patch:

1) mount option checksum/nochecksum will turn on or off both
   checksumming and checksum dump. Additionally it will
   control access to all checksum related sysfs files.

2) Disabling the checksums sysfs file will also disable
   checksum_dump as well as prevent enabling checksum_dump.

Change-Id: I0781cda49933b0f9f19f968ca211872ab3b34692
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
34954 master J !B ✓T ✗2R 0/2
LU-8585 utils: enable fileset use with liblustreapi HSM handling
enforced failed: review-dne-part-4, review-dne-zfs-part-4
stalled 456d S +4 −9
456d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-4 RHEL 9.3/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-zfs-part-4 RHEL 8.9/x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
5 optional test failure(s) — informational
build #108370 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Minh Diep, John Hammond, Timothy Day
patchsets: PS10 03-22 PS11 03-23 PS12 10-16
owner James Simmons · uploader James Simmons · PS12 uploaded 749d ago · NEW · open in Gerrit ↗
commit message
LU-8585 utils: enable fileset use with liblustreapi HSM handling

Currently using the special .lustre/fid/X path doesn't work with
filesets but the llapi_fid_* API in liblustreapi does. Move the
HSM handling in liblustreapi to the llapi_fid_* handling. While
sites that need to use fileset can create their own copy agent
that uses the llapi_fid_* most sites are reluctant to replace
liblustreapi with their own version that can work with fileset.
Note sanity-hsm test will not work FILESET since the copy agent
for testing will not be updated to use the llapi_fid_* API.

Change-Id: Iaa37d0c585f84c15769e415e0fd73be7b25dd296
Signed-off-by: James Simmons <jsimmons@infradead.org>
35422 master J –B ✗T –R 0/2
LU-9897 zfs: migrate autoconf detection to pkgconfig
build failure (#78732)
stalled 456d S +10 −36
456d
build #78732 FAILURE
no vote yet: Minh Diep, Alex Zhuravlev
owner James Simmons · uploader James Simmons · PS8 uploaded 2119d ago · NEW · open in Gerrit ↗
commit message
LU-9897 zfs: migrate autoconf detection to pkgconfig

Currently we have extra complexity to determine where packages are
installed. This approach is also fragile if packages are not
installed in the standard location. This can be handled in a much
cleaner way with pkgconfig. Update ZFS handling to use its
supplied pkgconfig files it provides.

Test-Parameter: trivial

Change-Id: I752997a940b0a8c56772bd737f42a5acbd010abb
Signed-off-by: James Simmons <jsimmons@infradead.org>
37033 master J ✗282B ✓T ✗11R 0/2
LU-8066 obd: remove server sysfs symlinks handling
janitor: 282 test failures unique to this patch — conf-sanity2@ldiskfs+DNE:test_48, conf-sanity2@ldiskfs+DNE:test_66, conf-sanity2@ldiskfs+DNE:test_68 +279 more
282 unique failures stalled 456d M +4 −151
456d
janitor: 282 test failures unique to this patch — conf-sanity2@ldiskfs+DNE:test_48, conf-sanity2@ldiskfs+DNE:test_66, conf-sanity2@ldiskfs+DNE:test_68 +279 more
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-ldiskfs, review-ldiskfs-arm, review-zfs
janitor flagged test failures unique to this patch
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_48seen in 1 other review
conf-sanity2@ldiskfs+DNE:test_66NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity2@ldiskfs+DNE:test_68NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_103NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_108bseen in 1 other review
conf-sanity3@ldiskfs+DNE:test_109aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_109bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_112seen in 2 other reviews
conf-sanity-slow@ldiskfs+DNE:test_32aseen in 2 other reviews
conf-sanity-slow@ldiskfs+DNE:test_32dseen in 2 other reviews
conf-sanity-slow@ldiskfs+DNE:test_32eseen in 2 other reviews
conf-sanity3@zfs:test_103NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@zfs:test_108aseen in 1 other review
conf-sanity3@zfs:test_112seen in 1 other review
conf-sanity3@zfs:test_117seen in 6 other reviews
conf-sanity3@zfs:test_123aaseen in 6 other reviews
conf-sanity3@zfs:test_123abseen in 6 other reviews
conf-sanity3@zfs:test_123acseen in 6 other reviews
conf-sanity3@zfs:test_123adseen in 6 other reviews
conf-sanity3@zfs:test_123aeseen in 5 other reviews
conf-sanity3@zfs:test_123Fseen in 5 other reviews
conf-sanity-slow@zfs:test_32aseen in 2 other reviews
conf-sanity-slow@zfs:test_32dseen in 2 other reviews
conf-sanity-slow@zfs:test_32eseen in 2 other reviews
ost-pools@ldiskfs+DNE:test_1aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1mNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_1nNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_2cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_2dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_2eseen in 1 other review
ost-pools@ldiskfs+DNE:test_3dseen in 1 other review
ost-pools@ldiskfs+DNE:test_4cseen in 1 other review
ost-pools@ldiskfs+DNE:test_5aseen in 1 other review
ost-pools@ldiskfs+DNE:test_5bseen in 1 other review
ost-pools@ldiskfs+DNE:test_6seen in 1 other review
ost-pools@ldiskfs+DNE:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_11seen in 1 other review
ost-pools@ldiskfs+DNE:test_15seen in 1 other review
ost-pools@ldiskfs+DNE:test_16seen in 1 other review
ost-pools@ldiskfs+DNE:test_17seen in 1 other review
ost-pools@ldiskfs+DNE:test_18seen in 1 other review
ost-pools@ldiskfs+DNE:test_19seen in 1 other review
ost-pools@ldiskfs+DNE:test_20seen in 1 other review
ost-pools@ldiskfs+DNE:test_21seen in 1 other review
ost-pools@ldiskfs+DNE:test_22seen in 1 other review
ost-pools@ldiskfs+DNE:test_23aseen in 1 other review
ost-pools@ldiskfs+DNE:test_23bseen in 1 other review
ost-pools@ldiskfs+DNE:test_24seen in 1 other review
ost-pools@ldiskfs+DNE:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@ldiskfs+DNE:test_27seen in 1 other review
ost-pools@ldiskfs+DNE:test_28NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1mNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1nNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_2cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_2dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_2eseen in 1 other review
ost-pools@zfs:test_3dseen in 1 other review
ost-pools@zfs:test_4cseen in 1 other review
ost-pools@zfs:test_5aseen in 1 other review
ost-pools@zfs:test_5bseen in 1 other review
ost-pools@zfs:test_6seen in 1 other review
ost-pools@zfs:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_11seen in 1 other review
ost-pools@zfs:test_15seen in 1 other review
ost-pools@zfs:test_16seen in 1 other review
ost-pools@zfs:test_17seen in 1 other review
ost-pools@zfs:test_18seen in 1 other review
ost-pools@zfs:test_19seen in 1 other review
ost-pools@zfs:test_20seen in 1 other review
ost-pools@zfs:test_21seen in 1 other review
ost-pools@zfs:test_22seen in 1 other review
ost-pools@zfs:test_23aseen in 1 other review
ost-pools@zfs:test_23bseen in 1 other review
ost-pools@zfs:test_24seen in 1 other review
ost-pools@zfs:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_27seen in 1 other review
ost-pools@zfs:test_28NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27CeNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27DNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27GNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_27Iseen in 1 other review
sanity1@ldiskfs+DNE:test_27Lseen in 1 other review
sanity1@ldiskfs+DNE:test_27Mseen in 1 other review
sanity1@ldiskfs+DNE:test_56wbseen in 1 other review
sanity2@ldiskfs+DNE:test_65nseen in 1 other review
sanity2@ldiskfs+DNE:test_134aseen in 1 other review
sanity2@ldiskfs+DNE:test_134bseen in 1 other review
sanity2@ldiskfs+DNE:test_140seen in 1 other review
sanity2@ldiskfs+DNE:test_150seen in 1 other review
sanity2@ldiskfs+DNE:test_151seen in 1 other review
sanity2@ldiskfs+DNE:test_154Aseen in 1 other review
sanity2@ldiskfs+DNE:test_154Bseen in 1 other review
sanity2@ldiskfs+DNE:test_154aseen in 1 other review
sanity2@ldiskfs+DNE:test_154bseen in 1 other review
sanity2@ldiskfs+DNE:test_154fseen in 1 other review
sanity2@ldiskfs+DNE:test_154gseen in 5 other reviews
sanity2@ldiskfs+DNE:test_155eseen in 1 other review
sanity2@ldiskfs+DNE:test_155fseen in 1 other review
sanity2@ldiskfs+DNE:test_155gseen in 1 other review
sanity2@ldiskfs+DNE:test_155hseen in 1 other review
sanity2@ldiskfs+DNE:test_156seen in 1 other review
sanity2@ldiskfs+DNE:test_160aseen in 1 other review
sanity2@ldiskfs+DNE:test_160bseen in 1 other review
sanity2@ldiskfs+DNE:test_160cseen in 1 other review
sanity2@ldiskfs+DNE:test_160dseen in 1 other review
sanity2@ldiskfs+DNE:test_160eseen in 1 other review
sanity2@ldiskfs+DNE:test_160fseen in 1 other review
sanity2@ldiskfs+DNE:test_160gseen in 1 other review
sanity2@ldiskfs+DNE:test_160hseen in 1 other review
sanity2@ldiskfs+DNE:test_160iseen in 1 other review
sanity2@ldiskfs+DNE:test_160jseen in 1 other review
sanity2@ldiskfs+DNE:test_160kseen in 1 other review
sanity2@ldiskfs+DNE:test_161aseen in 1 other review
sanity2@ldiskfs+DNE:test_161bseen in 1 other review
sanity2@ldiskfs+DNE:test_161cseen in 1 other review
sanity2@ldiskfs+DNE:test_161dseen in 1 other review
sanity2@ldiskfs+DNE:test_162aseen in 1 other review
sanity2@ldiskfs+DNE:test_162bseen in 1 other review
sanity2@ldiskfs+DNE:test_162cseen in 1 other review
sanity2@ldiskfs+DNE:test_169seen in 2 other reviews
sanity2@ldiskfs+DNE:test_180aseen in 1 other review
sanity2@ldiskfs+DNE:test_181seen in 1 other review
sanity2@ldiskfs+DNE:test_183seen in 1 other review
sanity2@ldiskfs+DNE:test_185seen in 2 other reviews
sanity2@ldiskfs+DNE:test_185aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_187aseen in 1 other review
sanity2@ldiskfs+DNE:test_187bseen in 2 other reviews
sanity2@ldiskfs+DNE:test_200seen in 1 other review
sanity2@ldiskfs+DNE:test_204aseen in 1 other review
sanity2@ldiskfs+DNE:test_204bseen in 1 other review
sanity2@ldiskfs+DNE:test_204cseen in 1 other review
sanity2@ldiskfs+DNE:test_204dseen in 1 other review
sanity2@ldiskfs+DNE:test_204eseen in 1 other review
sanity2@ldiskfs+DNE:test_204fseen in 1 other review
sanity2@ldiskfs+DNE:test_204gseen in 1 other review
sanity2@ldiskfs+DNE:test_204hseen in 1 other review
sanity2@ldiskfs+DNE:test_208seen in 2 other reviews
sanity2@ldiskfs+DNE:test_218seen in 2 other reviews
sanity2@ldiskfs+DNE:test_220seen in 3 other reviews
sanity2@ldiskfs+DNE:test_222aseen in 1 other review
sanity2@ldiskfs+DNE:test_222bseen in 1 other review
sanity2@ldiskfs+DNE:test_223seen in 1 other review
sanity2@ldiskfs+DNE:test_224cseen in 1 other review
sanity2@ldiskfs+DNE:test_226aseen in 1 other review
sanity2@ldiskfs+DNE:test_226bseen in 1 other review
sanity2@ldiskfs+DNE:test_228aseen in 1 other review
sanity2@ldiskfs+DNE:test_228bseen in 1 other review
sanity2@ldiskfs+DNE:test_228cseen in 1 other review
sanity2@ldiskfs+DNE:test_229seen in 2 other reviews
sanity2@ldiskfs+DNE:test_230aseen in 1 other review
sanity2@ldiskfs+DNE:test_230bseen in 1 other review
sanity2@ldiskfs+DNE:test_230cseen in 1 other review
sanity2@ldiskfs+DNE:test_230dseen in 1 other review
sanity2@ldiskfs+DNE:test_230eseen in 2 other reviews
sanity2@ldiskfs+DNE:test_230fseen in 2 other reviews
sanity2@ldiskfs+DNE:test_230iseen in 1 other review
sanity2@ldiskfs+DNE:test_230jseen in 1 other review
sanity2@ldiskfs+DNE:test_230lseen in 1 other review
sanity2@ldiskfs+DNE:test_230mseen in 1 other review
sanity2@ldiskfs+DNE:test_231aseen in 1 other review
sanity2@ldiskfs+DNE:test_232aseen in 1 other review
sanity2@ldiskfs+DNE:test_232bseen in 1 other review
sanity2@ldiskfs+DNE:test_233aseen in 1 other review
sanity2@ldiskfs+DNE:test_233bseen in 1 other review
sanity2@ldiskfs+DNE:test_238seen in 1 other review
sanity2@ldiskfs+DNE:test_240seen in 1 other review
sanity2@ldiskfs+DNE:test_241bseen in 1 other review
sanity2@ldiskfs+DNE:test_242seen in 1 other review
sanity2@ldiskfs+DNE:test_243seen in 1 other review
sanity2@ldiskfs+DNE:test_244aseen in 1 other review
sanity2@ldiskfs+DNE:test_244bseen in 1 other review
sanity2@ldiskfs+DNE:test_248bseen in 1 other review
sanity2@ldiskfs+DNE:test_250seen in 1 other review
sanity2@ldiskfs+DNE:test_252seen in 2 other reviews
sanity2@ldiskfs+DNE:test_257seen in 1 other review
sanity2@ldiskfs+DNE:test_270aseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270bseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270cseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270dseen in 1 other review
sanity2@ldiskfs+DNE:test_270eseen in 2 other reviews
sanity2@ldiskfs+DNE:test_270fseen in 2 other reviews
sanity2@ldiskfs+DNE:test_271cseen in 1 other review
sanity2@ldiskfs+DNE:test_271fseen in 2 other reviews
sanity2@ldiskfs+DNE:test_272aseen in 4 other reviews
sanity2@ldiskfs+DNE:test_272bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_272cseen in 1 other review
sanity2@ldiskfs+DNE:test_272dseen in 1 other review
sanity2@ldiskfs+DNE:test_272eseen in 1 other review
sanity2@ldiskfs+DNE:test_272fseen in 1 other review
sanity2@ldiskfs+DNE:test_275seen in 1 other review
sanity2@ldiskfs+DNE:test_277seen in 1 other review
sanity2@ldiskfs+DNE:test_300aseen in 1 other review
sanity2@ldiskfs+DNE:test_300bseen in 1 other review
sanity2@ldiskfs+DNE:test_300cseen in 1 other review
sanity2@ldiskfs+DNE:test_300dseen in 1 other review
sanity2@ldiskfs+DNE:test_300eseen in 1 other review
sanity2@ldiskfs+DNE:test_300fseen in 1 other review
sanity2@ldiskfs+DNE:test_300gseen in 1 other review
sanity2@ldiskfs+DNE:test_300hseen in 1 other review
sanity2@ldiskfs+DNE:test_300iseen in 1 other review
sanity2@ldiskfs+DNE:test_300jseen in 1 other review
sanity2@ldiskfs+DNE:test_300kseen in 1 other review
sanity2@ldiskfs+DNE:test_300lseen in 1 other review
sanity2@ldiskfs+DNE:test_300nseen in 1 other review
sanity2@ldiskfs+DNE:test_300qseen in 1 other review
sanity2@ldiskfs+DNE:test_300rseen in 1 other review
sanity2@ldiskfs+DNE:test_310aseen in 1 other review
sanity2@ldiskfs+DNE:test_310bseen in 1 other review
sanity2@ldiskfs+DNE:test_311seen in 1 other review
sanity2@ldiskfs+DNE:test_313seen in 1 other review
sanity2@ldiskfs+DNE:test_314seen in 2 other reviews
sanity2@ldiskfs+DNE:test_315seen in 2 other reviews
sanity2@ldiskfs+DNE:test_316seen in 3 other reviews
sanity2@ldiskfs+DNE:test_317seen in 1 other review
sanity2@ldiskfs+DNE:test_318seen in 1 other review
sanity2@ldiskfs+DNE:test_319seen in 1 other review
sanity2@ldiskfs+DNE:test_399bseen in 1 other review
sanity2@ldiskfs+DNE:test_402seen in 1 other review
sanity2@ldiskfs+DNE:test_406seen in 1 other review
sanity2@ldiskfs+DNE:test_409seen in 1 other review
sanity2@ldiskfs+DNE:test_412seen in 1 other review
sanity2@ldiskfs+DNE:test_413aseen in 1 other review
sanity2@ldiskfs+DNE:test_413bseen in 1 other review
sanity2@ldiskfs+DNE:test_415seen in 1 other review
sanity2@ldiskfs+DNE:test_417seen in 1 other review
sanity2@ldiskfs+DNE:test_418seen in 1 other review
sanity2@ldiskfs+DNE:test_421aseen in 1 other review
sanity2@ldiskfs+DNE:test_421bseen in 1 other review
sanity2@ldiskfs+DNE:test_421cseen in 1 other review
sanity2@ldiskfs+DNE:test_421dseen in 1 other review
sanity2@ldiskfs+DNE:test_421eseen in 1 other review
sanity2@ldiskfs+DNE:test_421fseen in 1 other review
sanity2@ldiskfs+DNE:test_421gseen in 1 other review
sanity2@ldiskfs+DNE:test_422seen in 1 other review
sanity2@ldiskfs+DNE:test_423NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_801aseen in 1 other review
sanity2@ldiskfs+DNE:test_801bseen in 1 other review
sanity2@ldiskfs+DNE:test_801cseen in 1 other review
sanity2@ldiskfs+DNE:test_803seen in 1 other review
sanity2@ldiskfs+DNE:test_804seen in 1 other review
sanity2@ldiskfs+DNE:test_806seen in 3 other reviews
sanity2@ldiskfs+DNE:test_807seen in 3 other reviews
sanity2@ldiskfs+DNE:test_808seen in 3 other reviews
sanity2@ldiskfs+DNE:test_809seen in 4 other reviews
sanity2@ldiskfs+DNE:test_810seen in 1 other review
sanity2@ldiskfs+DNE:test_812aseen in 1 other review
sanity2@ldiskfs+DNE:test_812bseen in 1 other review
sanity2@ldiskfs+DNE:test_816seen in 1 other review
sanity2@ldiskfs+DNE:test_817seen in 1 other review
sanity2@ldiskfs+DNE:test_818seen in 1 other review
sanity2@ldiskfs+DNE:test_820NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_901seen in 1 other review
sanity1@zfs:test_27CeNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27DNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27GNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27Iseen in 1 other review
sanity1@zfs:test_27LNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_27Mseen in 1 other review
sanity1@zfs:test_56wbseen in 1 other review
sanity-flr@ldiskfs+DNE:test_204fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-flr@zfs:test_204fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_3seen in 1 other review
sanity-quota@ldiskfs+DNE:test_5NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_6NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_12aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_16NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_17seen in 1 other review
sanity-sec@ldiskfs+DNE:test_18NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_19NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_20NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_21NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_22NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 3 tests failed: sanity-sec, ost-pools, runtests. session
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 CentOS 7.0/x86_64 ran 14 tests. 6 tests failed: insanity, replay-ost-single, sanity-quota, sanity-flr, sanity-pfl, replay-singl session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: ost-pools. session
review-dne-zfs-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 CentOS 7.0/x86_64 ran 16 tests. 4 tests failed: sanity-quota, sanity-flr, sanity-pfl, replay-single. session
review-ldiskfs CentOS 7.0/x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-arm CentOS 7.0/x86_64, CentOS 8.0/aarch64 ran 7 tests. 1 tests failed: sanity. session
review-zfs CentOS 7.0/x86_64 ran 9 tests. 2 tests failed: replay-single, sanity-flr. session
build #72814 SUCCESS
owner James Simmons · uploader James Simmons · PS4 uploaded 2419d ago · NEW · open in Gerrit ↗
commit message
LU-8066 obd: remove server sysfs symlinks handling

Before the lustre 2.4 OSD work the lov and osc code was used on
both servers and clients. With the OSD layer work we saw the new
lod and osp layers created that are server specific. To avoid
breakage symlinks were created that went from the lod / osp to
lov / osc directories in the proc tree on the server side. This
required some extra complex code to handle this. It has been a
very long time since that change so we can now safely remove all
the extra symlink handling to make life easier.

Change-Id: I41fd5abab3d648db6d4fa1a355bd7147a34ee478
Signed-off-by: James Simmons <jsimmons@infradead.org>
37407 master J !B ✓T ✗6R 0/2
LU-8066 mgc: remove no longer needed class_del_profiles()
enforced failed: review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4
stalled 456d S +0 −29
456d
failed enforced testplatformdetail
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 6 tests failed: sanity-pcc, large-scale, mds-survey, sanity-sec, sanity-lfsck, sanity-scrub. session
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 CentOS 7.0/x86_64 ran 10 tests. 8 tests failed: insanity, replay-ost-single, sanity-quota, sanity-dom, sanity-flr, sanity-pfl, session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 6 tests failed: sanity-pcc, large-scale, mds-survey, sanity-sec, sanity-lfsck, sanity-scrub. session
review-dne-zfs-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: mmp. session
build #11671 SUCCESS
no vote yet: Andreas Dilger
owner James Simmons · uploader James Simmons · PS1 uploaded 2466d ago · NEW · open in Gerrit ↗
commit message
LU-8066 mgc: remove no longer needed class_del_profiles()

While cleaning up obd_type handling some code to handle lustre
1.14 was found in mgc_cleanup(). This code is obsolete so lets
remove class_del_profiles() handling.

Change-Id: Ib1e9f9cec060667972b9fa97b1a737f7dbe7edfe
Signed-off-by: James Simmons <jsimmons@infradead.org>
44114 master J ✓B ✓T ✗1R +1/2
LU-14799 test: setup and tear down stand alone MGS for conf-sanity
enforced failed: custom-102
stalled 456d XS +4 −1
456d
failed enforced testplatformdetail
custom-102 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #81635 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2021-07-02 00:54
no vote yet: Elena
owner James Simmons · uploader James Nunez · PS3 uploaded 1952d ago · NEW · open in Gerrit ↗
commit message
LU-14799 test: setup and tear down stand alone MGS for conf-sanity

While running conf-sanity I found if I have a stand alone MGS
server it doesn't even run. For setup() just start the MGS server
if stand alone and shut down the stand alone MGS when stop_mds()
is called just in case someone forgets to call stop_mgs().

Test-Parameters: trivial testlist=conf-sanity
Test-Parameters: standalonemgs=true testlist=conf-sanity

Change-Id: Ifc8794e2c9fbb489183e4f205f0b8b9766e13160
Signed-off-by: James Simmons <jsimmons@infradead.org>
49165 master J !B ✓T ✗24R 0/2
LU-12514 ptlrpc: move thread creation out of module initialization
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-arm, review-zfs
stalled 456d M +86 −34
456d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: sanity-pfl, sanity. session
review-dne-part-2 RHEL 8.8/x86_64 ran 13 tests. 4 tests failed: sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-part-3 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 8.8/x86_64 ran 13 tests. 3 tests failed: sanity-quota, mmp, insanity. session
review-dne-part-5 RHEL 8.8/x86_64 ran 8 tests. 2 tests failed: sanityn, sanity-scrub. session
review-dne-part-6 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-part-7 RHEL 8.8/x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-part-8 RHEL 8.8/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
review-dne-selinux-ssk-part-1 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.8/x86_64 ran 7 tests. 2 tests failed: sanity-selinux, sanity-sec. session
review-dne-zfs-part-1 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: sanity-pfl, sanity. session
review-dne-zfs-part-2 RHEL 8.8/x86_64 ran 13 tests. 4 tests failed: sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-zfs-part-3 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 RHEL 8.8/x86_64 ran 13 tests. 3 tests failed: sanity-quota, mmp, insanity. session
review-dne-zfs-part-5 RHEL 8.8/x86_64 ran 8 tests. 2 tests failed: sanityn, sanity-scrub. session
review-dne-zfs-part-6 RHEL 8.8/x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-zfs-part-7 RHEL 8.8/x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-ldiskfs RHEL 8.8/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 9.2/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 8.8/x86_64, SLES 15.4/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 8.8/x86_64, SLES 15.5/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs RHEL 8.8/x86_64, RHEL 9.2/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs-arm RHEL 8.8/aarch64, RHEL 8.8/x86_64 ran 10 tests. 3 tests failed: sanity-sec, sanity-lnet, sanity. session
review-zfs RHEL 8.8/x86_64 ran 18 tests. 6 tests failed: sanity-lsnapshot, insanity, replay-ost-single, replay-single, sanity-flr, sanit session
4 optional test failure(s) — informational
build #100841 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Neil Brown
patchsets:
+6 earlier PS1 11-15 PS2 12-08 PS3 12-12 Neil Brown PS4 02-05 PS5 02-05 PS6 04-05
PS7 05-21 PS8 05-22 PS9 05-22 PS10 12-13 PS11 12-14
owner James Simmons · uploader James Simmons · PS11 uploaded 1056d ago · NEW · open in Gerrit ↗
commit message
LU-12514 ptlrpc: move thread creation out of module initialization

When the ptlrpc module is loaded, it calls ptlrpc_init_portals() which
starts ptlrpcd threads, and starts the pinger work-queue.

We don't need these threads until the module is actually being
used, such as when a lustre filesystem is mounted.

So move the thread creation into new ptlrpc_inc_ref() (modelled on
ptlrpcd_incref()), and call that when needed, such as at mount time.

Linux-commit: 26f7a294e5ecd46856cb9f5b718e995f1ec46779
Linux-commit: ffd87a7b1efeb8f56a229d2ab06d71be7d932d52

Change-Id: Iee077c7dfdeb67ceeeacefc4e6c7f70efef2a864
Signed-off-by: Mr. NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
40878 master J –B ✓T ✓R -2/2−
LU-9897 build: add real versioning to liblustreapi
needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 456d XS +7 −2
456d
needs rebase — checkpatch: cannot be cherry-picked
Andreas Dilger voted -1
no vote yet from Olaf Weber
build #18099 SUCCESS
reviews: Andreas Dilger -1 2020-12-06 03:36
no vote yet: Olaf Weber
owner James Simmons · uploader James Simmons · PS2 uploaded 2159d ago · NEW · open in Gerrit ↗
commit message
LU-9897 build: add real versioning to liblustreapi

Originally we added -version-info to increment liblustreapi
version every time a new abi was added or changed. This never
happened so lets number liblustreapi based the Lustre sovftware
version.

Test-Parameters: trivial
Change-Id: I9f638c0a95b72329325b774d23f73239fcbade03
Signed-off-by: James Simmons <jsimmons@infradead.org>
32475 master J ✗2B ✓T ✗9R -1/2−
LU-2096 sysfs: symlinks for forward compatibility
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unique failures stalled 456d M +101 −12
456d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 2 test failures unique to this patch — conf-sanity3@ldiskfs+DNE:test_76a, conf-sanity3@zfs:test_76a
enforced failed: review-dne-part-4, review-dne-part-5, review-dne-selinux-ssk-part-2, review-dne-zfs-part-4, review-dne-zfs-part-5, review-ldiskfs-ubuntu, review-zfs
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity3@ldiskfs+DNE:test_76aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@zfs:test_76aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-4 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-quota, sanity-flr, replay-ost-single. session
review-dne-part-4 RHEL 9.4 / x86_64 ran 9 tests. 3 tests failed: sanity-quota, sanity-flr, replay-ost-single. session
review-dne-part-5 RHEL 9.4 / x86_64 ran 6 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-part-5 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: recovery-small. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-quota, sanity-flr, replay-ost-single. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 3 tests failed: replay-ost-single, sanity-flr, sanity-quota. session
4 optional test failure(s) — informational
build #111003 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin, Alex Zhuravlev
patchsets: PS5 01-03 PS6 01-07 PS7 01-15 PS8 01-17 PS9 02-14
owner James Simmons · uploader James Simmons · PS9 uploaded 628d ago · NEW · open in Gerrit ↗
commit message
LU-2096 sysfs: symlinks for forward compatibility

Currently, the "ofd" device is still named "obdfilter" in the Lustre
configuration and in /sys/fs/lustre. It would be better to name it
"ost" which is has been the long term goal.

The per-OST device statistics should really be under "ost/{target}",
like the per-MDT statistics are under "mdt/{target}" already in 2.x.

Similarly, the "OSS" statistics have always been under "ost/OSS", but
would be better in their own "oss" subdirectory much like what is done
for "MDS" statistics.

Add symlinks for "oss -> ost/OSS" and  "ost -> obdfilter" to keep
older compatibility. In time we can remove those symlinks.

Change-Id: I8c4c81eb55f2880edf1d7811395c4837f50e01d5
Signed-off-by: James Simmons <jsimmons@infradead.org>
58599 master J !B ✓T ✗31R 0/2
LU-18041 msg: use UUIDs instead of NIDs for client setup
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-5, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs, review-ldiskfs-ubuntu, review-zfs
IPv6 stalled 463d S +10 −18
463d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.4 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-zfs RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
13 optional test failure(s) — informational
build #112103 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin
owner James Simmons · uploader James Simmons · PS1 uploaded 583d ago · NEW · open in Gerrit ↗
commit message
LU-18041 msg: use UUIDs instead of NIDs for client setup

For client setups we are sending NID strings instead of actual
UUIDs. This is incorrect.

Change-Id: I7ebd1bfe29a5e59c989b9fa5e4166f19cb2336ce
Signed-off-by: James Simmons <jsimmons@infradead.org>
50900 master J ✓B ✓T ✗1R 0/2
LU-0000 test: base code
enforced failed: custom-102
stalled 463d XS +1 −1
463d
failed enforced testplatformdetail
custom-102 failed 2× CentOS 7.9/x86_64, RHEL 8.7/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #94728 SUCCESS · tests all Maloo sessions
patchsets: PS1 05-10 PS2 05-10 PS3 05-10
owner James Simmons · uploader James Simmons · PS3 uploaded 1274d ago · NEW · open in Gerrit ↗
commit message
LU-0000 test: base code

test patch on this

Test-Parameters: trivial testlist=sanity-lnet
Test-Parameters: serverversion=2.12 serverdistro=el7.9 testlist=runtests
Test-Parameters: clientversion=2.12 testlist=runtests
Change-Id: Ic52e9934283f34fc635d41a656b6cc0dff088a58
Signed-off-by: James Simmons <jsimmons@infradead.org>
52199 master J !B ✓T ✗3R 0/2
LU-17060 tests: verify conf-sanity 21c passes
enforced failed: custom-1001, review-dne-part-4, review-dne-part-8
stalled 463d XS +1 −1
463d
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 9.3/x86_64 ran 9 tests. 1 tests failed: replay-ost-single. session
review-dne-part-8 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
1 optional test failure(s) — informational
build #105391 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-31 PS2 11-30 PS3 04-10 PS4 05-31 PS5 06-11
owner James Simmons · uploader James Simmons · PS5 uploaded 875d ago · NEW · open in Gerrit ↗
commit message
LU-17060 tests: verify conf-sanity 21c passes

Make sure patch 52053 fixes the issue.

Test-Parameters: testlist=conf-sanity env=ONLY=21c,ONLY_REPEAT=100
Change-Id: I1092c90b15d0cdc464e251dc07ea310828ce4d15
Signed-off-by: James Simmons <jsimmons@infradead.org>
55878 master J ✗97B ✓T ✗25R 0/2
LU-18041 msg: use UUIDs instead of NIDs for OSP setup
janitor: 97 test failures unique to this patch — conf-sanity1@ldiskfs+DNE:test_1, conf-sanity1@ldiskfs+DNE:test_2, conf-sanity1@ldiskfs+DNE:test_3 +94 more
97 unique failures IPv6 stalled 463d S +4 −9
463d
janitor: 97 test failures unique to this patch — conf-sanity1@ldiskfs+DNE:test_1, conf-sanity1@ldiskfs+DNE:test_2, conf-sanity1@ldiskfs+DNE:test_3 +94 more
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-3, review-dne-part-4, review-dne-part-5, review-dne-part-6, review-dne-part-7, review-dne-part-8, review-dne-selinux-ssk-part-1, review-dne-selinux-ssk-part-2, review-dne-zfs-part-2, review-dne-zfs-part-3, review-dne-zfs-part-4, review-dne-zfs-part-6, review-dne-zfs-part-7, review-ldiskfs-ubuntu
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity1@ldiskfs+DNE:test_1seen in 5 other reviews
conf-sanity1@ldiskfs+DNE:test_2seen in 8 other reviews
conf-sanity1@ldiskfs+DNE:test_3seen in 12 other reviews
conf-sanity1@ldiskfs+DNE:test_4seen in 18 other reviews
conf-sanity1@ldiskfs+DNE:test_5aseen in 21 other reviews
conf-sanity1@ldiskfs+DNE:test_5cseen in 16 other reviews
conf-sanity1@ldiskfs+DNE:test_5dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_5eseen in 19 other reviews
conf-sanity1@ldiskfs+DNE:test_5hseen in 24 other reviews
conf-sanity1@ldiskfs+DNE:test_5iseen in 26 other reviews
conf-sanity1@ldiskfs+DNE:test_6seen in 28 other reviews
conf-sanity1@ldiskfs+DNE:test_7seen in 33 other reviews
conf-sanity1@ldiskfs+DNE:test_8seen in 34 other reviews
conf-sanity1@ldiskfs+DNE:test_9seen in 36 other reviews
conf-sanity1@ldiskfs+DNE:test_10aseen in 39 other reviews
conf-sanity1@ldiskfs+DNE:test_17seen in 41 other reviews
conf-sanity1@ldiskfs+DNE:test_23aseen in 12 other reviews
conf-sanity1@ldiskfs+DNE:test_23bseen in 14 other reviews
conf-sanity1@ldiskfs+DNE:test_25seen in 3 other reviews
conf-sanity1@ldiskfs+DNE:test_26seen in 4 other reviews
conf-sanity1@ldiskfs+DNE:test_27aseen in 2 other reviews
conf-sanity1@ldiskfs+DNE:test_27bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28ANEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_28cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@ldiskfs+DNE:test_29seen in 2 other reviews
conf-sanity1@ldiskfs+DNE:test_30aseen in 2 other reviews
conf-sanity1@ldiskfs+DNE:test_30bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity-slow@ldiskfs+DNE:test_69seen in 6 other reviews
sanity2@ldiskfs+DNE:test_134aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_134bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_150aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_150bbseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150cseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150dseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150eseen in 3 other reviews
sanity2@ldiskfs+DNE:test_150gseen in 3 other reviews
sanity2@ldiskfs+DNE:test_151seen in 3 other reviews
sanity2@ldiskfs+DNE:test_154Aseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154Bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154aseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154fseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154gseen in 8 other reviews
sanity2@ldiskfs+DNE:test_154hseen in 3 other reviews
sanity2@ldiskfs+DNE:test_154iNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_155eseen in 3 other reviews
sanity2@ldiskfs+DNE:test_155fseen in 3 other reviews
sanity2@ldiskfs+DNE:test_155gseen in 3 other reviews
sanity2@ldiskfs+DNE:test_155hseen in 3 other reviews
sanity2@ldiskfs+DNE:test_156seen in 3 other reviews
sanity2@ldiskfs+DNE:test_160aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160hNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160iNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160jNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160kNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160lNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160mNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160nNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160oNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160pNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160qNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160sNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160tNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_160uNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_161aseen in 8 other reviews
sanity2@ldiskfs+DNE:test_161bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_161cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_161dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_162aseen in 4 other reviews
sanity2@ldiskfs+DNE:test_162bseen in 3 other reviews
sanity2@ldiskfs+DNE:test_162cseen in 3 other reviews
sanity2@ldiskfs+DNE:test_165bseen in 4 other reviews
sanity2@ldiskfs+DNE:test_165dseen in 4 other reviews
sanity2@ldiskfs+DNE:test_165eseen in 3 other reviews
sanity2@ldiskfs+DNE:test_169seen in 5 other reviews
sanity2@ldiskfs+DNE:test_170aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_170bseen in 1 other review
sanity2@ldiskfs+DNE:test_172seen in 3 other reviews
sanity2@ldiskfs+DNE:test_182bseen in 5 other reviews
sanity2@ldiskfs+DNE:test_183seen in 4 other reviews
sanity2@ldiskfs+DNE:test_185seen in 10 other reviews
sanity2@ldiskfs+DNE:test_185aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_187aseen in 4 other reviews
sanity2@ldiskfs+DNE:test_187bseen in 4 other reviews
sanity3@ldiskfs+DNE:test_901seen in 1 other review
sanity3@ldiskfs+DNE:test_904seen in 1 other review
sanity3@ldiskfs+DNE:test_905seen in 2 other reviews
sanity3@ldiskfs+DNE:test_907seen in 7 other reviews
sanity3@ldiskfs+DNE:test_908bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-2 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-3 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-5 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-7 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-part-8 RHEL 9.5 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% NODE-PROVISIONING AND/OR LUSTRE-INIT FAILED MULTIPLE T session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
2 optional test failure(s) — informational
build #114199 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin, Timothy Day
patchsets:
+3 earlier PS1 07-28 PS2 08-05 PS3 08-17
PS4 01-14 PS5 01-15 PS6 06-08 PS7 06-08 Janitor Bot PS8 06-11
owner James Simmons · uploader James Simmons · PS8 uploaded 511d ago · NEW · open in Gerrit ↗
commit message
LU-18041 msg: use UUIDs instead of NIDs for OSP setup

The mgs when processing logs for OSP uses NIDs instead of
UUIDs for LCFG_SETUP. This is wrong and NIDs can easily
over flow the obd_uuid structure. A side effect of this
mistake is that the ptlrpc conn to UUID mapping just ends
up being a NID looking up a NID which happens to be itself.
That is very wrong. Change from NID string to the real UUID.

Test-Parameters: env=FORCE_LARGE_NID=true,LOAD_MODULES_REMOTE=true
Change-Id: Ie291b2fd85b6096779d7cf5ee94060edc0e3a590
Signed-off-by: James Simmons <jsimmons@infradead.org>
53594 master J ✗4B ✓T ✗2R -1/2−
LU-10391 tests: debug ping failures
needs rebase — checkpatch: cannot be cherry-picked
needs rebase 4 unique failures IPv6 stalled 670d XS +1 −1
670d
needs rebase — checkpatch: cannot be cherry-picked
janitor: 4 test failures unique to this patch — sanity-lnet@ldiskfs+DNE:test_253, sanity-lnet@ldiskfs+DNE:test_254, sanity-lnet@zfs:test_253 +1 more
enforced failed: custom-1001, review-ldiskfs-dne
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_253seen in 1 other review
sanity-lnet@ldiskfs+DNE:test_254seen in 1 other review
sanity-lnet@zfs:test_253seen in 1 other review
sanity-lnet@zfs:test_254seen in 1 other review
failed enforced testplatformdetail
custom-1001 RHEL 9.3 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #108441 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn
patchsets:
+1 earlier PS1 01-04
PS2 01-04 PS3 01-05 PS4 04-04 PS5 06-25 PS6 10-22
owner James Simmons · uploader James Simmons · PS6 uploaded 743d ago · NEW · open in Gerrit ↗
commit message
LU-10391 tests: debug ping failures

Re-enable failing test.

Test-Parameters: trivial testlist=sanity-lnet env=ONLY=253,ONLY_REPEAT=10
Change-Id: I1a55149adbc1413dc26eb004d2832baf96ead3fd
Signed-off-by: James Simmons <jsimmons@infradead.org>
15713 master J –B ✓T ✗0R 0/2
LU-6034 lnet: Create a checksum value for LNet package data
Maloo voted -1 — tests failed (details on the change)
stalled 4115d L +194 −74
4115d
no vote yet: Frank Zago
owner James Simmons · uploader James Simmons · PS1 uploaded 4120d ago · NEW · open in Gerrit ↗
commit message
LU-6034 lnet: Create a checksum value for LNet package data

Using the check sum selected by the adminstrator for a LNet
interface check sum the data being handled by the LNet layer.

Change-Id: I069fc3a83ec8392174a5b1c6bfe1fca223e3a3af
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
▶

Review feedback — your turn

(13)
70328 master J –B ✓T ✓R 0/2
LU-18687 fid: handle CONFIG_LUSTRE_FS_SERVER tristate
2 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 2 unresolved S +8 −6
5h
build #135242 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-11-04 09:13 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body doesn't mention the new `#include <lu_target.h>` in fid_internal.h or why fid needs it. It may also help to say that the co
Gerrit AI review for Lustre PS2 · 2026-11-04 09:13
(style) The body doesn't mention the new `#include <lu_target.h>` in fid_internal.h or why fid needs it. It may also help to say that the configure build defines both CONFIG_LUSTRE_FS_SERVER and CONFIG_LUSTRE_FS_SERVER_MODULE, so this changes nothing there and only matters for an in-tree `CONFIG_LUSTRE_FS_SERVER=m` build.
reply PS2 2026-11-04 09:13 Gerrit AI review for Lustre fid_internal.h:20 — (minor) Nothing declared in this block uses lu_target.h. The users are elsewhere: fid_handler.c needs `struct tgt_session_info` and `struct
Gerrit AI review for Lustre PS2 · 2026-11-04 09:13
(minor) Nothing declared in this block uses lu_target.h. The users are elsewhere: fid_handler.c needs `struct tgt_session_info` and `struct tgt_handler`, and lproc_fid.c and fid_lib.c need the dt_* types, which lu_target.h pulls in through lustre_update.h and lustre_lfsck.h.

Those files compile today because obd_class.h includes lu_target.h, obd_target.h and dt_object.h under `#ifdef CONFIG_LUSTRE_FS_SERVER`. That guard is false for an in-tree `=m` build, and this include works around it.

This isn't a bug, but would it be cleaner to convert the guard in obd_class.h (lustre_disk.h and lustre_fid.h also still use `#ifdef`), or to include dt_object.h and lu_target.h in the .c files that need them? Otherwise the workaround will be left redundant in this shared header once obd_class.h is converted.
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 fid: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert fid to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ia362acb03ed3f8b0cf5b53aee9dc4c052f1cb951
70329 master J –B ✓T ✓R 0/2
LU-18687 mgc: handle CONFIG_LUSTRE_FS_SERVER tristate
4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 4 unresolved S +19 −19
5h
build #135248 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_internal.h:64 — (minor) `cld_is_barrier()` still uses `#ifdef` while `cld_is_nodemap()` just above was converted. With =m it always returns false, so `mgc_p
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(minor) `cld_is_barrier()` still uses `#ifdef` while `cld_is_nodemap()` just above was converted. With =m it always returns false, so `mgc_process_log()` would send a barrier cld through `mgc_process_cfg_log()`. Convert it as well?
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_internal.h:71 — (defect) This block of prototypes (`mgc_fs_clear()`, `mgc_set_info_async_server()`, `mgc_process_server_cfg_log()`, `mgc_process_nodemap_log
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(defect) This block of prototypes (`mgc_fs_clear()`, `mgc_set_info_async_server()`, `mgc_process_server_cfg_log()`, `mgc_process_nodemap_log()`, `mgc_process_config_server()`, `mgc_fs_setup()`) is still under `#ifdef CONFIG_LUSTRE_FS_SERVER`, along with the matching `#else`/`#endif` comments. Their callers in mgc_request.c are now under `IS_ENABLED()`.

With CONFIG_LUSTRE_FS_SERVER=m only CONFIG_LUSTRE_FS_SERVER_MODULE is defined. The prototypes disappear and `mgc_barrier_glimpse_ast` becomes NULL, but the calls are still compiled, so the build fails with implicit function declarations. Should this be `#if IS_ENABLED(CONFIG_LUSTRE_FS_SERVER)` too?
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_request.c:241 — (defect) This `mgc_fs_setup()` block in `do_config_log_add()` was left as `#ifdef`, but its error label `err_env:` below was changed to `IS_
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(defect) This `mgc_fs_setup()` block in `do_config_log_add()` was left as `#ifdef`, but its error label `err_env:` below was changed to `IS_ENABLED()`.

With =m, `err_env` is defined but never used. That is a -Wunused-label warning, and an error under -Werror. Servers would also never set up `cld_los`, so they get no local config copy. Should this one be converted too?
reply PS2 2026-11-04 09:09 Gerrit AI review for Lustre mgc_request.c:459 — (defect) Same problem in `config_log_add()`. The nodemap/barrier setup here is still `#ifdef`, while the declarations of `nodemap_cld`/`barr
Gerrit AI review for Lustre PS2 · 2026-11-04 09:09
(defect) Same problem in `config_log_add()`. The nodemap/barrier setup here is still `#ifdef`, while the declarations of `nodemap_cld`/`barrier_cld`, the `GOTO(out_barrier, rc)` and the `out_barrier:`/`out_nodemap:` labels were all converted.

With =m, `out_nodemap` is defined but never used. Also, no target would ever add the nodemap log and no MDT the barrier log.
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 mgc: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert mgc to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I20d9475c98f3a3abbedeaf48f021f319eaef1ffa
70327 master J –B ✓T ✓R 0/2
LU-18687 ldlm: handle CONFIG_LUSTRE_FS_SERVER tristate
1 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 1 unresolved M +40 −40
5h
build #135246 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-11-04 09:03 Gerrit AI review for Lustre ldlm_lock.c:117 — (defect) lustre/ldlm/ldlm_inodebits.c was not converted. It still has `#ifdef CONFIG_LUSTRE_FS_SERVER` at line 38, around ldlm_reprocess_ino
Gerrit AI review for Lustre PS2 · 2026-11-04 09:03
(defect) lustre/ldlm/ldlm_inodebits.c was not converted. It still has `#ifdef CONFIG_LUSTRE_FS_SERVER` at line 38, around ldlm_reprocess_inodebits_queue() and ldlm_process_inodebits_lock().

When Kconfig sets CONFIG_LUSTRE_FS_SERVER=m it defines only CONFIG_LUSTRE_FS_SERVER_MODULE. In that case these tables are built (IS_ENABLED() is true), but the two functions they point to are not:

    [LDLM_IBITS] = ldlm_process_inodebits_lock,
    ...
    [LDLM_IBITS] = ldlm_reprocess_inodebits_queue,

Wouldn't that give an undefined-symbol link error for ptlrpc? Out-of-tree builds still work only because lustre-build.m4 defines both macros. Should ldlm_inodebits.c:38 use `#if IS_ENABLED(CONFIG_LUSTRE_FS_SERVER)` as well, so that ldlm is fully converted as the commit message says?
owner James Simmons · uploader James Simmons · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 ldlm: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert ldlm to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I04fa91c00b5dc2cacb2919e046dcf2adce866262
69027 master J –B ✓T ✓R 0/2
LU-18687 build: handle CONFIG_LUSTRE_FS_SERVER tristate
6 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 6 unresolved M +80 −67
5h
build #135235 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets:
+5 earlier PS1 09-17 PS2 09-18 PS3 09-22 PS4 09-22 PS5 09-23
PS6 09-29 PS7 10-07 PS8 10-21 PS9 10-29 PS10 11-02
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre COMMIT_MSG:17 — (minor) This patch adds no headers and converts no code to IS_ENABLED(). Those parts appear to have moved to the per-subsystem patches in th
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(minor) This patch adds no headers and converts no code to IS_ENABLED(). Those parts appear to have moved to the per-subsystem patches in the series. What this patch does now is: add the four ifdef/ifndef checkpatch rules (dropping the old HAVE_SERVER_SUPPORT rule), switch wirecheck and the userspace wiretest.c to HAVE_SERVER_SUPPORT, add CONFIG_LUSTRE_FS_SERVER_MODULE, and add a second copy of SERVER_ONLY/SERVER_ONLY_EXPORT_SYMBOL() in include/lustre_compat/linux/module.h. Could the message describe those changes instead?
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre COMMIT_MSG:18 — (typo) "jus" -> "just"
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(typo) "jus" -> "just"
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre COMMIT_MSG:22 — (suggestion) The userspace part undoes the switch of wirecheck.c and lustre/utils/wiretest.c from HAVE_SERVER_SUPPORT to CONFIG_LUSTRE_FS_SE
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(suggestion) The userspace part undoes the switch of wirecheck.c and lustre/utils/wiretest.c from HAVE_SERVER_SUPPORT to CONFIG_LUSTRE_FS_SERVER. That switch came in with the wiretest regeneration in the commit below. CONFIG_LUSTRE_FS_SERVER is defined only when modules are enabled, so since that commit a server build of the utilities without modules silently skips the server wire checks. If that counts as a bug, consider adding:

Fixes: 39b5d59f8612 ("LU-18847 mdt: cleanup reint structs")
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre module.h:12 — (minor) lustre/include/obd_class.h still defines SERVER_ONLY and SERVER_ONLY_EXPORT_SYMBOL() under the same condition, so after this patch t
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(minor) lustre/include/obd_class.h still defines SERVER_ONLY and SERVER_ONLY_EXPORT_SYMBOL() under the same condition, so after this patch there are two copies. The compiler accepts them only because both have the same tokens. If one copy is later changed (for example to IS_ENABLED()) and the other is not, the build gets a macro-redefinition error. None of the patches in the LU-18687 series touches obd_class.h. Should the obd_class.h copy be removed here, or this copy be dropped until the move happens?
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre wirecheck.c:324 — (minor) `make newwiretest` writes this same output to both lustre/utils/wiretest.c and lustre/ptlrpc/wiretest.c. With HAVE_SERVER_SUPPORT he
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(minor) `make newwiretest` writes this same output to both lustre/utils/wiretest.c and lustre/ptlrpc/wiretest.c. With HAVE_SERVER_SUPPORT here, the next regeneration (needed by any wire change) puts `#ifdef HAVE_SERVER_SUPPORT` into lustre/ptlrpc/wiretest.c.

That is a problem on the kernel side in three ways:
- HAVE_SERVER_SUPPORT comes only from the autoconf config.h, so in the in-tree Kbuild build this series targets every server wire check in ptlrpc/wiretest.c would be compiled out without any warning.
- The new spelling.txt rule in this patch flags `ifdef HAVE_SERVER_SUPPORT` in kernel files, so every regenerated wiretest would trip checkpatch.
- It would undo the `#if IS_ENABLED(CONFIG_LUSTRE_FS_SERVER)` conversion of ptlrpc/wiretest.c in the ptlrpc patch of this series.

The kernel copy needs IS_ENABLED(CONFIG_LUSTRE_FS_SERVER) and the userspace copy needs HAVE_SERVER_SUPPORT, and no single CHECK_COND_START() argument gives both. One option is to emit the CONFIG_ form here and have lustre/utils/wirehdr.c map HAVE_SERVER_SUPPORT onto it. Another is to give wirecheck a kernel/userspace switch so each copy gets its own guard.
reply PS10 2026-11-04 09:01 Gerrit AI review for Lustre wiretest.c:2971 — (typo) This `#endif` comment still says CONFIG_LUSTRE_FS_SERVER, but the `#ifdef` above it was changed to HAVE_SERVER_SUPPORT. wirecheck wou
Gerrit AI review for Lustre PS10 · 2026-11-04 09:01
(typo) This `#endif` comment still says CONFIG_LUSTRE_FS_SERVER, but the `#ifdef` above it was changed to HAVE_SERVER_SUPPORT. wirecheck would print HAVE_SERVER_SUPPORT here, so the file looks hand-edited rather than regenerated. The same mismatch is at the LCFG_NODEMAP_* block (the `#endif` after LCFG_NODEMAP_BANLIST_DEL).
owner James Simmons · uploader James Simmons · PS10 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: handle CONFIG_LUSTRE_FS_SERVER tristate

Lustre treats CONFIG_LUSTRE_FS_SERVER as a boolean but when
imported into a Linux kernel it can be a tristate value,
turn off, module, or built in. To properly support
building in the Linux kernel tree with Kbuild using
tristate value we need to use the IS_ENABLED macro.
All other lustre CONFIG_* options are boolean so no need
to update them. For the IS_ENABLED macro to work we need
to define CONFIG_LUSTRE_FS_SERVER_MODULE. We also add
headers that are needed to actually build in the linux
kernel tree. This is jus the base patch and we need
many patches on top to give it a chance to land.

Change user land utilities not to use Kbuild options.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I410a9d2e95dd0edcbfa78ca901d2e904b0b3f2b4
70337 master J –B ✓T ✓R 0/2
LU-18687 obdecho: handle CONFIG_LUSTRE_FS_SERVER tristate
3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 3 unresolved M +50 −50
6h
build #135256 SUCCESS · tests all Maloo sessions
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-11-04 08:22 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) The subject and body say obdecho, but every hunk is under lustre/obdclass/, and lustre/obdecho/ still has about 30 `#ifdef CONFIG_LU
Gerrit AI review for Lustre PS1 · 2026-11-04 08:22
(style) The subject and body say obdecho, but every hunk is under lustre/obdclass/, and lustre/obdecho/ still has about 30 `#ifdef CONFIG_LUSTRE_FS_SERVER` lines (echo_client.c, echo_internal.h). Should this be `LU-18687 obdclass: handle CONFIG_LUSTRE_FS_SERVER tristate`?
reply PS1 2026-11-04 08:22 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) If the patch is refreshed, the body could say why the change is needed. With CONFIG_LUSTRE_FS_SERVER=m, Kbuild defines only CONFIG_L
Gerrit AI review for Lustre PS1 · 2026-11-04 08:22
(style) If the patch is refreshed, the body could say why the change is needed. With CONFIG_LUSTRE_FS_SERVER=m, Kbuild defines only CONFIG_LUSTRE_FS_SERVER_MODULE, so a plain `#ifdef` silently compiles the server code out.

It could also mention that lustre_handles.c changes from HAVE_SERVER_SUPPORT to CONFIG_LUSTRE_FS_SERVER. That one is a different macro, not just a change of form. It is equivalent in practice, because CONFIG_LUSTRE_FS_SERVER is defined whenever server modules are built.
reply PS1 2026-11-04 08:22 Gerrit AI review for Lustre lu_tgt_descs.c:138 — (suggestion) The headers this code depends on still use plain `#ifdef CONFIG_LUSTRE_FS_SERVER`. For example, `lq_rr` in struct lu_qos (lu_ob
Gerrit AI review for Lustre PS1 · 2026-11-04 08:22
(suggestion) The headers this code depends on still use plain `#ifdef CONFIG_LUSTRE_FS_SERVER`. For example, `lq_rr` in struct lu_qos (lu_object.h), OBDF_NO_TRANSNO in obd.h, the server includes and SERVER_ONLY in obd_class.h, and lustre_log.h.

In a =m in-kernel build, this block would be compiled but `qos->lq_rr` would not exist. The same applies to `OBDF_NO_TRANSNO` in class_cleanup(). Before this patch, that configuration was at least consistently client-only.

There's no in-tree Kconfig yet, so nothing is broken today. Would it make sense to convert lustre/include/ before (or together with) the .c files, so that each patch in the series builds on its own in the target configuration?
owner James Simmons · uploader James Simmons · PS1 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 obdecho: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert obdecho to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I13911144ed39a0cba72a9b9a4035569065571833
39910 master J –B ✓T ✓R 0/2
LU-13745 tests: test splice() reads with PCC-RO
4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
4 unresolved M +84 −3
3d
4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green — no vote yet from Wang Shilong, Qian Yingjin, Andreas Dilger
build #134957 SUCCESS · tests all Maloo sessions
no vote yet: Wang Shilong, Qian Yingjin, Andreas Dilger
patchsets: PS4 02-07 PS5 10-30 Andreas Dilger
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) On newer kernels the O_DIRECT runs don't reach pcc_file_splice_read(). In 6.12 (RHEL10), vfs_splice_read() sends O_DIRECT files to c
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(minor) On newer kernels the O_DIRECT runs don't reach pcc_file_splice_read(). In 6.12 (RHEL10), vfs_splice_read() sends O_DIRECT files to copy_splice_read() before it looks at ->splice_read:

    if ((in->f_flags & O_DIRECT) || IS_DAX(...))
        return copy_splice_read(in, ppos, pipe, len, flags);

That path is copy_splice_read()->ll_file_read_iter()->pcc_file_read_iter(). So -n and -nr test the PCC read_iter path there, not pcc_file_splice_read(). Should the message say that only el8-era kernels route O_DIRECT splice through pcc_file_splice_read()?
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre COMMIT_MSG:22 — (suggestion) An earlier patchset asked whether this should use 'trivial'. The kernel difference above is a new reason to ask. The el8.10/el9
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(suggestion) An earlier patchset asked whether this should use 'trivial'. The kernel difference above is a new reason to ask. The el8.10/el9.8 sessions that trivial now runs won't cover the 6.12 copy_splice_read() path. Would adding a RHEL10 client run, e.g. 'clientdistro=el10.2', be worthwhile here?
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre sanity-pcc.sh:2269 — (minor) Can this check pass when splice skips PCC? `lfs pcc attach` fills the Lustre page cache:
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(minor) Can this check pass when splice skips PCC? `lfs pcc attach` fills the Lustre page cache:

pcc_readonly_attach()->pcc_attach_data_archive() clears O_DIRECT, then pcc_copy_data() reads the whole file with kernel_read(). That happens after pcc_layout_rdonly_set(), and nothing drops those pages afterward.

For -nd and -ndr, a splice that fell back to the normal Lustre path would read from that cache. That sends no ost_read RPCs, and cmp still matches. Dropping the client's cached pages after the attach would make the check meaningful, e.g.:

    do_facet $SINGLEAGT $LCTL set_param -n ldlm.namespaces.*osc*.lru_size=clear
reply PS5 2026-10-31 20:48 Gerrit AI review for Lustre splice-test.c:169 — (minor) With -n, `size` comes from fstat() on the Lustre file, but the data comes from the PCC copy. If that copy is shorter, which is the k
Gerrit AI review for Lustre PS5 · 2026-10-31 20:48
(minor) With -n, `size` comes from fstat() on the Lustre file, but the data comes from the PCC copy. If that copy is shorter, which is the kind of bug this test looks for, splice() returns 0 at its EOF. do_splice1() and do_splice2() then loop forever on `while (size)` with spliced == 0. The test hangs until the test session times out instead of failing. The loop is pre-existing, but -n makes it reachable. Could spliced == 0 be treated as an unexpected EOF, as read_from_pipe() already does?
owner James Simmons · uploader Andreas Dilger · PS5 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-13745 tests: test splice() reads with PCC-RO

There is no test that splice() of a PCC-RO cached file reads from
the PCC copy through pcc_file_splice_read().  splice-test writes the
file before splicing it, which would invalidate a PCC-RO copy.

Add a -n option to splice-test to splice an existing file without
writing it, and copy the spliced data to stdout, so that it can be
compared with the expected data.  Also count the bytes actually read
from the pipe, not the requested size.

Add sanity-pcc test_21k to splice a PCC-RO cached file, with and
without O_DIRECT and a concurrent pipe reader, and check that no
read RPCs are sent to the OSTs and the data matches the PCC copy.

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Iae2517110c7332a81d0334232772ef1844d320ae
69872 master J –B ✓T ✓R +1/2
LU-18687 build: rework Lustre headers for upstreaming
8 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
upstream 8 unresolved M +62 −23
4d
8 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
no vote yet from patrick bot, Arshad Hussain, Andreas Dilger
build #134774 SUCCESS · tests all Maloo sessions
reviews: Timothy Day +1 2026-10-29 19:03
no vote yet: patrick bot, Arshad Hussain, Andreas Dilger
patchsets: PS1 10-21 PS2 10-22 PS3 10-22 PS4 10-29
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre COMMIT_MSG:11 — (style) The biggest change in this patch isn't described: lustre_compat.h is no longer included by lu_object.h or lustre_mdc.h. Through lust
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(style) The biggest change in this patch isn't described: lustre_compat.h is no longer included by lu_object.h or lustre_mdc.h. Through lustre_net.h, about 200 kernel .c files used to get lustre_compat.h, and now they don't. The fixups in obdo.c, fid_lib.c, dt_object.c and lustre_mdc.h follow from that. Could the body say so, and also name what "headers we need to build against the Linux kernel" means? That part is uapi/linux/lustre/lustre_ver.h for LUSTRE_VERSION_STRING in ec_kmod.c, ec_test.c and kinode.c.
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre sha2.h:3 — (suggestion) lustre_compat/fs/crypto/hkdf.c and lustre_compat/fs/crypto/keysetup.c still carry the same #ifdef HAVE_CRYPTO_SHA2_HEADER / <cr
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(suggestion) lustre_compat/fs/crypto/hkdf.c and lustre_compat/fs/crypto/keysetup.c still carry the same #ifdef HAVE_CRYPTO_SHA2_HEADER / <crypto/sha.h> block. Could they include this header instead?
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre filelock.h:3 — (suggestion) lustre/llite/file.c and lustre/ldlm/ldlm_flock.c still open-code the same #ifdef HAVE_LINUX_FILELOCK_HEADER. Since the goal is
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(suggestion) lustre/llite/file.c and lustre/ldlm/ldlm_flock.c still open-code the same #ifdef HAVE_LINUX_FILELOCK_HEADER. Since the goal is to remove these ifdefs, could they use this header too? Also, filelock.h, sha2.h and mm_types.h have no include guards, while prandom.h and stdarg.h added in the same patch do. This is harmless, but inconsistent.
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre stdarg.h:10 — (minor) On kernels that have linux/stdarg.h, this header now includes nothing. Before, lu_object.h included <linux/stdarg.h> explicitly, and
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(minor) On kernels that have linux/stdarg.h, this header now includes nothing. Before, lu_object.h included <linux/stdarg.h> explicitly, and va_list in lu_object.h now only works because some other header pulls it in. The other headers in this patch (prandom.h, filelock.h, sha2.h) include the real header in both branches. Should this one too?

    #ifdef HAVE_LINUX_STDARG_HEADER
    #include <linux/stdarg.h>
    #else
    #include <stdarg.h>
    #endif
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre fid_lib.c:21 — (nit) fid_lib.c doesn't seem to use anything from <linux/fs.h>, and obd.h already includes it. Is this include needed? <dt_object.h> makes s
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(nit) fid_lib.c doesn't seem to use anything from <linux/fs.h>, and obd.h already includes it. Is this include needed? <dt_object.h> makes sense because of struct dt_device.
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre lu_object.h:887 — (minor) struct lu_rdpg still declares `struct folio **rp_folios`. On kernels without folios (el8), that name only means `struct page` once l
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(minor) struct lu_rdpg still declares `struct folio **rp_folios`. On kernels without folios (el8), that name only means `struct page` once lustre_compat/linux/folio.h has done `#define folio page`. lu_object.h used to get that header through lustre_compat.h. With that include removed, the header is no longer self-contained.

Any file that includes lu_object.h before folio.h now sees this field as a pointer to an opaque `struct folio`. Its own code then uses `struct page`, which gives an incompatible-pointer-type build error on el8. dt_object.c only builds because the new mm_types.h include sits above obd_class.h. Without that line, lu_object.h is processed before folio.h in that file.

Would it be more robust for lu_object.h to include lustre_compat/linux/folio.h itself, instead of relying on each user's include order?
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre lustre_mdc.h:25 — (minor) Nothing in lustre_mdc.h uses the compat fs.h helpers. The include appears to be there so lmv_intent.c gets the compat inode_set_atim
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(minor) Nothing in lustre_mdc.h uses the compat fs.h helpers. The include appears to be there so lmv_intent.c gets the compat inode_set_atime()/inode_set_mtime(), which lmv_revalidate_slaves() calls. obdo.c got the same fix directly in the .c file. For consistency, and to avoid another hidden transitive dependency, should lmv_intent.c include lustre_compat/linux/fs.h itself, with lustre_mdc.h keeping <linux/fs.h>?
reply PS4 2026-10-31 04:28 Gerrit AI review for Lustre dt_object.c:22 — (style) This isn't a bug, but the new lustre_compat/linux/mm_types.h doesn't include <linux/mm_types.h>. It is only an alias for lustre_comp
Gerrit AI review for Lustre PS4 · 2026-10-31 04:28
(style) This isn't a bug, but the new lustre_compat/linux/mm_types.h doesn't include <linux/mm_types.h>. It is only an alias for lustre_compat/linux/folio.h, and what dt_object.c needs from it is ll_kmap_local_folio(). The include also only works because it sits between <linux/list.h> and <linux/module.h>, ahead of obd_class.h (see the lu_object.h comment). If lu_object.h included folio.h itself, could this file include folio.h directly, or nothing extra, and mm_types.h be dropped?
owner James Simmons · uploader James Simmons · PS4 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: rework Lustre headers for upstreaming

We have many ifdef HAVE_HEADER which makes upstreaming
more difficult. Create compat headers to clean up the
ifdefs. Also include headers we need to build against
the Linux kernel

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I2e32960dc2203f03f348821ffa33f5a169add42a
68228 master J !B ✓T ✓R 0/2
LU-11850 lov: create Netlink interface for pools
2 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
3 unresolved XL +980 −361
8d
2 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green, no reviews yet — add reviewers
1 thread(s) waiting on others
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #132342 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-23 PS2 08-28 PS3 09-01 PS4 09-03 PS5 09-26
threads: 2 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-23 09:19 Gerrit AI review for Lustre COMMIT_MSG:16 — Several hunks aren't accounted for by the description, and it isn't obvious which are deliberate:
Gerrit AI review for Lustre PS1 · 2026-08-23 09:19
Several hunks aren't accounted for by the description, and it isn't obvious which are deliberate:

- lnet/utils/lnetconfig/liblnetconfig_netlink.c empty-flow-set handling
- lov_obd.c switching class_register_type() from enable_proc=true to false
- llapi_param_display_value() changing its success return from 0 to the raw yaml rc
- llapi_get_poolbuf() gaining `poolname++`
- lu_tgt_pool.op_array changing from __u32 to u32
- lod_pool.c setting op_obd_idx (LOD has no .o_pool_find, so nothing reads it yet)

Could the message name the new symbols too - LUSTRE_CMD_POOLS, o_pool_find()/lov_pool_list(), lustre_pools_dump() - so the change is findable via git log?
reply PS4 2026-09-04 12:51 Gerrit AI review for Lustre lproc_lov.c:287 — (defect) With pools now living only under obd_debugfs_entry, the old world-readable /proc/fs/lustre/lov/<dev>/pools/<pool> is gone and the o
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(defect) With pools now living only under obd_debugfs_entry, the old world-readable /proc/fs/lustre/lov/<dev>/pools/<pool> is gone and the only copy is under /sys/kernel/debug, which is mode 0700.

llapi_get_poollist() and llapi_get_poolmembers() grew a Netlink fallback for that, but llapi_search_ost() did not - it still does poolpath() -> fopen(), and poolpath() -> get_lustre_param_path() -> cfs_get_param_paths() globs /sys/kernel/debug/lustre/lov/<fs>-*/pools, which a normal user cannot traverse (GLOB_NOMATCH -> -ENOENT).

That propagates to llapi_stripe_param_verify(), which turns it into "pool '%s fsname %s' does not exist" and -EINVAL, so `lfs setstripe -p <pool>` fails for an unprivileged user. `lfs df --pool` and llapi_layout_sanity() -> llapi_search_ost() hit the same path.

This change is the top of the relation chain, so nothing later picks it up. Should llapi_search_ost() get the same Netlink fallback in this patch?
owner James Simmons · uploader James Simmons · PS5 uploaded 39d ago · NEW · open in Gerrit ↗
commit message
LU-11850 lov: create Netlink interface for pools

With the need to move pools handling to debugfs this prevents
non-root user land applications and libraries from accessing
this information. Create a Netlink interface that provides the
same needed information. Update liblustreapi to use the
Netlink YAML approach to gather pools information. Pool source
defines itself by the obd device source and pool name so its
not the typical single collection of data to obd device. This
makes pools require its own dump function.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I769567270e45f2de074fad2fab78a2f0c3a741b4
68164 master J ✓B ✓T ✓R -1/2−
LU-20587 lnet: expand Netlink support for more peers
Alexey Lyashkov voted -1
7 unresolved M +102 −0
19d
Alexey Lyashkov voted -1
6 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
no vote yet from Serguei Smirnov, Chris Horn
build #132251 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov -1 2026-10-16 08:23
no vote yet: Serguei Smirnov, Chris Horn
patchsets: PS1 08-20 PS2 08-27 PS3 08-27 PS4 08-29 PS5 09-24
threads: 6 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-20 13:33 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) LU-20587 is filed as "lnetctl peer show -v 2 causes kernel oops", but the body only describes a capacity limit. Could it say that th
Gerrit AI review for Lustre PS1 · 2026-08-20 13:33
(style) LU-20587 is filed as "lnetctl peer show -v 2 causes kernel oops", but the body only describes a capacity limit. Could it say that this is fixing a crash, and describe how running out of skb space in lnet_peer_ni_show_dump() leads to the oops? That makes it much easier to decide whether the change needs backporting.
reply PS1 2026-08-20 13:33 Gerrit AI review for Lustre COMMIT_MSG:16 — (defect) This fixes a kernel oops, so it should carry a Fixes: tag. lnet_peer_ni_show_dump() and its single-skb dump came in with:
Gerrit AI review for Lustre PS1 · 2026-08-20 13:33
(defect) This fixes a kernel oops, so it should carry a Fixes: tag. lnet_peer_ni_show_dump() and its single-skb dump came in with:

Fixes: f0be00678cc8 ("LU-9680 lnet: collect data about peer_ni by using Netlink")
reply PS3 2026-08-28 13:13 Gerrit AI review for Lustre api-ni.c:7887 — Carrying forward the unbounded-allocation point from patchset 1, which does not look addressed yet: nothing caps cb->min_dump_alloc, and the
Gerrit AI review for Lustre PS3 · 2026-08-28 13:13
Carrying forward the unbounded-allocation point from patchset 1, which does not look addressed yet: nothing caps cb->min_dump_alloc, and there is no error when the computed size is unreasonable. The sibling handlers in this file and in obdclass do bound it, e.g. lnet_route_show_start():

    len += ROUTER_MSG_VALUES_SIZE * rlist->lgrl_count;
    if (len > BIT(sizeof(cb->min_dump_alloc) << 3)) {
            NL_SET_ERR_MSG(extack, "Netlink msg is too large");
            rc = -EMSGSIZE;
    } else {
            cb->min_dump_alloc = len;
    }

Peers are unbounded (unlike NIs, which are capped by lnet_interfaces_max), so the same guard - or a cap on how many peers one dump covers - seems needed here too.
reply PS4 2026-08-30 07:06 Gerrit AI review for Lustre api-ni.c:7868 — (defect) Nothing caps cb->min_dump_alloc and there is no error when the computed total is unreasonable. This was raised on patchset 1 ("allo
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(defect) Nothing caps cb->min_dump_alloc and there is no error when the computed total is unreasonable. This was raised on patchset 1 ("allocating an 4G in kernel - very very bad style") and the reply agreed peers still need overflow handling since, unlike NIs, they are not bounded by lnet_interfaces_max - but patchset 4 still accumulates straight into the field.

The sibling handler in this file bounds it, in lnet_route_show_start():

    len += ROUTER_MSG_VALUES_SIZE * rlist->lgrl_count;
    if (len > BIT(sizeof(cb->min_dump_alloc) << 3)) {
            NL_SET_ERR_MSG(extack, "Netlink msg is too large");
            rc = -EMSGSIZE;
    } else {
            cb->min_dump_alloc = len;
    }

and lustre/obdclass/kernelcomm.c does the same. Two reasons that guard matters here:

min_dump_alloc is u16 in netlink_callback before v5.7, so on the older supported kernels the += silently wraps modulo 65536 - and can wrap to less than PEER_KEY_TABLE_MSG_SIZE.

On newer kernels the skb head is still one contiguous kmalloc, not a kvmalloc: netlink_dump() calls alloc_skb(alloc_min_size, GFP_KERNEL), and __alloc_skb() -> kmalloc_reserve() ends in kmalloc_node_track_caller(). So above KMALLOC_MAX_SIZE the dump can only fail with -ENOBUFS, and below it every dump invocation is asking for a high-order allocation.
reply PS4 2026-08-30 07:06 Gerrit AI review for Lustre api-ni.c:8233 — (defect) None of the nla_nest_start() results in this handler are checked, and nla_nest_end() writes through the pointer without a NULL test
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(defect) None of the nla_nest_start() results in this handler are checked, and nla_nest_end() writes through the pointer without a NULL test:

    static inline int nla_nest_end(struct sk_buff *skb, struct nlattr *start)
    {
            unsigned long diff = skb_tail_pointer(skb) - (unsigned char *)start;
            start->nla_len = diff;

So once the skb runs out of room, nla_nest_start() returns NULL and the matching nla_nest_end() at the bottom of the loop faults. The nests opened for the -v 2 stats (send/recv/drop/health) are the ones LU-20587 names in its title.

Enlarging the skb makes this less likely, but any residual under-estimate still lands here. Should the dump bail out with -EMSGSIZE when a nest cannot be opened, so a short estimate degrades into a truncated dump instead of an oops?
reply PS5 2026-09-25 01:14 Gerrit AI review for Lustre api-ni.c:7868 — (defect) Nothing caps cb->min_dump_alloc and there is no error return when the computed total is unreasonable - it just accumulates. This is
Gerrit AI review for Lustre PS5 · 2026-09-25 01:14
(defect) Nothing caps cb->min_dump_alloc and there is no error return when the computed total is unreasonable - it just accumulates. This is the objection from patchset 1 ("allocating an 4G in kernel - very very bad style. Please use a multipart messages."), which was answered with "I do agree peer needs to still handle overflows since peers unlike NI (lnet_interfaces_max) is not bounded". Patchset 5 still has no bound.

The sibling handler in this file does bound it, lnet_route_show_start():

    len += ROUTER_MSG_VALUES_SIZE * rlist->lgrl_count;
    if (len > BIT(sizeof(cb->min_dump_alloc) << 3)) {
            NL_SET_ERR_MSG(extack, "Netlink msg is too large");
            rc = -EMSGSIZE;
    } else {
            cb->min_dump_alloc = len;
    }

At version 4/5 this charges roughly 945 bytes for a single-NI peer, so a few thousand peers already asks for a multi-megabyte buffer on every `lnetctl peer show`. Could the same guard, or a cap on how many peers one dump covers, be applied here?
owner James Simmons · uploader James Simmons · PS5 uploaded 41d ago · NEW · open in Gerrit ↗
commit message
LU-20587 lnet: expand Netlink support for more peers

Currently the LNet Netlink peer interface uses the default size
of 64K for it struct sk_buf. This limits the number of peers
that can be reported with the Netlink layer. We can manually
calculate the cb->min_dump_alloc to allocate the struct sk_buf
of the needed size.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I900ae18d6098df0df699df6a64d1d462702c2b4a
13135 master J –B ✓T ✓R +1/2−
LU-6034 lnet: Enable lnetctl to handle checksum settings for LNet
Oleg Drokin voted -1
stalled 456d S +33 −7
456d
reviews: Doug Oucharek +1 2015-08-17 17:01 · Oleg Drokin -1 2015-08-28 02:01 · Liang Zhen +1 2015-08-25 12:49
no vote yet: Dmitry Eremin, Isaac Huang, Jian Yu, Frank Zago, Amir Shehata
owner James Simmons · uploader James Simmons · PS12 uploaded 4110d ago · NEW · open in Gerrit ↗
commit message
LU-6034 lnet: Enable lnetctl to handle checksum settings for LNet

Add the ability for lnetctl to query or set the checksum algorithm
for an LNet interface. This patch only enables user land side of
setting this.

Change-Id: I40ec55e73032d24baf3133703efc59d49446d692
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
39337 master J !B ✓T ✓R -1/2−
LU-11621 utils: optimize lustre_rsync with copy_file_range()
John Hammond voted -1
stalled 463d S +16 −1
463d
John Hammond voted -1
no vote yet from Shaun Tancheff, Andreas Dilger
build #17526 SUCCESS
reviews: John Hammond -1 2022-05-13 18:53
no vote yet: Shaun Tancheff, Andreas Dilger
owner James Simmons · uploader James Simmons · PS5 uploaded 2189d ago · NEW · open in Gerrit ↗
commit message
LU-11621 utils: optimize lustre_rsync with copy_file_range()

Newer kernels and glibc offer copy_file_range() which avoids
a context switch needed with read() + write() for file data
copying. In the future Lustre can look to optimize this copy
on the server backend. Updating lustre_rsync to use
this new functionality which should give a performance boost.

Test-Parameters: trivial testlist=lustre-rsync-test
Change-Id: Ibd67847f8d876075f77e14e2721d22d4905cb9ff
Signed-off-by: James Simmons <jsimmons@infradead.org>
49348 master J ✓B ✓T –R -1/2−
LU-12251 tests: re-enable running sanity-flr for PPC
Andreas Dilger voted -1
stalled 463d XS +1 −2
463d
Andreas Dilger voted -1
build OK — testing in progress (typically 6–14h)
build #91089 SUCCESS
reviews: Andreas Dilger -1 2022-12-12 19:50
no vote yet: xinliang
patchsets: PS1 12-08 PS2 12-08 PS3 12-08 PS4 12-10
owner James Simmons · uploader James Simmons · PS4 uploaded 1425d ago · NEW · open in Gerrit ↗
commit message
LU-12251 tests: re-enable running sanity-flr for PPC

Its been a long time since PPC had issues with FLR test.
Re-enable those test. We do keep test 50a disabled since
it fails on ARM and PPC platforms.

Test-Parameters: trivial clientarch=ppc64 testlist=sanity-flr

Change-Id: Ia1007f6213b530d4a5695ff6143be14ac2736a6c
Signed-off-by: James Simmons <jsimmons@infradead.org>
49349 master J ✓B ✓T ✓R -1/2−
LU-12252 tests: re-enable running sanity-hsm for PPC
Andreas Dilger voted -1
stalled 463d S +0 −22
463d
build #91076 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2022-12-10 19:29
no vote yet: Etienne AUJAMES, xinliang, Jian Yu
patchsets: PS1 12-08 PS2 12-08 PS3 12-08
owner James Simmons · uploader James Simmons · PS3 uploaded 1426d ago · NEW · open in Gerrit ↗
commit message
LU-12252 tests: re-enable running sanity-hsm for PPC

Its been a long time since PPC had issues with HSM test.
Re-enable those test.

Test-Parameters: trivial clientdistro=el8.6 clientarch=ppc64le testlist=sanity-hsm

Change-Id: Ibe18524f6a1a92b66a2b6f9454374910761e8344
Signed-off-by: James Simmons <jsimmons@infradead.org>
▶

In CI

(0)
nothing here right now
▶

Needs reviewers

(2)
38883 master J ✓B ✓T ✓R 0/2
LU-11621 utils: optimize migrate_copy_data() with copy_file_range()
CI green — no vote yet from Andreas Dilger
stalled 456d S +39 −0
456d
build #18181 SUCCESS
no vote yet: Andreas Dilger
owner James Simmons · uploader James Simmons · PS17 uploaded 2156d ago · NEW · open in Gerrit ↗
commit message
LU-11621 utils: optimize migrate_copy_data() with copy_file_range()

Newer kernels and glibc offer copy_file_range() which avoids
a context switch needed with read() + write() for file data
copying. In the future Lustre can look to optimize this copy
on the server backend. Updating migrate_copy_date() to use
this new functionality which should give a performance boost.

Change-Id: I601fb1e413f243775a464d8145351d772e6c8ff1
Signed-off-by: James Simmons <jsimmons@infradead.org>
40548 master J !B ✓T ✓R 0/2
LU-11621 utils: add special code to profile performance
CI green — no vote yet from Andreas Dilger
stalled 2188d M +54 −22
2188d
build #17528 SUCCESS
no vote yet: Andreas Dilger
owner James Simmons · uploader James Simmons · PS1 uploaded 2189d ago · NEW · open in Gerrit ↗
commit message
LU-11621 utils: add special code to profile performance

Add the ability to migrate files with copy_file_range() with a
new optional lfs flag. Also add the ability to move different
size chunks for migration to see the performance.

To test this I create two pools and made a file to move between
them. Original the file is created on the 'slow' pool. The
script I used to test this is as follow:

echo "creating file ....."
lfs setstripe -c $((TGT_MAX / 2)) -p $FSNAME.slow $MOUNT/testfile
dd if=/dev/urandom of=$MOUNT/testfile bs=1M conv=fdatasync count=$((512 * TGT_MAX))
echo 3 > /proc/sys/vm/drop_caches
lfs ladvise -a dontneed $MOUNT/testfile
for iosize in 1M 4M 16M 64M; do
        echo "migrating file iosize = $iosize for transfer direct I/0"
        time lfs migrate --pool $FSNMAE.fast -z $iosize $MOUNT/testfile
        for copy in --non-direct --copy-range; do
                echo "migrating file iosize = $iosize for transfer $copy"
                time lfs migrate --pool $FSNMAE.fast $copy -z $iosize $MOUNT/testfile
                printf '\n'
        done
done

This patch is only for testing.

Change-Id: I057208d8f9d095a2f652e0e649bd5a77a87c9854
Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
▶

Waiting on reviewers

(4)
70331 master J –B ✓T ✓R 0/2
LU-18687 llite: handle CONFIG_LUSTRE_FS_SERVER tristate
upstream CI@PS2 XS +1 −1
5h
build #135247 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02 PS3 11-02
build/test results are from PS2 — PS3…PS3 changed only the commit message (votes copied, CI not re-run)
owner James Simmons · uploader James Simmons · PS3 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 llite: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert llite to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ie27fe74cf8e160286b23f6a79195066857395c6d
70330 master J –B ✓T ✓R 0/2
LU-18687 obdecho: handle CONFIG_LUSTRE_FS_SERVER tristate
upstream S +19 −19
6h
build #135251 SUCCESS · tests all Maloo sessions
patchsets: PS1 11-02 PS2 11-02 PS3 11-02
owner James Simmons · uploader James Simmons · PS3 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-18687 obdecho: handle CONFIG_LUSTRE_FS_SERVER tristate

Convert obdecho to tristate CONFIG_LUSTRE_FS_SERVER

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I446451adfca5a797de969041a12c214d6a1a77e8
24560 master J –B ✓T ✓R 0/2
LU-8980 llite: add tracepoint support for llite layer
stalled 141d XL +905 −509
141d
no vote yet: Dmitry Eremin, Jinshan Xiong, Lustre Buildbot
owner James Simmons · uploader James Simmons · PS1 uploaded 3594d ago · NEW · open in Gerrit ↗
commit message
LU-8980 llite: add tracepoint support for llite layer

Add initial trace events for debug logs that never
get printed to the console for llite layer.

Change-Id: Ia15f669271218ae6e79754d9a9ee4080cee7a957
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
48170 b2_15 J ✓B ✓T ✓R +1/2
LU-6864 tests: properly skip sanity/245b in interop
no vote yet from Lai Siyao, Oleg Drokin
stalled 1313d S +9 −9
1313d
build #89256 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2022-08-27 12:39 · Andreas Dilger +1 2023-03-31 21:40
no vote yet: Lai Siyao, Oleg Drokin
patchsets: PS1 08-09 PS2 08-26
owner James Simmons · uploader James Simmons · PS2 uploaded 1531d ago · NEW · open in Gerrit ↗
commit message
LU-6864 tests: properly skip sanity/245b in interop

Skip sanity test_245b if the server does not support multi_mod_rpcs.

Lustre-commit: https://review.whamcloud.com/47656
Lustre-commit: c4ebdc96061ae9c24ac471b2866f2087bc3e98d4

Test-Parameters: trivial serverversion=2.14 testlist=sanity env=ONLY=245
Fixes: 23028efcae01 ("LU-6864 osp: manage number of modify RPCs in flight")
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: Ibd73625c64deaa99f6f2a515bc1214cbb83ebbe5
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
▶

Ready to land

(3)
37013 master J –B ✓T ✓R +2/2
LU-9868 llite: use d_splice_alias for directories.
all green — queued for landing (master-next)
upstream pw_shepherd master-next 5 unresolved M +41 −11
2d
all green — queued for landing (master-next)
5 reviewer comment(s) to address if a respin is needed — last from Andreas Dilger
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-sec. session
build #134050 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-19 23:42 · Alex Zhuravlev +1 2026-10-30 05:47
no vote yet: Qian Yingjin, Neil Brown, Lai Siyao, Timothy Day, Oleg Drokin
patchsets:
+27 earlier PS3 02-22 PS4 02-27 PS5 02-27 PS6 03-18 PS7 03-19 PS8 03-22 PS9 03-23 PS10 03-25 PS11 03-26 PS12 03-26 PS13 05-18 PS14 10-10 PS15 10-10 PS16 03-21 PS17 08-06 PS18 04-07 PS19 04-08 PS20 04-08 PS21 04-09 PS22 04-10 PS23 04-14 PS24 04-16 PS25 04-17 PS26 05-01 PS27 05-13 PS28 07-21 Oleg Drokin PS29 07-23 Oleg Drokin
PS30 07-23 Oleg Drokin PS31 07-23 Oleg Drokin PS32 07-26 Oleg Drokin PS33 09-04 Oleg Drokin PS34 10-19 patrick bot
your previous vote: -1 on PS33 (2026-10-19 15:33) — now at PS34
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS34 2026-10-19 23:42 Andreas Dilger COMMIT_MSG:21 — The commit message is far too long and should be made more concise. It does not need to list every function modified, only those that are i
Gerrit AI review for Lustre PS31 · 2026-07-24 08:25
(minor) The double-iput fix described here lands in revalidate_statahead_dentry(), not ll_statahead_interpret(). The latter only igrab()s the inode into se_inode; it is revalidate_statahead_dentry() that calls ll_splice_alias() and now clears se_inode before the IS_ERR() check. Worth correcting the name so the change stays findable via git log later.
patrick bot PS34 · 2026-10-19 22:21
Patrick-Bot: The commit message names revalidate_statahead_dentry() as of PS33.
Andreas Dilger PS34 · 2026-10-19 23:42
The commit message is far too long and should be made more concise.  It does not need to list every function modified, only those that are important to the main patch functionality.
reply PS28 2026-07-23 02:10 Oleg Drokin patchset comment — so, the OOM is real, it was traced to a longer retention of RPCs in replay list, mostly related to directory-churn workloads it seems.
Alex Zhuravlev PS28 · 2026-07-22 16:31
well....

[  368.091239] Lustre: lustre-MDT0000-mdc-ffff89a08865b000: Force grant RPC slot (1 current) to proc with flag: 208840.
[  368.091527] Lustre: Skipped 3 previous similar messages
[  370.228394] Lustre: lustre-MDT0000-mdc-ffff89a041f49000: Force grant RPC slot (1 current) to proc with flag: 208840.
[  374.536843] Lustre: lustre-MDT0000-mdc-ffff89a041f49000: Force grant RPC slot (1 current) to proc with flag: 208840.
[  374.536967] Lustre: Skipped 2 previous similar messages
[  382.893306] Lustre: lustre-MDT0000-mdc-ffff89a041f49000: Force grant RPC slot (8 current) to proc with flag: 208840.
[  382.893500] Lustre: Skipped 51 previous similar messages
[  399.281310] Lustre: lustre-MDT0000-mdc-ffff89a08865b000: Force grant RPC slot (4 current) to proc with flag: 208840.
[  399.282289] Lustre: Skipped 140 previous similar messages
[  402.163522] obd_memory max: 4662112620, obd_memory current: 4661744265
[  402.163950] kthreadd invoked oom-killer: gfp_mask=0x400dc0(GFP_KERNEL_ACCOUNT|__GFP_ZERO), order=2, oom_score_adj=0
[  402.164047] CPU: 0 PID: 2 Comm: kthreadd Tainted: G           O      -------  ---  5.14.0 #26
[  402.164115] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-9.fc43 06/10/2025
[  402.164175] Call Trace:
[  402.165043]  <TASK>
[  402.166569]  dump_stack_lvl+0x57/0x7d
[  402.167511]  dump_header+0x4f/0x486
[  402.167545]  ? ___ratelimit+0x83/0x100
[  402.167578]  oom_kill_process.cold+0x54/0x79
[  402.167614]  ? lock_release+0x1c7/0x2e0
[  402.167648]  ? _raw_spin_unlock+0x1a/0x30
[  402.167679]  out_of_memory+0xc8/0x510
[  402.167712]  __alloc_pages_slowpath.constprop.0+0x6d3/0xcb0
[  402.167751]  __alloc_pages+0x2ba/0x2d0
[  402.167781]  copy_process+0x1fd/0x24b0
[  402.167813]  ? update_load_avg+0x60/0x260
[  402.167845]  ? lock_acquire+0x15c/0x2f0
[  402.167875]  ? __update_load_avg_se+0x153/0x380
[  402.167913]  ? trace_pelt_se_tp+0x29/0xc0
[  402.167945]  ? lock_release+0x1c7/0x2e0
[  402.167976]  kernel_clone+0x86/0x340
[  402.168005]  ? do_raw_spin_unlock+0x46/0x90
[  402.168051]  ? finish_task_switch.isra.0+0xef/0x330
[  402.168088]  kernel_thread+0x4a/0x50
[  402.168118]  ? kthread_park+0x80/0x80
[  402.168151]  kthreadd+0xc5/0x110
[  402.168185]  ? kthread_is_per_cpu+0x20/0x20
[  402.168220]  ret_from_fork+0x1f/0x30
[  402.168290]  </TASK>
[  402.168321] Mem-Info:
[  402.168347] active_anon:255934 inactive_anon:234092 isolated_anon:0
[  402.168347]  active_file:236 inactive_file:1651 isolated_file:214
[  402.168347]  unevictable:0 dirty:0 writeback:192
[  402.168347]  slab_reclaimable:9149 slab_unreclaimable:1153520
[  402.168347]  mapped:875 shmem:467586 pagetables:2320
[  402.168347]  sec_pagetables:0 bounce:0
[  402.168347]  kernel_misc_reclaimable:0
[  402.168347]  free:30537 free_pcp:910 free_cma:0
Oleg Drokin PS28 · 2026-07-23 02:10
so, the OOM is real, it was traced to a longer retention of RPCs in replay list, mostly related to directory-churn workloads it seems.

It is also affected by Alex's case of not carrying the previous patch in the series (67391) so with 2000 stripes seen the normally relatively small RPCs blow up to 256k greatly exacerbating the memory consumption.

the problem is open requests are leaked because somehow atomic open machinery returns IT_OPEN_OPEN that sets rq_replay that is never cleared.
reply PS34 2026-10-19 22:21 patrick bot namei.c:637 — Patrick-Bot: Since PS33 the patch no longer discards d_lustre_invalid() aliases: the legacy branch d_move()s and reuses them as before, for
Oleg Drokin PS28 · 2026-07-23 02:10
after some more thinking, this looks wrong.

For regular files we absolutely want to reuse these stale dentries, all this means is we lost the lookup bit some time ago, so what?

I guess for DIRECTORIES we don't and if it's an open by fid we can have a directory here, so we should also check if we found a directory before we throw it away.

Or should we only throw away for the by_fid regardless of mode? Aliases for regular files don't really much do they so probably not?

Though in instrumentation this is NOT a big signal compared to the leak (200 hits here for 8000 rq_replay requests stuck)
patrick bot PS34 · 2026-10-19 22:21
Patrick-Bot: Since PS33 the patch no longer discards d_lustre_invalid() aliases: the legacy branch d_move()s and reuses them as before, for files and by-FID directories alike.
reply PS34 2026-10-21 02:17 Gerrit AI review for Lustre namei.c:615 — (minor) This isn't a bug, but this function comment no longer describes the function. Directories in the normal namespace and negative dentr
Gerrit AI review for Lustre PS34 · 2026-10-21 02:17
(minor) This isn't a bug, but this function comment no longer describes the function. Directories in the normal namespace and negative dentries now go straight through d_splice_alias(); only non-directories and by-FID directories get the invalid-alias reuse. If the patch is refreshed, it would be worth updating.
reply PS34 2026-10-21 02:17 Gerrit AI review for Lustre namei.c:637 — (defect) Only the immediate parent is tested here, so lookups one level below .lustre/fid/<FID> take the d_splice_alias() path. The commit m
Gerrit AI review for Lustre PS34 · 2026-10-21 02:17
(defect) Only the immediate parent is tested here, so lookups one level below .lustre/fid/<FID> take the d_splice_alias() path. The commit message accepts this, but the cases go beyond what it describes.

With the old d_add(), all of these simply created a duplicate dentry:

- openat(fd_of(.lustre/fid/<aFID>), "b") on a directory b: __d_unalias() takes the cross-parent path. It returns -ESTALE whenever the s_vfs_rename_mutex or the a inode i_rwsem trylock fails. When it succeeds, it moves b's real dentry under .lustre/fid/<aFID>, so the cwd of any process in $MOUNT/a/b, and any mount stacked on b, now reports a by-FID path.
- .lustre/fid/<ROOT-FID>/.lustre: the parent is the duplicate root dentry created by the by_fid branch. The real .lustre dentry is a d_ancestor() of the new dentry, so this returns -ELOOP, and the VFS does not retry -ELOOP.
- The same thing happens for any top-level directory under .lustre/fid/<ROOT-FID>/: its real dentry is moved there.

The commit message says covering this needs new dentry state. Would walking de->d_parent towards the root and testing fid_is_obf() at each level (under rcu_read_lock()/rename_lock) be enough? Every dentry the by_fid branch creates is hashed under the .lustre/fid dentry, so the whole by-FID subtree can be recognised by ancestry alone.
tags: pw_shepherd
owner James Simmons · uploader patrick bot · PS34 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-9868 llite: use d_splice_alias for directories.

In the Linux dcache a directory only ever has one dentry,
so d_splice_alias() can be used by ll_splice_alias() for
directories. It will find the one dentry whether it is
DCACHE_DISCONNECTED or IS_ROOT() or d_lustre_invalid().
Separating out the directories from non-directories will
allow us to simplify the non-directory code.

A negative lookup (@inode NULL) takes the new branch as
well, where it used to reach d_add(de, NULL):
d_splice_alias(NULL, de) does the same __d_add(), with the
BUG_ON(!d_unhashed(de)) it opens with. No caller passes a
hashed dentry: ll_atomic_open() either hands over a
d_in_lookup() dentry or d_drop()s it first.

Unlike the old ll_splice_alias() d_add() path,
d_splice_alias() consumes the passed inode reference in
every case (including on its error returns -ELOOP/-ESTALE)
and can now return an error. Adjust the callers to the new
contract:

 - revalidate_statahead_dentry() transferred the sa_entry
   inode reference to the dentry (se_inode = NULL) only on
   the success path, so on the d_splice_alias() error path
   the reference it already dropped was iput() a second
   time when the sa_entry was freed, underflowing i_count
   (WARNING at fs/inode.c ihold, hit under an rm workload
   with statahead active). Transfer ownership away from
   the sa_entry before inspecting the result.

 - A by-FID (.lustre/fid/) directory lookup must not d_move
   the directory's real (connected) dentry onto the fid
   path. d_splice_alias() does exactly that for an ordinary
   directory: __d_find_any_alias() returns its connected
   dentry, which is neither an ancestor of the new
   .lustre/fid/<FID> dentry nor IS_ROOT(), so __d_unalias()
   moves it there and the normal path to the directory
   stops working. ($MOUNT itself and .lustre are ancestors,
   so they come back -ELOOP instead, equally fatal to
   sanity 233a/233b.) Keep the legacy alias handling for
   OBF-parented directory lookups; use d_splice_alias()
   only for normal-namespace lookups, where it keeps a
   directory to a single dentry (LU-17536).

   The test is on the immediate parent's FID, so it
   recognises the entries directly under .lustre/fid/ and
   nothing else about the by-FID namespace. Two cases are
   therefore left as d_splice_alias() handles them, both of
   them consequences of the OBF namespace giving a
   directory a second dentry in the first place:

    * .lustre/fid/<dir-FID>/<name>: the parent is the
      duplicate dentry this branch made for <dir-FID>, so
      the child takes the d_splice_alias() path and
      __d_unalias() moves its real dentry into the by-FID
      tree.
    * $MOUNT/<path>/<dir> for a directory that already has
      a by-FID dentry: __d_find_any_alias() hands that
      dentry back, and __d_unalias() moves it into the
      normal namespace. That is the useful direction, but
      one the old d_add() never took.

   In both, __d_unalias() takes its cross-parent path and
   can return -ESTALE: it mutex_trylock()s
   s_vfs_rename_mutex, which any rename on the filesystem
   holds, and inode_trylock_shared()es the alias's parent,
   which any create, unlink, mkdir, rmdir or setattr in
   that directory holds exclusively. The VFS retries once
   with LOOKUP_REVAL, but a lookup that could not fail
   before now can, and under a directory-churn workload it
   will meet those holders. Covering these means
   recognising the whole by-FID subtree (marking the
   dentries this branch creates), which is new dentry state
   and is left for its own patch.

   The by-FID test does not bound that -ESTALE exposure: a
   directory renamed on another client keeps an in-use
   dentry under its old parent, and a lookup of the new
   path takes the same cross-parent path. That is ordinary
   d_splice_alias() behaviour.

The legacy branch is otherwise left exactly as it was: an
alias that ll_find_alias() returns is still d_move()d onto
the new dentry and reused, whether it is d_lustre_invalid()
or not. d_lustre_invalid() only means the LOOKUP lock was
dropped at some point, which is the common case, and
reusing the dentry is the whole point of ll_find_alias();
discarding it instead would replace the dentry that open
files and mounts are attached to on every lookup that races
a lock cancellation. It would also be a behaviour change
for regular files, which this patch is not about.

Linux-commit: e9d4f0b9f55920821845b8e063ed593422c18d8a
Linux-commit: 1d6e65bedf5878c8dd5b089d3f034b619bbb8a77

Test-Parameters: optional testlist=racer
Signed-off-by: NeilBrown <neil@brown.name>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: If80a02b77c4fc62cdb90e86cdb8a0f9eba21193b
69023 master J –B ✓T ✓R +2/2
LU-18687 build: remove some lnet abstractions for Linux kernel tree
all green — ready to land (not in master-next yet)
upstream 3 unresolved M +103 −47
5d
all green — ready to land (not in master-next yet)
3 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #134643 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-10-30 06:49 · Timothy Day +1 2026-10-29 18:57
no vote yet: Serguei Smirnov, Shaun Tancheff, Chris Horn, Andreas Dilger
patchsets:
+7 earlier PS1 09-17 PS2 09-18 PS3 09-22 PS4 09-22 PS5 09-22 PS6 09-22 PS7 09-23
PS8 09-23 PS9 09-29 PS10 10-22 PS11 10-22 PS12 10-28
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS12 2026-10-29 22:55 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but the summary is wrapped onto a second line (" kernel tree") with no blank line after it, so git joins the two a
Gerrit AI review for Lustre PS12 · 2026-10-29 22:55
(style) This isn't a bug, but the summary is wrapped onto a second line (" kernel tree") with no blank line after it, so git joins the two and the subject becomes "LU-18687 build: remove some lnet abstractions for Linux  kernel tree": 68 characters with a double space, over the 62-character limit. The patch also touches lustre/obdclass and lustre/osc, so it isn't only LNet. Something like "LU-18687 build: drop compat ifdefs for Linux kernel tree" would fit on one line.
reply PS9 2026-10-30 06:48 Arshad Hussain moduleparam.h:10 — This is to avoid searching from lustre_compat/linux (from top) and find actual linux kernel include/linux this #include_next is used. Your c
Serguei Smirnov PS9 · 2026-10-30 02:52
Why don't we use regular #include? Doesn't #include_next cause us to make assumptions about the order in which directories are processed?
Arshad Hussain PS9 · 2026-10-30 06:48
This is to avoid searching from lustre_compat/linux (from top) and find actual linux kernel include/linux this #include_next is used. Your concern is correct, but here it is the design.
reply PS12 2026-10-29 22:55 Gerrit AI review for Lustre lnet_rdma.c:15 — (minor) If the patch is refreshed: <lustre_compat/linux/pci-p2pdma.h> is now included above and already pulls in <linux/pci-p2pdma.h> when H
Gerrit AI review for Lustre PS12 · 2026-10-29 22:55
(minor) If the patch is refreshed: <lustre_compat/linux/pci-p2pdma.h> is now included above and already pulls in <linux/pci-p2pdma.h> when HAVE_IS_PCI_P2PDMA_PAGE is set, so this include is redundant. <linux/pci.h> and <linux/memremap.h> are still needed for pci_p2pdma_distance() and page_pgmap().
owner James Simmons · uploader James Simmons · PS12 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: remove some lnet abstractions for Linux
 kernel tree

Dropping the current LNet tree without any compat macros breaks the
native build. Resolve those build issues with the following:

1) HAVE_MODULE_LOADING_SUPPORT doesn't exist upstream so instead
   replace it with CONFIG_LUSTRE_FS_COMMON_MODULE and
   CONFIG_LNET_MODULE which works with the if IS_MODULE macro.

2) Saw build issues with LIBCFS_DEBUG not defined which is the
   case in the Linux kernel. We need a way to setup in up but
   for now handle LIBCFS_DEBUG being undefined

3) Move param_set_uint_minmax() to the compat layer since it
   was colliding.

4) We have a bunch of ifdef to handle missing headers. Make
   the headers in compat layer so we can drop those ifdefs.
   The Linux kernel will need lustre_ver.h and it will need
   to contain LUSTRE_VERSION information which will be done
   in a later patch.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ib686e32d9d1f09f8df8cd4d7bbe21b18e29d6e7e
48169 b2_15 J !B ✓T ✓R +2/2
LU-6864 osp: manage number of modify RPCs in flight
all green — ready to land (not in b2_15-next yet)
stalled 1531d L +225 −187
1531d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #89213 SUCCESS · tests all Maloo sessions
reviews: Lai Siyao +1 2022-08-25 08:41 · Andreas Dilger +1 2022-08-23 19:55
no vote yet: Gregoire Pichon
patchsets: PS1 08-09 PS2 08-09 PS3 08-23
owner James Simmons · uploader James Simmons · PS3 uploaded 1533d ago · NEW · open in Gerrit ↗
commit message
LU-6864 osp: manage number of modify RPCs in flight

Currently we use a rpc_lock to ensure concurrent in-flight
request are handled serially to prevent the execution status
from being over written. This patch changes the osp component
to send multiple modify RPCs in parallel to the MDT. This will
improve metadata performance of cross-MDT operations.

For testing replace mkdirmany with createmany -d which does the
same thing.

Lustre-commit: https://review.whamcloud.com/14375
Lustre-commit: 23028efcae01bf1274a68fd2dd379fbb33300e82

Signed-off-by: Gregoire Pichon <gregoire.pichon@bull.net>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Icb601afabd6767463634a4c7943ec4206bc758ec
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
▶

Parked (WIP / self-blocked)

(0)
nothing here right now

Carrying — uploaded by me, owned by others

32 open
▶

Failed / broken

(14)
66791 master J –B ✓T ✓R ✗
LU-18687 build: reimplement dist target in plain make
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
needs rebaseCR -1 9 unresolved M +92 −74
3d
needs rebase — checkpatch: cannot be cherry-picked
Timothy Day voted -1
8 unresolved thread(s) await your reply — last from Oleg Drokin
1 thread(s) waiting on others
no vote yet from Shaun Tancheff, Andreas Dilger
build #130840 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-02 15:15 · Arshad Hussain +1 2026-09-14 10:43 · Timothy Day -1 2026-10-21 18:00
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets:
+1 earlier PS1 06-22
PS2 06-22 PS3 06-22 PS4 06-22 PS5 07-10 PS6 09-02 James Simmons
your previous vote: +1 on PS5 (2026-07-10 19:34) — now at PS6
threads: 8 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS6 2026-10-20 15:31 Oleg Drokin patchset comment — I think we need the answers to the ai review as some of them sound at least somewhat scary?
Oleg Drokin PS6 · 2026-10-20 15:31
I think we need the answers to the ai review as some of them sound at least somewhat scary?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile:33 — (minor) This include is unconditional, but `autoMakefile` is still included for every goal outside `ALWAYS_TARGETS`, and automake keeps emit
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(minor) This include is unconditional, but `autoMakefile` is still included for every goal outside `ALWAYS_TARGETS`, and automake keeps emitting a `dist dist-all:` rule in the top-level Makefile (lib/am/distdir.am, guarded only by `TOPDIR_P`). So `make rpms`, `make srpm` and `make install` now parse two recipes for `dist` and print

    config/Makefile.dist:69: warning: overriding recipe for target 'dist'
    autoMakefile:NNNN: warning: ignoring old recipe for target 'dist'

which is what the comment above the conditional include exists to prevent. Could the fragment be included only in the branch that skips autoMakefile?

Separately, being unconditional means every invocation - `make help` included - now runs LUSTRE-VERSION-GEN, `git rev-parse`, a tree-wide `find`, and one `git ls-files` fork per `*.in` file at parse time. None of the other `config/Makefile.*` fragments do shell work at parse time.
reply PS5 2026-07-24 08:28 Gerrit AI review for Lustre Makefile.dist:21 — (minor) These three targets (no-lustre.spec, no-lustre-dkms.spec, no-LUSTRE-VERSION-FILE) are never referenced — dist: has no prerequisites
Gerrit AI review for Lustre PS5 · 2026-07-24 08:28
(minor) These three targets (no-lustre.spec, no-lustre-dkms.spec, no-LUSTRE-VERSION-FILE) are never referenced — dist: has no prerequisites and nothing else depends on them, so they're dead scaffolding. no-lustre-dkms.spec also substitutes @VERSION@ with $(LVF), which is never defined in this file and expands to empty. If they're leftovers, consider dropping them; if they were meant to generate the specs before archiving, dist: should depend on them and $(LVF) should be $(VERSION).
reply PS6 2026-10-20 15:31 Oleg Drokin Makefile.dist:9 — this probaby deserves at least some comment to refute it if there's anything to refute?
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(defect) `VERSION` and `PACKAGE` are also defined by `config/Makefile.exports`, which the top-level Makefile includes on the very next line, so `VERSION = @VERSION@` wins for everything downstream. `TARNAME` is `:=`, so it keeps the LUSTRE-VERSION-GEN value.

That splits the tarball name in two: `dist` writes `lustre-$(LUSTRE-VERSION-GEN).tar.gz`, while `srpm` runs `rpmbuild -ts $(PACKAGE_TARNAME)-$(VERSION).tar.gz` with the configure-time `@VERSION@`. Touch any tracked file after configure and LUSTRE-VERSION-GEN appends `_dirty`, so the names diverge and `make srpm`/`make rpms` fails on a missing tarball. Committing anything after configure does the same. automake derived distdir from `@VERSION@`, so the two could not drift before.

Can this reuse `$(PACKAGE_TARNAME)-$(VERSION)` from Makefile.exports, or at least use names that don't collide with it?
Oleg Drokin PS6 · 2026-10-20 15:31
this probaby deserves at least some comment to refute it if there's anything to refute?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:15 — (minor) This doesn't seem to hold. `Makefile` picks the fragment up with a relative `-include config/Makefile.dist`, and `./LUSTRE-VERSION-G
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(minor) This doesn't seem to hold. `Makefile` picks the fragment up with a relative `-include config/Makefile.dist`, and `./LUSTRE-VERSION-GEN` plus the `--add-file` paths are relative to the cwd as well:

    $ mkdir build && cd build && make -f ../Makefile dist
    make: *** No rule to make target 'dist'.  Stop.

Run from the top of the checkout, `git rev-parse --git-dir` just prints `.git`, which is what plain `git archive` would use anyway. Is the explicit `--git-dir` buying anything?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:70 — (defect) `.ONESHELL:` is in effect from the top-level Makefile, so the whole recipe runs in one shell and the exit status comes from the tra
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(defect) `.ONESHELL:` is in effect from the top-level Makefile, so the whole recipe runs in one shell and the exit status comes from the trailing `echo`, not from `git archive`. A failed archive leaves a 0-byte `$(TAR_DEST)` behind and the target still succeeds:

    $ make dist
    fatal: File not found: nonexistent
      DIST    lustre-....tar.gz
    $ echo $?
    0

`srpm` then feeds that empty file to rpmbuild. config/Makefile.pkg-rpm ends each command with `|| exit 1` for exactly this reason. Should this do the same, and `rm -f $(TAR_DEST)` when the archive fails?

(Same reason the `@` on the echo below has no effect - under .ONESHELL only the first line's prefix counts, so the full git command is echoed.)
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:73 — (minor) `--add-file`, and the "last `--prefix` before it wins" behaviour the ADD_FILES construction relies on, arrived in git 2.38. `lustre/
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(minor) `--add-file`, and the "last `--prefix` before it wins" behaviour the ADD_FILES construction relies on, arrived in git 2.38. `lustre/kernel_patches/targets/` still carries 4.18-rhel8.x and 5.3/5.14-sles15sp* targets, and those distros ship git 2.31/2.35. On such a host `make dist` fails outright - silently, given the exit-status issue above. Worth a minimum-git check here, or a note in the commit message?
reply PS6 2026-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:77 — (defect) `git archive HEAD` packages the committed tree; the automake `distdir` copied from `$(srcdir)`, i.e. the working tree. Building RPM
Gerrit AI review for Lustre PS6 · 2026-09-03 03:14
(defect) `git archive HEAD` packages the committed tree; the automake `distdir` copied from `$(srcdir)`, i.e. the working tree. Building RPMs from a modified checkout is the normal edit/test loop, and the result is now labelled `_dirty` by LUSTRE-VERSION-GEN while the contents come from HEAD. Is dropping uncommitted work intended?

It also makes `dist` git-only. From an unpacked release tarball `git rev-parse --git-dir` fails, `GIT_DIR` is empty, and:

    $ git --git-dir= archive --format=tar.gz --prefix=x/ HEAD
    fatal: not a git repository: ''

so `make dist`/`make srpm` no longer work there. That's a supported path today - should the commit message call it out?
owner Timothy Day · uploader James Simmons · PS6 uploaded 63d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: reimplement dist target in plain make

Presently, automake handles the dist and install targets.
Reimplement the automake dist target in plain make using
git archive (along with allowlisting files generated
by autotools).

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ifaacd294a03f9c54279d935f7cbc9b8ab926624d
65204 master J –B ✗T –R 0/2
LU-19768 mdd: add MDD/changelog genetlink family
carrying Timothy Day · build failure (#134469)
5 unresolved L +644 −1
6d
build failure (#134469)
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
build #134469 FAILURE
patchsets:
+3 earlier PS1 04-09 PS2 07-22 PS3 07-29
PS4 09-29 PS5 09-29 PS6 10-20 James Simmons PS7 10-23 James Simmons PS8 10-26 James Simmons
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre lustre_kernelcomm.h:550 — This isn't a bug, but the size is hard-coded with the constant only in a comment. CHANGELOG_USER_NAMELEN_FULL is available from uapi/linux/l
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
This isn't a bug, but the size is hard-coded with the constant only in a comment. CHANGELOG_USER_NAMELEN_FULL is available from uapi/linux/lustre/lustre_idl.h; using it keeps the strscpy() in changelog_collect_user_cb() from silently truncating if the constant ever grows. (lustre_user.h has the same literal, but that one can't include lustre_idl.h - this header can.)
reply PS3 2026-07-30 09:42 Gerrit AI review for Lustre kernelcomm.c:399 — (minor) Nothing ever sends on this multicast group - there is no genlmsg_multicast()/genl_notify() call in mdd. Registering it publishes a "
Gerrit AI review for Lustre PS3 · 2026-07-30 09:42
(minor) Nothing ever sends on this multicast group - there is no genlmsg_multicast()/genl_notify() call in mdd. Registering it publishes a "changelog" group name that userspace can subscribe to and then never hear anything on. Is it meant to be wired up in a later patch, or can it be dropped until there is a notification to send?
reply PS5 2026-10-05 10:53 Gerrit AI review for Lustre kernelcomm.c:145 — (defect) What keeps ctxt->loc_handle alive while this runs? The llog_ctxt reference from llog_get_context() pins the context, but not the ca
Gerrit AI review for Lustre PS5 · 2026-10-05 10:53
(defect) What keeps ctxt->loc_handle alive while this runs? The llog_ctxt reference from llog_get_context() pins the context, but not the catalog handle.

On umount, mdt_stack_fini() sends LCFG_CLEANUP down the stack, and mdd_process_config() -> mdd_device_shutdown() -> mdd_changelog_fini() then does:

    ctxt = llog_get_context(obd, LLOG_CHANGELOG_USER_ORIG_CTXT);
    llog_cat_close(env, ctxt->loc_handle);  /* NULLs loc_handle, llog_close() frees it */
    llog_cleanup(env, ctxt);                /* only now waits for our ctxt ref */

The MDD obd still has OBDF_SET_UP and no OBDF_STOPPING at that point, and those flags are only checked once before this long, sleeping catalog walk anyway. A dump in progress keeps walking a freed cat_llh. A dump that arrives after llog_cat_close() but before llog_cleanup() finishes gets ctxt->loc_handle == NULL, and llog_cat_process_or_fork() dereferences cat_llh->lgh_hdr on its first line.

The debugfs changelog_users reader avoids this because mdd_procfs_fini() runs before mdd_device_shutdown(). Here, would it work to hold mdd->mdd_changelog_mutex around the llog_get_context()/llog_cat_process() pair and skip the device unless CLM_INIT_DONE is set under the mutex? mdd_changelog_fini() takes the same mutex and resets mc_flags to CLM_CLEANUP_DONE.
reply PS5 2026-10-05 10:53 Gerrit AI review for Lustre kernelcomm.c:406 — (suggestion) Should this op have .flags = GENL_ADMIN_PERM? As written, any local user in init_net can dump it.
Gerrit AI review for Lustre PS5 · 2026-10-05 10:53
(suggestion) Should this op have .flags = GENL_ADMIN_PERM? As written, any local user in init_net can dump it.

The same data under mdd.*.changelog_users is in debugfs, which only root can read. The LNet family's show dumps (LNET_CMD_NETS, PEERS, ROUTES, STATS, ...) are all GENL_ADMIN_PERM.

Each dump also runs a synchronous llog_cat_process() over every MDT's users catalog from .start. For a family without parallel_ops, that runs under genl_mutex. So an unprivileged caller can repeatedly drive disk I/O on every MDT while blocking all other genetlink families, and can also hit the umount window noted above.
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre mdd_netlink.c:144 — Should this check CLM_INIT_DONE before using `ctxt->loc_handle`? Every other changelog llog consumer in mdd does - mdd_changelog_users_seq_s
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
Should this check CLM_INIT_DONE before using `ctxt->loc_handle`? Every other changelog llog consumer in mdd does - mdd_changelog_users_seq_show()@lustre/mdd/mdd_lproc.c:209 and mdd_changelog_size_seq_show()@:247 both return -ENXIO when the flag is clear, and mdd_changelog_recalc_mask() takes mdd_changelog_mutex.

llog_setup() for LLOG_CHANGELOG_USER_ORIG_CTXT happens at mdd_device.c:556 but loc_handle is only assigned by the llog_open_create() that follows at :567, so for the whole duration of that create (and llog_init_handle() after it) the context is registered with loc_handle still NULL. mdd_prepare() runs from server_start_targets() long after class_setup() has set OBDF_SET_UP, so the obd is already visible to this loop during that window.

llog_cat_process() -> llog_cat_process_or_fork() dereferences `cat_llh->lgh_hdr` on its first line, so a dump landing in that window is a NULL dereference.

The teardown side has the same exposure: mdd_changelog_fini() does llog_cat_close(env, ctxt->loc_handle) then llog_cleanup(env, ctxt) under mdd_changelog_mutex, which this path does not take.
owner Timothy Day · uploader James Simmons · PS8 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-19768 mdd: add MDD/changelog genetlink family

Add a new MDD genetlink family that exposes per-MDT changelog
consumer state via the table-driven netlink framework. The dump
handler iterates MDD devices and reports per-consumer details
(endrec index, idle time, event mask). Implement changelog_users
and wire it in liblustreapi so the traditional tools continue to
work when debugfs is not available.

TLC-bug-id: TLU-56
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I3ae11dc2a992bc5cd9911e51fec8148cfb1dcfed
66886 master J !B ✓T ✓R -1/2−
LU-18687 build: iov_iter_iovec to iter_iov_len, iter_iov_addr
carrying Shaun Tancheff · needs rebase — checkpatch: cannot be cherry-picked
needs rebase 7 unresolved M +42 −31
13d
needs rebase — checkpatch: cannot be cherry-picked
7 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green — no vote yet from Andreas Dilger, Timothy Day
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #131723 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets: PS1 06-26 PS2 06-27 PS3 09-14 James Simmons
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) Nothing in the patch makes an iter_iov_len() available: what is added is compat_iter_iov_len(), under a guard that makes it the only
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(minor) Nothing in the patch makes an iter_iov_len() available: what is added is compat_iter_iov_len(), under a guard that makes it the only thing vvp_io.c ever calls. Could the body also say that vvp_mmap_locks() gains an iter_is_ubuf() special case, since that is a behaviour change rather than a rename?
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre lustre-core.m4:2233 — (defect) `len` is not declared - the declaration above is `ssize_t nr`. With -Werror this test fails to compile on every kernel, so HAVE_ITE
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(defect) `len` is not declared - the declaration above is `ssize_t nr`. With -Werror this test fails to compile on every kernel, so HAVE_ITER_IOV_LEN is never defined and the result is silently "no".

iter_iov_len() returns size_t, so this probably wants the same form as the neighbouring LC_SRC_HAVE_IOVEC_WITH_IOV_MEMBER test:

    size_t len __attribute__ ((unused));
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre uio.h:36 — (typo) `384492c48e6e` does not resolve; the commit is 384492c48e6a ("net: devmem: support single IOV with sendmsg").
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(typo) `384492c48e6e` does not resolve; the commit is 384492c48e6a ("net: devmem: support single IOV with sendmsg").
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre uio.h:40 — (defect) Once the autoconf test compiles, a 6.3+ kernel defines both HAVE_ITER_IOV_LEN and HAVE_USER_BACKED_ITER, so this helper is not comp
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(defect) Once the autoconf test compiles, a 6.3+ kernel defines both HAVE_ITER_IOV_LEN and HAVE_USER_BACKED_ITER, so this helper is not compiled - but vvp_mmap_locks() calls compat_iter_iov_len() unconditionally, so vvp_io.c stops building. Right now the only thing preventing that is the broken test above; fixing either one alone breaks the build.

Would it be simpler to follow the iter_iov_addr() pattern just above and supply the upstream name, `#ifndef HAVE_ITER_IOV_LEN` / `static inline size_t iter_iov_len(...)`, and call iter_iov_len() from vvp_io.c? Then the call site really does match upstream, and there is no Lustre-only name to keep in sync.
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre vvp_io.c:462 — (defect) The advance expression now uses `bytes`, which the loop body modifies: `bytes += addr & ~PAGE_MASK` below, and `bytes -= vma->vm_en
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(defect) The advance expression now uses `bytes`, which the loop body modifies: `bytes += addr & ~PAGE_MASK` below, and `bytes -= vma->vm_end - addr` in the inner while loop. The old code advanced by `iov.iov_len` from the iovec copy, which the body never touched (it worked on `bytes` instead).

So for an unaligned multi-segment iovec the iterator is advanced by `iov_len + (addr & ~PAGE_MASK)` per segment. The following segment is then scanned from a bogus offset, and a segment shorter than the overshoot is skipped completely, so no mmap lock is taken for it.

Keeping the segment length in its own variable, used only by iov_iter_advance(), would preserve the old behaviour.
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre vvp_io.c:463 — (minor) Can this branch be reached? The early return above returns 0 unless the iter is ITER_IOVEC or ITER_KVEC, and iter_is_iovec() is fals
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(minor) Can this branch be reached? The early return above returns 0 unless the iter is ITER_IOVEC or ITER_KVEC, and iter_is_iovec() is false for ITER_UBUF, so a ubuf iter never gets to the loop. Either the branch is dead code, or the gate above is what needs relaxing - the ubuf iter missing its mmap locks entirely looks like the pre-existing problem here.
reply PS3 2026-09-15 16:11 Gerrit AI review for Lustre vvp_io.c:468 — (minor) compat_iter_iov_len() returns `iov_len - iov_offset`, while the iov_iter_iovec() being replaced returned `min(count, iov_len - iov_o
Gerrit AI review for Lustre PS3 · 2026-09-15 16:11
(minor) compat_iter_iov_len() returns `iov_len - iov_offset`, while the iov_iter_iovec() being replaced returned `min(count, iov_len - iov_offset)`.

The clamp is reachable: vvp_io_rw_lock() calls vvp_io_update_iov() -> iov_iter_truncate(vui_iter, crw_bytes) immediately before this, and lov_io_rw_iter_init() has already clipped crw_bytes to the current stripe chunk. A 4M read into a single 4M buffer on a 1M-striped file now asks policy_from_vma() for a 4M extent instead of 1M, and that extent can run past the end of the vma.

Clamping with the remaining iov_iter_count() would keep the old extent.
owner Shaun Tancheff · uploader James Simmons · PS3 uploaded 50d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: iov_iter_iovec to iter_iov_len, iter_iov_addr

Add HAVE_ITER_IOV_LEN to ensure an iter_iov_len() is
available.

iov_iter_iovec() is dropped and the address and bytes from the
segment are accessed directly.

This is done to align with the upstream linux kernel.

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I906b248d03f30a765f27b0916419b88ee178d6a5
37246 master J ✗14B ✗T –R 0/2
LU-13139 obdclass: collect stats for OSD methods
carrying Alex Zhuravlev · build failure (#131784)
14 unique failures 1 unresolved L +447 −114
49d
build failure (#131784)
janitor: 14 test failures unique to this patch — ost-pools@ldiskfs+DNE:test_25, ost-pools@zfs:test_25, recovery-small@ldiskfs+DNE:test_29a +11 more
1 unresolved thread(s) await your reply — last from Andreas Dilger
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
ost-pools@ldiskfs+DNE:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@ldiskfs+DNE:test_29aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@zfs:test_29aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@ldiskfs+DNE:test_56odseen in 6 other reviews
sanity2@ldiskfs+DNE:test_65kseen in 2 other reviews
sanity2@zfs:test_65kseen in 2 other reviews
sanity-slow@zfs:test_255cseen in 3 other reviews
sanity-lfsck@ldiskfs+DNE:test_43NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lfsck@ldiskfs+DNE:test_45NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lfsck@zfs:test_45NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_16cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_80seen in 81 other reviews
sanity-quota@zfs:test_16cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #131784 FAILURE
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+55 earlier PS2 01-19 PS3 01-19 PS4 01-30 PS5 02-09 PS6 02-14 PS7 02-17 PS8 02-21 PS9 03-04 PS10 03-27 PS11 04-10 PS12 04-12 PS13 04-24 PS14 05-04 PS15 07-03 PS16 07-05 PS17 08-01 PS18 01-27 PS19 02-12 Andreas Dilger PS20 02-13 PS21 02-14 PS22 02-16 PS23 02-27 PS24 02-29 PS25 04-30 PS26 06-01 PS27 06-21 PS28 07-09 PS29 08-06 PS30 08-11 PS31 08-22 PS32 09-04 PS33 09-09 PS34 10-09 PS35 10-30 PS36 11-24 PS37 12-10 PS38 12-10 PS39 12-23 PS40 01-23 PS41 02-14 PS42 03-27 PS43 04-10 PS44 04-18 PS45 04-28 PS46 05-19 PS47 05-22 PS48 06-05 PS49 06-16 PS50 06-23 PS51 07-08 PS52 07-09 James Simmons PS53 07-24 James Simmons PS54 05-14 PS55 05-19 PS56 05-28
PS57 05-30 James Simmons PS58 06-03 James Simmons PS59 06-16 James Simmons PS60 07-13 James Simmons PS61 09-15 James Simmons
your previous vote: +1 on PS53 (2025-07-24 16:49) — now at PS61
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS52 2025-07-13 15:42 Andreas Dilger dt_object.c:1980 — It would be better to have a table declaring the stats, then have a loop iterating over all entries in the table to call lpricfs_counter_ini
Andreas Dilger PS52 · 2025-07-13 15:42
It would be better to have a table declaring the stats, then have a loop iterating over all entries in the table to call lpricfs_counter_init() for each entry.
owner Alex Zhuravlev · uploader James Simmons · PS61 uploaded 50d ago · NEW · open in Gerrit ↗
commit message
LU-13139 obdclass: collect stats for OSD methods

frequency and time spent in each method is collected,
then can be found in os[dp].*.osd_stats and lod.*.osd_stats:

osd-ldiskfs.lustre-MDT0000.osd_stats=
snapshot_time             1674142976.044241006 secs.nsecs
start_time                1674142916.072747822 secs.nsecs
elapsed_time              59.971493184 secs.nsecs
trans_create              259 samples [usecs] 2 18 2000 18560
trans_start               259 samples [usecs] 0 249 505 64715
trans_stop                259 samples [usecs] 0 1906 11820 10291894
read_lock                 332 samples [usecs] 0 1 3 3
write_lock                284 samples [usecs] 0 0 0 0
decl_create               100 samples [usecs] 0 12 57 491
create                    94 samples [usecs] 11 96 4060 198414
decl_destroy              2 samples [usecs] 4 12 16 160
attr_get                  493 samples [usecs] 0 23 24 530
decl_ref_add              36 samples [usecs] 0 0 0 0
ref_add                   24 samples [usecs] 0 1 1 1
decl_ref_del              2 samples [usecs] 0 0 0 0
decl_xattr_set            102 samples [usecs] 0 0 0 0
xattr_set                 15 samples [usecs] 0 5 10 32
xattr_get                 35 samples [usecs] 0 7 17 91
decl_insert               116 samples [usecs] 0 0 0 0
insert                    116 samples [usecs] 0 31 441 5607
...
osp.lustre-MDT0000-osp-MDT0001.osd_stats=
snapshot_time             1734959321.493552049 secs.nsecs
start_time                1734959257.142508748 secs.nsecs
elapsed_time              64.351043301 secs.nsecs
trans_create              5 samples [usecs] 0 0 0 0
trans_start               5 samples [usecs] 0 0 0 0
trans_stop                5 samples [usecs] 0 306 324 93870
read_lock                 4 samples [usecs] 0 0 0 0
write_lock                13 samples [usecs] 0 0 0 0
decl_create               3 samples [usecs] 0 1 1 1
create                    3 samples [usecs] 0 2 2 4
attr_get                  16 samples [usecs] 0 34 68 2312

Change-Id: I1efe3eb5e646cd638a5fe558886468faa528a9d1
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
57948 master J !B ✓T ✗2R +0/2−
LU-18689 ptlrpc: ensure import exist for sec debugfs files
carrying Oleg Drokin · needs rebase — checkpatch: cannot be cherry-picked
needs rebase M +63 −55
61d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-dne-part-1, review-dne-selinux-ssk-part-2
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-selinux. session
3 optional test failure(s) — informational
build #114988 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-07-11 13:40
no vote yet: Andreas Dilger, Alex Zhuravlev, Timothy Day
patchsets:
+4 earlier PS1 02-03 PS2 02-05 James Simmons PS3 02-08 James Simmons PS4 02-10 James Simmons
PS5 02-18 James Simmons PS6 03-28 James Simmons PS7 04-25 James Simmons PS8 05-24 PS9 07-11 James Simmons
owner Oleg Drokin · uploader James Simmons · PS9 uploaded 481d ago · NEW · open in Gerrit ↗
commit message
LU-18689 ptlrpc: ensure import exist for sec debugfs files

Access sec imports safely under with_imp_locked.

This fixes crashes in recovery-small test 57 that look like this:

BUG: unable to handle kernel NULL pointer dereference at 00000000000000d0
IP: [<ffffffff81411a45>] do_raw_read_lock+0x5/0x30
RIP: 0010:[<ffffffff81411a45>]  [<ffffffff81411a45>] do_raw_read_lock+0x5/0x30
Call Trace:
 [<ffffffff817e333e>] _raw_read_lock+0x1e/0x20
 [<ffffffffa0666f0e>] sptlrpc_import_sec_ref+0x1e/0x40 [ptlrpc]
 [<ffffffffa06742f0>] srpc_sptlrpc_sepol_seq_show+0x30/0x130 [ptlrpc]
 [<ffffffff8126f0b5>] seq_read+0x135/0x470
 [<ffffffff81245839>] vfs_read+0xb9/0x1c0
 [<ffffffff817edf49>] ? system_call_after_swapgs+0x96/0x13a
 [<ffffffff8124676f>] SyS_read+0x7f/0xf0
 [<ffffffff817edf55>] ? system_call_after_swapgs+0xa2/0x13a
 [<ffffffff817ee00c>] system_call_fastpath+0x1f/0x24
 [<ffffffff817edf55>] ? system_call_after_swapgs+0xa2/0x13a

Signed-off-by: Oleg Drokin <green@whamcloud.com>
Change-Id: Id84c8803317b621cb80a21977eafe5b9cf96a9be
18012 master J –B ✓T ✗0R 0/2
LU-7672 tests: Update Kerberos set up script
carrying James Nunez · Maloo voted -1 — tests failed (details on the change)
stalled 211d L +154 −115
211d
no vote yet: Sebastien Buisson, Nathan Lavender, Chris Hanna
owner James Nunez · uploader James Simmons · PS4 uploaded 3442d ago · NEW · open in Gerrit ↗
commit message
LU-7672 tests: Update Kerberos set up script

Update and clean up the Kerberos set up script setup_kerberos.sh.

Test-Parameter: forbuildonly

Signed-off-by: James Nunez <james.a.nunez@intel.com>
Change-Id: Iae7b1a7a524759c524bc0a69f4755a8c6eed3f9a
27028 master J ✗1B ✓T ✗1R 0/2
LU-8875 lnet: Change to new RDMA done callback mechanism
carrying Doug Oucharek · janitor: 1 test failure unique to this patch — sanity-quota@zfs+DNE:test_12b
1 unique failure stalled 292d M +221 −5
292d
janitor: 1 test failure unique to this patch — sanity-quota@zfs+DNE:test_12b
enforced failed: review-dne-zfs-part-2
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-quota@zfs+DNE:test_12bseen in 100 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 13 tests. 1 tests failed: sanity-sec. session
2 optional test failure(s) — informational
build #13782 SUCCESS
no vote yet: Alexey Lyashkov, Ian Ziemba, Doug Oucharek, Serguei Smirnov, Amir Shehata, Sonia Sharma
owner Doug Oucharek · uploader James Simmons · PS8 uploaded 2379d ago · NEW · open in Gerrit ↗
commit message
LU-8875 lnet: Change to new RDMA done callback mechanism

Adapt to changes made to the RDMA API:

- change call to ib_create_cq() to ib_alloc_cq() (use SOFTIRQ
  for callbacks)
- change call to ib_destroy_cq() to ib_free_cq()
- introduce a new struct kib_sched_element as the items we
  put on the kib scheduler work list (rather than putting connections
  to be processed)
- added a kib_sched_element to kib_tx and kib_rx so they can be
  scheduled to be processed by the kib scheduler
- have separate callbacks for each CQ operation type
- set the proper callback to be called when setting up CQ elements
- change kiblnd_scheduler() to process work items (kib_sched_element)
  rather than process connections

All of this means we are making good use of the new RDMA CQ
callback mechanism and focusing our scheduler to process complete
items rather than letting it process connections and have to poll
for completions.

Test-Parameter: trivial nettype=o2ib
Signed-off-by: Doug Oucharek <dougso@me.com>
Change-Id: I4ba719578086fedb68ca554eeec191c839ceaca2
59802 master J ✓B ✓T ✓R +2/2
LU-18162 obdclass: standardize class_(un)register_type
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
needs rebaseVerified -1 stalled 293d 2 unresolved L +216 −201
293d
needs rebase — checkpatch: cannot be cherry-picked
Verified -1 veto by Oleg Drokin
2 reviewer comment(s) to address if a respin is needed — last from Oleg Drokin
2 optional test failure(s) — informational
build #115316 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-07-27 01:40 · Shaun Tancheff +1 2025-07-28 09:47 · Andreas Dilger +1 2025-07-29 14:38
no vote yet: Oleg Drokin
patchsets: PS1 06-17 PS2 06-17 Janitor Bot PS3 06-17 PS4 06-17 PS5 07-27 James Simmons
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2025-08-12 05:25 Oleg Drokin patchset comment — I am really suspicious about this patch.
Oleg Drokin PS5 · 2025-08-12 05:25
I am really suspicious about this patch.
current master-next on boilpot started to get strange use after free problems which seem to be accessing OBD device that's already freed.

Four distinct trace so far: 
https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73710

https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73714
https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73724
https://knox.linuxhacker.ru/crashdb_ui_external.py.cgi?newid=73725

I am going to omit it next time over and we'll see how it works. Not setting -1 just yet
reply PS5 2025-08-24 18:19 Timothy Day patchset comment — Odd. I wonder if this is exposing an issue introduced in a previous patch somehow?
Oleg Drokin PS5 · 2025-08-18 18:30
dropping this patch resulted in total disappearance of the problems reported in the latest master-next over the last week
Timothy Day PS5 · 2025-08-24 18:19
Odd. I wonder if this is exposing an issue introduced in a previous patch somehow?
owner Timothy Day · uploader James Simmons · PS5 uploaded 465d ago · NEW · open in Gerrit ↗
commit message
LU-18162 obdclass: standardize class_(un)register_type

Rather than passing many arguments to class_register_type(),
statically define all of the fields of the LU type and
pass only that LU type to the class register/unregister
functions.

This makes it easier to see what methods are defined on each
LU device type and also aligns more closely with Linux
kernel style. This patch precedes the unification of
OBD and LU type.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ie33f55abaeaa76d9ede2c11a84a82660827a61f4
51901 master J !B ✓T ✗1R -1/2−
LU-17022 obdclass: convert more flags to bitops
carrying Neil Brown · needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 405d M +57 −41
405d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: review-ldiskfs-ubuntu
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
build #111391 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-09 PS2 11-24 PS3 11-24 PS4 02-27 James Simmons
owner Neil Brown · uploader James Simmons · PS4 uploaded 614d ago · NEW · open in Gerrit ↗
commit message
LU-17022 obdclass: convert more flags to bitops

        obd_version_recov:1,    /* obd uses version checking */
        obd_replayable:1,       /* recovery enabled; inform clients */
        obd_no_recov:1,         /* fail instead of retry messages */

are now

        OBDF_VERSION_RECOV,     /* obd uses version checking */
        OBDF_REPLAYABLE,        /* recovery enabled; inform clients */
        OBDF_NO_RECOV,          /* fail instead of retry messages */

Introduce odb_copy_flag() to copy a flag from one obd to another.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Id7827b7739ca16f682ec11a216c2b35028d099de
13243 master J ✗8B ✓T ✗10R -2/2−
LU-6081 hsm: adding migration support
carrying Frank Zago · janitor: 8 test failures unique to this patch — sanity-hsm@ldiskfs+DNE:test_113a, sanity-hsm@ldiskfs+DNE:test_113b, sanity-hsm@ldiskfs+DNE:test_113c +5 more
8 unique failures stalled 456d L +789 −117
456d
janitor: 8 test failures unique to this patch — sanity-hsm@ldiskfs+DNE:test_113a, sanity-hsm@ldiskfs+DNE:test_113b, sanity-hsm@ldiskfs+DNE:test_113c +5 more
enforced failed: review-dne-part-1, review-dne-part-2, review-dne-part-4, review-dne-selinux, review-dne-zfs-part-1, review-dne-zfs-part-2, review-dne-zfs-part-4, review-ldiskfs, review-ldiskfs-arm, review-zfs
Qian Yingjin voted -1
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-hsm@ldiskfs+DNE:test_113aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_113bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_113cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_113dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_113dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: sanity-hsm. session
review-dne-part-4 CentOS 7.0/x86_64 ran 10 tests. 2 tests failed: sanity-flr, sanity-pfl. session
review-dne-selinux CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 2 tests failed: sanityn, sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: sanity-hsm. session
review-dne-zfs-part-4 crashed CentOS 7.0/x86_64 ran 12 tests. 2 tests failed: sanity-flr, replay-single. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-arm CentOS 7.0/x86_64, CentOS 8.0/aarch64 ran 5 tests. 1 tests failed: sanity. session
review-zfs CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity-flr. session
4 optional test failure(s) — informational
build #14378 SUCCESS
reviews: Qian Yingjin -1 2020-06-07 14:57
no vote yet: jacques-Charles Lafoucriere, Yohan Pipereau, Vitaly Fertman, Henri Doreau, Nikitas Angelinas, Patrick Farrell, Thomas LEIBOVICI, Aurelien Degremont, nathan r, Ben Evans, Shaun Tancheff, Alexander Zarochentsev, Sergey Cheremencev, Andreas Dilger, Quentin Bouget
owner Frank Zago · uploader James Simmons · PS32 uploaded 2360d ago · NEW · open in Gerrit ↗
commit message
LU-6081 hsm: adding migration support

Currently file migration is done by "lfs migrate". This has a couple
problems. It doesn't scale well to large files and/or large number of
files to copy. If an external tool (such as Robinhood) wants to
migrate a file, it has to spawn lfs to do the job, for every file,
which has a large overhead, or copy the file itself.

A solution to this issue is to move the copy operation into the HSM
copytool. The copytool already knows how to copy files, and Lustre has
control over these files. Migrating a file, from an application point
of view, becomes more or less the same as archiving a file. Since the
file copy is done by the copytool, this copy can be optimized in one
place.

This patch adds the ability for HSM to migrate a file within a single
Lustre filesystem. The posix copytool is enhanced to support the file
migration, and the lfs migrate command now supports that option with
--hsm and -a flags.

HPE-bug-id: LUS-5669
Signed-off-by: Ben Evans <beevans@whamcloud.com>
Change-Id: Id72db5acb3f84292b081efac4657520f0054778b
32941 master J –B ✓T ✗3R 0/2
LU-7659 hsm: Use netlink for KUC communication
carrying Yohan Pipereau · enforced failed: custom-101, review-dne-part-2, review-dne-zfs-part-2
stalled 456d L +346 −147
456d
failed enforced testplatformdetail
custom-101 CentOS 7.0/x86_64, RHEL 7.6/x86_64 ran 5 tests. 1 tests failed: sanity-hsm. session
review-dne-part-2 CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-hsm. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-hsm. session
build #5656 SUCCESS
no vote yet: Nikitas Angelinas, Andreas Dilger, John Hammond, Ben Evans, Quentin Bouget, Sonia Sharma
your previous vote: -1 on PS14 (2019-02-18 18:11) — now at PS16
owner Yohan Pipereau · uploader James Simmons · PS16 uploaded 2710d ago · NEW · open in Gerrit ↗
commit message
LU-7659 hsm: Use netlink for KUC communication

Make communications between MDC and copytools rely on asynchronous
netlink communications instead of pipe based communication. Currently
how the communications is done is considered incorrect as described
here:
https://www.linuxjournal.com/article/8110

This new netlink API uses generic netlink to avoid taking a dedicated
netlink family number. Kernel now initiates communication by creating
socket at module load time and message sending from kernel has
changed from synchronous vfs writing to asynchronous netlink sending.

As for now, copytools subscribe to both netlink & KUC groups.
Copytools registration still rely on ioctls to populate KUC groups,
but no more file descriptors are sent to the kernel to perform VFS
writing.

Change-Id: I777a24831ad3ef4bdb2be6deb57ed45be91bcf9e
Test-Parameters: testlist=sanity-hsm clientcount=3 osscount=2 mdscount=2
Signed-off-by: Yohan Pipereau <yohan.pipereau.ocre@cea.fr>
36235 master J !B ✗T –R 0/2
LU-10968 hsm: create external HSM queue interface
carrying Ben Evans · build failure (#86410)
stalled 456d XL +4700 −204
456d
janitor run: build failed — no tests ran — janitor results
build #86410 FAILURE
no vote yet: Qian Yingjin, Vitaly Fertman, Nikitas Angelinas, Joe Atzinger, Ellis Wilson, Aurelien Degremont, Sergey Cheremencev, nathan r, Andreas Dilger, Quentin Bouget, Dominique Martinet
patchsets: PS12 10-05 James Simmons PS13 03-02 James Simmons
your previous vote: -1 on PS10 (2020-06-17 21:50) — now at PS13
owner Ben Evans · uploader James Simmons · PS13 uploaded 1708d ago · NEW · open in Gerrit ↗
commit message
LU-10968 hsm: create external HSM queue interface

Add more, consistent, information to messages
including HSM action.

Create an interface for an external HSM queue
Create a demonstration external HSM coordinator
Create llapi calls for external cdt to communicate
with Lustre

sanity-hsm can be set to use an external coordinator
by specifying COORDINATOR=external on the command line

You must run the external coordinator on the MDS

Handles all current HSM activities.  No changes to
any other programs are needed.

Signed-off-by: Ben Evans <beevans@whamcloud.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Cray-bug-id: LUS-5990
Test-Parameters: env=COORDINATOR=external testlist=sanity-hsm
Change-Id: I2cbd2f8b641d8fdca427d6de82f58af58be4a477
41664 master J ✓B ✗T –R -1/2−
LU-14428 libcfs: replace tracefile buffer with ring_buffer
carrying Neil Brown · build failure (#108522)
stalled 456d 2 unresolved L +220 −766
456d
build failure (#108522)
Alexey Lyashkov voted -1
1 unresolved thread(s) await your reply — last from Oleg Drokin
1 thread(s) waiting on others
build #108522 FAILURE
reviews: Alexey Lyashkov -1 2024-10-28 11:36
no vote yet: Thomas Bertschinger, Nikitas Angelinas, Andreas Dilger, Oleg Drokin
patchsets:
+18 earlier PS12 11-22 James Simmons PS13 11-30 James Simmons PS14 07-03 PS15 07-03 PS16 07-03 PS17 07-03 PS18 07-03 PS19 07-04 PS20 08-07 PS21 08-08 James Simmons PS22 09-27 PS23 10-17 PS24 11-12 James Simmons PS25 12-13 James Simmons PS26 12-13 James Simmons PS27 12-14 James Simmons PS28 12-20 James Simmons PS29 12-28 James Simmons
PS30 02-05 James Simmons PS31 02-15 James Simmons PS32 02-23 James Simmons PS33 10-23 James Simmons PS34 10-25 James Simmons
your previous vote: +1 on PS30 (2024-02-05 23:54) — now at PS34
threads: 1 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS21 2023-09-25 07:19 Oleg Drokin tracefile.c:189 — I am nto sure where exactly ther's some sort of a calculation error, but I have a whole bunch of this message triggering for seemingly rando
Oleg Drokin PS21 · 2023-09-25 07:19
I am nto sure where exactly ther's some sort of a calculation error, but I have a whole bunch of this message triggering for seemingly random prints all around (tend to be longish)in master-next (this is where I am carrying this patch for a while) even though this patch itself did nto trigger it.

Example: http://testing.linuxhacker.ru/lustre-reports/35860/testresults/sanity2-ldiskfs-DNE-centos7_x86_64-centos7_x86_64/oleg342-server-console.txt

[ 2711.693691] Lustre: DEBUG MARKER: == sanity test 103e: inheritance of big amount of default ACLs ========================================================== 15:41:10 (1695584470)
[ 2930.646958] Lustre: lustre-MDT0000: Client 229219ca-e0b5-499a-9ab0-176123ac3994 (at 192.168.203.42@tcp) reconnecting
[ 3211.379426] Lustre: format at ldlm_lib.c:3286:target_send_reply_msg doesn't end in newline
[ 3211.806304] Lustre: format at service.c:2323:ptlrpc_server_handle_request doesn't end in newline
[ 3211.984069] Lustre: format at ldlm_resource.c:1799:ldlm_resource_dump doesn't end in newline
[ 3212.219257] Lustre: format at ldlm_resource.c:1660:ldlm_resource_add_lock doesn't end in newline
owner Neil Brown · uploader James Simmons · PS34 uploaded 739d ago · NEW · open in Gerrit ↗
commit message
LU-14428 libcfs: replace tracefile buffer with ring_buffer

Linux has a generic ring-buffer API which uses minimal locking and
allows entries to be appended from any context.  This is essentially
the same functionality provided by trace_data abstraction in
tracefile.c, though with less locking overhead.

This patch removes the trace_data support and switches to use
ring_buffer.

The API functionality is not identical so some adjustments need to be
made.  In particular once an entry in the log has been reserved, it is
not possible to reduce the size of the reservation, only to use it or
discard it, where discarding might result in the space being wasted in
the rare case that more space is reserved from a different context
(e.g.  interrupt).

So instead we use a modest sized on-stack buffer to hold the formatted
result, and strcpy() that to a ring_buffer.  If the on-stack buffer
isn't big enough (approximately 20% of messages in some testings) we
need to format a second time, though we do that less often than the
current code.  The strcpy should be fast compared to vsprintf so this
should be a net win.

ring_buffer doesn't record whether a message was generated in
interrupt or process context and the information is not generally
useful, so that field in the ptldebug_header is now always set to
zero.

The pages stored in ring_buffer are not the same format as are
expected by user-space, so we cannot extract whole pages and copy them
to the file, but instead extract individual entries and write them to
the file.

Similarly, pages cannot be moved to the daemon_list, but the contents
need to be copied.

Also discard libcfs_debug_binary as it is ALWAYS 1 and the code would
be buggy if it were zero.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Iab259c0538e970f5a77d15c453d72bf378c59c32
41683 master J –B ✗T –R 0/2
LU-14439 utils: skip server mount libs on client
carrying Andreas Dilger · build failure (#111134)
stalled 456d S +13 −13
456d
build #111134 FAILURE
patchsets:
+5 earlier PS6 10-23 PS7 10-24 PS8 10-24 PS9 11-08 PS10 11-08
PS11 01-31 PS12 10-03 PS13 10-04 PS14 10-10 PS15 02-18 James Simmons
owner Andreas Dilger · uploader James Simmons · PS15 uploaded 623d ago · NEW · open in Gerrit ↗
commit message
LU-14439 utils: skip server mount libs on client

Do not include ldiskfs or zfs files in the Makefile when
"./configure --disable-server" is used, or if configure does
not detect any server-side support.

Move server-side utilities under server conditionals.

Test-Parameters: trivial
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I244e10dfaee3470e9ad48e78dcb8d0d18f3ebbe5
▶

Review feedback — your turn

(4)
61282 master J –B ✓T ✓R 0/2
LU-16832 lnet: add nanosecond delay latency support
carrying Sohei Koyama · 3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
pw_shepherd 3 unresolved L +183 −73
9h
build #135225 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger
patchsets:
+22 earlier PS1 09-12 PS2 09-12 PS3 09-12 PS4 09-12 PS5 09-12 Janitor Bot PS6 09-12 PS7 09-12 PS8 09-29 PS9 09-29 PS10 09-29 PS11 02-05 PS12 07-20 James Simmons PS13 09-02 James Simmons PS14 09-03 James Simmons PS15 09-04 James Simmons PS16 09-04 James Simmons PS17 09-04 James Simmons PS18 09-04 James Simmons PS19 09-06 James Simmons PS20 10-09 James Simmons PS21 10-09 James Simmons PS22 10-16 James Simmons
PS23 10-20 James Simmons PS24 10-21 James Simmons PS25 10-26 James Simmons PS26 10-31 James Simmons PS27 11-02 James Simmons
your previous vote: +1 on PS18 (2026-09-05 15:29) — now at PS27
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS27 2026-11-04 05:10 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) If the patch is refreshed: the body doesn't mention that yaml_emitter_get_output_version() is reworked to query the family version o
Gerrit AI review for Lustre PS27 · 2026-11-04 05:10
(minor) If the patch is refreshed: the body doesn't mention that yaml_emitter_get_output_version() is reworked to query the family version on its own private netlink socket, rather than the emitter's `ctrl` socket, and now sets the emitter error state on failure. This changes the behaviour of an exported liblnetconfig function, so a sentence about it, and why it was needed, would help.
reply PS27 2026-11-04 05:10 Gerrit AI review for Lustre net_fault.c:979 — (minor) This adds to the overflow point raised on patchset 24. `tmp` is now `s64`, filled by nla_get_s64(), and `la_latency` is a signed `kt
Gerrit AI review for Lustre PS27 · 2026-11-04 05:10
(minor) This adds to the overflow point raised on patchset 24. `tmp` is now `s64`, filled by nla_get_s64(), and `la_latency` is a signed `ktime_t`. So a negative value from the netlink request gets past this check. For example, `--latency_ns` goes through strtoull(), and `-1` comes out as -1 ns. delay_rule_match() then sets `msg_delay_send` in the past and calls hrtimer_start() with a negative relative time. The rule is accepted, but messages are not actually delayed.

With the old `u32` seconds field this value could not be negative. Should this reject `ktime_to_ns(attr->u.delay.la_latency) <= 0`? Values near KTIME_MAX also wrap when `ktime_get_ns()` is added to them in delay_rule_match(), so an upper bound may be worth adding too.
reply PS27 2026-11-04 05:10 Gerrit AI review for Lustre liblnetconfig_netlink.c:1877 — (defect) `out` is still NULL here; it is only set from `request->write_handler_data` further down. So if genl_connect() fails, this derefere
Gerrit AI review for Lustre PS27 · 2026-11-04 05:10
(defect) `out` is still NULL here; it is only set from `request->write_handler_data` further down. So if genl_connect() fails, this dereferences a NULL pointer and lnetctl/lctl segfaults instead of reporting "socket failed to connect". The socket that was just allocated, `sk`, is also leaked.

This path runs on every netlink delay add (`lnetctl fault delay add`, and `lctl net_delay_add` through fault_simul_rule_add()). Should this be `nl_socket_free(sk);`?
tags: pw_shepherd
owner Sohei Koyama · uploader James Simmons · PS27 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-16832 lnet: add nanosecond delay latency support

Introduce nanosecond-resolution latency for LNet delay
fault injection. The previous interface accepted latency
only in seconds (u32). This change promotes the field to
nanoseconds (ktime) and plumbs it so that sub-second delays
in nanoseconds can be expressed precisely. Since this
changes the Netlink output we bump the LNet netlink
family version. The user land code is updated to accept
and process the new latency_ns option for the non ioctl
approach. All ioctl usage only accepts seconds. The
internal timer is moved to hrtimer for finer level of
time resolution.

Test-Parameters: trivial
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I9ed1bd34cef0f0bf647f87d17dd68f05274e2b28
66820 master J !B ✓T ✓R ✗
LU-20422 lod: fix lockdep bug
carrying Timothy Day · Timothy Day voted -1
CR -1 2 unresolved S +24 −8
92d
Timothy Day voted -1
2 unresolved thread(s) await your reply — last from Timothy Day
no vote yet from Andreas Dilger, Alex Zhuravlev
janitor run: 3 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #127623 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-07-20 10:11 · Timothy Day -1 2026-07-20 14:50
no vote yet: Andreas Dilger, Alex Zhuravlev
patchsets: PS1 06-23 PS2 07-10 James Simmons PS3 07-15 James Simmons
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-08-03 14:54 Timothy Day COMMIT_MSG:8 — Sure, I can do that when I refresh.
Arshad Hussain PS3 · 2026-07-20 10:11
(comment) Fix lockdep bug by splitting function lod_obj_for_each_stripe() into lock/unlocked version
James Simmons PS3 · 2026-08-02 23:27
Could we change this to LU-18658 LU ticket number
Timothy Day PS3 · 2026-08-03 14:54
Sure, I can do that when I refresh.
reply PS3 2026-07-20 14:50 Timothy Day lod_qos.c:515 — Nesting the mutexes is fine, as long as they're consistently nested in the same order. I can see if I can rework this - might require a larg
Alex Zhuravlev PS3 · 2026-07-20 11:45
what if the layout is changing in another thread at the moment?
James Simmons PS3 · 2026-07-20 14:43
Sadly this function is called by both the qos and lod object code using two different mutex. Normally we do nested but I don't think nesting the mutexs in this case would be the right fit. Maybe we can use wait_on_bit() which would tell us when the layout_mutex is in use?
Timothy Day PS3 · 2026-07-20 14:50
Nesting the mutexes is fine, as long as they're consistently nested in the same order. I can see if I can rework this - might require a larger refactor.
owner Timothy Day · uploader James Simmons · PS3 uploaded 112d ago · NEW · open in Gerrit ↗
commit message
LU-20422 lod: fix lockdep bug

WARNING: possible circular locking dependency detected
...
mdt_io00_000/394 is trying to acquire lock:
ffff8881b1c26740 (&ltd->ltd_rw_sem){++++}-{4:4}, at: lod_initialize_objects+0x503/0xba0

but task is already holding lock:
ffff888260077538 (&lod_obj->ldo_layout_mutex){+.+.}-{4:4}, at: lod_striping_load+0x147/0x530
...
 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&lod_obj->ldo_layout_mutex);
                               lock(&ltd->ltd_qos.lq_rw_sem);
                               lock(&lod_obj->ldo_layout_mutex);
  rlock(&ltd->ltd_rw_sem);

 *** DEADLOCK ***
...
 dump_stack_lvl+0x54/0x70
 print_circular_bug+0x2e8/0x300
 check_noncircular+0x12e/0x150
 __lock_acquire+0x1447/0x2830
 ? __lock_acquire+0x5d3/0x2830
 ? __kmalloc_noprof+0x1a1/0x640
 ? lock_acquire+0xd5/0x290
 ? lod_initialize_objects+0x503/0xba0
 lock_acquire+0xd5/0x290
 ? lod_initialize_objects+0x503/0xba0
 ? lock_is_held_type+0xc7/0x120
 down_read+0x42/0x160
 ? lod_initialize_objects+0x503/0xba0
 lod_initialize_objects+0x503/0xba0
 lod_parse_striping+0x8e5/0x10a0
 ? lod_get_ea+0x17a/0x350
 lod_striping_load+0x20a/0x530
 lod_declare_destroy+0xd8/0x670
 ? lod_declare_attr_set+0xca/0x660
 ? lod_declare_attr_set+0xca/0x660
 mdd_declare_finish_unlink+0x62/0x160
 mdd_declare_rename+0x49f/0x4f0
 mdd_rename+0x98e/0x1a40
 ? __mutex_lock+0x283/0xd80
 mdt_reint_rename+0x1fda/0x2f60
 mdt_reint_rec+0xa2/0x200
 mdt_reint_internal+0x605/0x880
 mdt_reint+0xaf/0x110
 tgt_request_handle+0x1297/0x1990
 ? obd_export_timed_fini+0xa2/0xb0
 ptlrpc_main+0x2b7d/0x3ac0
 ? lockdep_hardirqs_on+0x7a/0x110
 ? __pfx_ptlrpc_main+0x10/0x10
 kthread+0x11b/0x140
 ? __pfx_kthread+0x10/0x10
 ret_from_fork+0x1a5/0x370
 ? __pfx_kthread+0x10/0x10
 ret_from_fork_asm+0x1a/0x30

Change-Id: I21e38a0b6fe7cda0c0c0566178d3137c792a5fc7
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
66875 master J –B ✓T ✓R +1/2
LU-20418 build: Move lnet common checks to ksym
carrying Shaun Tancheff · 4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
4 unresolved L +96 −179
99d
4 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
no vote yet from Andreas Dilger, Timothy Day
reviews: James Simmons +1 2026-07-10 13:56
no vote yet: Andreas Dilger, Timothy Day
patchsets: PS1 06-26 PS2 06-26 PS3 07-09 James Simmons PS4 07-09 James Simmons
your previous vote: +1 on PS2 (2026-06-28 14:03) — now at PS4
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_IBDEV_TO_NODE.ksym:9 — (minor) This one is not a pure move. The old check sat inside the `--enable-efa` block and ran with EXTRA_CHECK_INCLUDE set, so with `--with
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(minor) This one is not a pure move. The old check sat inside the `--enable-efa` block and ran with EXTRA_CHECK_INCLUDE set, so with `--with-o2ib=<MOFED>` it resolved `<rdma/ib_verbs.h>` out of the external OFED tree; the ksym always reads the in-kernel header, and it now runs unconditionally.

The new answer looks like the correct one for efalnd, since lnet/klnds/efalnd/Makefile only adds `-I $(EFA_INCLUDE_PATH)` and not the OFED includes. Since it changes what gets detected on MOFED builds, worth a line in the commit message rather than listing it as a plain move.
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_IN_DEV_FOR_EACH_IFA_RTNL.ksym:7 — (minor) The comment being dropped recorded two things this file doesn't: that 4.18.0-193.el8 carries the backport, and why the _rtnl variant
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(minor) The comment being dropped recorded two things this file doesn't: that 4.18.0-193.el8 carries the backport, and why the _rtnl variant is used instead of _rcu (the current locking is rtnl). ksymfind() has an `extra` field for exactly this kind of note, so the rationale could be carried over.
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_STRUCT_SOCKADDR_UNSIZED.ksym:11 — (suggestion) The test being replaced compiled `kernel_bind(NULL, (struct sockaddr_unsized *)0, 0)` under -Werror, so it proved the prototype
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(suggestion) The test being replaced compiled `kernel_bind(NULL, (struct sockaddr_unsized *)0, 0)` under -Werror, so it proved the prototype that lnet_sock_bind()/lnet_sock_connect() and gss_svc_upcall.c actually depend on. Grepping for the struct definition only proves the type exists.

Upstream split those apart: bf33247a90d3e adds the struct to linux/socket.h, and the `kernel_bind()`/`kernel_connect()` conversions land in later commits (0e50474fa514, 85cb0757d7e1). On a tree carrying only the struct, HAVE_STRUCT_SOCKADDR_UNSIZED is defined, the `sockaddr_unsized` -> `sockaddr` fallback is skipped, and the casts in lnet/lnet/lib-socket.c hit an incompatible pointer type.

Would matching the converted prototype in include/linux/net.h be a closer equivalent?
reply PS4 2026-07-27 22:06 Gerrit AI review for Lustre lustre-lnet.m4:946 — (style) Not a bug, but collapsing the double space before `=` in the GNILND/KFILND conditionals has nothing to do with moving the lnet check
Gerrit AI review for Lustre PS4 · 2026-07-27 22:06
(style) Not a bug, but collapsing the double space before `=` in the GNILND/KFILND conditionals has nothing to do with moving the lnet checks to ksym, and the commit message doesn't mention it. Drop it or split it out?
owner Shaun Tancheff · uploader James Simmons · PS4 uploaded 117d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move lnet common checks to ksym

Move checks for:
  HAVE_IBDEV_TO_NODE
  HAVE_IN_DEV_FOR_EACH_IFA_RTNL
  HAVE_SOCK_INUSE_ADD
  HAVE_SOCK_NOT_OWNED_BY_ME
  HAVE_NETDEV_LOCK_OPS
  HAVE_SENDPAGE_OK
  HAVE_STRUCT_SOCKADDR_UNSIZED
  sockaddr_unsized

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Iaf1759e7d88480254983b2d79c41f12d43974ef6
8027 master J –B ✓T ✓R +0/2−
LU-5960 lnet: add in functionality of lctl to DLC
carrying Amir Shehata · Christopher J. Morrone voted -1
stalled 456d XL +1916 −144
456d
reviews: Christopher J. Morrone -1 2016-06-23 02:31 · Olaf Weber +1 2016-03-24 16:31
no vote yet: Doug Oucharek, Isaac Huang, James Shimek, Chuck Fossen, Liang Zhen
owner Amir Shehata · uploader James Simmons · PS23 uploaded 3883d ago · NEW · open in Gerrit ↗
commit message
LU-5960 lnet: add in functionality of lctl to DLC

One of the barriers to moving from lctl to lnetctl
is the lack of certain functionality. This patch
adds some of the feature that are missing back.

The following commands have been added:
. show peers
. add peer
. del peer
. show connections
. close connection
. push connection

Besides adding in the missing pieces I have added
new features such as filtering the listing of peer
or connections based on properties such as NID,PID
or even LNet type (e.g o2ib1) to the lnetconfig
library. From the lnetctl command line one can
call lnetctl peer show --nid 10.0.0.1@tcp and it will
only show that specific peer. Listing of a grouping
of peers is also possible with for example lnetctl
peer show --nid o2ib12 which will display all peers
belong to the o2ib12 net configuration. Lastly the
ability to use DNS hostnames was also added.

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Change-Id: Id102e8a6148d9e2ef8c88880df86e237a14c5ebb
▶

In CI

(1)
65199 master J –B ✓T …R +2/2
LU-19768 obdclass: add table-driven netlink framework
carrying Timothy Day · build OK — testing in progress (typically 6–14h)
2 unresolved XL +1152 −575
10h
build OK — testing in progress (typically 6–14h)
2 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #135320 SUCCESS · tests all Maloo sessions · test queue
reviews: Arshad Hussain +1 2026-11-04 04:28 · Chris Horn +1 2026-11-04 02:50
no vote yet: Sebastien Buisson, Andreas Dilger, Alex Zhuravlev, Minh
patchsets:
+16 earlier PS1 04-09 PS2 07-22 PS3 07-29 PS4 08-14 Minh PS5 08-14 Minh PS6 08-14 Minh PS7 08-14 Minh PS8 08-14 Minh PS9 09-23 PS10 09-29 PS11 09-29 PS12 10-08 PS13 10-15 James Simmons PS14 10-16 James Simmons PS15 10-16 James Simmons PS16 10-20 James Simmons
PS17 10-23 James Simmons PS18 10-27 James Simmons PS19 10-27 James Simmons PS20 11-02 James Simmons PS21 11-03 James Simmons
your previous vote: -1 on PS1 (2026-04-10 19:43) — now at PS21
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS16 2026-10-21 19:03 Gerrit AI review for Lustre COMMIT_MSG:16 — (minor) Several behavior changes in the diff aren't mentioned here:
Gerrit AI review for Lustre PS16 · 2026-10-21 19:03
(minor) Several behavior changes in the diff aren't mentioned here:

- config/lustre-libcfs.m4 and lustre_compat/net/genetlink.h: HAVE_GENL_DUMPIT_INFO_FAMILY is replaced by HAVE_GENL_INFO_FAMILY, and the compat condition is inverted.
- liblnetconfig_netlink.c: new handling of an empty flow set in yaml_create_nested_list().
- liblustreapi_param.c: print_out_targets() now returns the raw libyaml rc. Before, it returned 0 on success, which the caller treated as a parse error.
- lprocfs_stats_scan(): the `filter[strlen(filter) - 1] = '\0'` truncation for `*.` patterns is removed, so the filter matches differently.
- lustre_stats_cmd(): the stats references taken by the scan are now dropped, where the old code leaked them.

Could these be listed in the body, or split out if they are independent fixes?
reply PS20 2026-11-02 18:52 Misc Code Checks Robot (Gatekeeper helper) kernelcomm.c:999 — warn: lustre_targets_pack_msg():inconsistent returns '&ltl->ltl_desc->ltd_mutex'.
Misc Code Checks Robot (Gatekeeper helper) PS20 · 2026-11-02 18:52
warn: lustre_targets_pack_msg():inconsistent returns '&ltl->ltl_desc->ltd_mutex'.
warn: lustre_targets_pack_msg():inconsistent returns '&ltl->ltl_desc->ltd_rw_sem'.
owner Timothy Day · uploader James Simmons · PS21 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-19768 obdclass: add table-driven netlink framework

Introduce a reusable table-driven netlink handler framework
(lustre_nl_ctx) that factors out the common start/dump/done
pattern shared by commands that iterate OBD devices.

Each command supplies a descriptor with collect, pack_msg, and
setup / release callbacks.

Also fix several bugs in the existing stats dump path:
- Add missing nla_put return-value checks
- Fix an off-by-one in key-list sizing
- Fix a typo ("togther" -> "together").

TLC-bug-id: TLU-56
Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ic3267111785fe79761f0673477149f7fca470a35
▶

Needs reviewers

(2)
57548 master J !B ✓T ✓R 0/2
LU-16565 ldlm: [1] Remove ldlm is,set,clear macros
carrying Timothy Day · CI green, no reviews yet — add reviewers
ldlm_flags_remove S +23 −23
13d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #111732 SUCCESS · tests all Maloo sessions
patchsets: PS1 12-20 PS2 03-13 James Simmons
owner Timothy Day · uploader James Simmons · PS2 uploaded 600d ago · NEW · open in Gerrit ↗
commit message
LU-16565 ldlm: [1] Remove ldlm is,set,clear macros

Replaces ldlm_{is,set,clear} macros with the direct flag
names.

The patch has been generated with the coccinelle script in
contrib/cocci/ldlm_flags.cocci.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: If537e331d52884e75cf0a241cdbb061b7d245f9f
49515 b2_12 J ✗1B ✓T ✓R 0/1
LU-8585 llite: don't cache MDS_OPEN_LOCK for volatile files
CI green — no vote yet from Qian Yingjin, Andreas Dilger, Quentin Bouget
stalled 785d S +10 −5
785d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
replay-single@ldiskfs+DNE:test_65aseen in 1 other review
build #91384 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger, Quentin Bouget
patchsets: PS1 12-26 PS2 12-26 PS3 12-28
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS3 uploaded 1406d ago · NEW · backport · open in Gerrit ↗
commit message
LU-8585 llite: don't cache MDS_OPEN_LOCK for volatile files

The kernels knfsd constantly opens and closes files for each
access which can result in a continuous stream of open+close RPCs
being send to the MDS. To avoid this Lustre created a special
flag, ll_nfs_dentry, which enables caching of the MDS_OPEN_LOCK
on the client. The fhandles API also uses the same exportfs layer
as NFS which indirectly ends up caching the MDS_OPEN_LOCK as well.
This is okay for normal files except for Lustre's special volatile
files that are used for HSM restore. It is expected on the last
close of a Lustre volatile file that it is no longer accessable.
To ensure this behavior is kept don't cache MDS_OPEN_LOCK for
volatile files.

Lustre-change: https://review.whamcloud.com/36641
Lustre-commit: 6a3a842add0e941d901869db195ec0068e69cde3

Change-Id: Ia5d78baf17279c6f268bc0bf443b428d5cbea440
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Shaun Tancheff <stancheff@cray.com>
Reviewed-by: Quentin Bouget <quentin.bouget@cea.fr>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
▶

Waiting on reviewers

(0)
nothing here right now
▶

Ready to land

(10)
66885 master J –B ✓T ✓R +2/2
LU-20418 build: Move lnet o2ib in-kernel checks to ksym
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
10 unresolved M +126 −8
99d
all green — ready to land (not in master-next yet)
10 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #127424 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-07-10 18:17 · Timothy Day +1 2026-07-10 18:56
no vote yet: Andreas Dilger
patchsets: PS1 06-26 PS2 06-26 PS3 07-09 James Simmons PS4 07-10 James Simmons
your previous vote: +1 on PS3 (2026-07-10 13:57) — now at PS4
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body opens straight into the file list; a sentence on what this buys (replacing in-kernel compile tests with header greps) and w
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(style) The body opens straight into the file list; a sentence on what this buys (replacing in-kernel compile tests with header greps) and why would help.

Also, two of the listed items are not moved checks: `ib_uses_virt_dma.ksym` and `ib_dma_virt_map_sg_EXPORTED.ksym` are new, with no m4 predecessor, and exist only to build the HAVE_OFED_IB_DMA_MAP_SG_SANE expression. Worth saying so.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre COMMIT_MSG:20 — (minor) `trivial` seems light for a change that alters how o2ib capability detection works on every supported kernel. Would an o2ib-capable
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) `trivial` seems light for a change that alters how o2ib capability detection works on every supported kernel. Would an o2ib-capable session (both the in-kernel ko2iblnd and an external MOFED build) be worth requesting here?
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre IN_KERNEL_HAVE_IBK_SG_GAPS_REG.ksym:10 — (typo) This status string looks copy-pasted from HAVE_LINUX_BIO_INTEGRITY_HEADER.ksym. Configure prints
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(typo) This status string looks copy-pasted from HAVE_LINUX_BIO_INTEGRITY_HEADER.ksym. Configure prints

    checking if [in-kernel] header rdma/ib_verbs.h exists ... yes

for what is really an `IBK_SG_GAPS_REG` enum test. Something like "'IBK_SG_GAPS_REG' is defined" would match the other files here.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre IN_KERNEL_HAVE_OFED_IB_DEVICE_OPS.ksym:11 — (minor) The m4 test being replaced was `offsetof(struct ib_device_ops, unmap_fmr)`, so it answered no once the FMR members went away in v5.8
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) The m4 test being replaced was `offsetof(struct ib_device_ops, unmap_fmr)`, so it answered no once the FMR members went away in v5.8; this grep answers yes on anything from v5.0 on (confirmed against v6.12).

No effect today - the only user is inside `#ifdef HAVE_OFED_FMR_POOL_API` in o2iblnd.c - but in-kernel and external now answer the same question differently, since LN_SRC_O2IB_IB_DEVICE_OPS_EXISTS still requires unmap_fmr. Intentional?
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre IN_KERNEL_HAVE_OFED_IB_DMA_MAP_SG_SANE.ksym:16 — (defect) This emits an object-like macro whose *value* carries the answer, so IN_KERNEL_HAVE_OFED_IB_DMA_MAP_SG_SANE ends up defined on ever
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(defect) This emits an object-like macro whose *value* carries the answer, so IN_KERNEL_HAVE_OFED_IB_DMA_MAP_SG_SANE ends up defined on every kernel that has `ib_dma_map_sg()` in ib_verbs.h - which is all of them.

The only reader tests presence, not value (lnet/klnds/o2iblnd/o2iblnd.h:17, after the in-kernel sed rewrite):

    #if defined(EXTERNAL_OFED_BUILD) && !defined(IN_KERNEL_HAVE_OFED_IB_DMA_MAP_SG_SANE)
    #undef CONFIG_INFINIBAND_VIRT_DMA
    #endif

so `!defined(...)` is now always false. I ran gen_compat.py against a v6.12 tree with the `EXPORT_SYMBOL(ib_dma_virt_map_sg)` line deleted: the expression evaluates to 0, but the `#define` is still emitted. Should the reader switch to `#if !IN_KERNEL_HAVE_OFED_IB_DMA_MAP_SG_SANE`, or should `macro` be a dict so it is only defined when sane?

Two smaller things on the same construct: `defined` produced by macro expansion inside `#if` is undefined behaviour (C99 6.10.1p4) and gcc warns under -Wexpansion-to-defined; and the generated comment block cites the 2006 `v2.6.19-3257-g9b513090a3c5e` DMA-mapping commit while the macro actually encodes the 5.11-era virt-dma condition, which will read oddly in config.h.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre IN_KERNEL_HAVE_OFED_RDMA_REJECT_4ARGS.ksym:10 — (minor) The test is for the 4-argument form, but the text reads as a plain availability check - on a pre-5.8 kernel configure will say `'rdm
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) The test is for the 4-argument form, but the text reads as a plain availability check - on a pre-5.8 kernel configure will say `'rdma_reject()' is available ... no` even though rdma_reject() is there. LN_O2IB_RDMA_REJECT words it "4arg 'rdma_reject' exists"; matching that would be less confusing.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre IN_KERNEL_ib_dma_virt_map_sg_EXPORTED.ksym:8 — (typo) Empty `message` leaves a bare comment line with trailing whitespace in the generated header. IN_KERNEL_ib_uses_virt_dma.ksym uses 'RD
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(typo) Empty `message` leaves a bare comment line with trailing whitespace in the generated header. IN_KERNEL_ib_uses_virt_dma.ksym uses 'RDMA/core: remove use of dma_virt_ops' for this same hash.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre IN_KERNEL_ib_dma_virt_map_sg_EXPORTED.ksym:10 — (minor) In device.c that EXPORT_SYMBOL sits inside `#ifdef CONFIG_INFINIBAND_VIRT_DMA`, so a text grep says yes regardless of the kernel's c
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) In device.c that EXPORT_SYMBOL sits inside `#ifdef CONFIG_INFINIBAND_VIRT_DMA`, so a text grep says yes regardless of the kernel's config, while the Module.symvers fallback answers correctly. ksymfind.check() only falls back to symvers on FileNotFoundError, so against a full kernel source tree the .c is found first and symvers is never consulted - the two paths can disagree for the same kernel. Is the .c grep needed at all here, given symvers is authoritative?
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre lustre-build-linux.m4:1097 — (style) These two macros are now single-line wrappers, and the header comments still describe "o2ib in-kernel|external" plus a `$7` in_kerne
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(style) These two macros are now single-line wrappers, and the header comments still describe "o2ib in-kernel|external" plus a `$7` in_kernel mode that no longer exists.

Nothing passes `in_kernel` to LB2_LINUX_TEST_SRC() any more either, so the in_kernel branches at 708 (including the HAVE_OFED_COMPAT_RDMA / IN_KERNEL_HAVE_OFED_ sed) and 746 are dead code after this patch. Worth removing them here rather than leaving them to rot.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre lustre-build-linux.m4:1122 — (minor) Dropping the in-kernel result here hits every caller, not just the nine ported to .ksym. LN_O2IB_IB_DMA_PCI_P2P_DMA_SUPPORTED in con
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) Dropping the in-kernel result here hits every caller, not just the nine ported to .ksym. LN_O2IB_IB_DMA_PCI_P2P_DMA_SUPPORTED in config/lustre-lnet.m4 also loses IN_KERNEL_HAVE_OFED_IB_DMA_PCI_P2P_DMA_SUPPORTED, and there is no .ksym for it. Nothing in the tree reads that macro today so it looks harmless, but it isn't mentioned in the commit message - deliberate, or an oversight?
owner Shaun Tancheff · uploader James Simmons · PS4 uploaded 116d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move lnet o2ib in-kernel checks to ksym

Perform in-kernel checks:
  ib_uses_virt_dma.ksym
  ib_dma_virt_map_sg_EXPORTED.ksym
  HAVE_IBK_SG_GAPS_REG.ksym
  HAVE_OFED_RDMA_REJECT_4ARGS.ksym
  HAVE_OFED_IB_DEVICE_OPS.ksym
  HAVE_OFED_RDMA_CONNECT_LOCKED.ksym
  HAVE_OFED_IB_SG_DMA_ADDRESS.ksym
  HAVE_OFED_FMR_POOL_API.ksym
  HAVE_OFED_IB_DMA_MAP_SG_SANE.ksym

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ie7fd7e31b1c35ef8a6510f8cd2aa30416f251f0b
66848 master J –B ✓T ✓R +2/2
LU-20418 build: Move core pre-v6.18 checks to ksym checks
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
8 unresolved XL +350 −670
99d
all green — ready to land (not in master-next yet)
8 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #127390 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-07-10 13:55 · Timothy Day +1 2026-07-10 18:58
no vote yet: Andreas Dilger
patchsets: PS1 06-24 PS2 06-26 PS3 06-26 PS4 07-09 James Simmons
your previous vote: +1 on PS3 (2026-06-28 00:27) — now at PS4
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre COMMIT_MSG:14 — (typo) Stray `.ksym` suffix here, and this same macro is listed again at the end of the list.
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(typo) Stray `.ksym` suffix here, and this same macro is listed again at the end of the list.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre COMMIT_MSG:30 — (minor) Duplicate of the entry earlier in the list.
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) Duplicate of the entry earlier in the list.

The list is also missing `HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN`, which this patch adds as config/compat.d/HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN.ksym and removes from lustre-core.m4. Worth adding so every hunk is accounted for.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_LINUX_UNALIGNED_HEADER.ksym:11 — (suggestion) This is a header-existence check, but it anchors on a function body line rather than the include guard. The two sibling existen
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(suggestion) This is a header-existence check, but it anchors on a function body line rather than the include guard. The two sibling existence checks added by the previous patch use the guard: `_LINUX_BIO_INTEGRITY_H` and `_LINUX_BLK_INTEGRITY_H`. `__LINUX_UNALIGNED_H` would match here and is far more stable than the generic-implementation body of `get_unaligned_le16()`.

A missed match is not a silent no-op: osd_iam.h falls back to

    #include <asm/unaligned.h>

and 5f60d5f6bbc1 deleted asm/unaligned.h in the same commit, so a false negative is a build failure.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_MODULE_IMPORT_USES_EXPORT_SYMBOLS.ksym:11 — (minor) The status text reads as the opposite of the macro it gates. On v6.13+ this prints
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) The status text reads as the opposite of the macro it gates. On v6.13+ this prints

    checking if module import uses export symbols ... yes

yet that is exactly the case where `HAVE_MODULE_IMPORT_USES_EXPORT_SYMBOLS` is *not* defined (the True branch defines `CRYPTO_INTERNAL` instead). The old m4 printed "if MODULE_IMPORT_NS() uses export symbols ... yes" when the macro *was* defined, so the meaning of the configure line flips with this move. Something like "MODULE_IMPORT_NS() needs a string literal" would track the polarity.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_PAGE_PRIVATE_2.ksym:10 — (typo) "availabe" -> "available". This string is printed during configure.
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(typo) "availabe" -> "available". This string is printed during configure.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_PageMlocked.ksym:10 — (minor) Same polarity readability point as the module-import check: the file is named `HAVE_PageMlocked` but a true result means `PageMlocke
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(minor) Same polarity readability point as the module-import check: the file is named `HAVE_PageMlocked` but a true result means `PageMlocked` is gone and `folio_test_mlocked()` is present. Naming the file after the thing it actually detects (or after `folio_test_mlocked_page`, the macro it defines) would avoid a reader reaching for the wrong branch.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_WRITE_BEGIN_FOLIO.ksym:8 — This check matches on the `write_begin` prototype, but the recorded commit is the `write_end` conversion. The one that changed `write_begin`
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
This check matches on the `write_begin` prototype, but the recorded commit is the `write_end` conversion. The one that changed `write_begin` is v6.11-rc1-52-g1da86618bdce ("fs: Convert aops->write_begin to take a folio").

The m4 test this replaces carried both commits in its comment; only the less relevant one survived, and it is what ends up in the generated header comment.
reply PS4 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_blk_integrity_with_metadata_size.ksym:8 — (typo) The upstream subject for c6603b1d6556 is "block: rename tuple_size field in blk_integrity to metadata_size" — the "to" is missing her
Gerrit AI review for Lustre PS4 · 2026-07-27 22:07
(typo) The upstream subject for c6603b1d6556 is "block: rename tuple_size field in blk_integrity to metadata_size" — the "to" is missing here, which reads as a field named `blk_integrity_metadata_size`. This string is copied verbatim into the generated compat header.
owner Shaun Tancheff · uploader James Simmons · PS4 uploaded 117d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v6.18 checks to ksym checks

Move checks for:
  HAVE_D_REVALIDATE_WITH_INODE_NAME
  HAVE_FILE_KATTR
  HAVE_HRTIMER_SETUP
  HAVE_IOPS_MKDIR_RETURNS_DENTRY
  HAVE_LINUX_UNALIGNED_HEADER.ksym
  HAVE_MODULE_IMPORT_USES_EXPORT_SYMBOLS
  HAVE_NETIF_GET_FLAGS
  HAVE_PAGE_MAPCOUNT_IS_TYPE
  HAVE_PAGE_PRIVATE_2
  HAVE_PG_ERROR
  HAVE_PageMlocked
  HAVE_SET_DEFAULT_D_OP
  HAVE_STRUCT_FILE_F_VERSION
  HAVE_TRY_LOOKUP_NOPERM
  HAVE_WAIT_ON_PAGE_LOCKED
  HAVE_WRITE_BEGIN_FOLIO
  HAVE_WRITE_BEGIN_KIOCB
  HAVE_blk_integrity_with_metadata_size
  HAVE_fs_struct_with_seq
  HAVE_simple_dentry_operations
  HAVE_LINUX_UNALIGNED_HEADER

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I0660a66ac4ca3b7387be7eb87efb376a4394cda6
66836 master J –B ✓T ✓R +3/2
LU-20418 build: Move core pre-v5.11 checks to ksym checks
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
6 unresolved L +294 −546
99d
all green — ready to land (not in master-next yet)
6 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #127385 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-07-09 20:41 · Andreas Dilger +1 2026-07-09 20:41 · Timothy Day +1 2026-07-09 20:41
patchsets: PS1 06-24 PS2 06-25 PS3 07-09 James Simmons
your previous vote: +1 on PS2 (2026-06-28 00:27) — now at PS3
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre COMMIT_MSG:30 — (minor) The body lists 21 macros as moved, but two things in the diff are not covered by that list.
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(minor) The body lists 21 macros as moved, but two things in the diff are not covered by that list.

LC_FSCRYPT_SUPPORT is deleted from config/lustre-core.m4 and has no .ksym replacement - it is not one of the 21.

HAVE_KTHREAD_USE_MM.ksym is also not a pure move: it emits kthread_use_mm()/kthread_unuse_mm() compat defines that LC_HAVE_KTHREAD_USE_MM never produced.

Both are worth describing so the diff has no surprises.
reply PS3 2026-07-23 13:55 Shaun Tancheff HAVE_FLUSH_DELAYED_FPUT.ksym:11 — Yes [for source only checking, ex lustre-in-tree]
Oleg Drokin PS3 · 2026-07-23 06:29
and when they decide this does nto need to be GPL - it'll break? fragile.
Shaun Tancheff PS3 · 2026-07-23 13:55
Yes [for source only checking, ex lustre-in-tree]
symvers is also checked below so if the kernel is built (lustre is out-of-tree) then we also fall back to Module.symvers which would have the symbol (if it is exported).
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_FLUSH_DELAYED_FPUT.ksym:13 — (defect) Adding evidence on the open question above rather than repeating it: the Module.symvers fallback does not cover the source-tree cas
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(defect) Adding evidence on the open question above rather than repeating it: the Module.symvers fallback does not cover the source-tree case.

In ksymfind.check() (gen_compat.py) the symvers loop lives inside "except FileNotFoundError", so it only runs when the header/source path is missing. When LINUX points at a kernel source tree, fs/file_table.c exists, grep_ex() simply returns no match, errorNoFile stays False, and symvers is never consulted - which is exactly the in-tree/source-only configuration.

The old LB_CHECK_EXPORT ran the other way round: Module.symvers first, then grep -E 'EXPORT_SYMBOL.*\(flush_delayed_fput\)' on the source, so it also tolerated the _GPL/_NS spellings.

HAVE_ACCOUNT_PAGE_DIRTIED_EXPORT and HAVE_FSCRYPT_D_REVALIDATE have the same shape. Trying symvers first would restore the old behaviour.
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_FSCRYPT_DUMMY_CONTEXT_ENABLED.ksym:11 — (defect) Grepping one header does not follow #include, and on RHEL8 (4.18) include/linux/fscrypt.h is only a 254-line wrapper that includes
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(defect) Grepping one header does not follow #include, and on RHEL8 (4.18) include/linux/fscrypt.h is only a 254-line wrapper that includes <linux/fscrypt_supp.h> or <linux/fscrypt_notsupp.h>; fscrypt_dummy_context_enabled() is defined in those two, not in fscrypt.h itself.

The old LC_SRC_FSCRYPT_DUMMY_CONTEXT_ENABLED compiled #include <linux/fscrypt.h> so it found the notsupp stub and set the macro. This check will report no on RHEL8, which is a primary tested server kernel. Today that is masked in a default build because LC_CONFIG_CRYPTO AC_DEFINEs the macro for the embedded-llcrypt path, but not for --enable-crypto=in-kernel.

Can header take a list so fscrypt_supp.h/fscrypt_notsupp.h are covered too?
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_KTHREAD_USE_MM.ksym:17 — (defect) These defines end up in config.h, which is force-included into every translation unit (-include $PWD/config.h in config/lustre-buil
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(defect) These defines end up in config.h, which is force-included into every translation unit (-include $PWD/config.h in config/lustre-build.m4).

lustre/include/cl_object.h:2645 and lustre/obdclass/cl_io.c:1549 already provide the same fallback under #ifndef HAVE_KTHREAD_USE_MM, but spell it use_mm(mm) rather than use_mm((mm)). On a kernel with no kthread_use_mm() (vanilla/Ubuntu 5.4, both listed in lustre/ChangeLog) both fire and the replacement lists differ, so every file that pulls in cl_object.h gets a "kthread_use_mm redefined" diagnostic.

Either drop this False branch, or remove the two in-tree fallbacks in the same patch.
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre lustre-core.m4:3739 — (defect) This patch deletes AC_DEFUN([LC_FSCRYPT_SUPPORT], ...) but leaves this call, and there is no .ksym replacement - it is not in the l
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(defect) This patch deletes AC_DEFUN([LC_FSCRYPT_SUPPORT], ...) but leaves this call, and there is no .ksym replacement - it is not in the list of checks being moved.

With no definition left in the tree, m4 copies the token verbatim into configure and it is executed as a shell command, so has_fscrypt_support is never set. The AS_IF on the next line then always takes the embedded-llcrypt branch, and --enable-crypto=in-kernel can no longer select in-kernel fscrypt.

Was this hunk removed by accident along with the neighbouring LC_LM_COMPARE_OWNER_EXISTS/LC_FSCRYPT_DIGESTED_NAME blocks?
owner Shaun Tancheff · uploader James Simmons · PS3 uploaded 117d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v5.11 checks to ksym checks

Move checks for:
  GENL_FAMILY_HAS_RESV_START_OP
  HAVE_ACCOUNT_PAGE_DIRTIED_EXPORT
  HAVE_BDI_DEBUG_STATS
  HAVE_BIO_BI_PHYS_SEGMENTS
  HAVE_BVEC_ITER_ALL
  HAVE_FLUSH_DELAYED_FPUT
  HAVE_FSCRYPT_DIGESTED_NAME
  HAVE_FSCRYPT_DUMMY_CONTEXT_ENABLED
  HAVE_FSCRYPT_DUMMY_POLICY
  HAVE_FSCRYPT_D_REVALIDATE
  HAVE_FSCRYPT_FNAME_ALLOC_BUFFER_NO_INODE
  HAVE_FSCRYPT_IS_NOKEY_NAME
  HAVE_FSCRYPT_NOKEY_NAME
  HAVE_FSCRYPT_PREPARE_READDIR
  HAVE_FSCRYPT_SET_CONTEXT
  HAVE_FSCRYPT_SET_TEST_DUMMY_ENC_CHAR_ARG
  HAVE_ITER_FILE_SPLICE_WRITE
  HAVE_KEYRING_SEARCH_4ARGS
  HAVE_KTHREAD_USE_MM
  HAVE_LM_COMPARE_OWNER
  HAVE_PRANDOM_H

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Icdffc743b3acb57a02e663ce67c10cda9e881c9b
66832 master J –B ✓T ✓R +2/2
LU-20418 build: Move libcfs remaining checks to ksym checks
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
5 unresolved L +252 −455
99d
all green — ready to land (not in master-next yet)
5 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #127389 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-07-10 13:56 · Timothy Day +1 2026-07-10 18:57
patchsets: PS1 06-24 PS2 06-25 PS3 07-09 James Simmons
your previous vote: +1 on PS2 (2026-06-28 00:27) — now at PS3
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre COMMIT_MSG:27 — (minor) The macro this generates is HAVE_PDE_DATA, not HAVE_pde_data as listed here. The rename itself looks harmless since no C code tests
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(minor) The macro this generates is HAVE_PDE_DATA, not HAVE_pde_data as listed here. The rename itself looks harmless since no C code tests it, but it is a silent change of a config.h macro name and is worth calling out in the body.

Also, "remaining checks" reads as if lustre-libcfs.m4 is now empty of kernel checks; roughly twenty LIBCFS_* tests are still there.
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_BIO_ALLOC_WITH_BDEV.ksym:12 — (defect) `blk_opf_t` did not exist when bio_alloc() gained the bdev argument; it arrives with v6.0 commit 16458cf3bd15 ("block: Use the new
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(defect) `blk_opf_t` did not exist when bio_alloc() gained the bdev argument; it arrives with v6.0 commit 16458cf3bd15 ("block: Use the new blk_opf_t type"). In v5.18 and v5.19 the second line reads

    unsigned short nr_vecs, unsigned int opf, gfp_t gfp_mask)

so the two-line match fails and HAVE_BIO_ALLOC_WITH_BDEV stays undefined on 5.18/5.19, where the removed LIBCFS_BIO_ALLOC_WITH_BDEV compile test defined it (the m4 list it came from grouped it under 5.17).

That is a build failure rather than a silent difference: cfs_bio_alloc() in lustre/include/lustre_compat.h then compiles the `bio_alloc(gfp_mask, nr_vecs)` branch against a bio_alloc() that takes four arguments. The first pattern alone is enough to identify the signature; alternatively relax the type to something like `\w+ opf`.
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_KFREE_SENSITIVE.ksym:11 — (defect) The parameter name `objp` was only added to this prototype in v5.16. From v5.10 (the commit quoted above) through v5.15, include/li
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(defect) The parameter name `objp` was only added to this prototype in v5.16. From v5.10 (the commit quoted above) through v5.15, include/linux/slab.h has

    void kfree_sensitive(const void *);

so the pattern does not match and HAVE_KFREE_SENSITIVE is left undefined on exactly the kernels the old LIBCFS_HAVE_KFREE_SENSITIVE test accepted. Running gen_compat.py over upstream headers gives no for v5.10-v5.15 and yes from v5.16 on, which covers RHEL9 (5.14), SLES15 SP4/SP5 (5.14), Ubuntu 22.04 (5.15) and openEuler 22.03 (5.10).

Nothing includes lustre_compat/linux/slab.h today so nothing breaks yet, but that header maps kfree_sensitive() to kzfree(), which no kernel >= 5.10 still defines. Dropping `objp` from the pattern makes it match both spellings.
reply PS3 2026-07-23 15:07 Shaun Tancheff HAVE_KMAP_LOCAL.ksym:12 — Yes the () should be escaped here.
Oleg Drokin PS3 · 2026-07-23 06:26
if you are doing this you also need to escape the () above?
Shaun Tancheff PS3 · 2026-07-23 15:07
Yes the () should be escaped here.
Not sure why a build did not fail ... will check
reply PS3 2026-07-27 22:07 Gerrit AI review for Lustre HAVE_TIMER_DELETE_SYNC.ksym:7 — (minor) 9a5a30568697 is "timers: Get rid of del_singleshot_timer_sync()"; timer_delete_sync() is introduced by v6.1-rc1-11-g9b13df3fb64e ("t
Gerrit AI review for Lustre PS3 · 2026-07-27 22:07
(minor) 9a5a30568697 is "timers: Get rid of del_singleshot_timer_sync()"; timer_delete_sync() is introduced by v6.1-rc1-11-g9b13df3fb64e ("timers: Rename del_timer_sync() to timer_delete_sync()"). The old m4 comment listed both, and this reference ends up in the generated header, so the rename commit is the one to quote here.
owner Shaun Tancheff · uploader James Simmons · PS3 uploaded 117d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move libcfs remaining checks to ksym checks

Move checks for:
  HAVE_BIO_ALLOC_WITH_BDEV
  HAVE_BLK_INTEGRITY_NOVERIFY
  HAVE_CIPHER_H
  HAVE_CONST_CTR_TABLE
  HAVE_CRYPTO_SHA2_HEADER
  HAVE_KFREE_SENSITIVE
  HAVE_KMAP_LOCAL
  HAVE_LINUX_FORTIFY_STRING_HEADER
  HAVE_LINUX_STDARG_HEADER
  HAVE_LIST_CMP_FUNC_T
  HAVE_NLA_STRLCPY
  HAVE_PANIC_NOTIFIER_H
  HAVE_PARAM_SET_UINT_MINMAX
  HAVE_RB_FIND
  HAVE_TASK_IS_RUNNING
  HAVE_TIMER_DELETE
  HAVE_TIMER_DELETE_SYNC
  HAVE_pde_data

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Iaf79673cb47beeb9ce21303765d635d73475789f
66839 master J –B ✓T ✓R +2/2
LU-20418 build: Move core pre-v6.1 checks to ksym checks
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
7 unresolved L +260 −432
99d
all green — ready to land (not in master-next yet)
7 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #127388 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-07-10 13:55 · Timothy Day +1 2026-07-10 18:57
no vote yet: Andreas Dilger
patchsets: PS1 06-24 PS2 06-26 PS3 07-09 James Simmons
your previous vote: +1 on PS2 (2026-06-28 00:27) — now at PS3
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-07-27 22:06 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) The subject is wrapped onto a second line, so git and Gerrit render it as "...to ksym checks" with a double space. It fits in one l
Gerrit AI review for Lustre PS3 · 2026-07-27 22:06
(style) The subject is wrapped onto a second line, so git and Gerrit render it as "...to ksym  checks" with a double space. It fits in one line at 55 characters.
reply PS3 2026-07-27 22:06 Gerrit AI review for Lustre COMMIT_MSG:17 — (minor) HAVE_FILEMAP_GET_FOLIOS_CONTIG is listed as moved, but LC_HAVE_FILEMAP_GET_FOLIOS_CONTIG is still defined in config/lustre-core.m4 a
Gerrit AI review for Lustre PS3 · 2026-07-27 22:06
(minor) HAVE_FILEMAP_GET_FOLIOS_CONTIG is listed as moved, but LC_HAVE_FILEMAP_GET_FOLIOS_CONTIG is still defined in config/lustre-core.m4 and still called from LC_PROG_LINUX_SRC/LC_PROG_LINUX_RESULTS.
reply PS3 2026-07-27 22:06 Gerrit AI review for Lustre COMMIT_MSG:27 — (typo) There is no HAVE_VFS_SETXATTR_USERNS macro anywhere in the tree; the check moved here is LC_HAVE_VFS_SETXATTR_NON_CONST_VALUE, which
Gerrit AI review for Lustre PS3 · 2026-07-27 22:06
(typo) There is no HAVE_VFS_SETXATTR_USERNS macro anywhere in the tree; the check moved here is LC_HAVE_VFS_SETXATTR_NON_CONST_VALUE, which defines VFS_SETXATTR_VALUE(). Same for the .ksym file name.
reply PS3 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_AOPS_MIGRATE_FOLIO.ksym:15 — (minor) This is the only converted check that also emits macros the m4 never defined: folio_migr and migrate_folio are already defined by lu
Gerrit AI review for Lustre PS3 · 2026-07-27 22:06
(minor) This is the only converted check that also emits macros the m4 never defined: folio_migr and migrate_folio are already defined by lustre/include/lustre_compat.h under the same #ifdef HAVE_AOPS_MIGRATE_FOLIO. The two copies agree, so the redefinition is benign, but it leaves two places to keep in sync and it also pushes `migrate_folio` -> `migratepage` into config.h for every module rather than just the files that include lustre_compat.h. Either drop these here or drop the lustre_compat.h block, and mention it in the commit message.
reply PS3 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_FILEMAP_GET_FOLIOS_CONTIG.ksym:12 — Unlike the other 16 checks in this patch, the m4 side was not deleted: LC_SRC_HAVE_FILEMAP_GET_FOLIOS_CONTIG / LC_HAVE_FILEMAP_GET_FOLIOS_CO
Gerrit AI review for Lustre PS3 · 2026-07-27 22:06
Unlike the other 16 checks in this patch, the m4 side was not deleted: LC_SRC_HAVE_FILEMAP_GET_FOLIOS_CONTIG / LC_HAVE_FILEMAP_GET_FOLIOS_CONTIG are still in config/lustre-core.m4 and still invoked from the 6.1 block of LC_PROG_LINUX_SRC and LC_PROG_LINUX_RESULTS.

So the slow compile test still runs, and HAVE_FILEMAP_GET_FOLIOS_CONTIG ends up defined twice in config.h (benign only because both expand to 1). Should the m4 half go away here too?
reply PS2 2026-07-10 15:52 Timothy Day HAVE_IOV_ITER_IS_ALIGNED.ksym:9 — We don't need this symbol - https://review.whamcloud.com/c/fs/lustre-release/+/64387
Timothy Day PS2 · 2026-07-10 15:52
We don't need this symbol - https://review.whamcloud.com/c/fs/lustre-release/+/64387
reply PS3 2026-07-27 22:06 Gerrit AI review for Lustre HAVE_VFS_SETXATTR_USERNS.ksym:17 — The True/False branches look swapped relative to the autoconf test they replace.
Gerrit AI review for Lustre PS3 · 2026-07-27 22:06
The True/False branches look swapped relative to the autoconf test they replace.

LC_HAVE_VFS_SETXATTR_NON_CONST_VALUE compiled `vfs_setxattr(&init_user_ns, de, name, (const void *)value, 0, 0)`: on success (value arg is `const void *`) it defined VFS_SETXATTR_VALUE(value) as `(value)`, and only on failure (non-const window, v5.19-rc5-17-g0c5fd887d2bb .. v6.0-rc3-6-g6344e66970c6) as `((void *)(value))` -- 0006eb3644 calls that "Cast away const when required".

Here the regex matches when the header declares `const void *`, and that case selects the cast. Running gen_compat.py confirms it:

    v6.18 headers (const void *):
      checking if vfs_setxattr() has 'const void *' parameter ... yes
      #define VFS_SETXATTR_VALUE(value)  ((void *)(value))

    v6.0 headers (void *):
      checking if vfs_setxattr() has 'const void *' parameter ... no
      #define VFS_SETXATTR_VALUE(value)  (value)

Both are the opposite of what the m4 produced, and the "yes" line contradicts the branch it picks. It happens to be harmless today only because the single user in lustre_compat.h calls __vfs_setxattr(), whose value argument stayed `const void *` on every kernel; the cast becomes a build failure the moment the macro is used with vfs_setxattr() again on a v6.0 kernel.
owner Shaun Tancheff · uploader James Simmons · PS3 uploaded 117d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v6.1 checks to ksym
 checks

Move checks for:
  HAVE_ADD_TO_PAGE_CACHE_LOCKED
  HAVE_AOPS_MIGRATE_FOLIO
  HAVE_AOPS_READ_FOLIO
  HAVE_AOPS_RELEASE_FOLIO
  HAVE_DQUOT_TRANSFER_WITH_USER_NS
  HAVE_FILEMAP_GET_FOLIOS
  HAVE_FILEMAP_GET_FOLIOS_CONTIG
  HAVE_IOV_ITER_GET_PAGES_ALLOC2
  HAVE_IOV_ITER_IS_ALIGNED
  HAVE_LSMCONTEXT_HAS_ID
  HAVE_LSMCONTEXT_INIT
  HAVE_NO_LLSEEK
  HAVE_READ_CACHE_FOLIO_WANTS_FILE
  HAVE_REGISTER_SHRINKER_FORMAT_NAMED
  HAVE_SECURITY_DENTRY_INIT_SECURTY_WITH_CTX
  HAVE_USER_BACKED_ITER
  HAVE_VFS_SETXATTR_USERNS

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I5188c080025534c0d61220dd91cf1dcee6c0e921
40381 b2_12 J ✗1B ✓T ✓R +2/1
LU-13344 lnet: stop using struct timeval
all green — ready to land (not in b2_12-next yet)
stalled 785d M +78 −82
785d
janitor flagged test failures unique to this patch — superseded (tests have since passed)
unique failing testhistory
sanity-quota@zfs:test_19seen in 1 other review
build #17202 SUCCESS
reviews: Andreas Dilger +2 2020-10-27 22:10
no vote yet: Amir Shehata
owner Jian Yu · uploader Jian Yu · PS1 uploaded 2203d ago · NEW · backport · open in Gerrit ↗
commit message
LU-13344 lnet: stop using struct timeval

The struct timeval is not 2038 safe so the Linux kernel is moving
away from its use. The use of rpe_stamp hasn't been used since
Lustre 2.2 so remove the userland use of this field. This frees
use to change rpe_stamp to an equivalent struct timespec64 for
future use. Greatly simplify lnet_sock_[read|write] by using
jiffies values of sk_sndtimeo, sk_rcvtimeo cached in struct sock.

Lustre-commit: 5e4c658c4fea4f2b10c2877394eec824474ecc66
Lustre-change: https://review.whamcloud.com/38105

Change-Id: Ib58193756ec4a526e55bc810c05abd3920b2b269
Signed-off-by: James Simmons <jsimmons@infradead.org>
46164 b2_12 J !B ✓T ✓R +1/1
LU-6174 nrs: perform proper division
all green — ready to land (not in b2_12-next yet)
stalled 785d S +17 −19
785d
janitor run: 2 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #85647 SUCCESS · tests all Maloo sessions
reviews: Stephane Thiell +1 2022-08-09 16:20
no vote yet: Andreas Dilger, Li Xi
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 1751d ago · NEW · backport · open in Gerrit ↗
commit message
LU-6174 nrs: perform proper division

For NRS TBF both tr_nsecs and tr_rpc_rate are 64 bit values. The
code is wrongly using do_div() which could truncate tr_rpc_rate
to a 32 bit value. With current hardware setups the rpc rate is
less than the 4 billion limit of u32, currently I see 64K of rpcs
with a single IB port. Since this is the case we can change
tr_rpc_rate to a 32 bit value.

Lustre-commit: c80319213c6dc4ac9826a1bd10c75373e08db837
Lustre-change: https://review.whamcloud.com/36749

Change-Id: I62eabf3a8a30f5c9062aaf4c32fa878710a788c8
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Li Xi <lixi@ddn.com>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
35474 b2_12 B ✓T ✓R +1/1
LU-11838 scrub: handle s_uuid change to uuid_t
all green — ready to land (not in b2_12-next yet)
stalled 785d M +54 −75
785d
build #6709 SUCCESS
reviews: Shaun Tancheff +1 2019-07-12 09:10
no vote yet: Andreas Dilger
owner Minh Diep · uploader Minh Diep · PS2 uploaded 2672d ago · NEW · backport · open in Gerrit ↗
commit message
LU-11838 scrub: handle s_uuid change to uuid_t

The 4.12 kernel changed the s_uuid field in struct super_block from
an character array to an uuid_t. While ldiskfs uses it own s_uuid
field in struct ext4_super_block that field is a char array instead
of an uuid. Currently on going effort are being down in the linux
kernel to move to uuid_t so I suspect this will change in the future.
Since this is the case change all the character arrays for uuid
handling to uuid_t located in the scrubbing code. Change osd-ldiskfs
to use the struct super_block uuid, which is equivalent to s_es
version, to handle the uuid_t changes now.

Lustre-change: https://review.whamcloud.com/34689
Lustre-commit: 90fd0cd449b9ae3fbff5a99e0edcf288799037c0

Change-Id: I40643d342b5bc17a6ef922e99b3e8524930822de
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Shaun Tancheff <stancheff@cray.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
53308 b2_14 B ✓T ✓R +2/1
LU-15420 build: fixes to support building on Ubuntu 22.04 LTS
reviewing Jian Yu · all green — ready to land (not in b2_14-next yet)
stalled 1007d M +50 −1
1007d
build #100626 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2024-01-31 15:40 · Shaun Tancheff +1 2024-01-30 14:34
owner Jian Yu · uploader Jian Yu · PS1 uploaded 1068d ago · NEW · backport · open in Gerrit ↗
commit message
LU-15420 build: fixes to support building on Ubuntu 22.04 LTS

Lustre uses the glibc stdarg.h instead of the kernel's version which
causes the following build issue.

lustre/include/lu_object.h:35,
/usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h:52: note: this is the
location of the previous definition
        #define va_copy(d,s)    __builtin_va_copy(d,s)

The solution is to use the kernels version of stdarg.h

The second build issue :
update_trans.c:1608:30: error: 'struct task_struct' has no member named
                        'state'; did you mean '__state'?

is due Linux commit 2f064a59a11ff9bc22e52e9678bc601404c7cb34
(sched: Change task_struct::state). The state field was
changed and the barrier macros READ_ONCE()/WRITE_ONCE()
are used to access it now which is the proper thing to do.
Since the check in update_trans.c is equivalent to testing
if the kernel thread is not running, since TASK_RUNNING == 0,
we can just change the code to use task_is_running(). The
task_is_running() was introduced in 5.13.

Lustre-change: https://review.whamcloud.com/47133
Lustre-commit: c04adbcd76725a360f411f09c63df785bf7db426

Test-Parameters: trivial
Change-Id: Ib5985b187c3013fbc513e9962a5f27bed4996f5b
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Shaun Tancheff <shaun.tancheff@hpe.com>
51540 b2_15 J ✗1B ✓T ✓R +1/1
LU-16463 llite: replace lld_nfs_dentry flag with opencache handling
reviewing Etienne AUJAMES · all green — ready to land (not in b2_15-next yet)
stalled 1214d M +42 −39
1214d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-quota@zfs:test_1eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #96024 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-07-09 14:05
no vote yet: Andreas Dilger
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 1220d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16463 llite: replace lld_nfs_dentry flag with opencache handling

The lld_nfs_dentry flag was created for the case of caching the
open lock (opencache) when fetching fhandles for NFSv3. This same
path is used by the fhandle APIs. This lighter open changes key
behaviors since the open lock is always cached which we don't
want. Lustre introduced a way to modify caching the open lock
based on the number of opens done on a file within a certain
span of time. We can replace lld_nfs_dentry flag with the
new open lock caching. This way for fhandle handling we match
the open lock caching behavior of a normal file open.

In the case of NFS this code path will always be called with the
internal kernel thread 'nfsd'. If we are called by this kernel
thread set the open threshold to zero which means always cache the
open lock. Once Lustre is only supported on Linux kernels above
5.5 we can remove this special NFSv3 work around.

Lustre-change: https://review.whamcloud.com/49237
Lustre-commit: d7a85652f4fcb83192262cfc1a0211890f404c7c

Change-Id: Iba27f7ad4579fdd1f34e1e35c2cbd547e15f129a
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Etienne AUJAMES <eaujames@ddn.com>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
▶

Parked (WIP / self-blocked)

(1)
12275 master J –B ✗T –R -1/2−
LU-4665 utils: Specified OSTs setstripe for directories
carrying Jinshan Xiong · parked by your own -1
XL +685 −570
456d
reviews: James Simmons -1 2014-11-02 20:46
no vote yet: Andreas Dilger
owner Jinshan Xiong · uploader James Simmons · PS6 uploaded 4384d ago · NEW · open in Gerrit ↗
commit message
LU-4665 utils: Specified OSTs setstripe for directories

Set specified OSTs for directories.

Signed-off-by: Jinshan Xiong <jinshan.xiong@intel.com>
Change-Id: Ia42f017622fc1677d805074c4477269845ee7d07
298 open
▶

Re-review needed — new patchset since your vote

(35)
66552 master J –B ✓T ✓R +1/2
LU-1158 general: rename timestamp fields to _ns
reviewing Sohei Koyama · PS11→PS13 since your +1
11 unresolved L +327 −320
11h
build #134743 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-04 03:31
patchsets:
+8 earlier PS1 06-09 PS2 06-09 PS3 06-18 PS4 06-18 PS5 06-22 PS6 08-03 PS7 08-17 PS8 09-10
PS9 09-29 PS10 10-15 PS11 10-19 PS12 10-28 PS13 10-29
your previous vote: +1 on PS11 (2026-10-23 14:13) — now at PS13
threads: 11 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre COMMIT_MSG:16 — (minor) The coverage list doesn't quite match the diff. Two more renames are in here: `md_op_data.op_mod_time` -> `op_mod_time_ns` in lustre
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(minor) The coverage list doesn't quite match the diff. Two more renames are in here: `md_op_data.op_mod_time` -> `op_mod_time_ns` in lustre/include/obd.h, and the helper `memfs_get_btime()` -> `memfs_get_btime_ns()` in lustre/osd-wbcfs/wbcfs.h. Worth adding so nothing in the diff is a surprise.
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre COMMIT_MSG:18 — (minor) "pure rename with no functional change" isn't strictly true for `lctl getattr`. `OPU()` stringifies the member name, so renaming the
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(minor) "pure rename with no functional change" isn't strictly true for `lctl getattr`. `OPU()` stringifies the member name, so renaming the macro argument changes the printed labels from `atime:`/`mtime:`/`ctime:` to `atime_ns:`/`mtime_ns:`/`ctime_ns:`. Probably the intent, but it is a user-visible output change and worth calling out here.
reply PS9 2026-10-05 09:04 Gerrit AI review for Lustre COMMIT_MSG:14 — (typo) `ofo_atime_ondisk` isn't an interval tunable. It caches the object's on-disk atime (an epoch timestamp). If the message is refreshed,
Gerrit AI review for Lustre PS9 · 2026-10-05 09:04
(typo) `ofo_atime_ondisk` isn't an interval tunable. It caches the object's on-disk atime (an epoch timestamp). If the message is refreshed, list it with the timestamp fields instead.
reply PS9 2026-10-05 09:04 Gerrit AI review for Lustre lustre_idl.h:797 — (minor) This says obdo times are nanoseconds whenever the flag is negotiated, but the obdo packed into DNE update llog records is always in
Gerrit AI review for Lustre PS9 · 2026-10-05 09:04
(minor) This says obdo times are nanoseconds whenever the flag is negotiated, but the obdo packed into DNE update llog records is always in seconds, regardless of the flag:

    update_records.c: obdo_from_la(obdo, attr, attr->la_valid);
                      /* LU-1158: update llog keeps seconds, readable by any peer */
                      obdo_times_to_sec(obdo);

Those records are read from remote MDTs during recovery too. If the patch is refreshed, could the comment mention that update llog records are the exception, so nobody later treats them as negotiated-unit obdos?
reply PS6 2026-10-14 07:57 Andreas Dilger lu_object.h:480 — (minor) should be fixed if patch is refreshed.
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(style) These four comments still say "in seconds since Epoch" while the fields are now `la_mtime_ns`/`la_atime_ns`/`la_ctime_ns`/`la_btime_ns` and hold nanoseconds. Given the whole point of the patch is making the unit obvious, the comment right above each field contradicting the name is the one place it will mislead someone. Same for the other three below.
Andreas Dilger PS6 · 2026-10-14 07:57
(minor) should be fixed if patch is refreshed.
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre lustre_dlm.h:580 — (suggestion) `ktime_t` is already nanoseconds by definition, so the suffix adds little here, and with the `ns_` namespace prefix it reads as
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(suggestion) `ktime_t` is already nanoseconds by definition, so the suffix adds little here, and with the `ns_` namespace prefix it reads as `ns_..._ns`. It also splits the field group: `ns_max_age` and `ns_dirty_age_limit` are the same type with the same "stored in ns" comment and keep their names. Either all three or none would be easier to follow.
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre llite_internal.h:158 — (minor) `lli_btime` is left alone while its three siblings gain `_ns`. It holds nanoseconds too:
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(minor) `lli_btime` is left alone while its three siblings gain `_ns`. It holds nanoseconds too:

    llite_lib.c: lli->lli_btime = body->mbo_btime_ns;
    file.c:      stat->btime = ns_to_timespec64(lli->lli_btime);

Since `la_btime` and `mbo_btime` both became `_ns`, should this be `lli_btime_ns` as well?
reply PS8 2026-09-11 13:03 Gerrit AI review for Lustre mdc_lib.c:433 — (minor) On the wire the `_ns` suffix is only true when the peer negotiated nanosecond time. Against a pre-2.17 MDS this stores seconds into
Gerrit AI review for Lustre PS8 · 2026-09-11 13:03
(minor) On the wire the `_ns` suffix is only true when the peer negotiated nanosecond time. Against a pre-2.17 MDS this stores seconds into a field that now claims to hold nanoseconds:

    rec->sa_atime_ns = timespec64_to_ns(...);
    if (!imp || !imp_connect_nanosec_time(imp))
            rec->sa_atime_ns /= NSEC_PER_SEC;

The same shape shows up at every compat site the patch touches - mdc_create_pack(), mdc_open_pack(), mdc_unlink_pack(), mdc_link_pack(), mdc_rename_pack(), mdc_migrate_pack(), mdc_xattr_common(), mdc_rmfid(), mdt_pack_attr2body(), mdt_lvb2reply(), ofd_lvbo_fill(), mdt_lvbo_fill() and osc_ldlm_glimpse_ast().

The in-memory fields (`la_*_ns`, `cat_*_ns`, `lli_*_ns`) really are always nanoseconds, so those renames read well. For the wire members in `mdt_rec_*`, `mdt_body`, `ost_lvb` and `obdo` the unit depends on the connection, so the name is now slightly misleading in exactly the code that is hardest to get right. Would leaving the wire members unsuffixed, and documenting the unit next to the OBD_CONNECT_NANOSEC_TIME handling instead, be clearer?
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre mdd_internal.h:174 — (minor) `mod_atime_set` also holds a nanosecond atime (assigned from `la_atime_ns` and `la_ctime_ns` in mdd_fix_attr()) and is the mdd count
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(minor) `mod_atime_set` also holds a nanosecond atime (assigned from `la_atime_ns` and `la_ctime_ns` in mdd_fix_attr()) and is the mdd counterpart of `ofo_atime_ondisk`, which this patch did rename. Should it get `_ns` too?
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre ofd_io.c:469 — (style) This comment now reads "refresh atime every ofd_atime_diff_ns seconds" - the name was updated on this line but the unit word below i
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(style) This comment now reads "refresh atime every ofd_atime_diff_ns seconds" - the name was updated on this line but the unit word below it was not.
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre obd.c:1845 — (minor) `OPM()` pastes `#member` into the printf, so these three now print `atime_ns:`/`mtime_ns:`/`ctime_ns:` instead of `atime:`/`mtime:`/
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(minor) `OPM()` pastes `#member` into the printf, so these three now print `atime_ns:`/`mtime_ns:`/`ctime_ns:` instead of `atime:`/`mtime:`/`ctime:`. Anything parsing `lctl getattr` output sees a different key.

Also inconsistent with `obdo_print()` above, whose format string still labels the same ns values `atime:`/`mtime:`/`ctime:`. Should both be updated the same way?
owner Sohei Koyama · uploader Sohei Koyama · PS13 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-1158 general: rename timestamp fields to _ns

Now that the in-memory timestamp fields hold epoch nanoseconds,
rename them from xxx_(a/m/c)time to xxx_(a/m/c)time_ns so the
field name reflects the unit.  This covers the struct lu_attr and
cl_attr fields, the cached llite inode times, md_op_data
op_mod_time, and the nanosecond interval tunables (ofd_atime_diff,
OFD_DEF_ATIME_DIFF, ofo_atime_ondisk, mdd_atime_diff,
MAX_ATIME_DIFF and the ldlm ns_ctime_age_limit).

The wire fields of struct obdo, mdt_body, ost_lvb and mdt_rec_*
keep their names, since their unit depends on whether the peer
negotiated OBD_CONNECT_NANOSEC_TIME; document that at the flag.

This patch is a pure rename with no functional change.

Assisted-by: ClaudeCode:Opus-5.5
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I41626d75dab0b9735c2a3e33d7f94309afc30510
66551 master J –B ✓T ✓R +1/2
LU-1158 general: convert timestamps to nanoseconds
reviewing Sohei Koyama · PS11→PS13 since your +1
19 unresolved XL +1353 −385
11h
build #134766 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-04 03:31
patchsets:
+8 earlier PS1 06-09 PS2 06-09 PS3 06-18 PS4 06-18 PS5 06-22 PS6 08-03 PS7 08-17 PS8 09-10
PS9 09-29 PS10 10-15 PS11 10-19 PS12 10-28 PS13 10-29
your previous vote: +1 on PS11 (2026-10-23 14:10) — now at PS13
threads: 18 need your reply · 0 waiting on others · 1 own notes · 0 bot
reply PS13 2026-11-04 03:31 Andreas Dilger COMMIT_MSG:102 — These are already run by regular test sessions.
Andreas Dilger PS13 · 2026-11-04 03:31
These are already run by regular test sessions.
reply PS13 2026-11-04 03:31 Andreas Dilger COMMIT_MSG:103 — These are already run by regular test sessions.
Andreas Dilger PS13 · 2026-11-04 03:31
These are already run by regular test sessions.
reply PS13 2026-11-04 03:31 Andreas Dilger COMMIT_MSG:106 — These are also run by regular test sessions.
Andreas Dilger PS13 · 2026-11-04 03:31
These are also run by regular test sessions.
reply PS13 2026-11-04 03:31 Andreas Dilger COMMIT_MSG:107 — These are also run by regular test sessions.
Andreas Dilger PS13 · 2026-11-04 03:31
These are also run by regular test sessions.
reply PS13 2026-11-04 03:31 Andreas Dilger COMMIT_MSG:113 — This is already run by a regular test session.
Andreas Dilger PS13 · 2026-11-04 03:31
This is already run by a regular test session.
note PS6 2026-08-05 15:42 James Simmons patchset comment — No interop handling :-( I would suggest splitting this patch into 2 new patches. One for clients and one for servers. That way we can see if
James Simmons PS6 · 2026-08-05 15:42
No interop handling :-( I would suggest splitting this patch into 2 new patches. One for clients and one for servers. That way we can see if "interop" works properly.
reply PS11 2026-11-04 03:31 Andreas Dilger mdd.atime_diff.4:33 — This is intentional. It doesn't make sense to make the atime diff hundreds of years.
Gerrit AI review for Lustre PS11 · 2026-10-20 08:24
(minor) This upper bound doesn't match the code. atime_diff_store() accepts anything up to S64_MAX ns, which is 9223372036.854775807 seconds, and 8589934591 doesn't match any limit in mdd_lproc.c. Should this read 9223372036, or should the store enforce a smaller limit?
Andreas Dilger PS11 · 2026-11-04 03:31
This is intentional.  It doesn't make sense to make the atime diff hundreds of years.
reply PS11 2026-10-19 22:30 Andreas Dilger llite_lib.c:653 — (style) I would write "truncates times to seconds, so" but not worthwhile to refresh just for that.
Andreas Dilger PS11 · 2026-10-19 22:30
(style) I would write "truncates times to seconds, so" but not worthwhile to refresh just for that.
reply PS11 2026-10-19 22:30 Andreas Dilger llite_lib.c:658 — Should we make "0" or ((__u64)INT32_MIN * NSEC_PER_SEC) as the minimum time (Unix Epoch or 1901) to extend the future range by another few h
Andreas Dilger PS11 · 2026-10-19 22:30
Should we make "0" or ((__u64)INT32_MIN * NSEC_PER_SEC) as the minimum time (Unix Epoch or 1901) to extend the future range by another few hundred years?  I don't think there is much value to storing file timestamps to Medieval times, and for historical documents I think they need to store their origin date in xattrs or other internal metadata instead of the file's timestamps...

Not a blocker, just an idea...  We have a few hundred years to decide. ;-)
reply PS13 2026-10-31 07:50 Gerrit AI review for Lustre pcc.c:2743 — (style) This isn't a bug, but the braces around the single inode_set_atime_to_ns() statement aren't needed (checkpatch warns about braces on
Gerrit AI review for Lustre PS13 · 2026-10-31 07:50
(style) This isn't a bug, but the braces around the single inode_set_atime_to_ns() statement aren't needed (checkpatch warns about braces on a single-statement block). If the patch is refreshed, they can go.
reply PS13 2026-10-31 07:50 Gerrit AI review for Lustre mdd_lproc.c:71 — (minor) The only consumer of mdd_atime_diff is mdd_fix_attr(), which tests:
Gerrit AI review for Lustre PS13 · 2026-10-31 07:50
(minor) The only consumer of mdd_atime_diff is mdd_fix_attr(), which tests:

    la->la_atime <= (oattr->la_atime + mdd_obj2mdd_dev(obj)->mdd_atime_diff)

With both values now in nanoseconds, that sum overflows s64 well inside the range this store accepts. sysfs_memparse() with "GB" caps the input at 8589934591 seconds (the bound in mdd.atime_diff.4), but with a current atime of about 1.79e18 ns any atime_diff above about 7.4e9 s wraps the sum negative. The filter then never drops an update, so every close writes atime, which is the opposite of what a large value is meant to do. Before this patch the same sum was in seconds and could not overflow for any value a person would enter.

The check here can't trigger either: the largest value sysfs_memparse() can return is about 8.59e18, below S64_MAX. Would it be better to cap atime_diff at something sane here, or to make the comparison in mdd_fix_attr() overflow-safe (for example with check_add_overflow())?
reply PS11 2026-10-20 08:24 Gerrit AI review for Lustre mdt_handler.c:3519 — (minor) mdt_data_sync() fills repbody->oa times from ma_attr, now in nanoseconds, without calling obdo_times_to_sec() for a client lacking O
Gerrit AI review for Lustre PS11 · 2026-10-20 08:24
(minor) mdt_data_sync() fills repbody->oa times from ma_attr, now in nanoseconds, without calling obdo_times_to_sec() for a client lacking OBD_CONNECT_NANOSEC_TIME. ofd_sync_hdl() and ofd_fallocate_hdl() were converted. mdt_punch_hdl() and mdt_fallocate_hdl() have the same gap through mdt_dom_obj_lvb_update(), which copies lvb_[amc]time into repbody->oa.

Today osc_sync_interpret() and osc_io_setattr_end() only take o_blocks from these replies, so nothing visible breaks yet. Still, the commit message says every timestamp path is converted. If the patch is refreshed, could these be converted too, for consistency with ofd?
owner Sohei Koyama · uploader Sohei Koyama · PS13 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-1158 general: convert timestamps to nanoseconds

Switch the in-memory and wire timestamp values from epoch seconds
to epoch nanoseconds.  The conversion is localised to the edges
where timestamps enter or leave Lustre; the internal plumbing just
carries the same field values through unchanged.

- sources: inode_get_[amc]time_ns() and ktime_get_real_ns() now
  provide nanoseconds, and the OSD layer reads and writes the
  on-disk inode timespec at nanosecond resolution.  The client
  superblock sets s_time_gran = 1 when the MDT negotiated
  nanosecond timestamps, so that current_time() keeps the
  sub-second part for locally generated timestamps, and keeps
  whole seconds against an MDT that did not, and the osc layer
  generates whole seconds for I/O to an OST that did not, so that
  a cached time never moves backwards once it is fetched again.
  It sets s_time_min and
  s_time_max to the s64 nanosecond range so that the VFS clamps
  out-of-range timestamps.
- sinks: the stat/statx paths convert the s64 nanosecond value
  back to a timespec64 with the standard ns_to_timespec64().
- struct ost_lvb carries full nanoseconds in lvb_[amc]time (s64);
  its former split-nanosecond u32 companions become lvb_padding_1..4.
  struct ost_lvb_v1 stays in seconds for wire compatibility.
- the changelog cr_time and HSM hui_* user-visible fields keep
  their existing on-disk and wire formats and are left unchanged.
- the ofd and mdd atime-difference thresholds, the mdt ctime age
  limit and the cached llite inode times are kept in nanoseconds
  internally, and the atime_diff tunables accept and print
  fractional seconds and reject unit suffixes.
- the llog object mtime keeps its once-per-second update filter
  and is stored scaled to nanoseconds.
- the LFSCK lost+found marker ctime stays 1 second on disk, so
  objects marked before an upgrade are still recognised.
- mdd.atime_diff.4 and ofd.atime_diff.4 document the tunables.

All timestamp fields and the related interval knobs keep their
historic names here and gain a _ns suffix in the following patch,
once they all hold nanoseconds.

s64 nanoseconds since the epoch covers timestamps from 1677-09-21
to 2262-04-11.

Since the units of the timestamps on the wire change, the same
patch carries the compatibility layer so that every commit on
master interoperates with peers that still use seconds.

Advertise OBD_CONNECT_NANOSEC_TIME from the client MDC and OSC
connections, negotiate it on the MDT and OST connections, and add
it to the connect flags used by the MDT when connecting to OSTs
and other MDTs.  A node converts wire timestamps to seconds when
sending to a peer that did not negotiate the flag, and back to
nanoseconds when receiving from such a peer.  The conversion to
seconds floors (nsec_time_to_sec()), so that it is the exact
inverse of the scaling on receive, also before 1970.  The scaling
on receive (sec_time_to_nsec()) clamps to the whole seconds that
fit in s64 nanoseconds, the same range the client superblock
advertises, so a time beyond year 2262 from such a peer is clamped
instead of wrapping to a negative value.

Conversion is applied on every path that carries a timestamp:
the MDT inode times (mdt_pack_attr2body), the setattr, create,
open, close, unlink, link, rename, migrate and setxattr reint
records, the Data-on-MDT glimpse reply (mdt_lvb2reply /
mdc_body2lvb), rmfid, the DNE stripe refresh (lmv), the OST
lvb (ofd_lvbo_fill / osc_lock_lvb_update) and the OST obdo
(lustre_set/get_wire_obdo, the BRW timestamp refresh in
osc_build_rpc and the ofd reply handlers).  The DNE
update llog records keep their obdo times in seconds, so records
written before an upgrade or by another version replay correctly.

On the client the inode times are converted where the reply
body enters llite.  mdc_get_lustre_md() scales them keyed on the
import of the request that carried the reply -- the target MDT
that answered, which is correct even under LMV where the reply
may come from an MDT other than index 0.  ll_update_times() and
the getstripe ioctl do the same for the bodies they read
directly.  Keying on the connection flag is exact and avoids the
near-epoch and far-future misreads of a magnitude heuristic.

Add sanity test_436a-436t, configuration-aware tests that verify
timestamps warm and cold, including near-epoch and boundary values
(pre-1970 with sub-seconds, y2038, beyond 2262), nanosecond
precision, per-MDT directory times, Data-on-MDT, FLR, cross-MDT
operations, MDT/OST failover, setattr replay and cross-client
coherency.  Each test detects the negotiated nanoseconds_times flag
per target and asserts exact nanoseconds against a new peer or
second granularity against a legacy peer, so it is meaningful on
uniform and mixed-version clusters alike.

Enable pjdfstest utimensat_08, which checks sub-second times,
against an MDT that negotiated nanosecond timestamps, and print the
actual and expected times on a sanity test_39m failure.

Assisted-by: ClaudeCode:Opus-5.5
Test-Parameters: testlist=sanity env=ONLY="36 39 436"
Test-Parameters: mdscount=2 mdtcount=4 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: ostcount=4 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: fstype=zfs testlist=sanity env=ONLY="36 39 436"
Test-Parameters: fstype=zfs mdscount=2 mdtcount=4 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: clientcount=2 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: serverversion=2.16 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: serverversion=2.15 mdscount=2 mdtcount=4 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: clientcount=2 serverversion=2.16 testlist=sanity env=ONLY="36 39 436"
Test-Parameters: clientversion=2.16 testlist=sanity env=ONLY="36 39"
Test-Parameters: clientversion=2.15 mdscount=2 mdtcount=4 testlist=sanity env=ONLY="36 39"
Test-Parameters: testlist=pjdfstest
Test-Parameters: serverversion=2.16 testlist=pjdfstest
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I79570bc5a66e7c15472af90d690d689d3aa36269
66621 master J –B ✓T …R 0/2
LU-20357 obdclass: clear idle NID statistics on server
reviewing Jinshan Xiong · PS31→PS34 since your +1
9 unresolved L +653 −105
11h
build #135355 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Robert Read, Andreas Dilger, Gerrit Gatekeeper, Alex Zhuravlev, Oleg Drokin, Timothy Day
patchsets:
+29 earlier PS1 06-12 PS2 06-12 PS3 06-12 PS4 06-12 PS5 06-12 PS6 06-13 PS7 06-14 PS8 06-15 PS9 06-25 PS10 07-01 PS11 07-01 PS12 07-16 PS13 07-16 PS14 07-16 PS15 07-16 PS16 07-20 PS17 07-21 PS18 08-04 PS19 08-04 PS20 08-05 PS21 08-12 PS22 08-12 PS23 08-16 PS24 08-20 PS25 08-26 PS26 08-26 PS27 08-28 PS28 09-03 PS29 09-05
PS30 09-09 PS31 09-10 PS32 10-03 PS33 10-13 PS34 11-04
your previous vote: +1 on PS31 (2026-09-12 15:04) — now at PS34
threads: 9 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS31 2026-10-19 22:48 Andreas Dilger COMMIT_MSG:47 — The commit message can be edited without upsetting the testing status
Gerrit AI review for Lustre PS31 · 2026-09-11 09:06
(minor) This bullet reads as a delta from an earlier revision of this patch rather than a change against master. obd_nid_stats_insert() and its retry loop are introduced here; master's obd_nid_stats_get() has no retry and never sleeps, so there is no pre-existing bug being fixed. If the patch is refreshed, dropping this line (or folding it into the description of the new retry path) would keep the message describing the change against master.
Andreas Dilger PS31 · 2026-10-19 22:48
The commit message can be edited without upsetting the testing status
reply PS31 2026-10-20 06:07 Andreas Dilger patchset comment — I agree with Jinshan, it isn't our job to store these stats forever, that is the job of an external tool.
Oleg Drokin PS31 · 2026-09-28 20:02
the comments toward the end of the patch (files wise) are really super verbose for no reason whatsoever adnfaithfully replicate the logic that one could see in the code.

the ai reviewer noted in some places but there are more. We really don't want that for multiple reasons.

The other thing I think this is missing is a permanent storage for evicted records.
Not everybody would want it (same as not everybody would want to expire these records or to ever store them) but basically I think we should have 3+1 modes:

1. no stats (we already have them?)
2. stats indefinitely (that we definitely have)
3. stats for a while (this patch is adding)

4. permanence, when an idle expor stats is evicted, we should have some configurable upcall or some other such mechanism that would be invoked and the about to be evicted stats to be dumped into.
This would have two-fold benefits: for people that need it - they can store indefinite amount of this dataon storage that is not kernel RAM.
Then it's also possible to shrink it some more even for temp stuff (and again save some RAM) and finally we might also want to impose a numerical number of idle exports in addition to timeout-based and that way an attacker that would try to do a DOS attack by overflowing kernel memory with a lot of random connections would also be fended off. I don't know if you'd want to do it as a separate patch or part of this one but seems important enough of a usecase?

And yes the explanation / fix about that lack of MGS stats evicting seems needed too?
Jinshan Xiong PS31 · 2026-09-28 22:18
1. No, we don't have them
2. Yes, this is what we have before this patch
3. Yes
4. The idea is if people need it, they should poll the metrics periodically - this is the standard solution in industry. It gives them one hour to do so. Having a upcall is more complicated.

I tend to think the MGS should not have the nid_stats in the first place, because it is not useful at all. Therefore, I just leave it alone - if I did that to the MGS, I will have to touch a lot of places that will be removed later.

> Then it's also possible to shrink ... fended off.

I don't know how to identify the temp stuff in the first place. It's probably worth doing it after we have a hit.

I agree the AI is wordy about comments but let's land it as-is.
Andreas Dilger PS31 · 2026-10-20 06:07
I agree with Jinshan, it isn't our job to store these stats forever, that is the job of an external tool. 

As for the usefulness of the NID stats, that is environment-specific.  On some deployments, the storage admins do not have the ability to monitor the clients directly, so this is the way to determine if there are clients imposing high load on a particular server.
reply PS33 2026-10-15 16:48 Gerrit AI review for Lustre mdt.exports.clear.4:26 — (minor) If the patch is refreshed: ldebugfs_nid_stats_clear_seq_write() only calls lprocfs_stats_clear() on nid_stats. The per-NID nid_ldlm_
Gerrit AI review for Lustre PS33 · 2026-10-15 16:48
(minor) If the patch is refreshed: ldebugfs_nid_stats_clear_seq_write() only calls lprocfs_stats_clear() on nid_stats. The per-NID nid_ldlm_stats behind exports/<nid>/ldlm_stats are not touched, so "resets the statistics of every NID" says more than the code does. Maybe say "resets exports/<nid>/stats", or also clear nid_ldlm_stats there?
reply PS31 2026-10-19 22:48 Andreas Dilger mdt.nid_stats_idle_time.4:42 — I don't think anyone cares that much?
Gerrit AI review for Lustre PS31 · 2026-09-11 09:06
(minor) The GC pass only runs every PET_GC_PERIOD (60s) in ping_evictor_main(), so reclaim actually happens somewhere in [TIMEOUT, TIMEOUT + 60) seconds and any value below 60 behaves much like 60 - pinger.c calls this "the effective lower bound on nid_stats_idle_time". Since the documented valid range starts at 0/1, it would help an admin to say here that entries are reclaimed on a 60 second scan and not at exactly TIMEOUT.
Andreas Dilger PS31 · 2026-10-19 22:48
I don't think anyone cares that much?
reply PS31 2026-10-19 22:48 Andreas Dilger genops.c:553 — Seems reasonable, though could be done in a follow-on patch if needed.
Gerrit AI review for Lustre PS31 · 2026-09-11 09:06
(minor) Only mdt and obdfilter get the target mark, so the MGS never gets an idle-stats scan - but mgs_export_stats_init() creates the same nid_stat and mgs.MGS.exports.<nid>/ debugfs tree for every client that ever mounts, mgs_setup() already calls obd_obt_init() (so obt_nid_stats_idle_time is 3600), and mgs_handler.c already starts the ping evictor.

In the high-churn cloud case this patch targets, every VM connects to the MGS at mount, so mgs.MGS.exports.* keeps growing while the MDT/OST trees are reclaimed. Was leaving the MGS out deliberate? Adding LUSTRE_MGS_NAME here plus a mgs.*.nid_stats_idle_time attribute in mgs_attrs[] would cover it (and the new exports.clear man page could then name mgs.exports.clear too, since lproc_mgs.c creates that file as well).
James Simmons PS31 · 2026-09-12 15:10
Good question. I assume this is the case. If refreshed maybe a comment about this
Andreas Dilger PS31 · 2026-10-19 22:48
Seems reasonable, though could be done in a follow-on patch if needed.
reply PS31 2026-10-19 22:48 Andreas Dilger lprocfs_status_server.c:432 — If only the LLM _generating_ the comments in the first place was so concise...
Gerrit AI review for Lustre PS31 · 2026-09-11 09:06
(style) This isn't a bug, but the wordiness noted on an earlier patchset was only trimmed at the three flagged spots; the largest blocks are still here. 22 lines of memory-model narration for an atomic_inc_return()/test_bit() pair (and similar blocks at the top of ldebugfs_nid_stats_clear_seq_write(), ldebugfs_exp_export_seq_show() and obd_nid_stats_insert()) is well beyond what the surrounding file does. Something like "increment before testing OBDF_STOPPING; atomic_inc_return() orders the two and pairs with the smp_mb() in class_cleanup()" carries the same information. Worth shortening only if the patch is refreshed for another reason.
Andreas Dilger PS31 · 2026-10-19 22:48
If only the LLM _generating_ the comments in the first place was so concise...
reply PS32 2026-10-05 09:03 Gerrit AI review for Lustre lprocfs_status_server.c:886 — (minor) This isn't a bug, but is the second half of this comment accurate? Every obd_nid_lock critical section in the tree (nid_stat_release
Gerrit AI review for Lustre PS32 · 2026-10-05 09:03
(minor) This isn't a bug, but is the second half of this comment accurate? Every obd_nid_lock critical section in the tree (nid_stat_release_ref(), obd_nid_stats_insert(), lprocfs_evict_idle_nid_stats(), ldebugfs_nid_stats_clear_seq_write(), lprocfs_free_per_client_stats()) only does list moves, refcount and stats clearing. None of them takes exp_lock, so obd_nid_lock -> exp_lock nesting doesn't seem to exist anywhere.

Dropping the ref after spin_unlock() is fine, but if the patch is refreshed, the comment could just say it is done outside exp_lock to keep the two locks unnested. Otherwise a later reader may go looking for an ordering constraint that isn't there.
reply PS32 2026-10-05 09:03 Gerrit AI review for Lustre obd_config.c:843 — (minor) Why does obd_nid_stats_hash need to outlive class_cleanup() now? All three lprocfs_free_per_client_stats() callers run from ldto_dev
Gerrit AI review for Lustre PS32 · 2026-10-05 09:03
(minor) Why does obd_nid_stats_hash need to outlive class_cleanup() now? All three lprocfs_free_per_client_stats() callers run from ldto_device_fini(), i.e. inside class_cleanup() before the old destroy point:

    class_cleanup()->obd_precleanup()->ldto_device_fini()->mdt_fini()->mdt_tunables_fini()
    ofd_device_fini()->ofd_procfs_fini()
    mgs_device_fini()->lproc_mgs_cleanup()

By then the evictor and exports.clear have been fenced off by the obd_nid_stats_inprogress wait, and obd_exports_barrier() has drained the exports. If nothing touches the hash after that, the new OBDF_NID_STATS_HASH flag, the class_setup() special case and the exported obd_nid_stats_hash_destroy() (only called from genops.c, inside obdclass) could all go. If there is a path that needs it, could the commit message say which one?

Separately, "if this device was set up before" only holds after a failed setup. OBDF_STARTING is cleared only on the class_setup() error path, so a device that was set up successfully and then cleaned up can't be set up again.
reply PS33 2026-10-15 16:48 Gerrit AI review for Lustre obd_config.c:1183 — (style) This isn't a bug, but obd_nid_stats_hash_destroy() is only called from class_free_dev() in genops.c, which is in the same obdclass m
Gerrit AI review for Lustre PS33 · 2026-10-15 16:48
(style) This isn't a bug, but obd_nid_stats_hash_destroy() is only called from class_free_dev() in genops.c, which is in the same obdclass module. It doesn't seem to need an EXPORT_SYMBOL().
owner Jinshan Xiong · uploader Jinshan Xiong · PS34 uploaded 12h ago · NEW · open in Gerrit ↗
commit message
LU-20357 obdclass: clear idle NID statistics on server

Per-NID stats on MDTs and OSTs are kept forever after a client goes
away, so with high client churn they keep growing in memory and in
debugfs. Add nid_stats_idle_time (default 3600s, 0 disables) to free
them once no export has used them for that long.

- When the last export of a NID goes away, its nid_stat is stamped
  with nid_last_idle and moved to the time-ordered obd_nid_stats_idle
  list. A reconnect from that NID takes it back.
- The ping evictor now also wakes every 60s and frees expired entries
  on every MDT and OST, found through a new xarray mark on obd_devs.
- An entry being freed is marked NID_STATS_DISPOSE, and a connect that
  finds it waits for the free to finish. Debugfs is removed before the
  entry leaves the hash, so the new entry does not hit -EEXIST.
- nid_stat is freed with RCU since hash readers may still see it, and
  obd_nid_stats_hash is now destroyed in class_free_dev().
- class_cleanup() waits for in-flight frees via
  obd_nid_stats_inprogress.
- exports.clear now clears active stats and frees all idle ones, and
  exports/<nid>/export reports idle_seconds for an idle NID.
- Rename obd_nid_stats_get/put() to obd_nid_stats_insert/remove().
- The MGS is not covered: its per-NID stats are of no use and should
  be removed instead.
- Add man pages for nid_stats_idle_time and exports.clear, and
  sanity test_921.

Signed-off-by: Jinshan Xiong <jinshanx@google.com>
Change-Id: I511de0c1205105708e9aa89fe9f1cff915dbe2b8
66739 master J –B ✓T ✓R 0/2
LU-19921 sec: add disable_rootsquash mount option
reviewing wangdi · PS1→PS57 since your -1 — your objection was dropped
pw_shepherd 1 unresolved L +280 −43
17h
build #135121 SUCCESS · tests all Maloo sessions
no vote yet: Jinshan Xiong, Bruno Faccini, Sebastien Buisson, Andreas Dilger
patchsets:
+52 earlier PS1 06-18 PS2 06-19 PS3 06-20 PS4 06-22 PS5 06-22 PS6 07-10 PS7 07-12 PS8 07-20 PS9 07-24 PS10 07-27 PS11 07-29 PS12 07-30 PS13 08-02 PS14 08-02 PS15 08-02 PS16 08-02 PS17 08-02 PS18 08-04 PS19 08-05 PS20 08-05 PS21 08-06 PS22 08-06 PS23 08-07 PS24 08-07 PS25 08-07 PS26 08-07 PS27 08-08 PS28 08-09 PS29 08-09 PS30 08-10 PS31 08-11 PS32 08-13 PS33 08-13 PS34 08-13 PS35 08-13 PS36 08-14 PS37 08-15 PS38 08-16 PS39 08-17 PS40 08-18 PS41 08-18 PS42 08-18 PS43 08-19 PS44 08-20 PS45 08-21 PS46 08-22 PS47 08-22 PS48 08-22 PS49 08-23 PS50 08-24 PS51 08-25 PS52 08-25
PS53 08-26 PS54 08-27 PS55 09-07 PS56 10-23 PS57 11-01
your previous vote: -1 on PS1 (2026-06-18 21:52) — now at PS57
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS57 2026-11-03 16:03 Sebastien Buisson tgt_gssiam.c:443 — It looks like this concern is valid?
Gerrit AI review for Lustre PS57 · 2026-11-02 11:47
(defect) Is the grant meant to be limited by what the client requested? Right now nothing masks it with the entry's request options (gssiam->gd_options, which also forms part of the cache key). Any helper reply with bit 0x2 set adds GSSIAM_AUTH_DISABLE_ROOT_SQUASH, even when the mount did not pass -o disable_rootsquash.

The PS9 reply to the question about why the client needs a mount option said that a user who holds the no-rootsquash right should still be able to mount with root squash by leaving the option off. The commit message promises the same ("unless explicitly requested at mount and authorized"). With a helper that reports the principal's rights rather than echoing the request, that does not hold:

    mount without disable_rootsquash -> lid_options = 0 -> argv[5] = "0"
    helper writes "rw:600:2:alice"
    -> perm = RW | DISABLE_ROOT_SQUASH
    -> tgt_gssiam_info_alloc() keeps it
    -> gssiam_get_nodemap() -> nodemap_gssiam_attrs_update(..., allow_root = true)

Only the mock l_gssiam_auth checks the request. The l_gssiam_auth.8 text ("to allow disabling root squash if requested by the client") reads as if the kernel does the check.

Would it be safer to test `val & gssiam->gd_options & GSSIAM_OPT_DISABLE_ROOT_SQUASH` here? The OST/remote-MDT callback path goes through this same parser, so that one check would cover both paths.
Sebastien Buisson PS57 · 2026-11-03 16:03
It looks like this concern is valid?
tags: pw_shepherd
owner wangdi · uploader wangdi · PS57 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-19921 sec: add disable_rootsquash mount option

Add the -o disable_rootsquash mount option, allowing users to
explicitly request disabling root squash on GSSIAM mounts when
authorized by the external GSSIAM authority.

Specifically, this patch implements:

- Client Mount Option:
  Adds -o disable_rootsquash parsing in lustre/llite/llite_lib.c
  and packs GSSIAM_OPT_DISABLE_ROOT_SQUASH in the GSSIAM init ctx
  options payload.

- Server Nodemap Privilege Raising:
  When authorized by the external GSSIAM server
  (GSSIAM_AUTH_DISABLE_ROOT_SQUASH), gssiam_get_nodemap() passes
  allow_root=true to nodemap_gssiam_attrs_update(). The per-identity
  dynamic child nodemap is permitted to raise allow_root via the
  parent 'gssiam' nodemap's pre-configured NODEMAP_RAISE_PRIV_ADMIN
  delegation capability. Root squash remains strictly enforced
  (allow_root=false) by default unless explicitly requested at mount
  and authorized by the GSSIAM server.

- Extended Upcall Downcall Format:
  Extends the kernel/userspace downcall contract by adding an
  ":options" field to the downcall string format parsed in
  tgt_gssiam.c ("mount_option:expire:options:principal"), allowing
  l_gssiam_auth to pass authorized permission/option flags to the
  kernel upcall cache.

- Dedicated GSSIAM Option Flags:
  Defines enum gssiam_mount_option_flags (GSSIAM_OPT_RDONLY and
  GSSIAM_OPT_DISABLE_ROOT_SQUASH) in lustre_idl.h, cleanly separating
  the GSSIAM option space from generic OBD_CONNECT_* connection flags.

Signed-off-by: Di Wang <ddiwang@google.com>
Change-Id: I35af55f4ff4193195028b157758a7b30bb2e0f9d
68021 master J –B ✓T ✓R +1/2
LU-19921 tests: add GSSIAM security test
reviewing wangdi · PS24→PS25 since your -1 — your objection was dropped
7 unresolved XL +1368 −22
22h
build #135123 SUCCESS · tests all Maloo sessions
reviews: Sebastien Buisson +1 2026-11-03 16:09
no vote yet: Jinshan Xiong, Bruno Faccini, Andreas Dilger
patchsets:
+20 earlier PS1 08-14 PS2 08-15 PS3 08-16 PS4 08-17 PS5 08-18 PS6 08-18 PS7 08-18 PS8 08-19 PS9 08-20 PS10 08-21 PS11 08-22 PS12 08-22 PS13 08-22 PS14 08-23 PS15 08-24 PS16 08-25 PS17 08-25 PS18 08-26 PS19 08-27 PS20 09-04
PS21 09-07 PS22 09-09 PS23 10-23 PS24 10-27 PS25 11-01
your previous vote: -1 on PS24 (2026-10-28 13:57) — now at PS25
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:7 — (minor) The subject says "tests:", but the patch also changes server behaviour, and the body doesn't describe it:
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) The subject says "tests:", but the patch also changes server behaviour, and the body doesn't describe it:

- tgt_gssiam_verify() now rejects with -EPERM any principal starting with "mock_gssiam_" unless OBD_FAIL_SEC_GSSIAM_MOCK_TEST or OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN is set.
- l_gssiam_auth used to approve every token unconditionally. It now returns "deny" for anything other than the four mock tokens.
- The new lustre_gssiam_mock.h header is shared by the kernel and the utilities.

Together these mean the shipped reference upcall pair no longer authenticates anything on a server without fail_loc set. Could the body say so? It may also be worth choosing a component that covers the target/ptlrpc changes (e.g. "sec:").
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) This patch doesn't change test_300. It was added by the previous patch in the series ("LU-19921 sec: add disable_rootsquash mount op
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) This patch doesn't change test_300. It was added by the previous patch in the series ("LU-19921 sec: add disable_rootsquash mount option"), and the sanity-sec hunks here only touch dyn_nm_helper() and add test_301-310. Is the "test_300 rootsquash check updates" text left over from an earlier patchset?
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:17 — (typo) The patch defines OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN (0x1206), not OBD_FAIL_SEC_GSSIAM_EXP_CLIENT, so a `git log` grep for the real na
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(typo) The patch defines OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN (0x1206), not OBD_FAIL_SEC_GSSIAM_EXP_CLIENT, so a `git log` grep for the real name won't find this commit.
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre COMMIT_MSG:21 — (typo) The constants are named GSSIAM_MOCK_RW, GSSIAM_MOCK_RO, GSSIAM_MOCK_EXPIRED and GSSIAM_MOCK_DENY (in lustre/include/lustre_gssiam_moc
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(typo) The constants are named GSSIAM_MOCK_RW, GSSIAM_MOCK_RO, GSSIAM_MOCK_EXPIRED and GSSIAM_MOCK_DENY (in lustre/include/lustre_gssiam_mock.h), not MOCK_GSSIAM_*.
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre l_gssiam_upcall.8:58 — (minor) l_gssiam_upcall.c also registers the long option `--expired` for this. Should the SYNOPSIS and this entry use `.BR -e ", " --expired
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) l_gssiam_upcall.c also registers the long option `--expired` for this. Should the SYNOPSIS and this entry use `.BR -e ", " --expired`, as the other options do?
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre lustre_gssiam_mock.h:6 — (minor) tgt_gssiam_verify() and sptlrpc_rule_set_choose() also accept OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN as the override, not only OBD_FAIL_S
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) tgt_gssiam_verify() and sptlrpc_rule_set_choose() also accept OBD_FAIL_SEC_GSSIAM_EXPIRED_TOKEN as the override, not only OBD_FAIL_SEC_GSSIAM_MOCK_TEST. Should this comment mention both?
reply PS25 2026-11-02 12:06 Gerrit AI review for Lustre l_gssiam_auth.c:127 — (minor) With this branch the reference helper denies every real token. The comment above still says "Validate token by external server", and
Gerrit AI review for Lustre PS25 · 2026-11-02 12:06
(minor) With this branch the reference helper denies every real token. The comment above still says "Validate token by external server", and l_gssiam_auth(8) still says the helper validates the token against the enterprise GSSIAM service and returns the mapped permissions. If the patch is refreshed, could the comment and the man page say that this helper only recognizes the mock_gssiam_* test tokens? The man page could also note that the target accepts those only with fail_loc 0x1205/0x1206 set.
owner wangdi · uploader wangdi · PS25 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-19921 tests: add GSSIAM security test

Add 301-310 for GSSIAM security flavor in sanity-sec
security test, including dyn_nm_helper() fileset cleanup
and test_300 rootsquash check updates.

Add 180a-e in recovery-small and 204, 205 in
replay-single.sh for GSSIAM.

Add OBD_FAIL_SEC_GSSIAM_MOCK_TEST and
OBD_FAIL_SEC_GSSIAM_EXP_CLIENT fail_loc tunables for
testing GSSIAM in local node environments.

Add -e option to l_gssiam_upcall and update
l_gssiam_upcall(8) man page.  Add MOCK_GSSIAM_RW,
MOCK_GSSIAM_RO, MOCK_GSSIAM_EXPIRED, and
MOCK_GSSIAM_DENY mock principal handling in
l_gssiam_auth.c.

Update sptlrpc_rule_set_choose() loopback selection
in sec_config.c and exclude gssiam in
flvr_cnt_cli2mdt/cli2ost/mdt2mdt/mdt2ost helpers.

Signed-off-by: Di Wang <ddiwang@google.com>
Change-Id: Ic2d797ca7c49ac3df06773f96915b563dcd6c0d8
63425 master J –B ✓T ✓R +2/2
LU-18857 mgs: add timeout mechanism for allow_register
reviewing Chakshu Kansal · PS20→PS48 since your +1
5 unresolved XL +1485 −42
1d
6 optional test failure(s) — informational
build #134518 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-02 20:10 · Sebastien Buisson +1 2026-10-30 09:17
no vote yet: Chris Hunter, Mikhail Pershin, Oleg Drokin
patchsets:
+43 earlier PS1 01-16 PS2 02-20 PS3 02-20 PS4 03-10 PS5 03-10 PS6 03-10 PS7 03-16 PS8 03-17 PS9 03-17 PS10 04-20 PS11 04-22 PS12 04-27 PS13 04-28 PS14 05-04 PS15 05-04 PS16 05-29 PS17 05-29 Andreas Dilger PS18 06-14 Andreas Dilger PS19 06-20 PS20 07-06 PS21 07-07 James Simmons PS22 07-12 PS23 07-12 Oleg Drokin PS24 07-12 Andreas Dilger PS25 07-22 PS26 07-22 PS27 07-29 PS28 07-29 PS29 08-03 PS30 08-04 PS31 08-05 PS32 08-06 PS33 08-10 PS34 08-13 PS35 08-13 PS36 08-27 PS37 09-07 PS38 09-14 PS39 09-23 PS40 09-29 PS41 10-03 PS42 10-06 PS43 10-06
PS44 10-09 PS45 10-19 PS46 10-23 PS47 10-23 PS48 10-27
your previous vote: +1 on PS20 (2026-07-06 13:22) — now at PS48
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS48 2026-11-02 20:10 Andreas Dilger mgs_handler.c:553 — fix if patch is refreshed. I don't think the missing `rc =` is fatal (though against coding style as well)
Gerrit AI review for Lustre PS48 · 2026-10-27 21:54
(minor) This tells the admin to watch for `Can't get db for <fsname>: rc = -13`, but that string is never printed. After mgs_erase_logs() the failure comes from the mgs_find_or_make_fsdb() call further down, which prints

    CERROR("Can't get db for %s: %d\n", mti->mti_fsname, rc);

so the console shows `Can't get db for testfs: -13`. Other targets are rejected earlier by mgs_check_index() or the `New target registration disabled` message, not with this text. Anyone grepping the logs for the quoted string won't find it. If the patch is refreshed, maybe change that CERROR to the `: rc = %d` form, or quote the message that actually appears.
Andreas Dilger PS48 · 2026-11-02 20:10
fix if patch is refreshed.  I don't think the missing `rc =` is fatal (though against coding style as well)
reply PS48 2026-11-02 20:10 Andreas Dilger obd_sysfs.c:222 — This message can be fixed later if this patch lands.
Gerrit AI review for Lustre PS48 · 2026-10-27 21:54
(minor) The man page's PERSISTENCE section says a dedicated MGS-only node never processes the `params` log, so `lctl set_param -P allow_register=0` has no effect there; it needs `options mgs allow_register=0` instead. On that kind of node this hint suggests a permanent lockdown that won't happen. If the patch is refreshed, consider mentioning the module option too, e.g. "... or 'options mgs allow_register=0' (MGS-only node) / 'lctl set_param -P allow_register=0' to lock down permanently".
Andreas Dilger PS48 · 2026-11-02 20:10
This message can be fixed later if this patch lands.
reply PS48 2026-11-02 20:10 Andreas Dilger conf-sanity.sh:2274 — (style) prefer `[[ ... ]]` for bash
Andreas Dilger PS48 · 2026-11-02 20:10
(style) prefer `[[ ... ]]` for bash
reply PS48 2026-11-02 20:10 Andreas Dilger conf-sanity.sh:6699 — This shouldn't be `unlimited`. It should be enough to allow an hour, and conf-sanity will almost certainly reformat the filesystem before t
Andreas Dilger PS48 · 2026-11-02 20:10
This shouldn't be `unlimited`.  It should be enough to allow an hour, and conf-sanity will almost certainly reformat the filesystem before then?
reply PS48 2026-11-02 20:10 Andreas Dilger conf-sanity.sh:13493 — For retroactive version checks, this should use the `git describe` format `v2_17_58-68-g30f46cdfda90` so that the exact commit can be found
Andreas Dilger PS48 · 2026-11-02 20:10
For retroactive version checks, this should use the `git describe` format `v2_17_58-68-g30f46cdfda90` so that the exact commit can be found as well.

This is only worthwhile to do if the subtest is updated for some other reason, otherwise it burns hours of test time for no real benefit.
owner Chakshu Kansal · uploader Chakshu Kansal · PS48 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-18857 mgs: add timeout mechanism for allow_register

Add automatic timeout functionality to the allow_register
parameter to improve security by limiting the window during
which new filesystems or targets can register.

Values
  0          registration disabled, initial default
  unlimited  registration enabled indefinitely, no timer
  N[s|m|h]   registration enabled for N seconds/minutes/hours,
             default unit is hours when no unit is given

When a timed value is set, a timer disables registration on expiry.
show() reports remaining time with an explicit 's' unit.

Timed windows above 7 days are rejected with -EINVAL.
Use 'unlimited' for an open-ended window.

Automatic default window
 - allow_register defaults to 0, disabled
 - the first target to register for an unknown filesystem opens a
   one-time 24-hour window, but only on a truly fresh MGS with no
   existing filesystem config log yet, unless the admin already set
   allow_register explicitly via module parameter or lctl set_param
 - an MGS already managing at least one filesystem never auto-arms,
   even for a later unknown fsname after a reboot or module reload
 - the window never re-arms again during the same module load
 - suppressing the automatic window entirely requires setting
   allow_register explicitly, e.g. 'options mgs allow_register=0'

Concurrent first registration
 - arming the one-time window is serialized under
   allow_register_mutex. A losing thread waits for the winner to
   finish arming, then rechecks allow_register.

Boot-time module parameter
 - new mgs.allow_register=<value> module parameter applies the same
   policy at module load time via class_allow_register_set(), so it
   gets identical validation, locking, and timer arming as the sysfs
   attribute

Compatibility changes from the original boolean allow_register
 - initial default is now 0 (disabled, see automatic default window
   above) instead of 1 (enabled)
 - allow_register=1 set at runtime means enabled for 1 hour, not
   enabled

Persistent set_param -P
 - allow_register=0 and allow_register=unlimited may be persisted
 - timed values cannot use -P, replaying a duration would open a
   fresh registration window on every mount
 - on config apply, bare 1 (old boolean on) maps to unlimited, other
   non-steady values are rejected

Also
  - mgs_check_target only treats rc > 0 as index in use. Negative
    error codes propagate instead of being overwritten to 0
  - mgs_check_index handles peer-supplied LDD_F_NEED_INDEX and range
    checks the peer-supplied target index
  - test-framework opens a bounded allow_register window around
    target format/add and writeconf
  - Warn on console when writeconf erases logs with allow_register=0
  - Documentation/man4/allow_register.4
  - writeconf/allow_register interaction in tunefs.lustre(8)
  - SEE ALSO allow_register(4) in mkfs.lustre(8) and mount.lustre(8)
  - conf-sanity 157a/157b changed allow_register=1 to 'unlimited'
  - conf-sanity 157c timeout window coverage
  - conf-sanity 157d param persistence and legacy 1 to unlimited
  - conf-sanity 157e mgs module parameter boot-time enforcement
  - conf-sanity 157f auto-arm 24 hour registration window
  - explicitly reopen the allow_register window in test scripts as
    needed
  - mutex around timer/value updates in store/show

Fixes: f96f38c9e1e3 ("LU-18857 mgs: add allow_register tunable parameter")
Signed-off-by: Chakshu Kansal <ckansal@ddn.com>
Change-Id: I8ce969db3e06f82d97da47b11421a2b8833c5656
66253 master J –B ✓T ✓R +2/2
LU-19712 utils: Add only and not-pool options to lfs pool pin
reviewing Nikos Papakonstantinou · PS24→PS30 since your -1 — your objection was dropped
master-next L +718 −154
2d
build #134249 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-29 08:40 · Sebastien Buisson +1 2026-10-22 08:52
patchsets:
+25 earlier PS1 05-28 PS2 05-28 PS3 05-29 PS4 06-04 PS5 06-05 PS6 06-08 PS7 06-10 PS8 06-14 PS9 06-15 PS10 06-22 PS11 07-09 PS12 07-10 PS13 07-14 PS14 07-15 PS15 07-16 PS16 07-30 PS17 07-30 PS18 07-31 PS19 08-20 PS20 08-26 PS21 08-27 PS22 09-01 PS23 09-04 PS24 09-04 PS25 09-14
PS26 09-23 PS27 10-01 PS28 10-08 PS29 10-14 PS30 10-22
your previous vote: -1 on PS24 (2026-09-12 15:01) — now at PS30
owner Nikos Papakonstantinou · uploader Nikos Papakonstantinou · PS30 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-19712 utils: Add only and not-pool options to lfs pool pin

Introduce --only and --not-pool options to lfs pool pin. The --only
option makes the pin exclusive to the set of pools the target is
already positively pinned to (including the one this operation itself
pins), while the --not-pool option prevents the file from being
migrated or mirrored to the specified pool.

Also add a matching --not-pool option to lfs pool unpin, via a new
llapi_pool_undeny_fd(), to remove a deny rule without disturbing a
same-named positive pin (a pool can never be both, since --not-pool on
pin already refuses to deny an already-pinned pool). --not-pool always
takes an explicit pool name; unlike --pool, it is never inferred from
the target's layout, since a denied pool cannot appear there.

Also rename verify_pin_xattr_object(), dump_pin_object(),
read_pin_xattr_object() and read_pin_xattr_object_fd() to their
llapi_-prefixed equivalents, so their generic names cannot clash with
application symbols. The prefix also puts them under the llapi_*
export glob in liblustreapi.map, which lfs needs once it reads
lustre.pin itself later in this series. --only/--not-pool themselves
go through the new llapi_pool_pin_only_fd()/llapi_pool_deny_fd()/
llapi_pool_undeny_fd() entry points.

Signed-off-by: Nikos Papakonstantinou <npapakonstantinou@ddn.com>
Change-Id: Icc35bf87444edd74c1fcda927cead5e3b34a0fcd
63330 master J –B ✓T ✓R -1/2−
LU-19403 llapi: Add device functions for nodemap
reviewing Nikos Papakonstantinou · PS11→PS23 since your +1
needs rebase 6 unresolved L +385 −50
6d
PS11→PS23 since your +1
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
build #133513 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Marc Vef, Sebastien Buisson, Andreas Dilger
patchsets:
+18 earlier PS1 01-12 PS2 01-28 PS3 01-28 PS4 02-09 PS5 02-10 PS6 02-12 PS7 02-12 Janitor Bot PS8 02-13 PS9 02-18 PS10 02-24 PS11 02-25 PS12 02-26 PS13 03-13 PS14 03-14 PS15 03-14 Janitor Bot PS16 03-14 PS17 03-31 PS18 07-28
PS19 08-10 PS20 08-21 PS21 09-16 PS22 09-17 PS23 10-13
your previous vote: +1 on PS11 (2026-02-25 23:50) — now at PS23
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS22 2026-09-18 09:31 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) The body accounts for the three device helpers, the new test binary and the run_tests() change, but two other pieces of the diff are
Gerrit AI review for Lustre PS22 · 2026-09-18 09:31
(minor) The body accounts for the three device helpers, the new test binary and the run_tests() change, but two other pieces of the diff are not mentioned: the llapi_yaml_get_device_index() changes in liblustreapi_param.c, and the new llapi_strscpy() helper in lustreapi_internal.h.

llapi_strscpy() has no caller in this patch (it is picked up by later changes in the relation chain), so a reader landing on this commit has no way to tell why it appeared here. A sentence for each would help, or would they sit better in the parent patch that introduced llapi_obdname2devno()?
reply PS23 2026-10-14 08:31 Gerrit AI review for Lustre COMMIT_MSG:14 — (minor) "Fix an errno logged but not returned in their error path" reads like a change from an earlier patchset of this change rather than a
Gerrit AI review for Lustre PS23 · 2026-10-14 08:31
(minor) "Fix an errno logged but not returned in their error path" reads like a change from an earlier patchset of this change rather than against master. On master llapi_get_*_device() don't exist yet, and the obd.c helpers they replace never logged an errno. They printed "This command must be run on the MGS." and returned -ENODEV. If the patch is refreshed, could this sentence be dropped, or reworded to describe the actual behavior (an error is logged via llapi_error() and the same errno is returned)?
reply PS22 2026-09-18 09:31 Gerrit AI review for Lustre llapi_nodemap_test.c:29 — (nit) If the patch is refreshed: the comment promises more than the helper checks. llapi_obdname2devno() only returns early when the ioctl g
Gerrit AI review for Lustre PS22 · 2026-09-18 09:31
(nit) If the patch is refreshed: the comment promises more than the helper checks. llapi_obdname2devno() only returns early when the ioctl gives -EINVAL; for any other ioctl error it falls through to llapi_yaml_get_device_index(), so a true result here can come entirely from the Netlink path with the ioctl never having worked.

"Check that the MGS device number can be resolved" would match what it does.
reply PS22 2026-09-18 09:31 Gerrit AI review for Lustre llapi_nodemap_test.c:130 — (minor) This one has no ASSERTF(), so it always passes whatever it prints - it records the node's roles in the log but cannot detect a regre
Gerrit AI review for Lustre PS22 · 2026-09-18 09:31
(minor) This one has no ASSERTF(), so it always passes whatever it prints - it records the node's roles in the log but cannot detect a regression.

Since the six values it prints are related, could it assert the relationship instead? On a node where is_mgs() is true, llapi_get_mgs_device() must succeed, so

    ASSERTF(!mgs || mgs_device_accessible(), ...)

and the MDS/OSS equivalents would turn this into real coverage.
reply PS23 2026-10-14 08:31 Gerrit AI review for Lustre llapi_nodemap_test.c:77 — (suggestion) run_tests() forks each test, so every child starts with an empty static cache. As a result, nothing in the binary exercises the
Gerrit AI review for Lustre PS23 · 2026-10-14 08:31
(suggestion) run_tests() forks each test, so every child starts with an empty static cache. As a result, nothing in the binary exercises the "cache after first successful lookup" path that the commit message describes. If the patch is refreshed, consider calling llapi_get_mgs_device() a second time within this test and asserting that it returns the same device number.
reply PS23 2026-10-14 08:31 Gerrit AI review for Lustre liblustreapi_ioctl.c:285 — (minor) Only -EINVAL is remapped, so "device not present" can now come back as different errnos depending on which lookup path answered:
Gerrit AI review for Lustre PS23 · 2026-10-14 08:31
(minor) Only -EINVAL is remapped, so "device not present" can now come back as different errnos depending on which lookup path answered:

    ioctl(OBD_IOC_NAME2DEV) not found      -> -EINVAL -> -ENODEV
    llapi_yaml_get_device_index() not found -> -ENOENT
    /dev/obd unopenable, no "lustre" genl  -> -EOPNOTSUPP

Before this patch, get_mgs_device(), get_mds_device() and get_oss_device() in obd.c always returned -ENODEV. So, for example, `lctl barrier_freeze` on a node without the Lustre modules loaded now fails with EOPNOTSUPP instead of ENODEV.

Should the helpers return -ENODEV for every lookup failure, or should the kernel-doc spell out which errnos callers can expect? Same in the MDS and OSS variants below.
owner Nikos Papakonstantinou · uploader Nikos Papakonstantinou · PS23 uploaded 22d ago · NEW · open in Gerrit ↗
commit message
LU-19403 llapi: Add device functions for nodemap

Nodemap lctl commands look up the local MGS/MDS/OSS device
number, but that logic lived only in obdctl.

Add llapi_get_mgs_device()/get_mds_device()/get_oss_device()
wrappers around llapi_obdname2devno(), caching the device number
after the first successful lookup. Fix an errno logged but not
returned in their error path.

Add the llapi_nodemap_test binary and sanity-sec test_92;
run_tests() gains a NULL @lustre_dir case so this server-only
binary can share it instead of duplicating the fork/report loop.

Signed-off-by: Nikos Papakonstantinou <npapakonstantinou@ddn.com>
Change-Id: I095265bdccc8efd441c6c396c8ad267d1f6b7ca9
56526 master J !B ✓T ✗2R -1/2−
LU-18076 llite: add $MOUNT/.lustre/uuid
reviewing Emoly Liu · PS1→PS10 since your -1 — your objection was dropped
needs rebase 5 unresolved M +125 −3
6d
PS1→PS10 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-zfs-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
build #128269 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Etienne AUJAMES, Andreas Dilger, Oleg Drokin
patchsets:
+5 earlier PS1 09-28 PS2 10-12 PS3 01-16 PS4 09-22 PS5 04-21
PS6 06-17 PS7 06-23 PS8 06-24 PS9 07-09 PS10 07-29
your previous vote: -1 on PS1 (2024-09-28 13:31) — now at PS10
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre file.c:6775 — (minor) llite.*.uuid prints the UUID with a trailing newline, this returns it without one, so cat $MOUNT/.lustre/uuid runs straight into the
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(minor) llite.*.uuid prints the UUID with a trailing newline, this returns it without one, so cat $MOUNT/.lustre/uuid runs straight into the shell prompt. Since this is a new user-visible interface, is it worth matching the sysfs form now?
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre llite_lib.c:3383 — (style) Extra parentheses around the argument - fid_is_uuid(&lli->lli_fid) reads better, and matches the PFID(&lli->lli_fid) a few lines up.
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(style) Extra parentheses around the argument - fid_is_uuid(&lli->lli_fid) reads better, and matches the PFID(&lli->lli_fid) a few lines up. ll_inode2fid(inode) would work too.
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre mdd_device.c:1033 — (style) Not a bug, but the tab alignment between type and name is back after being asked about on earlier patchsets - a single space is what
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(style) Not a bug, but the tab alignment between type and name is back after being asked about on earlier patchsets - a single space is what new code uses:

    struct md_object *mdo;
    struct mdd_object *mdd_uuid;
    struct lu_fid fid = LU_UUID_FID;
    int rc;
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre mdd_device.c:1051 — (suggestion) Nothing ever reads m->mdd_dot_lustre_objs.mdd_uuid. mdd_obf and mdd_lpf are kept because they carry mo_dir_ops, but this one ha
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(suggestion) Nothing ever reads m->mdd_dot_lustre_objs.mdd_uuid. mdd_obf and mdd_lpf are kept because they carry mo_dir_ops, but this one has no ops attached, so the mdo_locate() / new field / mdd_object_put() trio only pins the object in the lu_site cache. Would mdd_local_file_create() on its own be enough here?
reply PS10 2026-07-29 20:59 Gerrit AI review for Lustre llapi_fid_test.c:489 — (defect) .lustre/uuid only exists on an MDS that carries this patch, so against an older server llapi_open_by_fid() returns -ENOENT here and
Gerrit AI review for Lustre PS10 · 2026-07-29 20:59
(defect) .lustre/uuid only exists on an MDS that carries this patch, so against an older server llapi_open_by_fid() returns -ENOENT here and ASSERTF() -> DIE() exits the whole binary.

sanity.sh test_154g, which runs llapi_fid_test, is gated only on MDS1_VERSION >= 2.6.92, so on an interop run test_154g fails and test40/test41/test42 in this binary never execute.

Can this be gated on the server version - e.g. tolerate -ENOENT here, or move the check into a version-gated shell test instead?
owner Emoly Liu · uploader Emoly Liu · PS10 uploaded 98d ago · NEW · open in Gerrit ↗
commit message
LU-18076 llite: add $MOUNT/.lustre/uuid

Add a virtual $MOUNT/.lustre/uuid file to print the UUID for that
specific mountpoint.
Also, conf-sanity.sh test_44 is modified to verify this patch.

Signed-off-by: Emoly Liu <emoly@whamcloud.com>
Change-Id: I74d22c012dbc623d35e4fdf8594d8e7c83e01b1a
66204 master J –B ✓T ✓R +1/2
LU-20310 mdt: fix remaining checkpatch.pl warnings
reviewing Timothy Day · PS2→PS3 since your +1
2 unresolved L +153 −111
6d
build #134622 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-10-28 10:31
no vote yet: Andreas Dilger, Oleg Drokin
patchsets: PS1 05-27 PS2 07-14 PS3 10-28 Arshad Hussain
your previous vote: +1 on PS2 (2026-08-06 19:54) — now at PS3
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-10-28 18:02 Gerrit AI review for Lustre mdt_coordinator.c:1847 — (style) Same half-join as in mdt_open.c: " (flags=%d))\n" is still a separate literal while the first part grew to 116 columns. If the patch
Gerrit AI review for Lustre PS3 · 2026-10-28 18:02
(style) Same half-join as in mdt_open.c: " (flags=%d))\n" is still a separate literal while the first part grew to 116 columns. If the patch is refreshed, consider joining it fully.
reply PS3 2026-10-28 18:02 Gerrit AI review for Lustre mdt_open.c:1776 — (style) This isn't a bug, but the string here was only half joined. The message is still split before "next reboot, rc = %d\n", and the line
Gerrit AI review for Lustre PS3 · 2026-10-28 18:02
(style) This isn't a bug, but the string here was only half joined. The message is still split before "next reboot, rc = %d\n", and the line is now 123 columns, so it is neither under 80 columns nor greppable as one string. The same half-join is at the identical CERROR in mdt_orphan_open() and at the "i_blocks will be reported wrongly and " / "can only be fixed in next resync" CERROR in mdt_close_handle_layouts(). If the patch is refreshed, consider joining each of these fully, or leaving them as they were.
owner Timothy Day · uploader Arshad Hussain · PS3 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20310 mdt: fix remaining checkpatch.pl warnings

... via checkpatch.pl --fix-inplace.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Id7dfe406de0813c38244e393a4a15ec0dcbfd15f
68647 master J ✓B ✓T ✓R -1/2−
LU-17916 osd: restore get_page stats for compatibility
reviewing Oleg Drokin · PS1→PS2 since your +1
needs rebase S +15 −2
13d
PS1→PS2 since your +1
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
build #132496 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets: PS1 09-04 PS2 09-29
your previous vote: +1 on PS1 (2026-09-10 16:29) — now at PS2
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 36d ago · NEW · open in Gerrit ↗
commit message
LU-17916 osd: restore get_page stats for compatibility

The folio conversion renamed the "get_page" and "get_page_failures"
counters in osd-ldiskfs.*.stats to "get_folio" and "get_folio_failures".
Those names are a user-visible interface:
anything parsing the stats file by counter name simply stops finding
its counter after an upgrade, with no error.

Register the old names again alongside the new ones and account both,
so existing consumers keep working while new ones can follow the folio
naming.  In osd-ldiskfs both counters sample the same events: the time
spent acquiring the buffers of one read/write prep, and the failures to
obtain a folio for the page cache.  Folios there are order 0, so one
failed folio is exactly one failed page; if osd_get_folio() ever asks
for a higher order, get_page_failures has to be scaled by the number of
pages in the requested folio.  In osd-zfs neither counter has ever been
sampled, so both stay absent from the file as before.

The old names are restored without a LUSTRE_VERSION_CODE gate on
purpose: a timebomb would drop them again on a date no consumer
tracks, which is the breakage this patch exists to undo.

Test-Parameters: trivial
Fixes: d9b67be7148d ("LU-17916 osd: prefer folio of order 0")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Change-Id: Iabe35ab8a26a367979eaee8ad5d9fdf6cadc6486
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
56783 master J –B ✓T ✗2R -1/2−
LU-18400 tests: enable panic_on_warn
reviewing Timothy Day · PS8→PS14 since your +1
needs rebase 9 unresolved M +85 −0
13d
PS8→PS14 since your +1
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
failed enforced testplatformdetail
review-dne-zfs-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-zfs-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
build #133147 SUCCESS · tests all Maloo sessions
no vote yet: Sergey Cheremencev, Andreas Dilger, Oleg Drokin
patchsets:
+9 earlier PS1 10-25 PS2 10-27 PS3 10-27 PS4 10-29 PS5 10-29 PS6 06-20 PS7 09-16 PS8 09-17 PS9 05-20
PS10 05-20 PS11 06-08 PS12 06-09 PS13 10-07 PS14 10-08
your previous vote: +1 on PS8 (2025-09-18 18:25) — now at PS14
threads: 9 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS13 2026-10-08 07:14 Gerrit AI review for Lustre COMMIT_MSG:13 — (minor) If the patch is refreshed, could the body name the `PANIC_ON_WARN` variable and the `kernel.panic_on_warn` sysctl? It would also hel
Gerrit AI review for Lustre PS13 · 2026-10-08 07:14
(minor) If the patch is refreshed, could the body name the `PANIC_ON_WARN` variable and the `kernel.panic_on_warn` sysctl? It would also help to say how to re-enable panic_on_warn for an opted-out suite (e.g. `env=PANIC_ON_WARN=1` in Test-Parameters), and that the original value is saved in setupall() and restored in cleanupall(). That makes the change findable with git log and explains the save/restore hunks.
reply PS8 2025-09-18 17:25 Timothy Day sanity.sh:30 — I think this version of the patch is bogus anyway - it doesn't work. I probably have to rework this altogether.
Andreas Dilger PS8 · 2025-09-17 20:31
(defect?) this will not be reset when this script is finished and the next script is started.  Having a `stack_trap` to reset it would help.

Unfortunately, the other problem here is that there is no way to test this with `testlist=sanity env=PANIC_ON_WARN=1` except by deleting this line...
Timothy Day PS8 · 2025-09-18 17:25
I think this version of the patch is bogus anyway - it doesn't work. I probably have to rework this altogether.
reply PS9 2026-05-20 21:34 Andreas Dilger test-framework.sh:2121 — (style) You can write this more compactly as:
Andreas Dilger PS9 · 2026-05-20 21:34
(style) You can write this more compactly as:

        local warn_setting="$(sysctl kernel.panic_on_warn)"
        
        stack_trap "sysctl ${warn_setting/ = /}"

essentially saving the full output and restoring it.  Unfortunately, sysctl is not "symmetrical" in that it prints values like `kernel.panic_on_warn = 0` but only accepts `kernel.panic_on_warn=0` as input.  Hence the `${foo/ = /}` parameter substitution when registering the stack_trap.

Not sure this is a huge win, just an FYI to avoid writing the same parameter name multiple times, especially when they get long
reply PS9 2026-05-20 21:34 Andreas Dilger test-framework.sh:2123 — (defect?) this shouldn't register a new `stack_trap` if the value is unchanged. Otherwise, if `set_default_debug()` is called multiple time
Andreas Dilger PS9 · 2026-05-20 21:34
(defect?) this shouldn't register a new `stack_trap` if the value is unchanged.  Otherwise, if `set_default_debug()` is called multiple times on the same node (e.g. multiple client/target mounts in conf-sanity.sh) it could make the cleanup messy or overflow the limits for the `stack_trap()` mechanism.  In any case, there is no value to do so:

            [[ $new_warn_setting != ${warn_setting/.* = /} ]] || return 0
reply PS13 2026-10-08 07:14 Gerrit AI review for Lustre test-framework.sh:2241 — (defect?) For suites with PANIC_ON_WARN=0 (sanity, sanityn, conf-sanity, replay-*, recovery-small, ...), this now actively writes kernel.pan
Gerrit AI review for Lustre PS13 · 2026-10-08 07:14
(defect?) For suites with PANIC_ON_WARN=0 (sanity, sanityn, conf-sanity, replay-*, recovery-small, ...), this now actively writes kernel.panic_on_warn=0 on every mount. Before this patch those suites didn't touch the sysctl.

Earlier discussion on this change noted that some test environments already boot with panic_on_warn enabled. On those nodes, the opted-out suites would now turn it off and lose coverage they have today.

Would it be better for the opt-out to mean "leave the node setting alone", for example by skipping the write unless PANIC_ON_WARN=1, rather than forcing it to 0?
reply PS13 2026-10-08 07:14 Gerrit AI review for Lustre test-framework.sh:2241 — (style) This isn't a bug, but without -q, sysctl echoes `kernel.panic_on_warn = N` for every node each time set_default_debug_nodes() runs,
Gerrit AI review for Lustre PS13 · 2026-10-08 07:14
(style) This isn't a bug, but without -q, sysctl echoes `kernel.panic_on_warn = N` for every node each time set_default_debug_nodes() runs, which is on every target and client mount. That adds a lot of noise to conf-sanity/replay logs. If the patch is refreshed, consider `sysctl -wq` to match restore_panic_on_warn().
reply PS13 2026-10-08 07:14 Gerrit AI review for Lustre test-framework.sh:5605 — (suggestion) The commit message says the goal is to catch kref bugs. Final reference drops, and the refcount underflow/leak WARNs that come
Gerrit AI review for Lustre PS13 · 2026-10-08 07:14
(suggestion) The commit message says the goal is to catch kref bugs. Final reference drops, and the refcount underflow/leak WARNs that come with them, often happen during module unload. Restoring the original setting before unload_modules() means those warnings won't panic. Was that intentional, or could the restore move after unload_modules()?
reply PS13 2026-10-08 07:14 Gerrit AI review for Lustre test-framework.sh:6102 — (defect?) This follows up the earlier question about multiple scripts in one session. Is the value saved here always the node's original set
Gerrit AI review for Lustre PS13 · 2026-10-08 07:14
(defect?) This follows up the earlier question about multiple scripts in one session. Is the value saved here always the node's original setting?

The first write isn't guarded by a save. When Lustre is already mounted, check_and_setup_lustre() takes the do_check branch, which calls set_default_debug_nodes()->set_stricter_panic_options_nodes() and writes kernel.panic_on_warn without ever reaching setupall().

Example under auster (every suite has PPID == the auster pid, so they all share one panic_on_warn-$PPID-env file):

    sanity-dom.sh     fs already mounted -> do_check -> panic_on_warn=1, nothing saved
    sanity-lfsck.sh   cleanupall (no file yet, nothing restored)
                      check_and_setup_lustre -> setupall -> save_panic_on_warn records 1

After that, every restore_panic_on_warn() in the session writes back 1, including from cleanupall() in opted-out suites, until the next mount resets it. If no auster-level setupall saved the real value first, the nodes are left with panic_on_warn=1 after the run.

Would it be safer to save lazily on the first write, i.e. call save_panic_on_warn() from set_stricter_panic_options_nodes() (kptr_enable_and_save() saves and modifies in one place for the same reason)?
reply PS14 2026-10-09 16:23 Gerrit AI review for Lustre test-framework.sh:2199 — (defect?) The saved state is keyed by `$PPID`, so restore_panic_on_warn() only finds it when cleanupall() runs in a process with the same pa
Gerrit AI review for Lustre PS14 · 2026-10-09 16:23
(defect?) The saved state is keyed by `$PPID`, so restore_panic_on_warn() only finds it when cleanupall() runs in a process with the same parent as the one that saved it. That is not true for the common developer flow:

    sudo ./llmount.sh         # PPID = sudo pid #1: saves 0 to panic_on_warn-<pid1>-env, writes 1
    sudo ./llmountcleanup.sh  # PPID = sudo pid #2: no file, restore is a no-op

sudo forks for each command, so `$PPID` is different every time. The same happens when llmount.sh and llmountcleanup.sh are started by separate ssh sessions or CI steps. In those cases the node keeps kernel.panic_on_warn=1 after the filesystem is torn down. With the default kernel.panic=0, any later WARN on that workstation or VM panics it and leaves it hung. Before this patch, llmount.sh never touched the sysctl.

The header comment also says the saved value is "always the node's original setting". That does not hold across a PPID change: a later invocation sees no file and saves the 1 written by the earlier one.

Could the key be something stable across invocations, such as `$FSNAME` or the facet/mount configuration? The env file could then be removed after a successful restore, which would also stop the `panic_on_warn-*-env` files from piling up in `$TMP`.
owner Timothy Day · uploader Timothy Day · PS14 uploaded 26d ago · NEW · open in Gerrit ↗
commit message
LU-18400 tests: enable panic_on_warn

Enable panic_on_warn to catch kref bugs (and other
strange warnings) that might otherwise get ignored.

This is enabled by default for all test suites.
However, explicitly disable it for test suites that
still have warnings. This will prevent future
regressions while enabling developers to address
existing warnings incrementally.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ifc042c667422761b01ba8a95e7e838b040be00b5
66777 master J !B ✓T ✓R -1/2−
LU-9639 ldlm: Add kernel doc style for LDLM (11)
reviewing Arshad Hussain · PS1→PS4 since your +1
dwg 6 unresolved M +100 −50
19d
janitor run: 7 failing config(s), none unique to this patch — janitor results
build #130310 SUCCESS · tests all Maloo sessions
reviews: Timothy Day -1 2026-10-15 19:12
no vote yet: Oleg Drokin
patchsets: PS1 06-22 PS2 08-17 PS3 08-25 PS4 08-26
your previous vote: +1 on PS1 (2026-07-30 19:01) — now at PS4
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-08-26 05:37 Gerrit AI review for Lustre ldlm_pool.c:983 — (suggestion) ldlm_pool_add() and ldlm_pool_del() are declared in lustre_dlm.h and called from ldlm_lock.c, so they are part of the LDLM-inte
Gerrit AI review for Lustre PS3 · 2026-08-26 05:37
(suggestion) ldlm_pool_add() and ldlm_pool_del() are declared in lustre_dlm.h and called from ldlm_lock.c, so they are part of the LDLM-internal API rather than file-local helpers. Given LU-9639 is about adding kernel-doc to ldlm, is demoting them to plain comments the intended direction?

Same question for ldlm_pool_get_slv(), ldlm_pool_set_clv(), ldlm_pool_get_limit(), ldlm_pool_set_limit() and ldlm_pool_get_lvf() below, which ldlm_request.c uses.
reply PS4 2026-08-27 07:04 Gerrit AI review for Lustre ldlm_pool.c:162 — This block has the full kernel-doc layout - `ldlm_pool_t2gsp() - ...`, `@t:` and `Return:` - but the opener is `/*`, so kernel-doc skips it:
Gerrit AI review for Lustre PS4 · 2026-08-27 07:04
This block has the full kernel-doc layout - `ldlm_pool_t2gsp() - ...`, `@t:` and `Return:` - but the opener is `/*`, so kernel-doc skips it:

    contrib/scripts/kernel-doc -man lustre/ldlm/ldlm_pool.c | grep -c '^\.TH'
    9

ldlm_pool_t2gsp() is not among those 9. This was already raised on an earlier patchset and marked done, but the opener is still `/*` here - should it be `/**`?
reply PS4 2026-08-27 07:04 Gerrit AI review for Lustre ldlm_pool.c:369 — (style) Dropping "Our goal here is to" leaves a lowercase sentence fragment. Maybe "The goal is to decrease SLV ...".
Gerrit AI review for Lustre PS4 · 2026-08-27 07:04
(style) Dropping "Our goal here is to" leaves a lowercase sentence fragment. Maybe "The goal is to decrease SLV ...".

While this line is being reworded: is "in next 10h" still accurate? The comment further down in the body says the effect lasts "as long as one re-calc interval (1s these days)".
reply PS4 2026-08-27 07:04 Gerrit AI review for Lustre ldlm_pool.c:371 — (style) This isn't a bug - kernel-doc canonicalises both - but the patch mixes `Return:` (168, 320, 431, 475, 665) and `Returns:` (371, 535,
Gerrit AI review for Lustre PS4 · 2026-08-27 07:04
(style) This isn't a bug - kernel-doc canonicalises both - but the patch mixes `Return:` (168, 320, 431, 475, 665) and `Returns:` (371, 535, 585) in the same file. The tree is heavily `Return:` (about 1300 uses vs 65), and so is ldlm_request.c from patch (1) in this series. Worth settling on `Return:` if this is refreshed.
reply PS4 2026-08-27 07:04 Gerrit AI review for Lustre ldlm_pool.c:585 — "time in seconds" reads like an interval, but the value is an absolute timestamp:
Gerrit AI review for Lustre PS4 · 2026-08-27 07:04
"time in seconds" reads like an interval, but the value is an absolute timestamp:

    return pl->pl_recalc_time + pl->pl_recalc_period;

and ldlm_pools_recalc_task() converts it back to a delay itself:

    delay = min(ldlm_pools_recalc_delay(SERVER), ldlm_pools_recalc_delay(CLIENT));
    delay -= ktime_get_seconds();

Since the return sections are being rewritten anyway, would something like "seconds (ktime_get_seconds() base) at which this pool should next be recalculated" be clearer?
reply PS4 2026-08-27 07:04 Gerrit AI review for Lustre ldlm_pool.c:661 — (style) The parenthetical describes what the function does rather than what the parameter is, and it duplicates the description two lines be
Gerrit AI review for Lustre PS4 · 2026-08-27 07:04
(style) The parenthetical describes what the function does rather than what the parameter is, and it duplicates the description two lines below. Just `@limit: New limit value for the pool` would do.
owner Arshad Hussain · uploader Arshad Hussain · PS4 uploaded 70d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (11)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ia5a4c786536e8e51e1673f737f8ff5b26622e57f
66799 master J !B ✓T ✓R -1/2−
LU-20418 build: introduce gen_compat and port early libcfs
reviewing Shaun Tancheff · PS7→PS9 since your +1
needs rebase 5 unresolved L +665 −64
22d
PS7→PS9 since your +1
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #128469 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+4 earlier PS1 06-23 PS2 06-23 PS3 06-25 PS4 06-28 James Simmons
PS5 07-07 James Simmons PS6 07-09 James Simmons PS7 07-10 James Simmons PS8 07-10 James Simmons PS9 07-31
your previous vote: +1 on PS7 (2026-07-10 14:33) — now at PS9
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS9 2026-08-03 14:03 Timothy Day patchset comment — > The compile tests require targeting an already kernel which is sort of annoying to have to build the kernel before configuring lustre, to
Timothy Day PS9 · 2026-07-31 20:35
After talking with Oleg and Andreas, there is some concern that pure regex is less reliable than doing a compile for each check. Would it be possible to modify gen_compat.py to do a simple compile test? And still keep the same general structure?

I'm wary of cases where the regex finds a symbol, but we fail during link or modpost.
Shaun Tancheff PS9 · 2026-08-01 04:15
We can split the current parallel configure tests into individual files.

As far as the modpost concern that exists in the current parallel build already (may be 1 or 2 checks verify modpost / kernel module gets linked).

The main thing that doing grep/regex checks can do is run against kernel sources that have not be built.

The compile tests require targeting an already kernel which is sort of annoying to have to build the kernel before configuring lustre, to then just to drop lustre back into the kernel and build the kernel again.

compared to lustre out-of-tree building the kernel is a real time sink.
Timothy Day PS9 · 2026-08-03 14:03
> The compile tests require targeting an already kernel which is sort of annoying to have to build the kernel before configuring lustre, to then just to drop lustre back into the kernel and build the kernel again.

This is true. But for the latest kernels, we'd aim to have Lustre "default" to the right configuration - so you can skip the initial configuration. That doesn't help with old kernels, but I think that's fine.

> compared to lustre out-of-tree building the kernel is a real time sink.

Maybe there is a light-weight check-but-don't-compile approach we could use? I can investigate this a bit.
reply PS9 2026-08-01 01:29 Gerrit AI review for Lustre gen_compat.py:60 — When exp is a list, the expressions only match if they land on strictly consecutive lines: the first match sets restart, and the very next n
Gerrit AI review for Lustre PS9 · 2026-08-01 01:29
When exp is a list, the expressions only match if they land on strictly consecutive lines: the first match sets restart, and the very next non-matching line resets regex back to the full list.

    struct foo {      <- matches exp[0]
            int a;    <- resets, exp[1] never gets a chance
            int bar;
    };

With exp = ['struct foo {', 'int bar;'] the above gives "no"; removing the int a; line gives "yes". For the usual case - find a struct, then find a member some lines below it - that is the wrong behaviour.

The restarting line is also never re-tested against exp[0], since the elif skips the if, so a sequence that begins on that line is missed. No ksym uses a list yet, but the rest of the series builds on this.
reply PS9 2026-08-01 01:29 Gerrit AI review for Lustre gen_compat.py:126 — This method can never be called. The class attribute above it is replaced by this def at class creation, and then __init__ assigns self.head
Gerrit AI review for Lustre PS9 · 2026-08-01 01:29
This method can never be called. The class attribute above it is replaced by this def at class creation, and then __init__ assigns self.header, so every instance shadows it with the string or list from the ksym.

The consequence is that the list form the docstring advertises does not work end to end. grep_ex() handles a list, but map_and_save() does Path(self.header) and main() sorts on x.header. A ksym with header = [a, b] aborts configure:

    TypeError: argument should be a str or an os.PathLike object ..., not 'list'

Either drop the dead method and the list wording, or rename it (header_primary()?) and use it in map_and_save() and the sort key.
reply PS9 2026-08-01 01:29 Gerrit AI review for Lustre gen_compat.py:168 — A header that cannot be opened ends up here and the check just returns False, so "file is missing" and "symbol is absent" produce the same r
Gerrit AI review for Lustre PS9 · 2026-08-01 01:29
A header that cannot be opened ends up here and the check just returns False, so "file is missing" and "symbol is absent" produce the same result, and the only difference is a stderr line that needs --verbose.

With a --linux path that contains no include/linux at all, all three ported checks print "no" and the script still exits 0:

    checking if bio-integrity.h exists ... no
    checking if blk-integrity.h exists ... no
    checking if 'mmap_write_lock()' is available ... no

That matters because each ksym pins one absolute path under {linux}, while the compile tests being replaced were handed the full kernel include set (-I$LINUX/include -I$LINUX_OBJ/include -I$LINUX/arch/$SUBARCH/include ... in LB2_LINUX_TEST_COMPILE). --linux-obj is accepted but never consulted for header lookup, only for version.h.

The Debian fixup a few lines above the gen_compat call in lustre-build-linux.m4 exists precisely because $LINUX can be an arch-specific headers directory whose include/linux lives in the -common package, and that fixup only fires when LINUX equals LINUX_OBJ and LINUX is already canonical - not for the default /lib/modules/$(uname -r)/build.

When HAVE_MMAP_LOCK comes out "no" on a >= v5.8 kernel, include/lustre_compat/linux/mmap_lock.h redefines mmap_write_lock() and friends against mm->mmap_sem, so this surfaces as a confusing compile failure rather than as a configure error. Could a header that fails to open be a hard error instead?
reply PS9 2026-08-01 01:29 Gerrit AI review for Lustre gen_compat.py:445 — This returns on the first entry whose distro matches (and, for rhel/suse, whose major matches), so only one linux_* range per check is ever
Gerrit AI review for Lustre PS9 · 2026-08-01 01:29
This returns on the first entry whose distro matches (and, for rhel/suse, whose major matches), so only one linux_* range per check is ever consulted. A diagnostic like ('linux_5.8-6.0', 'linux_6.5-') would silently ignore the second range.

The HAVE_MMAP_LOCK data also looks off: rhel_9.2- excludes RHEL 9.0/9.1, which are 5.14 and do have include/linux/mmap_lock.h. Against a simulated RHEL 9.0 tree the check correctly says yes but the diagnostic then reports a failure:

    checking if 'mmap_write_lock()' is available ... yes [linux/mmap_lock.h] n
    rhel 9.0.70.13.1 [Linux 5.14.0] diagnostic failed ...

Should that be rhel_9.0-?
owner Shaun Tancheff · uploader Shaun Tancheff · PS9 uploaded 95d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: introduce gen_compat and port early libcfs

Introduce a faster build checking system that uses snippets of
python code in:
  config/compat.d/*.ksym
to generate macro(s) and/or inject code into config.h

Move checks for:
  HAVE_LINUX_BIO_INTEGRITY_HEADER
  HAVE_LINUX_BLK_INTEGRITY_HEADER
  HAVE_MMAP_LOCK

A dependency is added on python3, which is widely available, and
is not expected to hinder supported target platforms.

gen_compat.py formatted with:
$ black --version
  black, 26.3.1 (compiled: yes)
  Python (CPython) 3.14.4

Add support for kernel version parsing and diagnostics for
checking if a ksym compatibility check differs from is expected.

gen_compat writes to include/linux/libcfs/libcfs_gen_compat.h
which is included by config.h see: AH_TOP() in configure.ac

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I7080193bba1a29eae256d4896d1382e8561dd2de
66485 master J ✓B ✓T ✗0R -1/2−
LU-15373 llog: rework changelog_remap_rec()
reviewing Etienne AUJAMES · PS4→PS14 since your +1
needs rebase 16 unresolved L +303 −313
22d
PS4→PS14 since your +1
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
no vote yet: Arshad Hussain, Andreas Dilger
patchsets:
+9 earlier PS1 06-05 PS2 06-06 PS3 06-08 PS4 06-10 PS5 07-16 PS6 07-22 PS7 08-07 PS8 08-10 PS9 08-14
PS10 08-19 PS11 09-04 PS12 09-18 PS13 09-25 PS14 10-01
your previous vote: +1 on PS4 (2026-06-15 13:23) — now at PS14
threads: 16 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-07-28 06:06 Gerrit AI review for Lustre COMMIT_MSG:19 — (typo) "changlog_trim_rec()" is missing an 'e'; the function is changelog_trim_rec().
Gerrit AI review for Lustre PS6 · 2026-07-28 06:06
(typo) "changlog_trim_rec()" is missing an 'e'; the function is changelog_trim_rec().

Also in the paragraph above: "the fields need to be move in-order" reads better as "moved".
reply PS6 2026-07-28 06:06 Gerrit AI review for Lustre COMMIT_MSG:20 — (minor) The body covers changelog_trim_rec() and llapi_changelog_repack_rec(), but the largest hunk of the patch - the lustre_user.h rework
Gerrit AI review for Lustre PS6 · 2026-07-28 06:06
(minor) The body covers changelog_trim_rec() and llapi_changelog_repack_rec(), but the largest hunk of the patch - the lustre_user.h rework - is not mentioned: the new CLF_BEFORE_MASK()/CLFE_BEFORE_MASK() macros, changelog_field_size()/changelog_extra_field_size(), changelog_rec_field()/changelog_rec_extra_field(), and __CLFE_LAST redefining CLFE_SUPPORTED. The new OBD_FAIL_MDS_CHANGELOG_TRIM_JOBID fault injection isn't mentioned either.

Could the message name those so the header change isn't a surprise to a reader?
reply PS7 2026-08-08 09:11 Gerrit AI review for Lustre COMMIT_MSG:29 — (defect) This looks like it fixes real in-place corruption, not only a readability rework. The old changelog_remap_rec() moved the variable-
Gerrit AI review for Lustre PS7 · 2026-08-08 09:11
(defect) This looks like it fixes real in-place corruption, not only a readability rework. The old changelog_remap_rec() moved the variable-length name to its trimmed offset first and only then moved the extension fields, so any field living above that new offset was overwritten before it was read - trimming CLF_JOBID out of a record that also has CLF_EXTRA_FLAGS + uidgid/nid drops the name on top of changelog_ext_uidgid. On top of that the old code only ever OR'd cref_want into cr_extra_flags, so a trimmed extra flag was never cleared and a reader recomputed the name offset from a layout the server no longer wrote.

Should this carry a Fixes: tag?

    Fixes: 08ffb6f1428f ("LU-9727 lustre: Add an additional set of 64 changelog flags.")

That is the commit that introduced cref_want and the extra-field handling in changelog_remap_rec(); it became reachable with shipped client versions once a second extra field existed, in d2629cfcabfa ("LU-9727 lustre: add client NID to Changelogs entries").
reply PS8 2026-08-11 08:11 Gerrit AI review for Lustre lustre_user.h:2242 — (style) Small consistency nit on the two new helpers: this one takes `rec` plus `rec->cr_flags`, while changelog_rec_extra_field() below tak
Gerrit AI review for Lustre PS8 · 2026-08-11 08:11
(style) Small consistency nit on the two new helpers: this one takes `rec` plus `rec->cr_flags`, while changelog_rec_extra_field() below takes `const void *buf` plus both flag words. All six callers pass the record together with its own flags, and changelog_rec_extra_flags() is already forward-declared here, so the extra arguments mostly create a way to hand in an inconsistent pair. Could both take `const struct changelog_rec *rec` and read the flags themselves?
reply PS11 2026-09-05 15:34 Gerrit AI review for Lustre lustre_user.h:2175 — (minor) Both this and changelog_extra_field_size() below take the full flags enum but only work for a single flag - `changelog_field_size(CL
Gerrit AI review for Lustre PS11 · 2026-09-05 15:34
(minor) Both this and changelog_extra_field_size() below take the full flags enum but only work for a single flag - `changelog_field_size(CLF_RENAME | CLF_JOBID)` returns 0 rather than 64, and the switch gives no hint that a combination is wrong.

Since the point of the patch is to make adding a field easy, would a one-line comment ("@crf: exactly one CLF_* field flag") be worth it? Both are static inlines in a uapi header, so out-of-tree readers can call them too.
reply PS4 2026-06-16 09:08 Arshad Hussain llog_osd.c:884 — ```
Arshad Hussain PS4 · 2026-06-16 09:08
```
+                               /* Failed. Clear NID/NID_BE flags */
```
reply PS6 2026-07-28 06:06 Gerrit AI review for Lustre llog_osd.c:915 — (style) This isn't a bug, but the bare `return;` at the end of a void function is redundant and can be dropped.
Gerrit AI review for Lustre PS6 · 2026-07-28 06:06
(style) This isn't a bug, but the bare `return;` at the end of a void function is redundant and can be dropped.
reply PS7 2026-08-17 12:27 Etienne AUJAMES llog_osd.c:875 — Technically this should not be possible. If CLF_EXTRA_FLAGS is not set cref_want should be set to 0. The only way possible is corruption or
Gerrit AI review for Lustre PS7 · 2026-08-08 09:11
(defect) The extras loop is entered on the record's cr_flags, but cref_want is not forced empty when crf_want has lost CLF_EXTRA_FLAGS. In that case the uidgid/nid/openmode/xattr fields are still memmove()d down into a record whose cr_flags no longer advertises CLF_EXTRA_FLAGS, so every consumer computes changelog_rec_name() without them and reads extension bytes as the name.

changelog_block_trim_ext() derives both masks from loghandle->lgh_hdr->llh_flags, and llog_origin_handle_next_block() takes that verbatim from body->lgd_llh_flags with no validation, so a client that sends LLOG_F_EXT_X_UIDGID / _X_NID without LLOG_F_EXT_EXTRA_FLAGS lands here. changelog_remap_rec() used to gate every extra move on (crf_wanted & CLF_EXTRA_FLAGS) && (rec->cr_flags & CLF_EXTRA_FLAGS).

Would clearing cref_want when crf_want drops CLF_EXTRA_FLAGS cover it? The loop still has to run so that src walks past the fields:

    if (!(crf_want & CLF_EXTRA_FLAGS))
            cref_want = CLFE_INVALID;
Etienne AUJAMES PS7 · 2026-08-17 12:27
Technically this should not be possible. If CLF_EXTRA_FLAGS is not set cref_want should be set to 0. The only way possible is corruption or a compromise client.
But the original patch have this check, so I will update.
reply PS11 2026-09-05 15:34 Gerrit AI review for Lustre llog_osd.c:805 — (style) Every other static function in this file carries a `/**` block, and this one has a couple of things a reader can't guess from the si
Gerrit AI review for Lustre PS11 · 2026-09-05 15:34
(style) Every other static function in this file carries a `/**` block, and this one has a couple of things a reader can't guess from the signature: it rewrites `buf` in place (the same 24 bytes are read as `changelog_ext_nid` and written as `struct lnet_nid`, or vice versa), and `-EAFNOSUPPORT` means "this large NID has no nid4 form" rather than a hard error - the caller just drops CLFE_NID/CLFE_NID_BE.

If the patch is refreshed, a short kdoc here would help.
reply PS7 2026-08-08 09:11 Gerrit AI review for Lustre sanity.sh:22270 — (defect) Does this assertion fail without the changelog_trim_rec() rework? The old changelog_remap_rec() relocated the name to changelog_rec
Gerrit AI review for Lustre PS7 · 2026-08-08 09:11
(defect) Does this assertion fail without the changelog_trim_rec() rework? The old changelog_remap_rec() relocated the name to changelog_rec_offset(crf_wanted, cref_want), which is exactly the offset a reader recomputes from the trimmed flags, so the record stayed structurally valid: the UNLNK line still ends in $tfile and CLF_JOBID is still cleared from cr_flags, so ` j=` is still absent.

What the old code corrupted was the extension *values*. With jobid trimmed the name is copied to rec+sizeof(rec)+ef+uidgid before changelog_ext_uidgid is moved, so the low bytes of cr_gid come back as the file name (`f160y` here), and with a name longer than the gap the nid goes too.

Asserting on the surviving extra fields would make this a regression test - e.g. also require the ` u=` field in $UNLNK to still match the uid:gid that did the unlink, and check ` nid=` is unchanged. This is the same point raised on the earlier revision about exercising the extra fields.
reply PS11 2026-09-05 15:34 Gerrit AI review for Lustre sanity.sh:22410 — (style) The three properties are chained into one `&& ... || error`, so a failure prints the same message whether the record went missing, t
Gerrit AI review for Lustre PS11 · 2026-09-05 15:34
(style) The three properties are chained into one `&& ... || error`, so a failure prints the same message whether the record went missing, the jobid survived the trim, or the uid/gid got clobbered by the field move - and the uid/gid one is the interesting failure this test exists to catch.

Splitting them reads better and says which invariant broke:

    [[ -n "$UNLNK" ]] || error "no UNLNK changelog for $tfile"
    [[ "$UNLNK" =~ \ j= ]] && error "jobid not trimmed: $UNLNK"
    [[ "$UNLNK" =~ \ u=0:0 ]] || error "uid/gid corrupted by trim: $UNLNK"
reply PS4 2026-06-16 09:08 Arshad Hussain liblustreapi_chlg.c:322 — ```
Arshad Hussain PS4 · 2026-06-16 09:08
```
+       /* reset the cr_flags (flags related to original record read by
+        * changelog). We do this because client(crf_want) may request different
+        * flags than source recored
+        */
```
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS14 uploaded 34d ago · NEW · open in Gerrit ↗
commit message
LU-15373 llog: rework changelog_remap_rec()

Originally, changelog_remap_rec() expanded missing changelog fields,
but now we use it only to trim unsupported fields for remote clients.

So the fields need to be move in-order from the first record to last
one to avoid overwrite.

Moreover, changelog_remap_rec() is not trivial, so adding new
changelog field can be tricky.

This patch renames & improves changelog_remap_rec() to
changelog_trim_rec(). llapi_changelog_repack_rec() is updated to
reduce their dependency on field types.

Add a regression test sanity 160y to check if changelog_trim_rec() is
able to trim a field in the middle of the record.

Fixes: a98690be90 ("LU-5862 changelog: Proper record remapping")
Test-Parameters: clientversion=2.15 testlist=sanity env=ONLY=160
Test-Parameters: serverversion=2.15 testlist=sanity env=ONLY=160,SANITY_EXCEPT=160a,HONOR_EXCEPT=y
Test-Parameters: clientversion=2.15 testlist=sanity-hsm env=ONLY=222
Test-Parameters: serverversion=2.15 testlist=sanity-hsm env=ONLY=222
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: I2a25e8131304e985187cb2c644822d1946455bf9
57454 master J !B ✓T ✗1R 0/2
LU-18461 layout: allow to be started from zero offset.
reviewing Alexey Lyashkov · PS11→PS38 since your -1 — your objection was dropped
70 unresolved XL +1309 −65
30d
PS11→PS38 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-5 RHEL 9.7 / x86_64 ran 7 tests. 1 tests failed: lustre-rsync-test. session
build #132562 SUCCESS · tests all Maloo sessions
no vote yet: Alexander Boyko, Andreas Dilger, Mikhail Pershin, Zhenyu Xu
patchsets:
+33 earlier PS1 12-16 PS2 12-17 PS3 12-27 PS4 01-10 PS5 02-18 PS6 02-19 PS7 02-21 PS8 02-27 PS9 02-28 PS10 03-18 PS11 05-23 PS12 08-22 PS13 09-09 PS14 09-22 PS15 10-15 PS16 10-17 PS17 10-22 PS18 11-03 PS19 12-18 PS20 12-18 PS21 12-25 PS22 01-13 PS23 01-27 PS24 02-20 PS25 02-28 PS26 03-02 PS27 03-02 PS28 04-24 PS29 04-27 PS30 05-19 PS31 05-21 PS32 05-26 PS33 06-02
PS34 08-20 PS35 08-25 PS36 09-14 PS37 09-23 PS38 09-29
your previous vote: -1 on PS11 (2025-07-17 17:15) — now at PS38
threads: 70 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS30 2026-05-21 21:31 Andreas Dilger COMMIT_MSG:10 — (typo) "Do object"?
Andreas Dilger PS30 · 2026-05-21 21:31
(typo) "Do object"?
reply PS34 2026-08-21 02:39 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) The subject has no grammatical subject - "allow to be started" leaves out what is being started. Something like "allow components to
Gerrit AI review for Lustre PS34 · 2026-08-21 02:39
(style) The subject has no grammatical subject - "allow to be started" leaves out what is being started. Something like "allow components to start at offset zero" reads better, and the trailing period is not usual for Lustre subjects.

More importantly, neither the subject nor the body names anything that this patch actually adds: `LOV_PATTERN_ZEROSTART`, `LLAPI_LAYOUT_ZEROSTART`, the `zerostart` layout type, or `lfs setstripe --zerostart`. That makes the change hard to find later with `git log --grep`.
reply PS34 2026-08-21 02:39 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "Do object" - DoM?
Gerrit AI review for Lustre PS34 · 2026-08-21 02:39
(typo) "Do object" - DoM?

This was raised on an earlier patchset and still reads the same way here.
reply PS34 2026-08-21 02:39 Gerrit AI review for Lustre COMMIT_MSG:19 — Several hunks are not accounted for by the description; could they be explained, or split out?
Gerrit AI review for Lustre PS34 · 2026-08-21 02:39
Several hunks are not accounted for by the description; could they be explained, or split out?

- osc_cache.c: the LASSERTF message gains `io %px`, which looks like debug instrumentation for this work rather than part of the feature.
- lfs.c `case 'C'`: the guard changes from `lsa_pattern == LLAPI_LAYOUT_MDT` to `(lsa_pattern & LLAPI_LAYOUT_RAID0) == 0`, a behaviour change to `-C|--overstripe-count` validation.
- lov_io.c `lov_io_layout_at()` and lov_offset.c `lov_stripe_offset()`: `return` converted to `RETURN()`.
- lov_offset.c: blank line after the SPDX tag removed.
- sanity-pfl.sh test_16b: two blank lines removed.
- lov_cl_internal.h: `lov_foreach_io_layout()` split into two macros.

It would also help to state the interop story here: `LOV_PATTERN_ZEROSTART` is a new on-disk/on-wire pattern bit, so a client older than this patch fails `lov_pattern_supported()` on such a layout and cannot open the file, and an older MDS rejects the setstripe. Is a version/feature gate expected, or is "both ends must be new" the intended contract?
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "Do object" -> "DoM object". This was raised on patchset 30 and is still here.
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(typo) "Do object" -> "DoM object". This was raised on patchset 30 and is still here.
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre COMMIT_MSG:19 — The body describes the motivation well but never names anything the patch adds, so this won't be findable later with `git log --grep`. Could
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
The body describes the motivation well but never names anything the patch adds, so this won't be findable later with `git log --grep`. Could it mention `--zerostart`, `LOV_PATTERN_ZEROSTART`/`LLAPI_LAYOUT_ZEROSTART` and `lsme_is_zerostart()` explicitly?

It also doesn't cover the largest kernel-side piece: the rework of `lov_io_iter_init()` that pulls the last stripe of the preceding component into a truncate so the KMS survives when a ZEROSTART component is truncated to its own start. That deserves a paragraph.

A few hunks are not explained at all and read as leftovers - should they be split out, or described?

- `lustre/osc/osc_cache.c`: the `osc_extent_find()` LASSERTF() gains the `io %px` argument; it looks like a debugging aid rather than part of the feature.
- `lustre/utils/lfs.c`: the `-C|--overstripe-count` check changes from `== LLAPI_LAYOUT_MDT` to `& LLAPI_LAYOUT_RAID0` and the message text changes. That is a user-visible behaviour change and isn't needed for `--zerostart` to work.
- `lustre/tests/sanity-dom.sh`: dropping the explicit `mkdir -p $MOUNT2` / `mount_client $MOUNT2` is unrelated to this feature (it is redundant with `MOUNT_2=yes` + `check_and_setup_lustre`, so it looks correct, just out of scope).
reply PS38 2026-10-05 11:26 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) "Do object" was pointed out on patch set 30 and is still here. Should it be "DoM object"?
Gerrit AI review for Lustre PS38 · 2026-10-05 11:26
(typo) "Do object" was pointed out on patch set 30 and is still here. Should it be "DoM object"?
reply PS38 2026-10-05 11:26 Gerrit AI review for Lustre COMMIT_MSG:13 — (style) The body explains the motivation but not what the patch actually changes, so it is hard to find later with git log. If the patch is
Gerrit AI review for Lustre PS38 · 2026-10-05 11:26
(style) The body explains the motivation but not what the patch actually changes, so it is hard to find later with git log. If the patch is refreshed, could it name:

- the new `LOV_PATTERN_ZEROSTART` / `LLAPI_LAYOUT_ZEROSTART` pattern bit
- the `lfs setstripe --zerostart` and `-L raid0,zerostart` options
- the truncate change in lov_io_iter_init(), which pulls the last stripe of the preceding component into a truncate landing on a ZEROSTART component start
- the new sanity-zero.sh suite

Also, the subject should not end with a period.
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre lfs-setstripe.1:189 — (minor) There is no `lfs join` command or `lfs-join.1` man page in the tree - the join-file feature was removed, as the commit message itsel
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(minor) There is no `lfs join` command or `lfs-join.1` man page in the tree - the join-file feature was removed, as the commit message itself notes. This cross-reference will be a dangling link; could the sentence just describe the property directly?
reply PS36 2026-09-15 22:37 Gerrit AI review for Lustre lfs-setstripe.1:219 — (typo) "below" - the `--zerostart` description is above this one in the page.
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(typo) "below" - the `--zerostart` description is above this one in the page.
reply PS37 2026-09-24 09:18 Gerrit AI review for Lustre lfs-setstripe.1:599 — (minor) EXAMPLES doesn't gain a `--zerostart` case. A short composite example, e.g. a DoM or plain first component followed by a zerostart o
Gerrit AI review for Lustre PS37 · 2026-09-24 09:18
(minor) EXAMPLES doesn't gain a `--zerostart` case. A short composite example, e.g. a DoM or plain first component followed by a zerostart one, would show how the option is meant to be combined - the option description alone leaves that to the reader.
reply PS38 2026-10-05 11:26 Gerrit AI review for Lustre lfs-setstripe.1:217 — (typo) "see --zerostart below": the --zerostart option is described above this point in the page.
Gerrit AI review for Lustre PS38 · 2026-10-05 11:26
(typo) "see --zerostart below": the --zerostart option is described above this point in the page.
owner Alexey Lyashkov · uploader Alexey Lyashkov · PS38 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-18461 layout: allow to be started from zero offset.

Traditional PFL objects have a hole at the start to accommodate the
Do object if it needs to be migrated. This is not always necessary,
however, as the hole can prevent the use of large files with a small
number of OST objects in the ldiskfs backend.

Introducing the ability to eliminate this hole at the beginning could
provide an opportunity for OST objects to be moved across components
and offsets, and allow for a greater number of OST objects to be
stored in larger files. Additionally, multiple files could be combined
into one, similar to the join file feature of the past, once
components are able to be relocated.

Test-Parameters: testlist=sanity-zero
Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Change-Id: I730c66c695a3ff718c78cb82dab878b4f720bf55
66775 master J !B ✓T ✓R -1/2−
LU-9639 ldlm: Add kernel doc style for LDLM (13)
reviewing Arshad Hussain · PS1→PS5 since your +1
needs rebase dwg 2 unresolved S +34 −12
36d
PS1→PS5 since your +1
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #130081 SUCCESS · tests all Maloo sessions
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 06-22 PS2 08-16 PS3 08-16 PS4 08-18 PS5 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-07-30 18:59) — now at PS5
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-08-24 13:18 Gerrit AI review for Lustre ldlm_cache_policy.c:178 — This isn't a bug, but since the patch is correcting the facts in this block: both criteria are documented as "exceeds", while the code uses
Gerrit AI review for Lustre PS5 · 2026-08-24 13:18
This isn't a bug, but since the patch is correcting the facts in this block: both criteria are documented as "exceeds", while the code uses >= for each of them.

    return (ns->ns_nr_priv >= (LDLM_DEFAULT_LRU_SIZE >> 3)) &&
           (ns->ns_nr_priv >=
            (u64)ns->ns_nr_unused * ns->ns_lfru_priv_ratio_limit_256 >> 8);

At exactly 1/8 of the default LRU size, or exactly at the ratio, this returns true. Would "reaches" or "is at least" read more accurately?
reply PS4 2026-08-18 14:27 Gerrit AI review for Lustre ldlm_plain.c:122 — (defect) These two descriptions look exchanged with respect to the body. LDLM_ITER_STOP is what the two conflict branches return, and LDLM_I
Gerrit AI review for Lustre PS4 · 2026-08-18 14:27
(defect) These two descriptions look exchanged with respect to the body. LDLM_ITER_STOP is what the two conflict branches return, and LDLM_ITER_CONTINUE is what is returned once the lock has been granted:

    rc = ldlm_plain_compat_queue(&res->lr_granted, lock, NULL);
    if (!rc)
            RETURN(LDLM_ITER_STOP);
    rc = ldlm_plain_compat_queue(&res->lr_waiting, lock, NULL);
    if (!rc)
            RETURN(LDLM_ITER_STOP);

    ldlm_resource_unlink_lock(lock);
    ldlm_grant_lock(lock, grant_work);
    RETURN(LDLM_ITER_CONTINUE);

ldlm_plain_compat_queue() returns 0 for "conflicting locks found", as its own Return: block a few lines up in this patch says, so !rc is the conflict case.

Should the two bullets swap places?
owner Arshad Hussain · uploader Oleg Drokin · PS5 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (13)

Convert the function comments in ldlm_plain.c and
ldlm_cache_policy.c to kernel doc style, correcting two stale
facts they state: ldlm_process_plain_lock() is called with the
resource lock held, not the namespace lock, and the
ldlm_lfru_priv_too_many() ratio limit defaults to 30%, not 1/3.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I30187b94aee65fae6bd5ddbfa91e807ea1350d7f
65426 master J ✓B ✓T ✓R -1/2−
LU-20154 ldiskfs: fix credit calculation for xattr
reviewing Alexey Lyashkov · PS9→PS12 since your -1 — your objection was dropped
18 unresolved XL +1330 −87
99d
9 optional test failure(s) — informational
build #127257 SUCCESS · tests all Maloo sessions
reviews: Alex Zhuravlev -1 2026-07-07 06:23
no vote yet: Qian Yingjin, Alexander Zarochentsev, Andrew Perepechko, Oleg Drokin
patchsets:
+7 earlier PS1 04-20 PS2 04-20 Janitor Bot PS3 04-21 PS4 04-21 Janitor Bot PS5 04-21 PS6 04-21 Janitor Bot PS7 04-22
PS8 04-22 PS9 04-24 PS10 05-31 PS11 07-07 Jian Yu PS12 07-07 Jian Yu
your previous vote: -1 on PS9 (2026-05-29 01:06) — now at PS12
threads: 18 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS11 2026-07-07 02:16 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldiskfs/xattr.c:
Misc Code Checks Robot (Gatekeeper helper) PS11 · 2026-07-07 02:16
ldiskfs/xattr.c:
 warning: sparse:no newline at end of file
reply PS12 2026-07-07 02:19 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldiskfs/xattr.c:
Misc Code Checks Robot (Gatekeeper helper) PS12 · 2026-07-07 02:19
ldiskfs/xattr.c:
 warning: sparse:no newline at end of file
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre COMMIT_MSG:9 — The body only describes the ldiskfs credit reuse. Several hunks aren't accounted for:
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
The body only describes the ldiskfs credit reuse. Several hunks aren't accounted for:

- `lnet/libcfs/tracefile.c` drops `static` from `cfs_trace_data` - nothing else in the patch touches libcfs. Is this a debugging leftover that should be dropped?
- `osd_trans_dump_creds()` changes from `struct thandle *` to `struct osd_thandle *`, touching four call sites. That's a standalone cleanup.
- The ldiskfs patches add `EXPORT_SYMBOL(ext4_xattr_ibody_get)` alongside the one that is actually needed.
- `osd_declare_attr_set()` stops declaring `OSD_OT_XATTR_SET` unconditionally and gates it on the LMA flags. That is a behaviour change worth a sentence of its own.

Also a few wording slips: "old code don't able to account" -> "the old code cannot account", "lets reuse" -> "let's reuse".
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre COMMIT_MSG:12 — (typo) The quoted subject doesn't match the referenced commit. `git log -1 --format=%s 278fa1fb23` gives:
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(typo) The quoted subject doesn't match the referenced commit. `git log -1 --format=%s 278fa1fb23` gives:

    LU-12652 ldiskfs: disable credits check in 4.18

The leading `35750: ` is the Gerrit change number, not part of the subject.
reply PS9 2026-05-12 08:22 Alexey Lyashkov patchset comment — I checked again with 5.14.0-570.62.1.el9_6.x86_64 and 5.14.0-611.35.1.el9_7.x86_64.
Oleg Drokin PS9 · 2026-05-11 02:33
I manually reverted rhel9.6/9.7 series so it points back at 5.14 patch again and the build is restored so I believe this patch is just broken.
Alexey Lyashkov PS9 · 2026-05-12 07:58
It looks like RHEL9.6/9.7 kernel have a changes in ext4 version. sometimes it have ext4/crypto.c - sometimes not. I have tested with lastes 9.6/9.7 version but our code it looks not a last.
Alexey Lyashkov PS9 · 2026-05-12 08:22
I checked again with 5.14.0-570.62.1.el9_6.x86_64 and 5.14.0-611.35.1.el9_7.x86_64.
It looks you needs to update a kernel versions.
reply PS12 2026-07-13 11:00 Alex Zhuravlev ext4-xattr-disable-credits-check.patch:36 — this is
Alex Zhuravlev PS12 · 2026-07-07 06:23
ext4 never sets few EAs in a single transaction AFAIU. so it's unlikely this kind of change can make into vanilla kernel.
Alexey Lyashkov PS12 · 2026-07-10 08:44
sure. it's sets. example of this in the patch. You lost it ?
Alex Zhuravlev PS12 · 2026-07-13 11:00
sorry? how many EAs an user can set using clean ext4 in a single transaction?
Alex Zhuravlev PS12 · 2026-07-13 11:00
this is
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre ext4-xattr-disable-credits-check.patch:233 — (defect) This `Index:` header has no `---`/`+++` lines and no hunks - the crypto.c change is missing from this file (the linux-6.12 copy has
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(defect) This `Index:` header has no `---`/`+++` lines and no hunks - the crypto.c change is missing from this file (the linux-6.12 copy has it). This file also never patches `fs/ext4/super.c`.

`ext4_set_context()` lives in `fs/ext4/crypto.c` on 5.16+ and in `fs/ext4/super.c` before that, and in both it calls

    ext4_xattr_set_credits(inode, len, false, &credits)

while the xattr.h hunk above changes the prototype to 6 arguments. `ldiskfs/Makefile.in` copies every `@EXT4_SRC_DIR@/*.c` for patching and only filters `crypto.c` out of the object list when `CONFIG_FS_ENCRYPTION` is unset, so with encryption enabled this is `error: too few arguments to function 'ldiskfs_xattr_set_credits'`.

That breaks every series still pointing at this file - rhel9.1 through 9.5, sles15sp4/sp5, oe2203, the 5.15/5.19 ubuntu20 series, ubuntu24 -45/-100/-106, ubuntu26, and all of 6.1/6.6/6.7/6.10/6.11/6.12/6.18/7.0-ml.

This is the same breakage that was reported earlier on rhel9.6/9.7; switching those two series to the linux-6.12 copy moved the failure rather than fixing it.
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre ext4-xattr-disable-credits-check.patch:134 — (minor) `ext4_xattr_ibody_get` doesn't seem to have any caller outside ldiskfs - grepping the tree for `ldiskfs_xattr_ibody_get` finds nothi
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(minor) `ext4_xattr_ibody_get` doesn't seem to have any caller outside ldiskfs - grepping the tree for `ldiskfs_xattr_ibody_get` finds nothing. Is this export needed, or left over from an earlier version?
reply PS9 2026-05-11 02:31 Oleg Drokin ldiskfs-5.14-rhel9.6.series:34 — does not look like it actually applies to rhel9.6?
Oleg Drokin PS9 · 2026-05-11 02:31
does not look like it actually applies to rhel9.6?
reply PS9 2026-05-11 02:31 Oleg Drokin ldiskfs-5.14-rhel9.7.series:34 — I wonder if this also works?
Oleg Drokin PS9 · 2026-05-11 02:31
I wonder if this also works?
reply PS12 2026-07-28 09:44 Gerrit AI review for Lustre ldiskfs-6.8.0-90-ubuntu24.series:32 — (defect) Only `6.8.0-90` was moved to the linux-6.12 copy. `ldiskfs-6.8.0-45-ubuntu24.series`, `ldiskfs-6.8.0-100-ubuntu24.series` and `ldis
Gerrit AI review for Lustre PS12 · 2026-07-28 09:44
(defect) Only `6.8.0-90` was moved to the linux-6.12 copy. `ldiskfs-6.8.0-45-ubuntu24.series`, `ldiskfs-6.8.0-100-ubuntu24.series` and `ldiskfs-6.8.0-106-ubuntu24.series` still reference `linux-5.14/ext4-xattr-disable-credits-check.patch`, and those kernels have `fs/ext4/crypto.c`.

Same for the mainline series (6.6/6.12/6.18/7.0-ml) and 7.0.0-14-ubuntu26. Should the remaining series be switched too, or should the linux-5.14 copy be completed instead?
reply PS11 2026-07-07 02:16 Misc Code Checks Robot (Gatekeeper helper) tracefile.c:36 — warning: sparse:symbol 'cfs_trace_data' was not declared. Should it be static?
Misc Code Checks Robot (Gatekeeper helper) PS11 · 2026-07-07 02:16
warning: sparse:symbol 'cfs_trace_data' was not declared. Should it be static?
owner Alexey Lyashkov · uploader Jian Yu · PS12 uploaded 120d ago · NEW · open in Gerrit ↗
commit message
LU-20154 ldiskfs: fix credit calculation for xattr

old code don't able to account an EA inode credits,
lets reuse an ldiskfs code to avoid this.

Fixes: 278fa1fb23 ("35750: LU-12652 ldiskfs: disable credits check in 4.18")

HPe-bug-id: LUS-12937
Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Change-Id: Id7eca1783dd4f6848f8d235b6159b8d34eb398db
65797 b2_15 J ✗1B ✓T ✓R +2/1
LU-20071 kernel: new kernel [RHEL 9.8 5.14.0-687.13.1.el9_8]
reviewing Jian Yu · PS5→PS7 since your +1
stalled 116d S +34 −1
116d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity1@ldiskfs+DNE:test_27Tseen in 5 other reviews
1 optional test failure(s) — informational
build #126292 SUCCESS · tests all Maloo sessions
reviews: Alex Deiter +1 2026-06-16 19:27 · Shaun Tancheff +1 2026-06-29 12:39
no vote yet: Andreas Dilger
patchsets:
+2 earlier PS1 05-11 PS2 05-12
PS3 05-13 PS4 05-13 PS5 05-28 PS6 06-05 PS7 06-09
your previous vote: +1 on PS5 (2026-05-28 17:06) — now at PS7
owner Jian Yu · uploader Jian Yu · PS7 uploaded 147d ago · NEW · backport · open in Gerrit ↗
commit message
LU-20071 kernel: new kernel [RHEL 9.8 5.14.0-687.13.1.el9_8]

This patch makes changes to support new RHEL 9.8 release
for Lustre client.

Linux commit v6.15-13744-g41cb08555c41
  treewide, timers: Rename from_timer() to timer_container_of()
Provide timer_container_of for older kernels when is not defined.

Lustre-change: https://review.whamcloud.com/65431
Lustre-commit: TBD (from a5288b6979f0c8cb1dd53e513b245035525e0f5c)

Test-Parameters: trivial fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.8 serverdistro=el8.10 testlist=sanity

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el9.8 serverdistro=el8.10 testlist=sanity

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.8 serverdistro=el8.10 testgroup=full-dne-part-1

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.8 serverdistro=el8.10 testgroup=full-dne-part-2

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.8 serverdistro=el8.10 testgroup=full-dne-part-3

Change-Id: I550b9425a6a4868a9f8f817d3e1e74068840df51
Signed-off-by: Jian Yu <yujian@whamcloud.com>
Signed-off-by: Fredrik Nyström <freny@nsc.liu.se>
64244 master J ✗1B ✓T ✗2R 0/2
LU-19926 ldlm: release stats sysfs entries are removed
reviewing Alex Zhuravlev · PS2→PS5 since your +1
1 unique failure stalled 144d 2 unresolved XS +2 −3
144d
PS2→PS5 since your +1
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity3@zfs:test_271fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
build #126453 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin
patchsets: PS1 02-26 PS2 03-30 PS3 05-28 PS4 06-08 PS5 06-12
your previous vote: +1 on PS2 (2026-04-20 17:35) — now at PS5
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-05-05 19:26 Oleg Drokin ldlm_resource.c:773 — ugh, why was it here when it registers in ldlm_namespace_sysfs_register?
Oleg Drokin PS2 · 2026-05-05 19:26
ugh, why was it here when it registers in ldlm_namespace_sysfs_register?
reply PS2 2026-05-05 19:26 Oleg Drokin ldlm_resource.c:1317 — should we just move this two lines up instead?
Oleg Drokin PS2 · 2026-05-05 19:26
should we just move this two lines up instead?
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS5 uploaded 145d ago · NEW · open in Gerrit ↗
commit message
LU-19926 ldlm: release stats sysfs entries are removed

otherwise we can hit a panic/gfp when umount races with
lctl get_param:

186546:0:(lprocfs_status.c:1689:lprocfs_stats_collector())
	ASSERTION( stats ) failed:
186546:0:(lprocfs_status.c:1689:lprocfs_stats_collector())
	LBUG

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I74558c077cd5ccf962e01ce2c013bb6ea9a0754a
63361 master J ✗1B ✓T ✗0R -1/2−
LU-19323 lnet: add IPv6 support to lnet_selftest
reviewing Serguei Smirnov · PS4→PS6 since your -1 — your objection was dropped
needs rebase 1 unique failure stalled 177d 12 unresolved XL +2239 −574
177d
PS4→PS6 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
replay-dual@zfs+DNE:test_26seen in 17 other reviews
build #122607 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+1 earlier PS1 01-13
PS2 01-13 Janitor Bot PS3 01-13 PS4 02-25 PS5 03-04 PS6 03-16
your previous vote: -1 on PS4 (2026-02-25 20:06) — now at PS6
threads: 8 need your reply · 3 waiting on others · 1 own notes · 0 bot
reply PS6 2026-03-26 02:24 Andreas Dilger COMMIT_MSG:11 — (minor) this looks like an `sptlrpc` parameter. Also, version numbers never really explain what they are for. It would be better to name t
Andreas Dilger PS6 · 2026-03-26 02:24
(minor) this looks like an `sptlrpc` parameter.  Also, version numbers never really explain what they are for.  It would be better to name this something more clear like `lst_force_large_nid`.
reply PS6 2026-04-25 00:38 Serguei Smirnov COMMIT_MSG:11 — srpc_force_v2 is for disabling v1 on v2 hosts. If it is not used, there's "handshaking": v2 is able to initiate a session with v1 (ipv4) or
James Simmons PS6 · 2026-04-25 00:27
Yucky. Can't we do version handshaking instead. My next patch in this area will try the hand shaking approach.
Serguei Smirnov PS6 · 2026-04-25 00:38
srpc_force_v2 is for disabling v1 on v2 hosts. If it is not used, there's "handshaking": v2 is able to initiate a session with v1 (ipv4) or v2 (both ipv6 and ipv4), v1 is able to initiate an ipv4 session to v2 and v1.
reply PS6 2026-03-26 02:24 Andreas Dilger COMMIT_MSG:12 — Is there no mechanism that LNet (and LST) can use to automatically negotiate protocol feature support? If not, then this should be added as
Andreas Dilger PS6 · 2026-03-26 02:24
Is there no mechanism that LNet (and LST) can use to automatically negotiate protocol feature support?  If not, then this should be added as part of this compatibility-breaking change.

Or do I misread this, and the `srpc_force_v2` is only used to force the new large-NID functionality on systems that don't need it?
reply PS6 2026-04-23 21:41 Andreas Dilger COMMIT_MSG:15 — (defect) this should have `env=FORCE_LARGE_NID=true` to run IPv6 sessions?
Andreas Dilger PS6 · 2026-04-23 21:41
(defect) this should have `env=FORCE_LARGE_NID=true` to run IPv6 sessions?
reply PS3 2026-01-13 21:58 Andreas Dilger lnetst.h:72 — (minor) variable-sized `lnet_processid` should go after `nde_state`
Andreas Dilger PS3 · 2026-01-13 21:58
(minor) variable-sized `lnet_processid` should go after `nde_state`
reply PS3 2026-01-13 21:58 Andreas Dilger lnetst.h:123 — (minor) These should all be replaced with fixed-size types (e.g. `__u32`)
Andreas Dilger PS3 · 2026-01-13 21:58
(minor) These should all be replaced with fixed-size types (e.g. `__u32`)
reply PS3 2026-01-13 21:58 Andreas Dilger lnetst.h:301 — (minor) should remove pointers from UAPI structs, especially in the middle
Andreas Dilger PS3 · 2026-01-13 21:58
(minor) should remove pointers from UAPI structs, especially in the middle
note PS4 2026-02-25 20:02 James Simmons conrpc.c:39 — I thought I ported the SID handling to Netlink.
James Simmons PS4 · 2026-02-25 20:02
I thought I ported the SID handling to Netlink.
reply PS3 2026-01-13 21:58 Andreas Dilger module.c:73 — ??
Andreas Dilger PS3 · 2026-01-13 21:58
??
owner Serguei Smirnov · uploader Serguei Smirnov · PS6 uploaded 232d ago · NEW · open in Gerrit ↗
commit message
LU-19323 lnet: add IPv6 support to lnet_selftest

Adds IPv6 support to lnet_selftest.
Is backwardly-compatible to earlier versions of selftest.
Adds module parameter srpc_force_v2 which can optionally
force large-NID (v2) protocol on wire (breaks v1-compatibility)

Test-Parameters: fortestonly
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: I3879dc88f0c89ebbaa21adb9faca6782a855ee3a
53005 master J !B ✓T ✗3R -1/2−
LU-17266 mdt: purge objects via procfs
reviewing Alex Zhuravlev · PS57→PS62 since your -1 — your objection was dropped
needs rebase stalled 199d 3 unresolved M +124 −3
199d
PS57→PS62 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-5 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: lustre-rsync-test. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 2 tests failed: sanity-sec, sanity-lnet. session
5 optional test failure(s) — informational
build #117204 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger
patchsets:
+57 earlier PS1 11-06 PS2 11-07 PS3 11-07 PS4 11-07 PS5 11-07 PS6 11-07 PS7 11-07 PS8 11-08 PS9 11-08 PS10 11-14 PS11 11-17 PS12 01-06 PS13 01-10 PS14 01-19 PS15 01-22 PS16 01-24 PS17 01-24 PS18 02-27 PS19 02-27 PS20 02-27 PS21 03-11 PS22 03-12 PS23 03-22 PS24 04-09 PS25 04-12 PS26 04-15 PS27 04-25 PS28 04-30 PS29 06-21 PS30 07-27 PS31 08-11 PS32 08-22 PS33 09-09 PS34 09-09 PS35 10-09 PS36 10-20 PS37 10-30 PS38 11-20 PS39 11-29 PS40 12-04 PS41 12-11 PS42 12-19 PS43 12-24 PS44 12-25 PS45 01-23 PS46 02-14 PS47 03-03 PS48 03-13 PS49 04-11 PS50 04-18 PS51 04-28 PS52 05-11 PS53 05-22 PS54 05-22 PS55 05-22 PS56 06-12 PS57 06-16
PS58 09-05 PS59 09-10 PS60 09-15 PS61 09-19 PS62 10-07
your previous vote: -1 on PS57 (2025-06-16 14:25) — now at PS62
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS58 2025-09-09 14:21 Andreas Dilger lproc_llite.c:408 — (minor) Most parameters allow other values to be written to clear it, like "0", and not just "clear".
Andreas Dilger PS58 · 2025-09-09 14:21
(minor) Most parameters allow other values to be written to clear it, like "0", and not just "clear".
reply PS58 2025-09-09 14:21 Andreas Dilger mdt_lproc.c:491 — same
Andreas Dilger PS58 · 2025-09-09 14:21
same
reply PS58 2025-09-09 14:21 Andreas Dilger lproc_ofd.c:897 — ...
Andreas Dilger PS58 · 2025-09-09 14:21
...
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS62 uploaded 393d ago · NEW · open in Gerrit ↗
commit message
LU-17266 mdt: purge objects via procfs

sometimes it can be useful for testing to drop/reload lu objects.
lctl set_param mdt.*.site_stats=clear
lctl set_param ofd.*.site_stats=clear

it should be possible to replace total system cache drop
(echo 3 > /proc/sys/vm/drop_caches) with this lustre-only version.

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I9055be3b53d0af22758eac0acac8771e40c371f7
52875 master J ✗30B ✓T ✗11R 0/2
LU-8980 debug: redefine CDEBUG to use tracing
reviewing Timothy Day · PS1→PS7 since your -1 — your objection was dropped
30 unique failures stalled 243d 8 unresolved XL +643 −2491
243d
PS1→PS7 since your -1 — your objection was dropped
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_35aseen in 4 other reviews
conf-sanity2@ldiskfs+DNE:test_35bseen in 18 other reviews
conf-sanity2@ldiskfs+DNE:test_37seen in 18 other reviews
conf-sanity2@ldiskfs+DNE:test_38seen in 16 other reviews
conf-sanity2@ldiskfs+DNE:test_39seen in 28 other reviews
conf-sanity2@ldiskfs+DNE:test_40seen in 30 other reviews
conf-sanity2@ldiskfs+DNE:test_41aseen in 27 other reviews
conf-sanity2@zfs:test_35aseen in 4 other reviews
conf-sanity2@zfs:test_35bseen in 8 other reviews
conf-sanity2@zfs:test_38seen in 11 other reviews
conf-sanity2@zfs:test_39seen in 25 other reviews
conf-sanity2@zfs:test_40seen in 25 other reviews
conf-sanity2@zfs:test_41aseen in 12 other reviews
recovery-small@ldiskfs+DNE:test_10aNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
recovery-small@ldiskfs+DNE:test_24bseen in 4 other reviews
recovery-small@ldiskfs+DNE:test_106seen in 4 other reviews
recovery-small@ldiskfs+DNE:test_108NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@zfs:test_10aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
recovery-small@zfs:test_24bseen in 2 other reviews
recovery-small@zfs:test_106seen in 4 other reviews
replay-single@ldiskfs+DNE:test_65bseen in 6 other reviews
replay-single@zfs:test_65bseen in 6 other reviews
sanity2@ldiskfs+DNE:test_60fseen in 1 other review
sanity2@ldiskfs+DNE:test_170NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity2@ldiskfs+DNE:test_360NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity2@ldiskfs+DNE:test_401aNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity2@ldiskfs+DNE:test_818seen in 7 other reviews
sanity2@zfs:test_60fseen in 1 other review
sanity2@zfs:test_170seen in 1 other review
sanity2@zfs:test_401aNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: sanity. session
review-dne-part-3 RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. This build will be scored -1 since fortestonly was specified. session
review-dne-part-5 RHEL 9.3/x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-dne-part-6 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-single. session
review-dne-selinux-ssk-part-1 RHEL 8.9/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.9/x86_64 ran 5 tests. 1 tests failed: recovery-small. session
review-ldiskfs RHEL 8.9/x86_64, RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9/x86_64, SLES 15.5/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-zfs RHEL 8.9/x86_64 ran 8 tests. 1 tests failed: replay-single. session
3 optional test failure(s) — informational
build #105198 SUCCESS · tests all Maloo sessions
no vote yet: Yang Sheng, Alexey Lyashkov, Andreas Dilger, Neil Brown
patchsets:
+2 earlier PS1 10-28 PS2 11-01
PS3 06-03 PS4 06-03 PS5 06-04 PS6 06-04 PS7 06-05
your previous vote: -1 on PS1 (2023-10-28 20:53) — now at PS7
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2023-10-31 14:16 Timothy Day libcfs_debug.h:143 — I'm hoping to use the tracepoints to enable/disable subsystem logging. There's a tracepoint enabled macro I could use to restore this check.
Alexey Lyashkov PS1 · 2023-10-31 07:20
never kill a subsystem check. I will make developers work harder.
Timothy Day PS1 · 2023-10-31 14:16
I'm hoping to use the tracepoints to enable/disable subsystem logging. There's a tracepoint enabled macro I could use to restore this check.
reply PS1 2023-10-30 14:37 Timothy Day libcfs_debug.h:179 — Yes. This is super hack-y. There's definitely a better way to do this.
Andreas Dilger PS1 · 2023-10-30 06:09
Does this add 256 bytes of stack usage to every function that calls CDEBUG()?  That could be pretty bad in some call chains.
Timothy Day PS1 · 2023-10-30 14:37
Yes. This is super hack-y. There's definitely a better way to do this.
reply PS1 2023-10-31 14:16 Timothy Day libcfs_debug.h:182 — This entire __ltrace_printk() macro sucks. I need to rewrite it entirely. I have an idea that should make this macro much better.
Alexey Lyashkov PS1 · 2023-10-31 07:20
you are really want to kill a performance? I think yes.
Timothy Day PS1 · 2023-10-31 14:16
This entire __ltrace_printk() macro sucks. I need to rewrite it entirely. I have an idea that should make this macro much better.
reply PS1 2023-10-30 14:37 Timothy Day libcfs_debug.h:196 — I'll probably have to, since old kernels don't like '#include <linux/ratelimit_types.h>'. I was hoping that these macro would be simpler.
Andreas Dilger PS1 · 2023-10-30 06:09
There are tunable parameters for the CDEBUG rate limiting, why not use them here?
Timothy Day PS1 · 2023-10-30 14:37
I'll probably have to, since old kernels don't like '#include <linux/ratelimit_types.h>'. I was hoping that these macro would be simpler.
reply PS1 2023-10-31 04:01 Andreas Dilger libcfs_debug.h:220 — Sorry, I was thinking this was the no-op version of the actual libcfs_debug_msg() which had been removed. Carry on.
Andreas Dilger PS1 · 2023-10-30 06:09
This will also need to be fixed.
Timothy Day PS1 · 2023-10-30 14:37
I think this is fine? This is just redefining this function to be always false is debugging is disabled.
Andreas Dilger PS1 · 2023-10-31 04:01
Sorry, I was thinking this was the no-op version of the actual libcfs_debug_msg() which had been removed.  Carry on.
reply PS2 2023-11-01 04:31 Timothy Day libcfs_debug.h:136 — Doesn't build on aarch64 and ppc. Needs to go in debug.c probably. These are pretty huge functions anyway.
Timothy Day PS2 · 2023-11-01 04:31
Doesn't build on aarch64 and ppc. Needs to go in debug.c probably. These are pretty huge functions anyway.
reply PS2 2023-11-01 04:31 Timothy Day libcfs_debug.h:167 — Same.
Timothy Day PS2 · 2023-11-01 04:31
Same.
reply PS2 2023-11-01 04:31 Timothy Day libcfs_debug.h:196 — Same.
Timothy Day PS2 · 2023-11-01 04:31
Same.
owner Timothy Day · uploader Timothy Day · PS7 uploaded 882d ago · NEW · open in Gerrit ↗
commit message
LU-8980 debug: redefine CDEBUG to use tracing

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TODO:
1) Look at debug upcalls
2) Test/verify/update userspace helpers
3) Clean up more code
4) Validate LBUG, LASSERT
5) Write kernel doc comments for everything
6) Make sure various userspace settings actually
   work
7) Fix CDEBUG_LIMIT/CDEBUG_LIMIT_LOC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The custom Lustre debugging infrastruction should be
refactored to use existing kernel debugging infrastructure.
We should aim to:

1) Improve the current developer experience: Writing code
   for Lustre shouldn't be made harder. Existing userspace
   debugging tools should still work and should be improved.
2) Maintain or improve performance: Lustre is a high
   performance filesystem, not a low performance one.
3) Significantly reduce divergence with upstream: The custom
   Lustre debugging must go. The code in libcfs and various
   Lustre subsystem must be refactored.

The first step towards that is pushing all debug message into
the trace log. This will allow use to retain the features of
current Lustre debugging while significantly reducing the need
for custom code.

This patch removes old Lustre debugging code at the same time.
Also, it implements the minimum userspace code needed to
make Lustre debugging tools still function.

Test-Parameters: fortestonly
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I8004049eb97a3fdc9a5725aa8402355107494950
43861 master J !B ✓T ✗1R 0/2
LU-14717 osd-ldiskfs: set readcache_max_filesize properly
reviewing Qian Yingjin · PS1→PS2 since your -1 — your objection was dropped
stalled 372d XS +5 −0
372d
PS1→PS2 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 crashed RHEL 8.8/x86_64 ran 6 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
2 optional test failure(s) — informational
build #98522 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Andreas Dilger, Li Xi
your previous vote: -1 on PS1 (2021-05-29 14:58) — now at PS2
owner Qian Yingjin · uploader Andreas Dilger · PS2 uploaded 1145d ago · NEW · open in Gerrit ↗
commit message
LU-14717 osd-ldiskfs: set readcache_max_filesize properly

When set readcache_max_filesize with a negative value from the
proc/sysfs interface, we should set it with maximal value
OSD_MAX_CACHE_SIZE.

Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: If5d41211b2b1016a70f470f3242a17f8d5c9d3b8
33126 master J !B ✓T ✗1R 0/2
LU-11234 lod: add data placement policy (DPP) for OST pools
reviewing Teddy Zheng · PS16→PS18 since your -1 — your objection was dropped
stalled 456d XL +1743 −1123
456d
PS16→PS18 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
1 optional test failure(s) — informational
build #12017 SUCCESS
no vote yet: Qian Yingjin, Andreas Dilger, Oleg Drokin, Li Xi
your previous vote: -1 on PS16 (2019-11-13 15:13) — now at PS18
owner Teddy Zheng · uploader Teddy Zheng · PS18 uploaded 2453d ago · NEW · open in Gerrit ↗
commit message
LU-11234 lod: add data placement policy (DPP) for OST pools

This patch provides a mechanism to place files into different pools according
to filename, jobid, fsuid, fsgid, projid and client nid. filename and jobid
support the qualifier '*'. Fsuid, fsgid, projid and client nid support range
expression. This feature is useful when Lustre is built up with different type
of devices, such as OSTs composed of SSDs and disks. To use this feature, the
same type of OSTs firstly make up one pool and DPP rules are added to
the system. Then, when handling file creation, MDT checks the operation
according to the predefined DPP rules, and put the file's object(s) into the
corresponding pool.

The usage of the rule is similar to NRS TBF. Commands for the rule are like:

Add a rule named "rule_sourcecode" according to which filename matching "*.c"
or "*.h" will be put into the pool named "pool0"
	lctl set_param lod.*.dpp=\
		"add rule_sourcecode pool={pool0} fname={*.h *.c}"

Add a rule named "rule_vip_users" according to which files with uid = 500 or
uid = 100 will be put into the pool named "pool1"
	lctl set_param lod.*.dpp=\
		"add rule_vip_users pool={pool1} uid={500 1000}"

Add a rule named "rule_vip_groups" according to which files with gid = 500 or
gid = 1000 will be put into the pool named "pool2"
	lctl set_param lod.*.dpp=\
		"add rule_vip_groups pool={pool2} gid={500 1000}"

Add a rule named "rule1" according to which files with projid between 500 and
600 or between 800 and 1000 will be put into the pool named "pool2"
	lctl set_param lod.*.dpp=\
		"add rule1 pool={pool2} projid={500-600 800-1000}"

Add a rule named "vip_client" according to which files creation from client
with nid of 10.0.0.200@tcp will be put into the pool named "pool3"
	lctl set_param lod.*.dpp=\
		"add vip_client pool={pool3} nid={10.0.0.200@tcp}"

It also supports complex rules. The following command will add a rule which
will put files that match any condition of 1) its uid is 500 and gid is 1000,
or 2) it has a suffix of ".h" or ".c" into the pool named "pool4"
	lctl set_param lod.*.dpp=\
		"add rule2 pool={pool4} uid={500}&gid={1000},fname={*.c *.h}"

Delete a rule named "rule1"
	lctl set_param lod.*.dpp="del rule1"

This patch also combines the command parse functions that are shared with NRS TBF
and pcc codes.

Change-Id: Ie4876a78adcc561f79005817433a7bbdf5fbc65b
Signed-off-by: Teddy Zheng <teddy@ddn.com>
Signed-off-by: Li Xi <lixi@ddn.com>
34603 master J –B ✓T –R 0/2
LU-10026: Configuration for compression support and lz4 module backport
reviewing Anna Fuchs · PS1→PS7 since your -1 — your objection was dropped
stalled 456d XL +2713 −2
456d
build #11484 SUCCESS
no vote yet: Patrick Farrell, Neil Brown, Sebastien Buisson, Andreas Dilger
your previous vote: -1 on PS1 (2019-04-05 17:31) — now at PS7
owner Anna Fuchs · uploader Anna Fuchs · PS7 uploaded 2473d ago · NEW · open in Gerrit ↗
commit message
LU-10026: Configuration for compression support and lz4 module backport

This patch adds build system changes for compression:
- If lz4 is not available in the kernel (< 3.11), we build a private module for it.
- Always build compression module except when ldiskfs is enabled.
- An option cl_compression, settable via lctl, enables or disables compression.

Change-Id: I7f843ed7ca822a3f3246bd5c3e4ccb6e6f0ec90f
Test-Parameters: forbuildonly, fstype=zfs
Signed-off-by: Anna Fuchs <anna.fuchs@informatik.uni-hamburg.de>
35648 master J ✓B ✓T ✓R -1/2−
LU-11380 utils: split llapi_fid2path() in three functions
reviewing Andreas Dilger · PS11→PS23 since your -1 — your objection was dropped
stalled 456d L +359 −184
456d
1 optional test failure(s) — informational
build #13229 SUCCESS
reviews: Quentin Bouget -1 2020-04-08 00:30
no vote yet: Qian Yingjin, Olaf Faaland
your previous vote: -1 on PS11 (2020-01-27 16:01) — now at PS23
owner Andreas Dilger · uploader Andreas Dilger · PS23 uploaded 2401d ago · NEW · open in Gerrit ↗
commit message
LU-11380 utils: split llapi_fid2path() in three functions

Split llapi_fid2path() into separate llapi_lufid2path() to avoid
hoop jumping in the next patch that adds llapi_lufid2parent().

Add helper llapi_fsname_open() to open a descriptor on a filesystem
by fsname or directory for llapi_lufid2path() and other functions.
Use it in "lfs fid2path" to fix bug when passed a non-mount directory.

Add ability to run a single subtest of llapi_fid_test with the "-o"
option, or to exclude a single test with "-e" to speed up debugging.

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I05abfaf888a5474d62feebab4e8db543b93ebbe5
38151 master J ✗21B ✓T ✗15R 0/2
LU-13419 osc: Improve speed of enter_cache_try
reviewing Patrick Farrell (personal) · PS9→PS11 since your +1
21 unique failures stalled 456d M +31 −23
456d
PS9→PS11 since your +1
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity1@ldiskfs+DNE:test_39jNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_64fseen in 37 other reviews
sanity2@ldiskfs+DNE:test_133cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_398gseen in 13 other reviews
sanity1@zfs:test_42eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_45seen in 4 other reviews
sanity-benchmark@ldiskfs+DNE:test_fsxseen in 17 other reviews
sanity-benchmark@ldiskfs+DNE:test_fsx_partial_punchseen in 8 other reviews
sanity-dom@ldiskfs+DNE:test_fsxseen in 7 other reviews
sanity-dom@zfs:test_fsxseen in 7 other reviews
sanity-dom@zfs:test_42eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-dom@zfs:test_4NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-flr@ldiskfs+DNE:test_70aseen in 63 other reviews
sanity-flr@zfs:test_70aseen in 53 other reviews
sanity-hsm@zfs:test_3NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanityn@ldiskfs+DNE:test_16kNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanityn@ldiskfs+DNE:test_18seen in 1 other review
sanityn@zfs:test_16aseen in 3 other reviews
sanityn@zfs:test_16bseen in 3 other reviews
sanityn@zfs:test_16kNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanityn@zfs:test_18seen in 1 other review
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.3 / x86_64 ran 4 tests. 1 tests failed: sanity. session
review-dne-part-4 RHEL 9.3 / x86_64 ran 9 tests. 2 tests failed: sanity-flr, sanity-dom. session
review-dne-part-5 RHEL 9.3 / x86_64 ran 6 tests. 2 tests failed: sanityn, lustre-rsync-test. session
review-dne-part-6 RHEL 9.3 / x86_64 ran 6 tests. 1 tests failed: replay-single. session
review-dne-selinux-ssk-part-1 RHEL 8.9 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 crashed RHEL 8.9 / x86_64 ran 6 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 RHEL 8.9 / x86_64 ran 9 tests. 1 tests failed: sanity-dom. session
review-dne-zfs-part-5 RHEL 8.9 / x86_64 ran 6 tests. 2 tests failed: sanityn, lustre-rsync-test. session
review-dne-zfs-part-6 RHEL 8.9 / x86_64 ran 6 tests. 1 tests failed: replay-single. session
review-dne-zfs-part-7 RHEL 8.9 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-ldiskfs RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9 / x86_64, RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-zfs RHEL 8.9 / x86_64 ran 10 tests. 2 tests failed: replay-single, sanity-flr. session
18 optional test failure(s) — informational
build #108929 SUCCESS · tests all Maloo sessions
no vote yet: Wang Shilong, Qian Yingjin, Shuichi Ihara, Neil Brown, Li Dongyang, Andreas Dilger, Patrick Farrell
your previous vote: +1 on PS9 (2020-04-13 23:15) — now at PS11
owner Patrick Farrell (personal) · uploader Patrick Farrell · PS11 uploaded 722d ago · NEW · open in Gerrit ↗
commit message
LU-13419 osc: Improve speed of enter_cache_try

When doing writes to many files, one bottleneck on a client
currently seems to be the grant code, specifically
spinning in the lock around:
osc_enter_cache_try

The contention is *just* on osc_enter_cache_try, so there's
no obvious way to refactor the lock, etc.  Instead, we can
look at where time is going in the function.

Two things that stand out:
obd_dirty_pages is an atomic, and expensive:
In my perf tracing, the add_return to this is 50% of the
time in this function.

This can be replaced with a percpu_counter.

These benchmark #s are with the earlier version of the
patch, which mistakenly replaced the atomic with a bare
unsigned long.  I'm not currently able to benchmark the
percpu_counter, but it should be similar.

mpirun -np 36 $IOR -o $LUSTRE -w -t 1M -b 2G -i 1 -F

That's 36 processes on one client, writing to separate
files.

Before patch:
5942 MiB/s
After patch:
14950 MiB/s

Looking in perf, the change is huge:
I go from spending 60% of the time in osc_enter_cache_try
to around 30%, but that's while moving 2.3x the amount of
data per second.

Signed-off-by: Patrick Farrell <paf0187@gmail.com>
Change-Id: If5a69b906c6b56786e6a06dccc723781591419e8
40257 master J ✓B ✓T ✓R -1/2−
LU-10973 lnet: Support autotest integration
reviewing Amir Shehata · PS12→PS18 since your +1
stalled 456d XS +1 −0
456d
build #81780 SUCCESS · tests all Maloo sessions
reviews: Serguei Smirnov -1 2021-07-13 21:08
no vote yet: Charlie Olmstead
your previous vote: +1 on PS12 (2020-12-05 16:40) — now at PS18
owner Amir Shehata · uploader Amir Shehata · PS18 uploaded 1945d ago · NEW · open in Gerrit ↗
commit message
LU-10973 lnet: Support autotest integration

Add the following features for better autotest
integration:
1. Print progress lines to a file to allow autotest to monitor
   progress. Make the path to the file configurable.
2. Split the results into suites for more user friendly
   display in maloo
3. Store the configuration file in the LUTF config to allow
   the LUTF to use the environment variables
4. Allow running multiple suites from the auster command line
   ex: --suite dlc,dynamic-nids
5. Allow running LUTF from build directory

Test-Parameters: trivial
Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I9c1877768d885d975f4065f4930eba2fa8a11f94
45029 master J !B ✓T ✗5R 0/2
LU-15030 osp: add debugfs for sync progress
reviewing Hongchao Zhang · PS2→PS6 since your -1 — your objection was dropped
stalled 456d S +31 −0
456d
PS2→PS6 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
failed enforced testplatformdetail
review-dne-part-2 CentOS 8.3/x86_64 ran 7 tests. 2 tests failed: runtests, replay-dual. session
review-dne-part-4 CentOS 8.3/x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-part-5 CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanityn. session
review-dne-zfs-part-4 CentOS 8.3/x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-zfs CentOS 8.3/x86_64 ran 8 tests. 1 tests failed: sanity-quota. session
build #83618 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+1 earlier PS1 09-23
PS2 09-23 PS3 09-30 PS4 10-11 PS5 10-13 PS6 10-14
your previous vote: -1 on PS2 (2021-09-24 14:33) — now at PS6
owner Hongchao Zhang · uploader Hongchao Zhang · PS6 uploaded 1847d ago · NEW · open in Gerrit ↗
commit message
LU-15030 osp: add debugfs for sync progress

During sync between MDT and OSTs, it could need much more time
if the load on OST is very high, it will be better to have some
some kind of debugfs interface to know the sync progress and make
sure the sync is moving forward.

Signed-off-by: Hongchao Zhanng <hongchao@whamcloud.com>
Change-Id: Id24f3a481c5d28b7dc9714a80905541c88cf0f5a
47820 master J ✗6B ✓T ✗9R ✗
LU-15979 llite: restore S_NOSEC in ll_update_inode()
reviewing Vladimir Saveliev · PS4→PS6 since your +1
CR -1 6 unique failures stalled 456d M +54 −8
456d
PS4→PS6 since your +1
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed; Vladimir Saveliev voted -1
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
lustre-rsync-test@ldiskfs+DNE:test_2cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
lustre-rsync-test@zfs:test_2cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-flr@ldiskfs+DNE:test_70NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-flr@zfs:test_70NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_51NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@zfs:test_51NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-2 RHEL 8.6/x86_64 ran 7 tests. 2 tests failed: sanity-sec, sanity-lfsck. session
review-dne-part-4 RHEL 8.6/x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-selinux-ssk-part-2 CentOS 8.5/x86_64 ran 5 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-1 CentOS 8.5/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 8.5/x86_64 ran 7 tests. 2 tests failed: sanity-sec, sanity-lfsck. session
review-dne-zfs-part-4 CentOS 8.5/x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-ldiskfs-arm RHEL 8.6/aarch64, RHEL 8.6/x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
review-ldiskfs-ubuntu CentOS 8.5/x86_64, Ubuntu 20.04/x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
review-zfs CentOS 8.5/x86_64 ran 8 tests. 2 tests failed: sanity-flr, sanity-quota. session
2 optional test failure(s) — informational
build #91858 SUCCESS · tests all Maloo sessions
reviews: Vladimir Saveliev -1 2023-01-25 14:55
no vote yet: Qian Yingjin, Andreas Dilger, Patrick Farrell
patchsets:
+1 earlier PS1 06-28
PS2 07-04 PS3 07-06 PS4 07-26 PS5 01-11 PS6 01-24
your previous vote: +1 on PS4 (2022-10-10 15:41) — now at PS6
owner Vladimir Saveliev · uploader Vladimir Saveliev · PS6 uploaded 1379d ago · NEW · open in Gerrit ↗
commit message
LU-15979 llite: restore S_NOSEC in ll_update_inode()

ll_update_inode() is to set S_NOSEC (if needed) after permission
update with help of inode_has_no_xattr() having inode->i_rwsem held.

Without that { creat(); fstat(); write(); } executes to eviction
favorable case:

cl_io_loop
  cl_io_lock                    <- LDLM lock is taken here
  cl_io_start
    vvp_io_write_start
    ...
      __generic_file_aio_write
        file_remove_privs
          security_inode_need_killpriv
          ...
            ll_xattr_get_common
            ...
              mdc_intent_lock   <- enqueue RPC is sent here

If enqueue rpc is delayed, the client may get evicted as not
cancelling lock taken in cl_io_lock.

ll_update_inode() is called without inode->i_rwsem locked for regular
file but one case:
  vfs_setxattr()
    inode_lock(inode);
    ..
    ll_xattr_set()
      ll_setstripe_ea()
        ll_lov_setstripe_ea_info()
          ll_intent_file_open()
	    ll_prep_inode()
	      ll_update_inode()
where ll_update_inode() is called with inode->i_rwsem locked.
In order to be able to detect this case MDS_OPEN_SETXATTR flag is added.

Test to illustrate the issue is added.

The fix does not help for not NOSEC files.
Uncommenting chmod command in the test makes it to fail with eviction.

Test-Parameters: testlist=replay-dual env=ONLY=34,ONLY_REPEAT=100
Change-Id: Ie9e32d03402027f47381edddbd5cb3fb75023d59
HPE-bug-id: LUS-10989
Signed-off-by: Vladimir Saveliev <vladimir.saveliev@hpe.com>
50958 master J ✓B ✓T ✗1R +1/2
LU-16560 utils: add test to crosscheck lfs find and statx btimes
reviewing Anjus George · PS5→PS6 since your +1
stalled 456d S +24 −0
456d
PS5→PS6 since your +1
blocked on the owner: enforced tests failed
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity. session
build #104662 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-05-08 16:41
patchsets:
+1 earlier PS1 05-11
PS2 04-17 PS3 04-18 PS4 04-19 Andreas Dilger PS5 04-19 Andreas Dilger PS6 05-08 Andreas Dilger
your previous vote: +1 on PS5 (2024-04-24 18:48) — now at PS6
owner Anjus George · uploader Andreas Dilger · PS6 uploaded 909d ago · NEW · open in Gerrit ↗
commit message
LU-16560 utils: add test to crosscheck lfs find and statx btimes

Added test 56eab that verifies if the lfs find -printf formatted
btimes (human readable and epoch) match with statx btimes.

Test-Parameters: trivial
Signed-off-by: Anjus George <georgea@ornl.gov>
Change-Id: I9c6201f8adfa100c9462722416f5deec1db70ccc
23552 master J –B ✓T ✗7R +0/2−
LU-8709 llite: implement parallel asynchronous readahead
reviewing Li Xi · PS10→PS14 since your -1 — your objection was dropped
needs rebase stalled 457d XL +1467 −1103
457d
PS10→PS14 since your -1 — your objection was dropped
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-hsm. session
review-dne-part-4 crashed CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-flr. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-hsm. session
review-ldiskfs CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-zfs crashed CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-flr. %% THIS TEST SESSION CRASHED %% session
2 optional test failure(s) — informational
build #60987 SUCCESS
reviews: Andreas Dilger +1 2019-01-15 06:51
no vote yet: Qian Yingjin, Jinshan Xiong, Zhenyu Xu, Patrick Farrell
your previous vote: -1 on PS10 (2018-12-26 15:11) — now at PS14
owner Li Xi · uploader Wang Shilong · PS14 uploaded 2860d ago · NEW · open in Gerrit ↗
commit message
LU-8709 llite: implement parallel asynchronous readahead

This patch proposes a new design of Lustre readahead framework,
parallel-readahead, which implements a similar algorithm like current
Linux kernel's on-demand readahead, but in a way that is more
optimized for the characteristics of Lustre, more extendable for
differet I/O patterns, and more adaptable to the high bandwidth of
Lustre since data could be prefetched in parallel by multiple
threads.

Like the on-demand readahead, the parallel-readahead maintains a
"readahead window" consisting of a portion of the file starting
with the application's last read. Pages inside the readahead window
are either already in the page cache, or being prefetched into the
page cache of the client. The window moves forward as the reading of
the application moves forward.

The parallel-readahead framework prefetches more agressively than
on-demand readahead using a large readahead window, since Lustre
usually has more overhead than local file systems.

The parallel-readahead can do real asynchronous prefetch in parallel
by multiple threads. The reason of this implement is that, if all
prefetching is done in the process of the application that issued
read() syscall, the overhead caused by logic of Lustre client side
would become the bottleneck.

The parallel-readahead framework provides an extendable I/O pattern
detection mechanism which currently has detection algorithms for both
sequential read and stride read.  And more pattern detection
algorithms and corresponding prefetching policies can be added into
the framework for other I/O patterns, including random read,
semisequential read, backward read, interleaved read, etc.

Todo:
make max_read_ahead_whole_mb really work

Signed-off-by: Li Xi <lixi@ddn.com>
Signed-off-by: Wang Shilong <wshilong@whamcloud.com>
Change-Id: Ida399b9d0b499ba3f6bd08d7bb4528132e8e98e4
41270 master J !B ✓T ✓R -1/2−
LU-14282 libcfs: refine use of locks when in softirq
reviewing Serguei Smirnov · PS1→PS2 since your +1
stalled 463d 1 unresolved XS +4 −2
463d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #101467 SUCCESS · tests all Maloo sessions
reviews: Frank Sehr +1 2024-01-20 00:28 · Neil Brown -1 2024-01-24 04:56 · Andreas Dilger -1 2024-01-20 17:58
no vote yet: Qian Yingjin, Yang Sheng, Brian Behlendorf
your previous vote: +1 on PS1 (2022-04-25 20:40) — now at PS2
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2024-01-24 04:56 Neil Brown tracefile.c:103 — I think the comment about cfs_trace_buf_idx_get() is relevant and important.
Andreas Dilger PS2 · 2024-01-20 17:58
(defect?) I'm not sure this is safe?  If tcd_type is one value on entry, but then the in_irq() or irqs_disabled() values change, then the lock/unlock methods will be different, which may e bad? I don't know that level of the kernel well. 

Why is the value from cfs_trace_buf_idx_get() not correct?  If the IRQ state can change from there to here, what is to prevent it changing again?

Often the IRQ state changing unexpectedly is because of stack overflow clobbering the task struct, but I don't know the situation here. 

The preferred solution IMHO is to get tcd_type correct from the start. Failing that, if we find IRQ state has changed in the middle, then tcd_type should be updated to ensure the unlock is the same as the lock. This might cause issues if the page gets put back into a different list, but that is something I think needs to be fixed anyway, see EX-8998 for details.
Neil Brown PS2 · 2024-01-24 04:56
I think the comment about cfs_trace_buf_idx_get() is relevant and important.
Changing cfs_trace_buf_idx_get() so that if irqs_disabled(), it selects CFS_TCS_TYPE_IRQ.
That should fix the problem a lot more cleanly.
owner Serguei Smirnov · uploader Serguei Smirnov · PS2 uploaded 1020d ago · NEW · open in Gerrit ↗
commit message
LU-14282 libcfs: refine use of locks when in softirq

Earlier versions of the kernel (before v4.15)
output a warning if detecting a use of spin_unlock_bh
while in softirq with irqs disabled. This can currently
happen when generating debug messages from softirq,
e.g. in kiblnd_conn_addref. Change cfs_trace
locking logic to use regular spin_lock in this case.

Test-Parameters: testlist=sanity
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: I3395fd26b151b14f6ba14ef6b3d39168ef70a1c5
45152 master J !B ✓T ✗1R 0/2
LU-15073 ptlrpc: An expired request isn't marked timedout
reviewing Andriy Skulysh · PS2→PS6 since your -1 — your objection was dropped
stalled 463d 2 unresolved S +28 −20
463d
PS2→PS6 since your -1 — your objection was dropped
blocked on the owner: enforced tests failed
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 crashed RHEL 9.3 / x86_64 ran 9 tests. 1 tests failed: sanity-lfsck. %% THIS TEST SESSION CRASHED %% session
2 optional test failure(s) — informational
build #109462 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Neil Brown, Vitaly Fertman, Alexander Boyko, Alex Zhuravlev
patchsets:
+1 earlier PS1 10-07
PS2 10-13 PS3 02-04 Shaun Tancheff PS4 02-05 Shaun Tancheff PS5 02-06 Shaun Tancheff PS6 12-08 Shaun Tancheff
your previous vote: -1 on PS2 (2021-10-21 13:56) — now at PS6
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2024-02-06 06:32 Shaun Tancheff client.c:2551 — Yes I think that should be fine.
Neil Brown PS3 · 2024-02-05 03:35
This (and also below) is a little odd.
If timeout is -1  - so nothing in set_requests lists, then timeout is 1.
If timeout is zero - all requests have expired - them timeout is 0.

It would make sense to me for those to both be the same.  Could we make it " < 0 ? 0 : timeout" ??
Shaun Tancheff PS3 · 2024-02-06 06:32
Yes I think that should be fine.
reply PS4 2024-02-06 06:32 Shaun Tancheff ptlrpcd.c:494 — Hmm. this seems to be a problem.
Shaun Tancheff PS4 · 2024-02-06 06:32
Hmm. this seems to be a problem.
owner Andriy Skulysh · uploader Shaun Tancheff · PS6 uploaded 696d ago · NEW · open in Gerrit ↗
commit message
LU-15073 ptlrpc: An expired request isn't marked timedout

New requests can be added to pc_set. It will receive wakups
and timeout can never occur.

Perform check for expired requests
on each round before ptlrpcd_check().

HPE-bug-id: LUS-8784
Signed-off-by: Andriy Skulysh <c17819@cray.com>
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I46f7ab1812601b1c3a78b62a41a578cdac568bd5
▶

Awaiting your review — CI green

(85)
69347 master J –B ✓T ✓R 0/2
LU-20853 build: Add systemd/systemd-dev to Build-Depends
reviewing Xiao Yang · CI green — awaiting your review
pw_shepherd 2 unresolved S +29 −6
9m
build #134715 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn, Andreas Dilger, Timothy Day, Jian Yu
patchsets: PS1 10-01 PS2 10-02 PS3 10-06 PS4 10-06 PS5 10-29
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-11-04 14:40 Timothy Day lustre-core.m4:4634 — I don't think there's much value in allowing systemd support to be disabled. Every distro that Lustre supports uses systemd and there isn't
Timothy Day PS5 · 2026-11-04 14:40
I don't think there's much value in allowing systemd support to be disabled. Every distro that Lustre supports uses systemd and there isn't any interest (that I've seen) to support non-systemd distros. We could simplify the code quite a bit if we assume systemd is always installed.
reply PS5 2026-11-04 08:16 Xiao Yang lustre-core.m4:4647 — Thanks, https://review.whamcloud.com/67385 reworks dkms-debs (indep-only build, no systemd handling), so this patch no longer needs to chang
Jian Yu PS5 · 2026-11-04 01:06
The configure script runs on every distro. Does the above warning message also apply to RHEL/Fedora?
Xiao Yang PS5 · 2026-11-04 08:16
Thanks, https://review.whamcloud.com/67385 reworks dkms-debs (indep-only build, no systemd handling), so this patch no longer needs to change Makefile.dkms-deb once 67385 lands. I'll wait for 67385 and then rebase this patch on top of it. The reworded configure warning will be included in the same update.
tags: pw_shepherd
owner Xiao Yang · uploader Xiao Yang · PS5 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-20853 build: Add systemd/systemd-dev to Build-Depends

Since systemd 253-2, systemd.pc has been moved to systemd-dev, so
without it configure can't find the unit dir and the deb packages
are built without the systemd unit files.

Add systemd-dev or systemd older than 253-2 to Build-Depends, and
recheck systemd.pc in debian/rules so that make debs/dkms-debs works
after installing systemd-dev without rerunning configure. Use the
nosystemd profile for --with-systemdsystemunitdir=no to skip both.
Also add a warning in configure as a reminder.

Test-Parameters: trivial
Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: Ib4c5ae76fc08fa0477d004b210b1f70533a36afb
70341 master J –B ✓T ✓R +1/2
LU-21099 build: pass WQ_PERCPU to per-CPU workqueues
reviewing John Grasso · CI green — awaiting your review
S +39 −5
5h
build #135260 SUCCESS · tests all Maloo sessions
reviews: Timothy Day +1 2026-11-03 02:10
no vote yet: Andreas Dilger
owner John Grasso · uploader John Grasso · PS1 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-21099 build: pass WQ_PERCPU to per-CPU workqueues

Linux 7.2 warns, with a stack trace, when alloc_workqueue() is given
neither WQ_PERCPU nor WQ_UNBOUND, then sets WQ_PERCPU itself:

  workqueue: cfs_rh is using neither WQ_PERCPU or WQ_UNBOUND.
  Setting WQ_PERCPU.
  WARNING: kernel/workqueue.c:5851 at __alloc_workqueue+0x468/0x4d0

This fires on every obdclass load, and panics hosts running with
panic_on_warn.

Pass WQ_PERCPU explicitly to the cfs_rh, kfilnd_wq, gss_cleanup_wq
and osd-ldiskfs integrityd workqueues, which were already per-CPU by
default, so behaviour is unchanged. Add a configure check for
WQ_PERCPU and define it as 0 on older kernels.

Test-Parameters: trivial
Signed-off-by: John Grasso <johgras@amazon.com>
Assisted-by: Claude:claude-opus-5-5
Change-Id: I276820b68efeef0053b2c475fd795031aa1182f9
70284 master J –B ✓T ✓R 0/2
LU-20984 obdclass: check Netlink request fits in the message
reviewing Oleg Drokin · CI green — awaiting your review
2 unresolved S +8 −4
5h
build #135244 SUCCESS · tests all Maloo sessions
patchsets: PS1 10-30 PS2 11-02
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-31 22:09 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) 86ba46c24430 walked the request with nla_for_each_attr(dev, params, msg_len, rem), which is bounded by the message length, so the ov
Gerrit AI review for Lustre PS1 · 2026-10-31 22:09
(minor) 86ba46c24430 walked the request with nla_for_each_attr(dev, params, msg_len, rem), which is bounded by the message length, so the over-read was not in that commit. The unchecked nla_for_each_nested(dev, params, rem) walk in lustre_device_list_start() came from a later commit:

    Fixes: 6fab1fe4a5c5 ("LU-9680 lnet: handle multi-rail setups")

Should this tag be replaced with that one?
reply PS1 2026-10-31 22:09 Gerrit AI review for Lustre kernelcomm.c:115 — (minor) rc is still 0 here, so a request that fails the new nla_ok() check is accepted. In lustre_device_list_start() gdl_target stays NULL
Gerrit AI review for Lustre PS1 · 2026-10-31 22:09
(minor) rc is still 0 here, so a request that fails the new nla_ok() check is accepted. In lustre_device_list_start() gdl_target stays NULL and the dump returns every device instead of an error. lustre_stats_start() has the same GOTO(report_err, rc) and returns an empty dump. lustre_targets_start() and lustre_stats_cmd() return -EINVAL for the same check, and so do the LNet handlers in the companion patch.

The rc = 0 dates back to the existing type check, so this is pre-existing. Still, if the patch is refreshed, consider GOTO(report_err, rc = -EINVAL) here and in lustre_stats_start(), so a truncated request is rejected rather than treated as having no filter.
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-20984 obdclass: check Netlink request fits in the message

The lustre Netlink family's start and command handlers walk the
nested attributes of a request using the length stored in its
first attribute header, which was never compared with the length
of the message received, so a malformed request could make the
parser read past the end of the message.

Check the first attribute with nla_ok() against the message length
before walking it.

Test-Parameters: trivial
Fixes: 86ba46c24430 ("LU-9680 obdclass: user netlink to collect devices information")
Fixes: 3c9ab551b322 ("LU-11850 obd: support target_obd using Netlink")
Fixes: 5803284ac3a5 ("LU-11850 obd: use netlink to get lustre stats")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I9e8ec62f46e7881bb5492effc651390b06586568
69664 master J –B ✓T ✓R 0/2
LU-20950 lnet: reject fault commands before LNet is up
reviewing Chris Horn · CI green — awaiting your review
CI@PS1 2 unresolved S +29 −0
10h
build #133588 SUCCESS · tests all Maloo sessions
no vote yet: Manish Regmi, Xinxia Qu
patchsets: PS1 10-13 PS2 10-13
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-10-29 09:08 Xinxia Qu patchset comment — (Suggestion) Looks like `lnetctl fault drop/delay show` has a similar issue: `lnet_fault_show_start()` calls `lnet_drop_rule_collect()`/`lne
Xinxia Qu PS2 · 2026-10-29 09:08
(Suggestion) Looks like `lnetctl fault drop/delay show` has a similar issue: `lnet_fault_show_start()` calls `lnet_drop_rule_collect()`/`lnet_delay_rule_collect()`, which may access the uninitialized lists `ln_drop_rules`/`ln_delay_rules`. Perhaps we should fix it in this patch as well. Thanks!
reply PS2 2026-10-29 09:08 Xinxia Qu api-ni.c:10208 — (suggestion) Hi, is it necessary to change the condition to `the_lnet.ln_state != LNET_STATE_RUNNING`? Noticed that `lnet_peer_ni_show_start
Xinxia Qu PS2 · 2026-10-29 09:08
(suggestion) Hi, is it necessary to change the condition to `the_lnet.ln_state != LNET_STATE_RUNNING`? Noticed that `lnet_peer_ni_show_start()` has similar defensive code.
build/test results are from PS1 — PS2…PS2 changed only the commit message (votes copied, CI not re-run)
owner Chris Horn · uploader Chris Horn · PS2 uploaded 21d ago · NEW · open in Gerrit ↗
commit message
LU-20950 lnet: reject fault commands before LNet is up

Load the lnet module. Before "lnetctl lnet configure", run any
"lnetctl fault" add or del command. The node oopses in
lnet_drop_rule_add() or lnet_delay_rule_del(). The oopsed thread
holds delay_dd.dd_mutex, so unconfigure then hangs.

The netlink handler lnet_fault_cmd() calls the rule functions
directly. Only LNetNIInit() initializes the rule list heads. The
ioctl path calls LNetNIInit() first, so it does not oops.

Take ln_api_mutex in lnet_fault_cmd() and return -ENETDOWN when
ln_refcount is 0. This matches the other netlink handlers. Add
sanity-lnet test 637 to run each fault command before configure.

Test-Parameters: trivial
Signed-off-by: Chris Horn <chorn@ddn.com>
Assisted-by: ClaudeCode:claude-sonnet-5-5
Change-Id: Ib0e0111dbd334a16f198ee7f3519b729b8df7536
70149 master J –B ✓T ✓R +2/2
LU-21062 libcfs: Add BUG() after calling lbug_with_loc()
reviewing Xiao Yang · CI green — awaiting your review
XS +3 −5
11h
build #134750 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-11-02 16:47 · Timothy Day +1 2026-10-29 15:23
no vote yet: Shaun Tancheff, Jian Yu
owner Xiao Yang · uploader Xiao Yang · PS1 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-21062 libcfs: Add BUG() after calling lbug_with_loc()

Since Linux 6.5 lbug_with_loc() is not in objtool's noreturn list,
so it is declared without __noreturn, but objtool finds that it never
returns and reports "missing __noreturn" warnings, which fail the
build with CONFIG_OBJTOOL_WERROR=y.

Add BUG() after lbug_with_loc() in LBUG() and LASSERTF(): objtool
accepts a UD2 after a call it knows never returns. On older kernels
lbug_with_loc() is declared with __noreturn, so the compiler drops
the BUG().

Fixes: 9f44a48b3659 ("LU-17793 libcfs: fix objtool warning in lbug_with_loc()")
Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: I92cba012283d14fc9a9727a7eb1a6d2923abd514
69135 master J –B ✓T ✓R -1/2−
LU-14144 utils: find Lustre module params without --module
reviewing Andreas Dilger · CI green — awaiting your review
218_review_priority 4 unresolved L +370 −30
15h
build #135066 SUCCESS · tests all Maloo sessions
reviews: Jian Yu -1 2026-11-03 23:42
no vote yet: Timothy Day
patchsets:
+5 earlier PS1 09-23 PS2 09-23 PS3 09-24 PS4 09-24 PS5 09-27 patrick bot
PS6 10-05 patrick bot PS7 10-05 patrick bot PS8 10-06 patrick bot PS9 10-14 PS10 11-01
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-11-01 19:22 Gerrit AI review for Lustre COMMIT_MSG:25 — (nit) This isn't a bug, but the lustre-commit skill asks for the exact model ID as the API reports it, with the tools space-separated, i.e.
Gerrit AI review for Lustre PS10 · 2026-11-01 19:22
(nit) This isn't a bug, but the lustre-commit skill asks for the exact model ID as the API reports it, with the tools space-separated, i.e.

    Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools

rather than "claude-opus-5.5" and a comma-joined tool list. Only worth changing if the patch is refreshed for another reason.
reply PS10 2026-11-03 23:42 Jian Yu sanity.sh:34464 — (minor) The above versions have to be updated.
Jian Yu PS10 · 2026-11-03 23:42
(minor) The above versions have to be updated.
reply PS10 2026-11-03 23:42 Jian Yu lustre_param.c:1025 — (defect) (!rc2 && rc2 != -ENOENT) should be (rc2 && rc2 != -ENOENT)
Jian Yu PS10 · 2026-11-03 23:42
(defect) (!rc2 && rc2 != -ENOENT) should be (rc2 && rc2 != -ENOENT)
reply PS10 2026-11-03 23:42 Jian Yu lustre_param.c:1026 — (minor) do_param_op() should be do_param_op_flags()
Jian Yu PS10 · 2026-11-03 23:42
(minor) do_param_op() should be do_param_op_flags()
tags: 218_review_priority
owner Andreas Dilger · uploader Andreas Dilger · PS10 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-14144 utils: find Lustre module params without --module

"set_param -P" is applied on each node by running "lctl set_param"
from an upcall or udev rule, which can't pass --module, so module
parameters could not be set persistently.

If no Lustre parameter matches, fall back to Lustre/LNet module
parameters, with the new LLAPI_PARAM_MODULES_FALLBACK flag for
llapi_param_get_paths_flags().  Existing patterns like "osc.*" are
unaffected since they match first.

Have "set_param -P" refuse parameters that are read-only at runtime,
since they would fail on every node at every mount.  This is also
done for "set_param -P -F".  A wildcard device type is not checked,
since a parameter may be read-only on servers but not on clients.

Fixes: 7c7edbcaa8ce ("LU-14144 utils: allow /sys/module/OBD/parameters/*")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5.5 ltvm,llm_code_and_review_tools
Change-Id: I6594a5b8a7a28243617a12640127b4ca173ebbe5
69768 master J –B ✓T ✓R 0/2
LU-11962 flr: fix the handling of foreign mirrors
reviewing Andreas Dilger · CI green — awaiting your review
pt_ecropw_shepherdpccro 1 unresolved M +161 −13
17h
build #135063 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Marc Vef, Bruno Faccini
patchsets: PS2 10-18 PS3 10-19 PS4 10-21 Marc Vef PS5 10-31 PS6 11-01
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-11-01 03:22 Gerrit AI review for Lustre lfs.c:18051 — (suggestion) This stops the chunk comparison from reading the foreign mirror, but two other `lfs mirror verify` paths still call llapi_mirro
Gerrit AI review for Lustre PS5 · 2026-11-01 03:22
(suggestion) This stops the chunk comparison from reading the foreign mirror, but two other `lfs mirror verify` paths still call llapi_mirror_read() on it:

- print_stale_mirrors() reads every LCME_FL_STALE component's mirror. A write to a file that still has the HSM mirror (it stays after `lfs pcc detach`, since lod_declare_pccro_clear() only clears HS_PCCRO) goes through lod_declare_update_rdonly()->lod_stale_components(), which sets LCME_FL_STALE and HS_DIRTY on the HSM component. Plain `lfs mirror verify` would then print "Mirror N: (stale - read error)" for it.
- With `--stale`, auto_mark_stale_mirrors()->compare_mirror_checksums() reads every mirror returned by get_mirror_properties(), foreign mirrors included. The new -EINVAL from lov_io_mirror_init() makes the auto-mark fail with "error reading from mirror N".

Both paths crashed the client on the LASSERT before this patch, so they are pre-existing and now fail cleanly. Should they skip foreign mirrors too, here or in a follow-up?
tags: pt_ecro pw_shepherd pccro
owner Andreas Dilger · uploader Andreas Dilger · PS6 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-11962 flr: fix the handling of foreign mirrors

Several places mishandle a mirror made of a foreign HSM component, as
PCC-RO adds:
- the client copies the EC stripe counts into every layout entry, but
  for a foreign entry they share a union with lsme_foreign_flags, so
  getxattr("lustre.lov") and llapi_layout_get_by_fd() report its HSM
  flags as 0;
- "lfs getstripe" prints all of its lhm_* fields whatever is asked,
  so "lfs getstripe -N" prints them after the mirror count, and it is
  the last initialized component that "-c", "-S" or "-i" show;
- lod_primary_pick() may pick it as the primary mirror for a write
  when the OSTs of the data mirror are unavailable;
- mdd_split_ea(), and data_mirror_remains() and
  last_non_stale_mirror() of lfs, count it as data, so "lfs mirror
  split" can remove the only data mirror, or the only in-sync one;
- a designated read of it, e.g. "lfs mirror read -N", which any user
  with read access can do, hits the LASSERT in
  lov_io_layout_at_mirror(), and "lfs mirror verify" reads from it.

Move the EC stripe counts out of the union, print an HSM component
only for the verbose and layout pattern output and never as the last
initialized one, never pick an HSM mirror in lod_primary_pick(), and
do not count foreign mirrors as data when splitting or verifying.
Refuse designated I/O to a foreign mirror in lov_io_mirror_init().

Add sanity-pcc test_51 to check the HSM flags, "lfs getstripe -N" and
"-c", the split of data mirrors, and the read and verify of a file
attached to PCC-RO.

Test-Parameters: testlist=sanity-pcc,sanity-flr
Fixes: 472e0f27d411 ("LU-19545 ec: tight binding parity mirror to data mirror")
Fixes: 22e9e7e8b264 ("LU-12187 llapi: EC layout creation support")
Fixes: ce98bfe5f726 ("LU-10499 pcc: add readonly mode for PCC")
Fixes: aebb405e32e4 ("LU-10499 pcc: use foreign layout for PCCRO on server side")
Fixes: 2e591389646c ("LU-19548 lfs: update mirror split for EC support")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Idb5f277a3117a352a99cecdaefd6ee7ee89b5397
68504 master J –B ✓T ✓R +3/2
LU-20661 ptlrpc: Lower CPU latency system wide
reviewing Xiao Yang · CI green — awaiting your review
pw_shepherd L +249 −206
17h
build #134154 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-11-02 17:10 · Bruno Faccini +1 2026-11-03 08:38 · Andreas Dilger +1 2026-10-21 05:39
no vote yet: Yang Sheng
patchsets:
+8 earlier PS1 08-31 PS2 09-13 PS3 09-14 PS4 09-15 PS5 09-23 PS6 09-24 PS7 09-26 PS8 09-29
PS9 10-15 PS10 10-18 PS11 10-19 PS12 10-20 PS13 10-21
tags: pw_shepherd
owner Xiao Yang · uploader Xiao Yang · PS13 uploaded 14d ago · NEW · open in Gerrit ↗
commit message
LU-20661 ptlrpc: Lower CPU latency system wide

kick_cpu_latency() only lowered the latency of the cpt the primary
NID maps to, while the thread consuming the reply runs elsewhere
-- the caller for a sync RPC, a ptlrpcd for an async one.  Take a
single system wide cpu_latency_qos request instead of a per CPU
device DEV_PM_QOS_RESUME_LATENCY one, with a shim for kernels
before v5.7.

Rework kick_cpu_latency() and the work item: senders take no
lock, and the work item alone holds the request while RPCs flow.
With pmqos_use_stats_for_duration set, the hold time follows the
longest RPC round trip or delay between sends, not the per-target
PTLRPC_REQWAIT average.

Clearing enable_pmqos now drops the request at once, and
ptlrpc_connection_init() runs before ptlrpc_lproc_init() so the
store never sees an uninitialized work item.

Default enable_pmqos to CONFIG_CPU_IDLE and reject enabling it
when that option is off, since the PM QoS calls are then stubs.

Environment: 4 MDTs, default directory layout, enable_pmqos=1,
pmqos_default_duration_usec=3000, pmqos_use_stats_for_duration=1.

mpirun --allow-run-as-root -np 8 mdtest -F -u -i 5 -n 20000
-d /mnt/lustre/mdtest.out, showing the run closest to the median
of 3-5 runs (Tree rows omitted as noise):

pmqos_latency_max_usec=20 (default):

With this patch:
  Operation          Max         Min        Mean     Std Dev
  ---------          ---         ---        ----     -------
  File creation   23582.983   20708.299   21838.383   1182.253
  File stat       62781.563   62169.797   62448.046    232.310
  File read       27364.039   25950.152   26873.249    561.361
  File removal    44953.810   39736.547   42717.082   2067.324

Without this patch:
  Operation          Max         Min        Mean     Std Dev
  ---------          ---         ---        ----     -------
  File creation   14521.362   13795.488   14092.296    282.564
  File stat       66019.977   61243.433   63937.186   1752.492
  File read       24106.449   21853.555   22883.614    983.301
  File removal    45992.183   38890.606   44088.785   2971.666

pmqos_latency_max_usec=1:

With this patch:
  Operation          Max         Min        Mean     Std Dev
  ---------          ---         ---        ----     -------
  File creation   27607.655   24674.600   26043.502   1227.895
  File stat       81423.073   79052.010   80580.369   1002.923
  File read       32688.692   32077.416   32424.092    300.879
  File removal    49232.059   43884.765   45533.656   2143.840

Without this patch:
  Operation          Max         Min        Mean     Std Dev
  ---------          ---         ---        ----     -------
  File creation   14767.444   13656.511   14382.633    526.850
  File stat       76461.366   75901.765   76210.405    209.818
  File read       26863.138   23515.192   25330.106   1585.685
  File removal    48849.082   43281.086   46320.050   2470.423

Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: Ic2e051c4f1fe78e1c55fd1d2688e15a4579567a3
63381 master J –B ✓T ✓R +1/2
LU-18813 osd: setup library to share code
reviewing Timothy Day · CI green — awaiting your review
pw_shepherd 15 unresolved L +226 −107
17h
build #134041 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-03 09:39
no vote yet: Qian Yingjin, Alex Zhuravlev, Li Dongyang
patchsets:
+6 earlier PS1 01-13 PS2 01-13 Janitor Bot PS3 01-13 PS4 01-13 PS5 01-13 PS6 01-18
PS7 02-09 PS8 05-12 PS9 05-29 PS10 07-04 PS11 10-19
threads: 15 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre COMMIT_MSG:9 — The body describes this as a pure move of the osd_obj_seq/map routines, but one hunk is not a move: osd_ost_fini() loses `osd->od_ost_map =
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
The body describes this as a pure move of the osd_obj_seq/map routines, but one hunk is not a move: osd_ost_fini() loses `osd->od_ost_map = NULL;` while its callers are not updated to compensate. Worth calling out in the message (see the comment on osd_compat.c).
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre COMMIT_MSG:11 — The message says the routines move "to a dedicated osd.ko kernel module" and then argues why a module is preferable to a static library, but
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
The message says the routines move "to a dedicated osd.ko kernel module" and then argues why a module is preferable to a static library, but no such module is built by this patch.

lustre/osd/osd_lib.c is symlinked into lustre/osd-ldiskfs/ and lustre/osd-wbcfs/ and added to osd_ldiskfs-objs / osd_wbcfs-objs, so the code is compiled into each OSD .ko separately, and nothing is EXPORT_SYMBOL'd. lustre/Makefile's obj-m list is unchanged, and lustre/osd/ has no Makefile.

That is the static-library approach, which is what the discussion on this change settled on. Could the message be refreshed to describe what the patch actually does, so the reasoning in it doesn't read as describing a different implementation?
reply PS11 2026-10-21 01:02 Gerrit AI review for Lustre COMMIT_MSG:7 — (typo) "setup" is the noun; the verb is "set up".
Gerrit AI review for Lustre PS11 · 2026-10-21 01:02
(typo) "setup" is the noun; the verb is "set up".
reply PS11 2026-10-21 01:02 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body doesn't name the moved or renamed symbols, so `git log -S`/`--grep` for the old names won't easily turn up this patch. If t
Gerrit AI review for Lustre PS11 · 2026-10-21 01:02
(style) The body doesn't name the moved or renamed symbols, so `git log -S`/`--grep` for the old names won't easily turn up this patch. If the message is refreshed, consider listing them:

    osd_seq_free()        -> osd_obj_seq_free()
    osd_ost_fini()        -> osd_obj_map_free()
    osd_seq_find_locked() -> osd_obj_seq_find_locked()
    osd_seq_find()        -> osd_obj_seq_find()
    osd_seq_name()        -> osd_obj_seq_name()

The message could also mention that struct osd_obj_seq/osd_obj_map moved to lustre/include/osd.h.
reply PS10 2026-07-13 13:41 Timothy Day patchset comment — osd/ isn't a separate module, so it wouldn't help.
James Simmons PS10 · 2026-07-13 13:08
Looking that this I wonder if we can move the sysfs / debugfs handling to here.
Timothy Day PS10 · 2026-07-13 13:41
osd/ isn't a separate module, so it wouldn't help.
reply PS8 2026-05-20 20:29 Andreas Dilger osd.h:6 — (style) wrap at 80 columns can be trivially fixed, and maybe expanded on a bit.
wc-checkpatch PS8 · 2026-05-12 18:51
(style)  line length of 83 exceeds 80 columns
Andreas Dilger PS8 · 2026-05-20 20:29
(style) wrap at 80 columns can be trivially fixed, and maybe expanded on a bit.
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre osd.h:6 — "on-disk structure definitions" doesn't describe what is here - struct osd_obj_seq and struct osd_obj_map hold only in-memory state (dentry
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
"on-disk structure definitions" doesn't describe what is here - struct osd_obj_seq and struct osd_obj_map hold only in-memory state (dentry pointers, a rwlock, a list head, a mutex). Nothing in this header is an on-disk format.

This line also still exceeds 80 columns and still lacks the fuller description that was asked for on patchset 8; both look unaddressed in the current revision.
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre osd.h:16 — This isn't a bug today, but <linux/rwlock.h> is not meant to be included directly - it errors out unless __LINUX_SPINLOCK_H is already defin
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
This isn't a bug today, but <linux/rwlock.h> is not meant to be included directly - it errors out unless __LINUX_SPINLOCK_H is already defined. It compiles here only because <linux/dcache.h> two lines up happens to pull in <linux/spinlock.h> first, so a future reshuffle of these includes would break the build.

Every other header in the tree that needs a lock type uses <linux/spinlock.h> (lustre/include/obd.h, cl_object.h, range_lock.h, ...); this is the only <linux/rwlock.h>.
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre osd.h:26 — This comment sits above an int and doesn't describe it. It looks like it was meant for the mutex in struct osd_obj_map (om_dir_init_mutex, w
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
This comment sits above an int and doesn't describe it. It looks like it was meant for the mutex in struct osd_obj_map (om_dir_init_mutex, which has no comment at all). Since the struct is being re-documented in a new header, it would be a good time to move or drop it.
reply PS11 2026-10-21 01:02 Gerrit AI review for Lustre osd.h:21 — (style) This isn't a bug, but nothing declared in this header uses <lustre_fid.h>. Only osd_obj_seq_name() in lustre/osd/osd_lib.c needs it,
Gerrit AI review for Lustre PS11 · 2026-10-21 01:02
(style) This isn't a bug, but nothing declared in this header uses <lustre_fid.h>. Only osd_obj_seq_name() in lustre/osd/osd_lib.c needs it, for fid_seq_is_rsvd()/fid_seq_is_mdt0()/fid_seq_is_idif(). lustre_fid.h also pulls in lu_object.h and the uapi FID/IDL headers. Would it be better to include it in osd_lib.c, so that every user of <osd.h> doesn't inherit it?
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre osd_compat.c:570 — The old osd_ost_fini() ended with `osd->od_ost_map = NULL;`. The library version takes the map by pointer and cannot do that, and none of th
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
The old osd_ost_fini() ended with `osd->od_ost_map = NULL;`. The library version takes the map by pointer and cannot do that, and none of the three call sites here were updated, so `dev->od_ost_map` is left pointing at freed memory.

On an OST, osd_obj_map_init()'s second error path frees the map and returns without clearing the field:

    rc = osd_index_backup_dir_init(env, dev);
    if (rc) {
        osd_ost_fini(dev->od_ost_map);   /* freed */
        if (mdt_init)                    /* false when od_is_ost */
            osd_mdt_fini(dev);
    }

I could not find a path that dereferences the stale pointer today - osd_device_init0() goes straight to out_wq and osd_device_alloc() frees the whole osd_device - so this doesn't look like a live use-after-free. But it does drop an invariant the old code held.

It is also worth noting what currently hides this in osd_obj_map_fini(): the field only ends up NULL because osd_mdt_fini() contains a long-standing typo and assigns `osd->od_ost_map = NULL;` where it means od_mdt_map. So correctness of the new code depends on a bug elsewhere. Could the call sites just do `dev->od_ost_map = NULL;` after osd_ost_fini()?
reply PS11 2026-10-21 01:02 Gerrit AI review for Lustre osd_compat.c:32 — (style) This isn't a bug, but <osd.h> is a Lustre include and belongs with <obd_support.h> above the local "osd_internal.h"/"osd_oi.h" group
Gerrit AI review for Lustre PS11 · 2026-10-21 01:02
(style) This isn't a bug, but <osd.h> is a Lustre include and belongs with <obd_support.h> above the local "osd_internal.h"/"osd_oi.h" group, which is how osd_scrub.c orders it in this patch.
tags: pw_shepherd
owner Timothy Day · uploader Timothy Day · PS11 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-18813 osd: setup library to share code

... starting with osd_obj_seq/map routines. These will
be eventually used by osd-wbcfs as well - so move them
to a dedicated osd.ko kernel module. A new kernel module
is desirable (versus a static library) so that we preserve
the ability to load multiple OSDs at the same time.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Iad23cba0e624a003cc0b2f28dc08420b618cdf10
54485 master J –B ✓T ✓R +1/2
LU-10499 pcc: output valid state for valid cached files
reviewing Qian Yingjin · CI green — awaiting your review
pccro 2 unresolved M +130 −12
20h
build #134910 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-01 19:54
no vote yet: Feng Lei
patchsets:
+3 earlier PS1 03-21 PS2 09-25 PS3 09-26
PS4 10-20 Andreas Dilger PS5 10-20 Andreas Dilger PS6 10-21 Andreas Dilger PS7 10-27 Andreas Dilger PS8 10-30 Andreas Dilger
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS8 2026-10-31 18:29 Gerrit AI review for Lustre lfs-pcc-state.1:38 — (minor) lfs_pcc_state() prints the short form with named flags only when `pccs_type == LU_PCC_NONE && pccs_open_count == 0`. Any attached fi
Gerrit AI review for Lustre PS8 · 2026-10-31 18:29
(minor) lfs_pcc_state() prints the short form with named flags only when `pccs_type == LU_PCC_NONE && pccs_open_count == 0`. Any attached file, readonly or readwrite, open or not, gets the long form with `flags: %x`. So hex output isn't limited to "a file that is still open", and `attaching`/`aborting` also show up as 0x2/0x10 there, not as words.

If the patch is refreshed, maybe say that the flags are printed as names only for type none files that aren't open, and as hex otherwise, and list the bit values (0x1 attr valid, 0x2 attaching, 0x4 unlinked, 0x8 valid, 0x10 aborting). An EXAMPLES entry showing the `type: none, flags: valid` output from the commit message would also help.
reply PS8 2026-10-31 18:29 Gerrit AI review for Lustre sanity-pcc.sh:5081 — (suggestion) Does this step test what the comment says? Each `lfs pcc state` before it found a valid copy, so pcc_try_datasets_attach() retu
Gerrit AI review for Lustre PS8 · 2026-10-31 18:29
(suggestion) Does this step test what the comment says? Each `lfs pcc state` before it found a valid copy, so pcc_try_datasets_attach() returned with `*cached == true` and never reached the `lli_pcc_dsflags = PCC_DATASET_NONE` branch. The `cat` would auto attach even without the `iot != PIT_VALID_CHECK` guard.

To cover the guard, the state check has to fail on a readonly layout. One way: after `detach -k`, change `user.PCC.layout` on the PCC copy, check `lfs pcc state` doesn't report valid, restore the xattr, then `cat` and run check_lpcc_state "readonly".
tags: pccro
owner Qian Yingjin · uploader Andreas Dilger · PS8 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: output valid state for valid cached files

There are two cases where the command 'lfs pcc state' reports
'none' for PCC status of a file:
- File has not been cached at all into PCC. When the file is read,
  data will come from remote Lustre filesystem.
- File was cached into PCC but was detached later, while keeping
  the PCC copy (e.g. 'lfs pcc detach -k').  When the file is read,
  its layout version is compared against the PCC copy, and if the
  version matches, the file is attached again and the data will
  come from PCC.  The inode must still be cached on the client
  with its layout, so this is not reported after the client cache
  is dropped (e.g. 'sysctl -w vm.drop_caches=3').

This patch adds a valid flag to distinguish between these two
states. For the latter case, the command 'lfs pcc state' will
output as follows:
$ lfs pcc state /mnt/lustre/f105.sanity-pcc
file: /mnt/lustre/f105.sanity-pcc, type: none, flags: valid

Fixes from the original patch:
- check the PCC copy against the cached layout generation, as at
  open, so that 'lfs pcc state' does not refresh the layout with
  a layout lock RPC.
- do not set PCC_DATASET_NONE on the inode when no valid PCC copy
  is found, which would stop the file from being auto attached.
- also report the valid flag for a detached PCC inode that is not
  freed yet.
- only report the valid flag if the PCC backend auto attaches files,
  which would use the PCC copy.

Document the existing 'aborting' flag in lfs-pcc-state.1 as well.
Clear the state for each file in 'lfs pcc state', since the flags
of a file that is not cached on the client are not set, and would
otherwise be printed from the previous file.

Add sanity-pcc/test_105 to verify it works as expected.

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I1d729bfe550b1bde0e78e8b3ec8217cd598fb64c
69763 master J –B ✓T ✓R +2/2
LU-20984 obdclass: wake OJS_CLEANING waiters in jobstats
reviewing Oleg Drokin · CI green — awaiting your review
XS +2 −2
1d
build #133869 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-31 04:12 · Timothy Day +1 2026-11-02 19:11
no vote yet: Andreas Krause US, Shaun Tancheff
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 18d ago · NEW · open in Gerrit ↗
commit message
LU-20984 obdclass: wake OJS_CLEANING waiters in jobstats

"lctl set_param *.job_stats=clear" or umount that arrives while a
periodic jobstats cleanup is running hangs forever in D state in
lprocfs_job_cleanup().

The forced cleanup waits for OJS_CLEANING with wait_on_bit(), but the
holder drops the bit with a plain clear_bit() and nothing ever calls
wake_up_bit(), so the waiter is never woken.  job_reclaim_rcu() has
the same problem for OJS_ACTIVE_JOBS, costing a 30s stall at fini.

Use clear_and_wake_up_bit() for both bits.

Test-Parameters: trivial
Fixes: cad59b9b72fc ("LU-18351 obdclass: jobstat scaling")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I8d937a7481f2c40fa00bba850ebf80eb3e2a6577
69798 master J –B ✓T ✓R +2/2
LU-20276 tests: Wait for ZFS frees after sanityn/56a,56b
reviewing Arshad Hussain · CI green — awaiting your review
CI@PS3 S +36 −8
1d
build #134429 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-26 14:06 · Timothy Day +1 2026-11-02 17:50
no vote yet: Brian Behlendorf
patchsets: PS1 10-19 PS2 10-20 PS3 10-23 PS4 10-26
build/test results are from PS3 — PS4…PS4 changed only the commit message (votes copied, CI not re-run)
owner Arshad Hussain · uploader Arshad Hussain · PS4 uploaded 9d ago · NEW · open in Gerrit ↗
commit message
LU-20276 tests: Wait for ZFS frees after sanityn/56a,56b

test_56b causes OOM in test_70/71 using ZFS 2.4.N
To avoid OOM, this patch reorders stack_trap
in such a way that the file is 'rm' first and
then waited for all TXG to be committed. Also,
this patch adds function 'zfs_wait_free_osts'
to reclaim free space in function 56a and 56b
before they end and after delete of file. (This
is a workaround for now, please see JIRA for
details)

This patch also enables test_56b. As, after the
above changes OOM is not seen.

Test-Parameters: trivial testlist=sanityn fstype=zfs serverdistro=el9.7
Test-Parameters: trivial testlist=sanityn fstype=zfs serverdistro=el9.8
Test-Parameters: trivial testlist=sanityn fstype=zfs serverdistro=el10.1
Test-Parameters: trivial testlist=sanityn fstype=zfs serverdistro=el10.2
Fixes: 3d34b39cb470 ("LU-8137 utils: fix llverdev for use on regular files")
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ib4a3de285b4826b26efed41fdcbb90fcd0e307d6
70234 master J –B ✓T ✓R 0/2
LU-20923 mdd: reject a PCC create without a layout
reviewing Andreas Dilger · CI green — awaiting your review
pccro CI@PS1 4 unresolved XS +6 −2
1d
build #134922 SUCCESS · tests all Maloo sessions
no vote yet: Marc Vef
patchsets: PS1 10-30 PS2 11-02
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-31 22:30 Gerrit AI review for Lustre COMMIT_MSG:15 — (minor) Two points here understate what the patch fixes:
Gerrit AI review for Lustre PS1 · 2026-10-31 22:30
(minor) Two points here understate what the patch fixes:

1. "rather than proceeding": the old code did not proceed. It hit LASSERT() on a cr_flags value taken straight from the client, so any client could LBUG the MDS by sending MDS_OPEN_PCC without MDS_OPEN_HAS_EA. That is the main reason for the change and is worth stating.

2. The uninitialized hsm_buf free is not limited to the new reject path. Several existing paths already reached out_free with MDS_OPEN_PCC set before hsm_buf was memset, and then called lu_buf_free() on stack garbage: the OBD_FAIL_MDS_DQACQ_NET goto, a mdd_trans_create() failure, the -ENOMEM ACL buffer gotos, and errors from mdd_acl_init() and mdd_pin_init(). Initializing hsm_buf at its declaration fixes those as well.
reply PS1 2026-10-31 22:30 Gerrit AI review for Lustre COMMIT_MSG:16 — (minor) The patch fixes two bugs from the original PCC change: the LASSERT() on client-supplied flags and the uninitialized hsm_buf free on
Gerrit AI review for Lustre PS1 · 2026-10-31 22:30
(minor) The patch fixes two bugs from the original PCC change: the LASSERT() on client-supplied flags and the uninitialized hsm_buf free on the early error paths of mdd_create(). Both came in with that commit, so please add:

Fixes: f172b11688 ("LU-10092 llite: Add persistent cache on client")
reply PS1 2026-10-31 22:30 Gerrit AI review for Lustre mdd_dir.c:3339 — (suggestion) This isn't a bug, but the check only looks at spec flags, so it could run right after mdd_create_sanity_check() and use RETURN(
Gerrit AI review for Lustre PS1 · 2026-10-31 22:30
(suggestion) This isn't a bug, but the check only looks at spec flags, so it could run right after mdd_create_sanity_check() and use RETURN(-EINVAL), like the other request-validation failures. A malformed request then never creates a transaction or allocates ACL, pin and linkEA buffers that are thrown away straight after. hsm_buf still has to be initialized for the other early error paths, so that part of the change stays.
reply PS1 2026-10-31 22:30 Gerrit AI review for Lustre mdd_dir.c:3342 — (minor) Now that hsm_buf is initialized at its declaration, this memset() does nothing. The MDS_OPEN_PCC test around lu_buf_free(&hsm_buf) a
Gerrit AI review for Lustre PS1 · 2026-10-31 22:30
(minor) Now that hsm_buf is initialized at its declaration, this memset() does nothing. The MDS_OPEN_PCC test around lu_buf_free(&hsm_buf) at out_free is also no longer needed, because lu_buf_free() ignores a NULL lb_buf. If the patch is refreshed, consider dropping both so the code matches how pin_buf is handled.
tags: pccro
build/test results are from PS1 — PS2…PS2 changed only the commit message (votes copied, CI not re-run)
owner Andreas Dilger · uploader Andreas Dilger · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-20923 mdd: reject a PCC create without a layout

A PCC create (MDS_OPEN_PCC in cr_flags) must carry a layout
(MDS_OPEN_HAS_EA).  In mdd_create(), return -EINVAL for MDS_OPEN_PCC
without MDS_OPEN_HAS_EA rather than proceeding.  The reject path jumps
to the out_stop/out_free cleanup, which frees hsm_buf when
MDS_OPEN_PCC is set, so also initialize hsm_buf at its declaration
(like pin_buf); otherwise that path, which runs before hsm_buf is
memset, would free an uninitialized buffer.

Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I038b27bd1b99c869084e7d5c2fe79bf4073ebbe5
69752 master J –B ✓T ✓R +2/2
LU-20969 pcc: disable PCC-RW by default
reviewing patrick bot · CI green — awaiting your review
pw_own L +581 −13
1d
build #134650 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-30 22:46 · Timothy Day +1 2026-11-02 14:51
no vote yet: Qian Yingjin, Lai Siyao
patchsets:
+5 earlier PS1 10-16 PS2 10-17 PS3 10-18 PS4 10-19 PS5 10-26
PS6 10-27 PS7 10-27 PS8 10-27 PS9 10-28 PS10 10-28
tags: pw_own
owner patrick bot · uploader patrick bot · PS10 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-20969 pcc: disable PCC-RW by default

PCC-RW is a proof of concept: attaching a file moves the
only copy of its data into the cache of one client, so
losing that client or its cache loses the file. With PCC-RO
generally available in 2.18, PCC-RW must not be used by
accident.

Add client parameters llite.*.enable_pcc_rw and
llite.*.enable_pcc_ro, and MDT parameters
mdt.*.enable_pcc_rw and mdt.*.enable_pcc_ro. PCC-RW is
disabled by default and PCC-RO is enabled. While a mode is
disabled on the client, adding a PCC rule that uses it and
attaching a file in that mode fail with EOPNOTSUPP and a
console message that names the parameter to enable it, and
automatic attach in that mode is skipped. While a mode is
disabled on the MDT, the MDT refuses the attach, and the
creation of a file in a PCC-RW cache, the same way. A file
already attached stays attached until the client drops it
from its cache, and is not attached again.

When the MDT refuses a PCC-RW create, the client creates the
file in Lustre alone, so the MDT setting does not make
creates fail. When it refuses PCC-RO for a file, the client
does not try automatic PCC-RO attach of that file again
while the inode is cached, so each open does not send the
MDT the same refused request.

As LFS_EC_OK does for erasure coding, "lfs pcc attach -w"
and "lctl pcc add" with pccrw=1 refuse to run unless
LFS_PCC_RW_OK is set in the environment.

When the MDT refuses a PCC-RW attach at close, the client
removes the cache copy it made.

The server control is an MDT parameter, not a nodemap RBAC
role: roles are enabled by default and a nodemap with all
roles stores none, so a role that is off by default would
change how roles are stored and synced to the targets.

sanity-pcc enables PCC-RW for its tests. Add sanity-pcc
test_1h to check that each control refuses its mode.

Test-Parameters: testlist=sanity-pcc
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Patrick Farrell <patrick@thelustrecollective.com>
Change-Id: I85d874f79f67575c9e329ff0bebfbcce5f22d149
69438 master J –B ✓T ✓R +2/2
LU-20546 osc: check request pack rc with "if (rc)"
reviewing Hiroshi Nishida · CI green — awaiting your review
master-next S +6 −6
2d
build #134586 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-27 22:35 · Timothy Day +1 2026-10-28 16:41
patchsets: PS1 10-05 PS2 10-27
owner Hiroshi Nishida · uploader Hiroshi Nishida · PS2 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20546 osc: check request pack rc with "if (rc)"

ptlrpc_request_pack() clears rq_import on error. Some callers
check its result with "if (rc < 0)", so Coverity cannot see that
the request is never sent after a failed pack:

  CID 506496: FORWARD_NULL in osc_punch_send()

The pack never returns a positive rc, so this is a false positive.
Use "if (rc)" like the other callers, to silence it.

Signed-off-by: Hiroshi Nishida <hnishida@thelustrecollective.com>
Assisted-by: Claude:Opus-5 claude-code
Change-Id: I038987f65d51e5ce1a8250f3e4d6e986d5f76006
69830 master J –B ✓T ✓R 0/2
LU-10499 pcc: DIO attach copy for encrypted files
reviewing Andreas Dilger · CI green — awaiting your review
pccro 4 unresolved M +85 −8
2d
build #135130 SUCCESS · tests all Maloo sessions
no vote yet: Sebastien Buisson
patchsets:
+1 earlier PS1 10-20
PS2 10-20 PS3 10-20 PS4 10-21 PS5 10-27 PS6 11-01
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-11-02 07:50 Gerrit AI review for Lustre COMMIT_MSG:23 — The helper does accept a copy up to one unit larger, but the kernel check in pcc_copy_data_dio() still requires the PCC file size to equal t
Gerrit AI review for Lustre PS6 · 2026-11-02 07:50
The helper does accept a copy up to one unit larger, but the kernel check in pcc_copy_data_dio() still requires the PCC file size to equal the clear text size when the key is loaded (see the comment in pcc.c), so this statement is only true for the helper side.
reply PS6 2026-11-02 07:50 Gerrit AI review for Lustre pcc.c:3980 — (defect) Now that encrypted files reach pcc_copy_data_dio(), does this check reject every DIO copy of an encrypted file whose size is not a
Gerrit AI review for Lustre PS6 · 2026-11-02 07:50
(defect) Now that encrypted files reach pcc_copy_data_dio(), does this check reject every DIO copy of an encrypted file whose size is not a multiple of LUSTRE_ENCRYPTION_UNIT_SIZE?

With the key loaded, ll_merge_attr() does not round i_size and does not set lli_lazysize, so pcc_copy_data() passes the clear text `size`, e.g. 2102152. The helper opens with O_CIPHERTEXT, ll_direct_IO() reads up to ll_dio_size() = round_up(size, 4096), and fid_path_copy() accepts `copied` = 2105344 and truncates the PCC file to that. Back here:

    rc = i_size_read(file_inode(dst));   /* 2105344 */
    if (rc != size)                      /* 2102152 */

so every such attach prints the "has 2105344 of 2102152 bytes, use buffered copy" CWARN, returns -EIO, and pcc_copy_data() copies the whole file again with pcc_copy_data_buffered(). The attach does twice the I/O and the DIO path only takes effect for files that are already unit-aligned. Should this also accept round_up(size, LUSTRE_ENCRYPTION_UNIT_SIZE) when IS_ENCRYPTED(inode), to match the helper and the commit message?
reply PS6 2026-11-02 07:50 Gerrit AI review for Lustre sanity-pcc.sh:4201 — (minor) pcc_copy_data_dio() logs "DIO copied" before it checks the PCC file size, so this grep also passes when the copy is then thrown away
Gerrit AI review for Lustre PS6 · 2026-11-02 07:50
(minor) pcc_copy_data_dio() logs "DIO copied" before it checks the PCC file size, so this grep also passes when the copy is then thrown away and redone by the buffered fallback. That is what happens for the 2102152 byte case, and since the buffered copy also produces a unit-aligned ciphertext file, the size and cmp checks below pass too. Could the test also fail if the debug log contains "use buffered copy" (or check that the CWARN is absent), so that it really verifies the DIO copy was kept?
reply PS6 2026-11-02 07:50 Gerrit AI review for Lustre ll_fid_path_copy.c:32 — (style) This isn't a bug, but rather than a local copy of the constant, could this include lustreapi_internal.h and use LUSTRE_ENCRYPTION_UN
Gerrit AI review for Lustre PS6 · 2026-11-02 07:50
(style) This isn't a bug, but rather than a local copy of the constant, could this include lustreapi_internal.h and use LUSTRE_ENCRYPTION_UNIT_SIZE (or round_up() from libcfs) directly, as mkfs_lustre.c and lustre_cfg.c already include that header? Then the two values cannot drift apart.
tags: pccro
owner Andreas Dilger · uploader Andreas Dilger · PS6 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: DIO attach copy for encrypted files

The PCC copy of an encrypted file holds its ciphertext, so the
kernel copy sets S_PCCCOPY to read the Lustre file as if the key
were not loaded.  The DIO copy by ll_fid_path_copy was not used for
encrypted files, since its direct reads would decrypt the data when
the key is loaded.

Now that direct IO of a file opened with O_CIPHERTEXT transfers the
ciphertext whether the key is loaded or not, have ll_fid_path_copy
open the source file with O_CIPHERTEXT for its direct IO, and use
the DIO copy for encrypted files.  O_CIPHERTEXT has no effect on
the direct IO of other files, except that its O_NONBLOCK does not
restore a released file, whose copy then fails and the kernel falls
back to the buffered copy.  A ciphertext read reaches the end of the
last encryption unit, so the copy may be up to one unit larger than
the clear text size, as with the kernel copy.

Add sanity-pcc test_50d to verify the PCC copy of an encrypted file.

Test-Parameters: trivial testlist=sanity-pcc
Test-Parameters: testlist=sanity-pcc clientarch=aarch64 clientdistro=rocky9.8
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Ia3d6809c5e9631d7f375d51d9946fdb3373ebbe5
54499 master J –B ✓T ✓R +1/2
LU-10499 pcc: add lctl pcc abort command to abort attaches
reviewing Qian Yingjin · CI green — awaiting your review
pccro 1 unresolved L +309 −20
2d
build #134911 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-01 19:55
no vote yet: Feng Lei
patchsets:
+4 earlier PS1 03-21 PS2 09-26 PS3 09-26 PS4 09-26
PS5 10-20 Andreas Dilger PS6 10-20 Andreas Dilger PS7 10-21 Andreas Dilger PS8 10-27 Andreas Dilger PS9 10-30 Andreas Dilger
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS9 2026-11-02 01:07 Gerrit AI review for Lustre liblustreapi_pcc.c:628 — (minor) With -v this message is printed for every FID found in the backend, not just for files that are attached. The NOT_DETACH branch in p
Gerrit AI review for Lustre PS9 · 2026-11-02 01:07
(minor) With -v this message is printed for every FID found in the backend, not just for files that are attached. The NOT_DETACH branch in pcc_ioctl_detach() returns before it checks pcci, and ll_dir_ioctl() returns 0 without calling it when ilookup5() finds no inode. Either way the flags come back without ATTACHING or CACHE_REMOVED.

So a copy left by `lfs pcc detach -k`, or by an earlier `lctl pcc abort -d`, is reported as "still attached" by `lctl pcc abort -v`. With -d it is reported as "detached" even though it was not attached. lctl-pcc-abort.8 says -v prints the files "as they are detached".

If the patch is refreshed, could the message say only that the copy was kept? Or the kernel could report whether it actually detached the file.
tags: pccro
owner Qian Yingjin · uploader Andreas Dilger · PS9 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: add lctl pcc abort command to abort attaches

Add the command "lctl pcc abort [--detach|-d] [--verbose|-v]
[--wait|-w] MNTPATH [PCCPATH]" to abort the attaches in progress to
one or all PCC backends on a client, without removing the backends.
The files already in the cache stay attached, unless --detach is
given, which detaches them but keeps their PCC copies.  With --wait
it waits for the aborted attaches to finish.

Add PCC_CLEANUP_FL_KEEP_CONF to keep the PCC backend configured, and
PCC_CLEANUP_FL_NOT_DETACH and PCC_DETACH_FL_NOT_DETACH so that the
scan of the PCC backend only aborts the attaches.  NOT_DETACH keeps
the PCC copies, as PCC_CLEANUP_FL_KEEP_DATA does.

"lctl pcc del|clear --keep-data --abort" now aborts the attaches in
progress, and like --keep-data alone keeps the cached files attached.

Document the command in the new lctl-pcc-abort.8 man page, and add
sanity-pcc test_109 to verify it.

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Ib7152f7418aa1beb840919e98bf8de53c99b5c54
69543 master J –B ✓T ✓R 0/2
LU-20909 llite: copy only reply bytes for dir read-on-open
reviewing Andreas Dilger · CI green — awaiting your review
CI@PS1 S +10 −2
2d
build #133255 SUCCESS · tests all Maloo sessions
no vote yet: Lai Siyao
patchsets: PS1 10-09 PS2 10-10
build/test results are from PS1 — PS2…PS2 changed only the commit message (votes copied, CI not re-run)
owner Andreas Dilger · uploader Andreas Dilger · PS2 uploaded 24d ago · NEW · open in Gerrit ↗
commit message
LU-20909 llite: copy only reply bytes for dir read-on-open

ll_dir_finish_open() copies PAGE_SIZE bytes from the inline reply
into each folio, but the MDS returns only rep_size bytes, mostly
whole lu_dirpages.  On a client with pages larger than 4KiB a
small directory returns a single 4KiB lu_dirpage, so the copy reads
up to PAGE_SIZE - 4KiB past the end of the reply buffer.

Copy only the bytes left in the reply and zero the rest of the
folio.  Also limit lu_pgs to the folios actually allocated, so a
folio allocation failure partway through does not leave lu_pgs
unconsumed and trip the LASSERT in mdc_adjust_dirpages().

Fixes: 4a14a51a8e00 ("LU-18448 llite: read dir on open")
Fixes: e13f17ce3a6f ("LU-18448 llite: read dir on open fixes")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5.5 ltvm,llm_code_and_review_tools
Change-Id: Ie10772321e3ad7509d0ec456e73a1ae2c33ebbe5
54493 master J –B ✓T ✓R +1/2
LU-10499 pcc: abort in-progress attach by PCC detach command
reviewing Qian Yingjin · CI green — awaiting your review
pccro 7 unresolved L +271 −26
2d
build #134909 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-01 19:54
no vote yet: Feng Lei
patchsets:
+4 earlier PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
PS5 10-20 Andreas Dilger PS6 10-20 Andreas Dilger PS7 10-21 Andreas Dilger PS8 10-27 Andreas Dilger PS9 10-30 Andreas Dilger
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre COMMIT_MSG:17 — (minor) The helper pid was already recorded by pcc_dio_copy_init() in the parent patch. What this patch adds is the per-superblock pccs_dio_
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(minor) The helper pid was already recorded by pcc_dio_copy_init() in the parent patch. What this patch adds is the per-superblock pccs_dio_copies list, which lets pcc_ioctl_detach() find the helper for an inode via pcc_dio_copy_abort(). Could the sentence say that instead?
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre COMMIT_MSG:23 — (style) "Changes from the original patches" describes this patch as a delta from abandoned revisions, and those revisions never landed. Once
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(style) "Changes from the original patches" describes this patch as a delta from abandoned revisions, and those revisions never landed. Once landed, the message should describe the change against master. The getopt and abort-flag fixes are not changes to master, so this section could be removed.
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre COMMIT_MSG:37 — (style) The squashed message from the abandoned change says ll_fid_path_copy calls llapi_pcc_state_fd() every 32 I/Os and exits when it sees
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(style) The squashed message from the abandoned change says ll_fid_path_copy calls llapi_pcc_state_fd() every 32 I/Os and exits when it sees PCC_STATE_FL_ATTACH_ABORTING. The patch doesn't do that, and the first part of the message says the helper "no longer polls". The third squashed message, "then wait for them to abort", is also only true with --wait. Should these two squashed messages, and their Was-Change-Id: lines, be dropped so the message describes only what this patch does?
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre COMMIT_MSG:57 — (typo) "abort the attache" -> "abort the attach"
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(typo) "abort the attache" -> "abort the attach"
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre pcc.c:3823 — (style) This isn't a bug, but it open-codes the new pcc_attach_aborting() helper. If the helper is moved above pcc_copy_data_buffered(), thi
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(style) This isn't a bug, but it open-codes the new pcc_attach_aborting() helper. If the helper is moved above pcc_copy_data_buffered(), this could be `if (pcc_attach_aborting(inode))`.
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre liblustreapi_pcc.c:663 — (minor) With --abort --wait the kernel no longer waits for the attaches using the dataset. Only the attaches whose PCC copy the scan finds a
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(minor) With --abort --wait the kernel no longer waits for the attaches using the dataset. Only the attaches whose PCC copy the scan finds are aborted and waited for. Two cases are missed: an attach that is past pcc_dataset_attach_get() but not yet at __pcc_inode_create(), and one that creates its copy in a FID directory the scan has already passed. Such an attach keeps running and holds the backend mount. It then completes and stays attached on the removed backend, and nothing removes its copy. --wait in lctl-pcc.8 promises to wait "before removing the backend", so `-a -w` waits for less than `-w` alone. Could the scan run with ABORT|ATTACHING_WAIT first, followed by the kernel "del PCC wait", so the kernel still waits for any attach that is left?
reply PS9 2026-10-31 20:03 Gerrit AI review for Lustre liblustreapi_pcc.c:665 — (defect) Adding --abort drops the kernel "wait", and the scan that was meant to replace it is skipped with --keep-data. So `lctl pcc del -k
Gerrit AI review for Lustre PS9 · 2026-10-31 20:03
(defect) Adding --abort drops the kernel "wait", and the scan that was meant to replace it is skipped with --keep-data. So `lctl pcc del -k -w -a MNT PCC` neither waits nor aborts:

    flags = KEEP_DATA | WAIT | ABORT
    cmd = "del PCC"            /* no "wait" */
    if (flags & PCC_CLEANUP_FL_KEEP_DATA)
        return 0;              /* no scan either */

With -k -w alone the kernel does wait. Should --abort be rejected with --keep-data, or should the kernel wait be kept when no scan follows?
tags: pccro
owner Qian Yingjin · uploader Andreas Dilger · PS9 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: abort in-progress attach by PCC detach command

A user may want to abort in-progress attach for some purposes such
as freeing space for PCC backend.
To support this operation, we add an "abort" option for PCC detach
command to abort the in-progress attach.

"lfs pcc detach --abort" sets PCC_STATE_FL_ATTACH_ABORTING on a file
that is being attached.  The kernel copy checks it for each buffer,
and the DIO copy helper is killed, so the attach fails with
-ECANCELED and removes its partial PCC copy.  The kernel records the
pid of each running ll_fid_path_copy for this, from the usermode
helper init callback.  "lctl pcc del|clear --abort" aborts the
attaches of all files on the PCC backend.  With --wait, both wait for
the aborted attaches to finish.

Changes from the original patches:
- ll_fid_path_copy no longer polls the PCC state of the file with the
  per-file LL_IOC_PCC_STATE ioctl, which is deprecated.  Killing the
  helper aborts the copy at once.
- "lctl pcc del|clear -a" did not work, since "a" was missing from
  the getopt string.
- "lctl pcc del|clear --abort" without --wait skipped the removal of
  every PCC copy, since it checked the input abort flag instead of
  the returned PCC_DETACH_FL_ATTACHING.
- The detach no longer polls with msleep(), see the --wait option.

Add sanity-pcc test_108a for "lfs pcc detach --abort" of the kernel
and DIO copies, and test_108b for "lctl pcc clear --abort --wait".

LU-10499 pcc: abort data copy via ll_fid_path_copy

For data copying via ll_fid_path_copy in direct I/O mode in user
space, the client calls llapi_pcc_state_fd() to obtain the file
PCC state. If it is marked with PCC_STATE_FL_ATTACH_ABORTING, the
data copy process ll_fid_path_copy exits immediately.
To reduce the overhead of these check, we do not check for each
data copy iter, instead, we do a check for certain times of I/Os
(32 times by default). For I/O size of 32MiB, it will be checking
1 times per second at 1GiB/s. There should be some time-lag
before the copy tool quits finally.

Was-Change-Id: I20631e5481a7e97d7a1ed0729bcd269ef6248a2c

LU-10499 pcc: abort data copy when clear PCC backend

This patch adds an option "--abort" for "lctl pcc del|clear"
command tools.
With this option, the user will first set ATTACH_ABORTING flag on
all in-progress attaching files, and then wait for them to abort
the attache when remove a PCC backend from a client.

Was-Change-Id: I4e2f3ec8866e9af45f4524a9f45ee418ef4cb5be

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I49fb1c42838f8d7e9728a5c4c6f3d60e959b233b
54487 master J –B ✓T ✓R +1/2
LU-10499 pcc: wait for in-progress attaches when remove PCC
reviewing Qian Yingjin · CI green — awaiting your review
pccro 1 unresolved L +313 −54
2d
build #134908 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-01 19:54
no vote yet: Feng Lei
patchsets:
+5 earlier PS1 03-21 PS2 09-25 PS3 09-26 PS4 10-20 Andreas Dilger PS5 10-20 Andreas Dilger
PS6 10-20 Andreas Dilger PS7 10-20 Andreas Dilger PS8 10-21 Andreas Dilger PS9 10-27 Andreas Dilger PS10 10-30 Andreas Dilger
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-10-31 20:18 Gerrit AI review for Lustre lctl-pcc.8:62 — (minor) The SYNOPSIS and OPTIONS now say --keep-data and add -v and -w, but the DESCRIPTION entries for `lctl pcc del` and `lctl pcc clear`
Gerrit AI review for Lustre PS10 · 2026-10-31 20:18
(minor) The SYNOPSIS and OPTIONS now say --keep-data and add -v and -w, but the DESCRIPTION entries for `lctl pcc del` and `lctl pcc clear` (and the "--keep|-k" text under -k) still show only `[ --keep | -k ]`. If the patch is refreshed, could these match the SYNOPSIS so that --wait also appears where each subcommand is described?
tags: pccro
owner Qian Yingjin · uploader Andreas Dilger · PS10 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: wait for in-progress attaches when remove PCC

When remove a PCC backend from a client, it should wait for all
in-progress attaches finished. Otherwise, it results in the failure
of the PCC backend umount operation.

The reason is that the PCC copy is referenced in the kernel, not
used by any applications in user space and the tool "lsof" can not
check whether the target PCC backend is used or not.

Count the attaches using each PCC backend, and with the new "wait"
argument of "clear" and "del PCCPATH" for llite.*.pcc, wait for them
after removing the backend.  An older kernel ignores the argument and
removes the backend without waiting.  Always wait at unmount.

Fixes from the original patches:
- "clear_wait" never waited, since it also matched "clear".
- pccs_generation was changed without holding pccs_rw_sem.
- "lfs pcc detach --wait" polled the file state with msleep() and
  could not be interrupted.  Use a killable wait on a waitqueue
  that is woken when an attach finishes.

Also add the missing newline to the "is being attached" message of
llapi_pcc_scan_detach(), and wait for attaches in the sanity-pcc
cleanup_pcc_mapping() so that the PCC backend can be unmounted.

Add sanity-pcc test_106 for "lctl pcc del|clear --wait" and
test_107 for "lfs pcc detach --wait" with PCC-RO and PCC-RW.

LU-10499 pcc: add wait option when remove a PCC backend

In this patch, we add a "wait" option for the PCC tool when remove
PCC backend from a client:
	lctl pcc del --wait $MOUNT $pcc_path
	lctl pcc clear --wait $MOUNT

With this option, the caller must wait for all in-progress
attaches finished when remove the PCC backend from a client.

Was-Change-Id: Ic8386329087a7129b0583fa823cbb50673893d0d

LU-10499 pcc: wait for attach finished for detach command

When detach a file from a PCC backend, this file may be still
attaching state. At this time, we add a flag to wait for the
attach finished (PCC_DETACH_FL_ATTACHING_WAIT). After that, retry
the detach.

Was-Change-Id: If85d95be744e3f7d6a07f880e78de5b68b579ed6

LU-10499 pcc: add --wait option for PCC detach command

This patch adds "--wait" option for PCC detach command.
PCC detach with this option must wait for in-progress attach on
this file finished.
Add sanity-pcc/test_107 to verify it.

Was-Change-Id: I63d52d514884b15a7b534d0f03deee441a12d3f1

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I05b268e75841f9f17e77819ed20c85c78d7c6ad6
54481 master J –B ✓T ✓R +1/2
LU-10499 pcc: asynchronous PCCRO attach command support
reviewing Qian Yingjin · CI green — awaiting your review
pccro 4 unresolved L +273 −34
2d
build #134907 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-01 19:54
no vote yet: Feng Lei, Patrick Farrell
patchsets:
+7 earlier PS1 03-21 PS2 09-23 PS3 09-24 PS4 09-25 PS5 09-26 PS6 10-20 Andreas Dilger PS7 10-20 Andreas Dilger
PS8 10-20 Andreas Dilger PS9 10-21 Andreas Dilger PS10 10-27 Andreas Dilger PS11 10-28 Andreas Dilger PS12 10-30 Andreas Dilger
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS12 2026-10-31 18:22 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but if the patch is refreshed the summary could be imperative, e.g. "LU-10499 pcc: add async PCC-RO attach with lf
Gerrit AI review for Lustre PS12 · 2026-10-31 18:22
(style) This isn't a bug, but if the patch is refreshed the summary could be imperative, e.g. "LU-10499 pcc: add async PCC-RO attach with lfs pcc attach -A".
reply PS12 2026-10-31 18:22 Gerrit AI review for Lustre COMMIT_MSG:25 — (minor) Following on from the comment in pcc_layout_rdonly_set(): the MDS doesn't seem to apply MAY_WRITE to IT_LAYOUT intents, because no u
Gerrit AI review for Lustre PS12 · 2026-10-31 18:22
(minor) Following on from the comment in pcc_layout_rdonly_set(): the MDS doesn't seem to apply MAY_WRITE to IT_LAYOUT intents, because no ucred is set up for them. If that's right, "the MDS checks write permission for the layout change" and "Before, such an attach would fail" don't describe the current behaviour, and this paragraph should be updated along with the code.
reply PS12 2026-10-31 18:22 Gerrit AI review for Lustre patchset comment — Documentation/man1/lfs-pcc.1:9
Gerrit AI review for Lustre PS12 · 2026-10-31 18:22
Documentation/man1/lfs-pcc.1:9
(minor) The lfs-pcc.1 SYNOPSIS for "lfs pcc attach" and "lfs pcc attach_fid" still lists only -i/-r/-w. If the patch is refreshed, could --async|-A be added here too, so it matches lfs-pcc-attach.1 and the lfs help text?
reply PS12 2026-10-31 18:22 Gerrit AI review for Lustre pcc.c:4282 — (minor) Does the MDS actually check write permission for this intent? As far as I can tell, the IT_LAYOUT request (ldlm_intent_layout_client
Gerrit AI review for Lustre PS12 · 2026-10-31 18:22
(minor) Does the MDS actually check write permission for this intent? As far as I can tell, the IT_LAYOUT request (ldlm_intent_layout_client[]) has no mdt_body, and mdt_intent_opc() → mdt_intent_layout() → mdt_layout_change_pccro() → mdt_layout_change() never calls mdt_init_ucred(). So the session ucred is still UCRED_INIT when mo_permission(..., MAY_WRITE) runs, and __mdd_permission_internal() does:

    if ((uc == NULL) || (uc->uc_valid == UCRED_INIT))
        RETURN(0);

The op_fsuid/op_cap that ll_prep_md_op_data() takes from the overridden creds are never sent for IT_LAYOUT, so this override_creds() doesn't seem to change anything on the MDS, and the comment's reasoning doesn't hold. If that's right, a read-only user's sync attach also worked before this patch, and the read-only-user part of test_103 would pass without the change. Was it checked to fail without this hunk?

If the override isn't needed, it and the comment could be dropped. The missing MAY_WRITE check for layout write intents is an existing MDS issue, separate from this patch.
tags: pccro
owner Qian Yingjin · uploader Andreas Dilger · PS12 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: asynchronous PCCRO attach command support

Currently PCCRO attach via the command "lfs pcc attach" will block
during the data copying.
There is a requirement that this command can also do data copy
asynchronously. Thus we add an option "--async|-A" to the command
which will not block while the file data is being fetched.
The attach is done synchronously if llite.*.pcc_attach_thread_max
attach threads are already running, or a thread cannot be started.
Configuration errors, such as an unknown PCC backend id, are still
returned before the thread is started, while a failed background
copy leaves the file unattached.  Encrypted files can be attached
asynchronously as well, and sanity-pcc test_21j now does that.

The attach thread runs with the credentials of the process that
started the attach, as the synchronous attach does, so that the PCC
copy has its owner and quota.  This also applies to the asynchronous
attach on open of large files.  The PCC-RO layout is set as the PCC
super user, since the MDS checks write permission for the layout
change, while llite.*.pcc_mode allows users who can only read a file
to attach it.  Before, such an attach would fail, except for the
asynchronous attach that ran as root.

Document "lfs pcc attach -A" in lfs-pcc-attach.1 and
llapi_pcc_attach.3.

Was-Change-Id: I7757a9d0b66a3586abdc9053b73d69944561ffbd

Add sanity-pcc test_103 and test_104 to verify that it works
correctly, using a new OBD_FAIL_LLITE_PCC_COPYDATA_PAUSE fail_loc
to see the attach in progress.  Create the PCC backend loop device
as a sparse file and format it with lazy journal and inode table
init, to speed up the tests.

Was-Change-Id: I09f159810a778b8ef2bab93d0e2869237a3ebbe5

Test-Parameters: trivial testlist=sanity-pcc
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I6f31190c8b9e9b9876b34f8e484c6c8b7f16b6db
54478 master J –B ✓T ✓R +1/2
LU-10499 pcc: Add dio support for data copy during attach
reviewing Qian Yingjin · CI green — awaiting your review (needs rebase first)
needs rebase pccro 5 unresolved XL +1428 −18
2d
CI green — awaiting your review (needs rebase first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
failed enforced testplatformdetail
custom-1001 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. session
build #134709 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-11-01 19:54
no vote yet: Feng Lei, Patrick Farrell
patchsets:
+5 earlier PS1 03-21 PS2 09-23 PS3 09-24 PS4 09-26 PS5 08-25 Andreas Dilger
PS6 10-20 Andreas Dilger PS7 10-20 Andreas Dilger PS8 10-21 Andreas Dilger PS9 10-27 Andreas Dilger PS10 10-28 Andreas Dilger
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS9 2026-10-28 23:52 Andreas Dilger patchset comment — test_50c now pins the mdc lru_size (pcc_lru_pin, also used by test_50b), so the LRU does not cancel the layout locks of the attached files b
patrick bot PS9 · 2026-10-28 12:29
> Failed enforced test review-dne-zfs-subtest-change on RHEL 9.7 / x86_64

The one enforced failure, sanity-pcc test_50c, is this patch's own new test and not a PCC data-copy fault. The file's layout lock was evicted from the client LRU during the state check's own path lookup, which detaches the PCC-RO copy by design, so the test's readonly assertion races the LRU. The fix belongs in test_50c. No retest or ticket is requested.

(run pw-engineer-54478-ps9-feaca1aad0d1)
Andreas Dilger PS9 · 2026-10-28 23:52
test_50c now pins the mdc lru_size (pcc_lru_pin, also used by test_50b), so the LRU does not cancel the layout locks of the attached files before the state checks. 21 of 21 runs passed locally.
reply PS10 2026-10-30 21:24 Gerrit AI review for Lustre pcc.c:3901 — (minor) The commit message explains that a path string can't be trusted across mount namespaces, and the Lustre side is checked with -n. But
Gerrit AI review for Lustre PS10 · 2026-10-30 21:24
(minor) The commit message explains that a path string can't be trusted across mount namespaces, and the Lustre side is checked with -n. But the destination is still the string pccd_pathname, which kern_path() resolved in the namespace of the process that ran "lctl pcc add". The helper resolves it again in the umh (init) namespace. If those differ, the helper fails, or writes into whatever file has that name in the init namespace, and the kernel only finds out from the i_size check. Could the kernel also pass the device and inode number of `dst` (file_inode(dst)->i_sb->s_dev and ->i_ino), so that the helper can fstat() the destination it opened and check it is the same file?
reply PS10 2026-10-30 21:24 Gerrit AI review for Lustre pcc.c:3934 — (minor) After an interrupted wait, `info` lives on until the helper exits, and it still points into lustre.ko: argv[0] and the "-F"/"-d" lit
Gerrit AI review for Lustre PS10 · 2026-10-30 21:24
(minor) After an interrupted wait, `info` lives on until the helper exits, and it still points into lustre.ko: argv[0] and the "-F"/"-d" literals, the static envp[], and the pcc_dio_copy_init()/pcc_dio_copy_cleanup() callbacks. The helper drops its last Lustre reference when it closes src_fd, but umh_complete() calls pcc_dio_copy_cleanup() only after it exits. Between those two points, umount and rmmod of lustre.ko can complete. The window is very small, but should the extra pdc reference also hold a module reference (__module_get(THIS_MODULE)), dropped in pcc_dio_copy_cleanup(), with the strings copied into pdc?
reply PS10 2026-10-30 21:24 Gerrit AI review for Lustre pcc.c:3947 — (defect) Can this wait hang an open() that comes through ll_atomic_open()? There the VFS still holds the parent directory's i_rwsem: exclusi
Gerrit AI review for Lustre PS10 · 2026-10-30 21:24
(defect) Can this wait hang an open() that comes through ll_atomic_open()? There the VFS still holds the parent directory's i_rwsem: exclusive for O_CREAT, shared otherwise. ll_atomic_open() calls pcc_file_open(), and for a file below pccs_async_threshold (256 MiB by default) the attach is synchronous:

    open_last_lookups() /* inode_lock(dir) or inode_lock_shared(dir) */
     ->lookup_open()->ll_atomic_open()->pcc_file_open()
      ->pcc_try_readonly_open_attach()->pcc_readonly_attach_sync()
       ->pcc_attach_data_archive()->pcc_copy_data_dio()  /* waits here */

While it waits, the helper opens MNTPATH/.lustre/fid/[fid] with llapi_open_by_fid(). If the opened file is in the Lustre root directory and the ".lustre" dentry is not in the dcache, which happens after its LOOKUP lock is cancelled (ll_invalidate_aliases() then d_prune_aliases()), lookup_slow() needs inode_lock_shared() on that same root inode. With O_CREAT the root is held exclusive, so the helper blocks until the opener gets SIGKILL. Without O_CREAT it also blocks once any create or unlink in the root is queued for the write lock. Every other operation in the root directory waits behind it.

The commit message says the EX-5014 deadlock was specific to the el7 mutex, but this one seems to remain with i_rwsem. One option is to always use the async attach, or the buffered copy, when pcc_file_open() is called from ll_atomic_open().
reply PS10 2026-10-30 21:24 Gerrit AI review for Lustre pcc.c:3957 — (suggestion) Some configurations make the helper fail on every attach. For example, the helper reads the file as root through .lustre/fid, s
Gerrit AI review for Lustre PS10 · 2026-10-30 21:24
(suggestion) Some configurations make the helper fail on every attach. For example, the helper reads the file as root through .lustre/fid, so on a root-squashed client it gets EACCES for files that are not world-readable. A PCC backend without O_DIRECT support fails the same way. Each attach above the threshold then starts a helper that fails, and logs this CWARN (rate-limited) before the buffered copy. Would CDEBUG(D_CACHE) be enough here, or a CWARN only the first time for each dataset, perhaps also disabling the DIO copy for that dataset?
tags: pccro
owner Qian Yingjin · uploader Andreas Dilger · PS10 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: Add dio support for data copy during attach

PCC attach performance is bottlenecked by single threaded
buffered I/O performance.  We could do multi-threading, but
multi-threaded buffered I/O to one file has a very low
performance ceiling.  In order to significantly speed up
PCC attach performance, we need to switch to DIO.

DIO cannot be done from kernel memory due to various
restrictions, so we call out to a usermode helper,
ll_fid_path_copy, for files of at least
llite.*.pcc_dio_attach_threshold bytes (32 MiB by default).
Each I/O is llite.*.pcc_dio_attach_iosize_mb in size (32 MiB
by default, 0 disables the DIO copy).

Note that the helper uses open by fid because given a
file pointer, it's not possible to reliably generate the
path to a file on Lustre due to container namespace issues.
Specifically, the path used by the user may not work for
our helper program due to namespace differences.  So we
must use open by fid for the Lustre side of the copy.
The kernel also passes the client mount name, and the helper fails
if the mountpoint is another mount, since FIDs are only unique
within one filesystem.
"lctl pcc add" passes the Lustre mountpoint to the kernel as
the "mntpath" parameter of the PCC backend for this.  An old
lctl that does not pass it gets a buffered copy, and the new
lctl retries without it on an old kernel.  If the helper is
missing or fails, e.g. because the PCC backend does not support
O_DIRECT, the kernel does a buffered copy instead.

The helper runs without CAP_SYS_RESOURCE, as the kernel copy does,
so that it respects the quota limits of the PCC backend.  The wait
for the helper can be killed, as the buffered copy can be
interrupted, and then the helper is killed as well.
The helper truncates the PCC file to the size copied, since it may
be a larger old copy (LU-13023), and logs errors to syslog, since
it has no stderr when run by the kernel.

This patch improves attach performance from about 1 GiB/s
to about 5 GiB/s.  This performance figure includes time to
read the data from Lustre *and* to write it out to PCC.

Fixes from the original patch series:
- a helper that failed was treated as a successful copy,
  since the positive exit status from call_usermodehelper()
  is not an errno, leaving a PCC copy with missing data.
- encrypted files must keep the kernel copy, so that the
  PCC copy holds ciphertext (S_PCCCOPY).
- remove the el7 workaround that unlocked the parent directory
  during the copy from atomic_open().  With HAVE_INODE_RWSEM
  gone it was compiled for all kernels, where it would
  up_write() a lock that may be held shared.
- in ll_fid_path_copy, terminate the getopt option list, only
  join threads that were started, return per-thread errors,
  and fix the chunk size rounding.  Each thread opens its own
  destination fd, so that the buffered fallback for an
  unaligned tail does not clear O_DIRECT for all threads.
- llapi_pccdev_set() returned a positive errno on failure.

Also fix sanity-pcc test_40, which compares async and sync
attach times with paused bulk RPCs, by disabling the DIO copy.
Add test_10g for quota with the DIO copy, and a re-attach after
truncate to test_50b.

EX-5014 pcc: avoid deadlock during DIO open attach on rhel7

The Maloo testing fails with sanity-pcc/45 due to a deadlock
on the rhel7 kernel, which uses a mutex for inode locking.
During ->ll_atomic_open(), the kernel takes this mutex on the
parent inode, and the user space helper program ll_fid_path_copy
also tries to take it during lookup.

Was-Change-Id: I384c7b1979d93183b86bbde311d29a50346a8d56

EX-5014 pcc: minor fixes for parameter checks

Improve console message when out-of-range pcc_dio_attach_iosize_mb
values are supplied.  Values that are not a multiple of 1 MiB are
now rejected.

Was-Change-Id: I2bf7d0bf564c954318980f7a09d8713a70f37db9

LU-10499 pcc: dio attach failed on non-blksz-aligned file

PCC attach failed due to do DIO copy on files with blksz unligned
file size.  The reason is that the copy tool ll_fid_path_copy
fails on non-blksize-aligned file for PCC backend (such as a local
Ext4 file system) using direct I/O.  This fixes the bug by falling
back from direct I/O to buffered I/O mode when copying the tail
non-blksize-aligned part of the file.

Was-Change-Id: I5287563029269032a91397c0094e2ccede73b9b1

LU-10499 pcc: add threshold to determine direct I/O during attach

This patch adds the threshold tunable parameter to determine doing
direct I/O or buffered I/O for data copying during attach:
	llite.*.pcc_dio_attach_threshold
The default value is same as direct I/O size: 32MiB.

And the usage of the parameter "pcc_dio_attach_size_mb" is
deprecated, and use "pcc_dio_attach_iosize_mb" instead.

Was-Change-Id: I393d6a06523303e749192ba9978449c3d75886ae

LU-10499 pcc: parallel data copy for attach

This patch parallelize the data copying work for pcc attach
by using multiple threads in the ll_fid_path_copy helper,
llite.*.pcc_dio_attach_threads_per_file (4 by default).

Nvidia provided performance numbers for this from their
environment.  This was with 4 MiB I/O size, they reported
speed was similar but *slightly* lower at larger block
sizes. This is probably an EXT4 limitation since Lustre
speed scales with those larger sizes.  (As PCC attach is a
copy from Lustre to EXT4.)

This is for attaching a single 2 TiB file, they also
reported no performance regression for datasets with many
small files.

threads: 1       2         4          8
speed:   4 GiB/s 7.8 GiB/s 14.1 GiB/s 15.2 GiB/s

Performance improved only very slightly past 8 threads,
and 4 threads is clearly the sweet spot for performance.

Was-Change-Id: Iffbb3892cfb5b2e71afe15d03f9aec9c84975092

Fixes: f172b1168857 ("LU-10092 llite: Add persistent cache on client")
Test-Parameters: trivial testlist=sanity-pcc
Test-Parameters: testlist=sanity-pcc clientdistro=el8.10
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Idb2a12296c3e4778763c9b576bbb0ecd2570a458
65201 master J !B ✓T ✓R 0/2
LU-19768 target: add netlink stats
reviewing Timothy Day · CI green — awaiting your review
38 unresolved XL +1643 −21
3d
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-1 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: sanity. session
build #134974 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-09 PS2 07-22 PS3 07-29 PS4 07-29 PS5 09-29
threads: 38 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-22 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:21
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
reply PS2 2026-07-22 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:21
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
reply PS2 2026-07-22 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:21
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
reply PS2 2026-07-22 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:21
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_done' was not declared. Should it be static?
reply PS2 2026-07-22 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:21
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_start' was not declared. Should it be static?
reply PS2 2026-07-22 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:21
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_dump' was not declared. Should it be static?
reply PS2 2026-07-28 10:24 Gerrit AI review for Lustre COMMIT_MSG:11 — The body lists recovery status, OBD parameters, job stats and BRW stats, but the patch also adds TARGET_CMD_EXPORTS with lustre_export_start
Gerrit AI review for Lustre PS2 · 2026-07-28 10:24
The body lists recovery status, OBD parameters, job stats and BRW stats, but the patch also adds TARGET_CMD_EXPORTS with lustre_export_start()/_dump()/_done(). Could the exports command be described here too?

The uAPI header also gains LDLM_GENL_NAME/enum ldlm_nl_commands, MDD_GENL_NAME/enum mdd_nl_commands and LQUOTA_GENL_NAME/enum lquota_nl_commands, none of which are mentioned or used. Are those meant to be in this patch?
reply PS3 2026-07-29 21:01 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:01
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
reply PS3 2026-07-29 21:01 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:01
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
reply PS3 2026-07-29 21:01 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:01
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
reply PS3 2026-07-29 21:01 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:01
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_done' was not declared. Should it be static?
reply PS3 2026-07-29 21:01 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — target/kernelcomm.c:
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:01
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_start' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_dump' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_obd_params_done' was not declared. Should it be static?
target/kernelcomm.c:
 warning: sparse:symbol 'lustre_export_start' was not declared. Should it be static?
owner Timothy Day · uploader Timothy Day · PS5 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-19768 target: add netlink stats

Add server-side netlink handlers for exporting target statistics
via generic netlink. This introduces a new target_family with
commands for recovery status, OBD parameters, job stats, and
BRW stats. The OSD layers (ldiskfs and zfs) wire their brw_stats
into dt_device so the netlink handlers can collect them. The
job_stat struct is moved to the header for netlink access.

TLC-bug-id: TLU-56
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I7357690440427ef636df9d20d84bd489cd4f79fa
69415 master J –B ✓T ✓R +2/2
LU-20868 build: Honor systemd configuration in rpmbuild
reviewing Xiao Yang · CI green — awaiting your review
S +6 −23
4d
build #134716 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-29 01:11 · Timothy Day +1 2026-10-29 01:11
no vote yet: Shaun Tancheff
patchsets:
+1 earlier PS1 10-04
PS2 10-05 PS3 10-05 PS4 10-06 PS5 10-06 PS6 10-29
owner Xiao Yang · uploader Xiao Yang · PS6 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-20868 build: Honor systemd configuration in rpmbuild

Pass the systemd configuration to rpmbuild to avoid packaging
systemd unit files when users explicitly run ./configure with
--with-systemdsystemunitdir=no.

Enable systemd by default as all supported distros ship it.

Fixes: 32d1a1c5d610 ("LU-9439 scripts: lnet systemd service")
Test-Parameters: trivial
Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: I540d958edf124dd7e94c5bf243bfda0815fda719
69554 master J –B ✓T ✓R 0/2
LU-20920 obdclass: keep the lu_site shrinker to its budget
reviewing Markus Hilger · CI green — awaiting your review
218_review_prioritypw_shepherd M +101 −2
4d
failed enforced testplatformdetail
review-dne-zfs-part-1 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: sanity. session
build #134670 SUCCESS · tests all Maloo sessions
no vote yet: Alexander Boyko, Andreas Dilger, Vitaly Fertman, Patrick Farrell
patchsets: PS1 10-09 PS2 10-10 PS3 10-28
tags: 218_review_priority pw_shepherd
owner Markus Hilger · uploader Markus Hilger · PS3 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-20920 obdclass: keep the lu_site shrinker to its budget

lu_cache_shrink_scan() passes the remaining budget from site to site
and keeps visiting sites after it is used up. Called with nr == 0,
lu_site_purge_objects() still purges one object per hash bucket and
decrements nr to -1, the purge-all value, which it returns as the
remaining budget, so the sites after it are purged completely. As
visited sites are moved to the tail in the same order, the same site
pays the budget on every callback and the one after it is drained.

With two MDTs on one MDS, one debugfs shrinker scan of 128 objects
purged 384. Under an mdtest stat workload one MDT per server was
drained to 40k and 5k cached objects while the other kept 44M and
59M.

Stop the scan once the budget is used up, so the sites not visited
are shrunk first next time, and purge nothing for nr == 0. The
callback again returns the number of objects purged. Fix the comment
on the return value of lu_site_purge_objects().

Add sanity test 436, which fills two MDTs on one MDS with mknod files
and checks with the debugfs shrinker scan that each scan frees at
most its budget and that the scans rotate over both MDTs.

Fixes: 52d620153307 ("LU-4416 mm: Backport shrinker changes from upstream")
Test-Parameters: mdscount=2 mdtcount=4 testlist=sanity \
  env=ONLY=436,ONLY_REPEAT=10
Test-Parameters: fstype=zfs mdscount=2 mdtcount=4 testlist=sanity \
  env=ONLY=436,ONLY_REPEAT=10
Signed-off-by: Markus Hilger <markus.hilger@megware.com>
Change-Id: I5da6b49af6b2dc44acf98216d1025b6935de13ed
69429 master J –B ✓T ✓R +1/2
LU-20825 mdt: limit HSM action listing batch size
reviewing Louis-Marie Nicolas · CI green — awaiting your review
S +17 −3
6d
build #133450 SUCCESS · tests all Maloo sessions
reviews: Etienne AUJAMES +1 2026-10-15 14:31
no vote yet: Nikitas Angelinas
patchsets: PS1 10-05 PS2 10-08 PS3 10-12 PS4 10-12
owner Louis-Marie Nicolas · uploader Louis-Marie Nicolas · PS4 uploaded 23d ago · NEW · open in Gerrit ↗
commit message
LU-20825 mdt: limit HSM action listing batch size

Reading mdt.*.hsm.actions with lctl get_param can fail with ENOMEM
when the action logs are too large because the show callback processes
the entire log in one call, requiring seq_file to grow its buffer
until we hit an hardcoded limit at 2GB.

Limit each show call to 262144 actions so the required buffer size
does not grow with the total number of actions.

Advance the batch cursor only when the batch fits in the seq_file
buffer, and set EOF only after a complete traversal without overflow,
so retries do not skip actions or prematurely end the listing.

Fixes: aff399789fe4 ("LU-6215 lprocfs: handle seq_printf api change")
Reported-by: Guillaume Courrier <guillaume.courrier@cea.fr>
Signed-off-by: Louis-Marie Nicolas <lnicolas@ddn.com>
Assisted-by: Codex:codex-6-astra (review/proofreading)
Change-Id: I36b0b8f2331a8161cc11e1e48ffe616623c1c4ca
68043 master J !B ✓T ✓R +2/2
LU-20601 utils: make Lustre headers c++ compatible
reviewing Etienne AUJAMES · CI green — awaiting your review
10 unresolved M +87 −51
6d
janitor run: 3 failing config(s), none unique to this patch — janitor results
8 optional test failure(s) — informational
build #132057 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-09-24 16:34 · Timothy Day +1 2026-09-21 13:16
no vote yet: Sebastien Buisson
patchsets:
+3 earlier PS1 08-17 PS2 08-21 PS3 08-21
PS4 08-21 PS5 08-24 PS6 08-26 PS7 09-10 PS8 09-21
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-08-28 00:46 Gerrit AI review for Lustre COMMIT_MSG:18 — (minor) The bullet list covers most of the diff, but the LCFG_HDR_SIZE() rewrite in lustre_cfg.h has no matching entry. That one is a differ
Gerrit AI review for Lustre PS6 · 2026-08-28 00:46
(minor) The bullet list covers most of the diff, but the LCFG_HDR_SIZE() rewrite in lustre_cfg.h has no matching entry. That one is a different complaint from the seven listed: offsetof() with a runtime array index is not a constant expression in C++, so offsetof(struct lustre_cfg, lcfg_buflens[(count)]) is rejected outright rather than warned about.

Worth a bullet so the hunk isn't read as unrelated. Same for the arr_tail rename in lustre_idl.h, which the body mentions only as the cause of the g++ error.
reply PS6 2026-10-13 01:49 Oleg Drokin lustre_idl.h:3146 — I think we should drop this hunk altogether?
Gerrit AI review for Lustre PS6 · 2026-08-28 00:46
(minor) Is the rename needed? Once hai_data[] is gone under C++, arr_hai is a complete type and a member after it is legal again; keeping the name as arr_tail compiles clean under both g++ and gcc with -Wall -Werror. Nothing in the tree references the field either way.

This is an installed uapi header, so the rename is an API change for out-of-tree consumers, and arr_do_not_use no longer says the field is the llog_rec_tail. Would keeping arr_tail and moving the warning into the comment work as well, e.g. "record tail, for sizeof() only - arr_hai is variable length so the real tail is not here"?
Andreas Dilger PS6 · 2026-09-24 16:34
This shoukd never be valid for use, so I don't think the API concern is valid, but it also is not exactly "cleanup for C++" .
Oleg Drokin PS6 · 2026-10-13 01:49
I think we should drop this hunk altogether?
reply PS7 2026-09-24 16:34 Andreas Dilger lustre_idl.h:3152 — This could be fixed if patch refreshed
Gerrit AI review for Lustre PS7 · 2026-09-12 03:09
(typo) pre-existing, but since this line is being touched anyway: "for_sizezof_only" should be "for sizeof() only".
Andreas Dilger PS7 · 2026-09-24 16:34
This could be fixed if patch refreshed
reply PS8 2026-10-13 01:49 Oleg Drokin lustre_idl.h:488 — should that have been void I wonder?
Oleg Drokin PS8 · 2026-10-13 01:49
should that have been void I wonder?

Probably could cut down on some type conversions
reply PS8 2026-10-13 01:49 Oleg Drokin lustre_idl.h:526 — huh?
Oleg Drokin PS8 · 2026-10-13 01:49
huh?
can't we just manually specify struct luda_type here then? Not like it changes.
reply PS8 2026-10-13 01:49 Oleg Drokin lustre_idl.h:2436 — similarly here only given we are in the definition of p here, it looks even more bizzare
Oleg Drokin PS8 · 2026-10-13 01:49
similarly here only given we are in the definition of p here, it looks even more bizzare
reply PS5 2026-09-24 16:34 Andreas Dilger lustre_user.h:2651 — That seems reasonable?
Gerrit AI review for Lustre PS5 · 2026-08-25 08:46
Adding evidence to the open question above about dropping the flexible array under C++.

This header already carries a C++ spelling for exactly this case, at the top of the file:

    #ifndef DECLARE_FLEX_ARRAY
    #ifdef __cplusplus
    #define DECLARE_FLEX_ARRAY(T, member) T member[0]

and it is already used for other variable-length members here and in lustre_idl.h. `char hai_data[0]` is not a flexible array member, so it can sit before `arr_do_not_use` inside `struct llog_agent_req_rec` without the g++ error described in the commit message, and `sizeof(struct hsm_action_item)` stays 72 either way.

So `DECLARE_FLEX_ARRAY(char, hai_data)` looks like it would fix the same build error while keeping the member visible to C++ callers. As written, a C++ translation unit sees a different `struct hsm_action_item` than a C one, and `offsetof(struct hsm_action_item, hai_data)` - which wiretest.c and wirecheck.c both use - has no C++ equivalent. Would that spelling work here?
Andreas Dilger PS5 · 2026-09-24 16:34
That seems reasonable?
reply PS5 2026-08-25 10:02 Etienne AUJAMES lustre_user.h:2652 — No, the issue is that `struct hsm_action_item` is included inside `struct llog_agent_req_rec` as arr_hai field:
James Simmons PS5 · 2026-08-24 17:01
c++ can't handle flex array? Is this safe to do?
Etienne AUJAMES PS5 · 2026-08-25 10:02
No, the issue is that `struct hsm_action_item` is included inside `struct llog_agent_req_rec` as arr_hai field:
```
struct llog_agent_req_rec {
        struct llog_rec_hdr     arr_hdr;        /**< record header */
        __u32                   arr_status;     /**< status of the request */
                                                /* must match enum
                                                 * agent_req_status
                                                 */
        __u32                   arr_archive_id; /**< backend archive number */
        __u64                   arr_flags;      /**< req flags */
        __u64                   arr_compound_id; /** < compound cookie,
                                                  * ignored
                                                  */
        __u64                   arr_req_create; /**< req. creation time */
        __u64                   arr_req_change; /**< req. status change time */
        struct hsm_action_item  arr_hai;        /**< req. to the agent */
        struct llog_rec_tail    arr_tail; /**< record tail for_sizezof_only */
} __attribute__((packed));
```

The c++ compiler complains here about `arr_tail` defined after `arr_hai` because of the variable sized struct: accessing directly to arr_tail is not safe.
`arr_tail` is never reached, this is only used for sizeof():
```
int mdt_agent_record_add(const struct lu_env *env, struct mdt_device *mdt,
                         __u32 archive_id, __u64 flags,
                         struct hsm_action_item *hai)
{
        struct obd_device               *obd = mdt2obd_dev(mdt);
        struct coordinator              *cdt = &mdt->mdt_coordinator;
        struct llog_ctxt                *lctxt = NULL;
        struct llog_agent_req_rec       *larr;
        int                              rc;
        int                              sz;
        ENTRY;

        sz = llog_data_len(sizeof(*larr) + hai->hai_len - sizeof(*hai));    <-------
        OBD_ALLOC(larr, sz);
        ....
}
```

I can't modify the `struct llog_agent_req_rec` because of the existing codes that might use it. So here, I decide to implement this like changelog: the variable part of hai is accessed via an helper functions (`hai_data()` and `hai_data_len()`). But But I keep the flexible array in C for the existing codes that uses it (like the rust API wrapper, robinhood, HPSS, phobos...).

I’m not concerned with the existing HSM code in C++ since it doesn’t compile.
reply PS7 2026-09-12 03:09 Gerrit AI review for Lustre lustre_user.h:2642 — (style) this isn't a bug, but the comment terminator lost its space: "(variable length)*/" reads better as "(variable length) */".
Gerrit AI review for Lustre PS7 · 2026-09-12 03:09
(style) this isn't a bug, but the comment terminator lost its space: "(variable length)*/" reads better as "(variable length) */".
reply PS8 2026-09-24 16:34 Andreas Dilger lustre_user.h:2668 — This seems reasonable, or a follow up patch to fix the man page is needed.
Gerrit AI review for Lustre PS8 · 2026-09-21 21:55
(minor) These accessors are the only way a C++ copytool can reach the opaque data now, but Documentation/man3/llapi_hsm_copytool_register.3 still shows the struct with

    char       hai_data[];  /* variable length */

and its SYNOPSIS lists only hai_first() and hai_next(). If the patch is refreshed, could that page pick up hai_data()/hai_data_len() alongside them, and note that the member itself is not visible under C++?
Andreas Dilger PS8 · 2026-09-24 16:34
This seems reasonable, or a follow up patch to fix the man page is needed.
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS8 uploaded 44d ago · NEW · open in Gerrit ↗
commit message
LU-20601 utils: make Lustre headers c++ compatible

C++ compilers did not like some of the C idioms used in the Lustre
headers:
- C++ checks the types of enums more forcefully than is done in C.
- signed vs unsigned comparisons will generate a warning under g++
- "invalid suffix on literal" warning: Lustre is not trying to
   generate a new literal identifier
-  implicit "void*" conversion to non-void pointer
-  integer narrowing conversion
-  const char* conversion
-  void pointers arithmetic

This patch removes the hai_data[] flexible array from hsm_action_item
struct in C++ builds. Since hsm_action_item is embedded in the
llog_agent_req_rec struct, the C++ compiler raises an error because
the arr_tail field is defined after arr_hai.
To maintain access to the variable-sized data, inline functions
hai_data() and hai_data_len() are introduced.

Update sanity 400b test to verify C++ compilation of Lustre/LNet
headers.

Test-Parameters: testlist=sanity env=ONLY=400b
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: I3366441e896da9bc3428d499fcc4f6b9566a1cf5
67492 master J –B ✓T ✓R 0/2
LU-20516 ldlm: fix flock deadlock-detection state races
reviewing Sohei Koyama · CI green — awaiting your review
M +119 −79
6d
8 optional test failure(s) — informational
build #134611 SUCCESS · tests all Maloo sessions
no vote yet: Yang Sheng, Andriy Skulysh, Andreas Dilger, Vitaly Fertman, Oleg Drokin, Timothy Day
patchsets:
+1 earlier PS1 07-23
PS2 07-27 PS3 08-03 Yang Sheng PS4 08-05 PS5 08-17 PS6 10-28
owner Sohei Koyama · uploader Sohei Koyama · PS6 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20516 ldlm: fix flock deadlock-detection state races

The deadlock-detection walk finds the blocked lock of the next
owner in the chain with cfs_hash_lookup(), which drops the
flock-hash bucket lock before returning, and only then reads
blocking_owner and blocking_export of the found lock.  Those
fields are rewritten by ldlm_flock_blocking_link()/unlink() under
the resource lock of the request lock, which the walk does not
hold.  A racing relink corrupts the walk in two ways: it
overwrites blocking_export between the walk's hs_get and hs_put,
which both read the live field, so one export leaks a reference
and another is put while still in use; and its
atomic_set(blocking_refs, 0) discards the reference the walk
still holds, so the walk's put later reaches zero and clears the
blocking state of the meanwhile re-hashed lock.

Instead of taking the found lock out of the hash, read it in
place: replace cfs_hash_lookup() with cfs_hash_for_each_key(),
whose callback runs under the bucket lock, and there snapshot
blocking_owner and the blocking export's NID.  The walk carries
only those values from hop to hop and holds no lock or export
references at all.  Since cfs_hash_add()/del() take the same
bucket lock, the blocking state is now written only while the
lock is unhashed: link sets it (taking a blocking_export
reference) before cfs_hash_add() and unlink clears it (dropping
the reference) after cfs_hash_del().  blocking_refs and the
export refcounting in the hs_get/hs_put callbacks become
unnecessary and are removed.  Two behavior notes: the final
cycle check now compares the owner and NID of the same hop (it
paired the advanced owner with the previous hop's NID before),
and exports without a flock hash are skipped in the walk.

Add OBD_FAIL_LDLM_FLOCK_DEADLOCK_PAUSE, pausing the walk between
hops while it holds only the snapshotted values, and sanityn
test_74b racing deadlock detection against blocking-state
relinks; with the pause the race crashes servers without this
fix within seconds (test_74 is renamed to test_74a).

Assisted-by: ClaudeCode:Fable-5
Test-Parameters: testlist=sanityn env=ONLY=74b,ONLY_REPEAT=5
Fixes: 2c7a41a5c595 ("LU-1157 ldlm: replace waiting flock lists by hashes")
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Change-Id: If5ad3aba7b2276394b3b06bde62a80c46fa3f431
68523 master J –B ✓T ✓R 0/2
LU-20595 lnet: cYAML_get_object_item() back to shallow search
reviewing Xiyang Wang · CI green — awaiting your review
4 unresolved M +44 −15
8d
build #134381 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn
patchsets:
+1 earlier PS1 08-31
PS2 09-04 PS3 09-06 PS4 09-13 PS5 09-14 PS6 10-23
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-10-26 14:04 Gerrit AI review for Lustre COMMIT_MSG:38 — (minor) This paragraph describes a cYAML_build_error() change that isn't in this patchset. The `*root = NULL` fix, and the switch to cYAML_g
Gerrit AI review for Lustre PS6 · 2026-10-26 14:04
(minor) This paragraph describes a cYAML_build_error() change that isn't in this patchset. The `*root = NULL` fix, and the switch to cYAML_get_object_child() for the command lookup, already landed in f2d709c488 ("LU-20479 utils: fix use-after-free in cYAML_build_error"), and this diff doesn't touch that function. For the same reason, failure 2 above is already fixed in master and isn't fixed by this patch. Could both be dropped, or reduced to a short note that LU-20479 already covered the cYAML_build_error() side?
reply PS6 2026-10-26 14:04 Gerrit AI review for Lustre COMMIT_MSG:48 — (minor) On patchset 5 a reviewer suggested adding `Test-Parameters: trivial` when the patch was refreshed. That was marked done, but the tra
Gerrit AI review for Lustre PS6 · 2026-10-26 14:04
(minor) On patchset 5 a reviewer suggested adding `Test-Parameters: trivial` when the patch was refreshed. That was marked done, but the trailer isn't in this patchset.
reply PS6 2026-10-26 14:04 Gerrit AI review for Lustre cyaml.c:729 — (defect) Doesn't handle_yaml_config_udsp() still depend on the recursive search? It looks up "priority" on the rule's sequence item:
Gerrit AI review for Lustre PS6 · 2026-10-26 14:04
(defect) Doesn't handle_yaml_config_udsp() still depend on the recursive search? It looks up "priority" on the rule's sequence item:

    prio = cYAML_get_object_item(tree, "priority");

but lustre_lnet_show_udsp()->yaml_add_udsp_action() emits priority one level down, under "action". The same layout is documented in lnetctl.8:

    udsp:
        - idx: 0
          src: tcp
          action:
              priority: 0

With this change `prio` is NULL, so lustre_lnet_add_udsp() gets type "", lnet_str2udsp_action() returns EN_LNET_UDSP_ACTION_NONE, and the rule is rejected with "bad action type specified". In other words, `lnetctl export` followed by `lnetctl import --old-api` (or the fallback taken when the Netlink socket or parser can't be set up) can no longer restore UDSP rules. The Netlink path, handle_udsp_sequences(), scans scalars at any depth, so test_404 won't catch this.

One fix is to look up "action" first and then find "priority" under it, keeping the top-level key as a fallback. Either way, the commit message line saying no call site relies on the recursive behaviour would need updating.
reply PS6 2026-10-26 14:04 Gerrit AI review for Lustre sanity-lnet.sh:3050 — (style) This isn't a bug, but if the patch is refreshed, the "(LU-20595)" can be dropped from the run_test description. The ticket is findab
Gerrit AI review for Lustre PS6 · 2026-10-26 14:04
(style) This isn't a bug, but if the patch is refreshed, the "(LU-20595)" can be dropped from the run_test description. The ticket is findable from git history, and the comment at the top of the test already names it.
owner Xiyang Wang · uploader Xiyang Wang · PS6 uploaded 12d ago · NEW · open in Gerrit ↗
commit message
LU-20595 lnet: cYAML_get_object_item() back to shallow search

cYAML_get_object_item() was originally implemented
to search only the direct children of the given node.
A previous change turned it into a recursive search
that also walks into child and sibling subtrees.
This can return an unrelated nested node that happens to
share the same name as the requested key, e.g. an "add" entity
under an "ni" error node matching the "add" command.

This caused two kinds of failures:

1. Misconfiguration in lnetctl:
   an entry missing a key could silently pick up
   the value of a neighbouring or nested node with the same name
   (e.g. the "interfaces" value of the following net entry).
2. A use-after-free in cYAML_build_error():
   the recursive search could return a nested error entry
   instead of the command node. Since
   cYAML_create_seq_item() only handles CYAML_TYPE_ARRAY, control
   fell through to the "goto failed" branch, which frees the error
   tree and prints "fatal: out of memory", seen while running
   "lnetctl import --old-api".

The solution is to restore the shallow search.
Only the direct children of the parent node are examined,
keeping the self-match on the parent node in the function,
as cYAML_get_object_child() don't have it.
Currently all call sites expect the direct-child semantics,
none rely on the recursive behaviour.

The failed: path in cYAML_build_error() is fixed as well.
Freed error tree through local copy "r" and set *root = NULL.
So to avoid the later jt_import() print and free the same tree
again and cause a use_after_free error.

Add sanity-lnet test_171 which imports a YAML with several
net entries where the first one is missing the "interfaces" key,
verifying that the following entry's "interfaces" value
is not picked up and the import succeeds.

Fixes: c906ab9c88ef ("LU-7734 lnet: configuration fixes")
Signed-off-by: Xiyang Wang <xiwang@ddn.com>
Change-Id: I27f2213dbdf6d2c2c5388f2eda3f7d2bc75edc73
69839 master J –B ✓T ✓R 0/2
LU-20999 utils: remove lctl add_conn and del_conn commands
reviewing Timothy Day · CI green — awaiting your review
M +1 −196
13d
build #134118 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Patrick Farrell
owner Timothy Day · uploader Timothy Day · PS1 uploaded 14d ago · NEW · open in Gerrit ↗
commit message
LU-20999 utils: remove lctl add_conn and del_conn commands

lctl add_conn and del_conn injected LCFG_ADD_CONN and LCFG_DEL_CONN
records into a device by hand. Nothing in the test suite, lustre-iokit
or the man pages uses them, and del_conn was actually sending
LCFG_DEL_MOUNTOPT, so it never worked as documented.

The kernel handling of LCFG_ADD_CONN stays, since the MGS config logs
still emit it for failover nodes and tgt_mount.c synthesizes it for
LWP devices. LCFG_DEL_CONN, however, has never been written by the
MGS or any other in-tree producer, so the kernel path behind it is
dead: drop the class_process_config() case, class_del_conn(),
obd_del_conn(), the o_del_conn method and client_import_del_conn().
The LCFG_DEL_CONN value itself is kept in the UAPI header since it is
part of the config record format checked by wirecheck.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I7dd160fb1869452a847b1c9a4bd364b46a6a6964
69292 master J ✗1B ✓T ✓R -1/2−
LU-20841 lnet: fix acceptor listener teardown race
reviewing Cyril Bordage · CI green — awaiting your review (needs rebase first)
needs rebase 4 unresolved M +104 −79
13d
CI green — awaiting your review (needs rebase first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-lfsck@zfs+DNE:test_18eseen in 11 other reviews
build #132453 SUCCESS · tests all Maloo sessions
no vote yet: Manish Regmi, Xinxia Qu, Serguei Smirnov, Chris Horn
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-05 06:47 Gerrit AI review for Lustre COMMIT_MSG:29 — (minor) Can pta_odata really be stale across an unload/reload, or NULL before the first listener? Module statics are reinitialised on load.
Gerrit AI review for Lustre PS1 · 2026-10-05 06:47
(minor) Can pta_odata really be stale across an unload/reload, or NULL before the first listener? Module statics are reinitialised on load. The old code also set pta_odata before installing lnet_acceptor_ready, so the callback could not run with a NULL value. Every TCP listener also saves the same sock_def_readable. Storing it per socket is fine, but this rationale doesn't seem to describe a real failure.
reply PS1 2026-10-05 06:47 Gerrit AI review for Lustre COMMIT_MSG:43 — (minor) Is socket_lock actually shared with a softirq callback? lnet_acceptor_ready() never takes it; it only takes sk->sk_callback_lock. Ev
Gerrit AI review for Lustre PS1 · 2026-10-05 06:47
(minor) Is socket_lock actually shared with a softirq callback? lnet_acceptor_ready() never takes it; it only takes sk->sk_callback_lock. Every socket_lock user runs in process context, so the spin_lock_bh() conversion looks unnecessary, and this sentence doesn't match the code. Also, the thing leaked on lnet_sock_listen() failure was the lsock allocation, not a listening socket.
reply PS1 2026-10-05 06:47 Gerrit AI review for Lustre acceptor.c:151 — (defect) Is it safe to trust sk_user_data here when sk is not the listener? sk_clone_lock() copies the listener's sk_data_ready and sk_user_
Gerrit AI review for Lustre PS1 · 2026-10-05 06:47
(defect) Is it safe to trust sk_user_data here when sk is not the listener? sk_clone_lock() copies the listener's sk_data_ready and sk_user_data into every child socket. sk_user_data is cleared only when it is tagged SK_USER_DATA_NOCOPY, and this patch does not tag it. So every connection that kernel_accept() returns also runs lnet_acceptor_ready(), with sk_user_data == lsock. The old code never read sk_user_data, so this is new.

That child is then handed to ksocklnd. ksocknal_create_conn() sends the passive HELLO and then calls ksocknal_lib_set_callback(). That function sets sk_user_data = conn before it sets sk_data_ready, under ksnd_global_lock but not sk_callback_lock. If data from the peer arrives in that window, a softirq that already entered lnet_acceptor_ready() reads a ksock_conn as a listening_socket and calls lsock->liss_odata, which is whatever ksock_conn field sits at that offset.

ksocknal_lib_reset_callback() has the mirror window when the conn closes. It restores sk_data_ready = lnet_acceptor_ready (the saved value) before it clears sk_user_data.

The child can also outlive the lsock it points to. lnet_accept() looks up the NI by the NID in the request, not by the listener. For example, a connection arrives on tcp0's listener but asks for a tcp1 NID, and then tcp0 is deleted. lnet_acceptor_put_socket() then frees lsock while connd is still reading the HELLO on that child.

svc_tcp_listen_data_ready() in sunrpc handles this case by bailing out unless sk->sk_state == TCP_LISTEN. Alternatively, after kernel_accept() succeeds, the acceptor thread could restore the child's sk_data_ready to lsock->liss_odata and clear sk_user_data under the child's sk_callback_lock. That would also stop ksocklnd from saving lnet_acceptor_ready as its "original" callback.
reply PS1 2026-10-05 06:47 Gerrit AI review for Lustre api-ni.c:3453 — (minor) This isn't a bug, but the err_acceptor_stop label no longer stops the acceptor now that lnet_acceptor_stop() has moved below lnet_sh
Gerrit AI review for Lustre PS1 · 2026-10-05 06:47
(minor) This isn't a bug, but the err_acceptor_stop label no longer stops the acceptor now that lnet_acceptor_stop() has moved below lnet_shutdown_lndnets(). If the patch is refreshed, consider renaming it (e.g. err_reset_refcount) so the unwind labels still describe what they undo.
owner Cyril Bordage · uploader Cyril Bordage · PS1 uploaded 36d ago · NEW · open in Gerrit ↗
commit message
LU-20841 lnet: fix acceptor listener teardown race

A client crash is seen in __wake_up_common(), called from the
NET_RX_SOFTIRQ (napi_gro_receive -> tcp_v4_rcv ->
tcp_child_process), right after LNet has been unloaded and
reloaded. The waitqueue being woken is lnet_acceptor_waitq,
reached from a listening socket whose sk_data_ready still points
at lnet_acceptor_ready() in the module that is going away.

Several problems allow this:

- sk_data_ready is installed and restored without holding
  sk->sk_callback_lock, so a softirq can be using the old value
  while it is being replaced, and nothing waits for it to
  complete before sock_release() and the module unload. Install
  and restore the callback under
  write_lock_bh(&sk->sk_callback_lock), let lnet_acceptor_ready()
  take the lock for read and NOOP if it lost the race, and call
  synchronize_net() before releasing the socket.

- The previous callback is saved in a single global,
  lnet_acceptor_state.pta_odata, overwritten by every add and
  never reset, hence stale across an unload/reload and NULL
  before the first listener is added. Store it per listening
  socket instead.

- LNetNIFini() calls lnet_acceptor_stop() before
  lnet_shutdown_lndnets(). The acceptor thread exit path drains
  socket_list and releases the listeners itself, so when
  ksocknal_shutdown() later calls lnet_acceptor_remove_sockets()
  the listener is already gone and "Interface %s not found" is
  reported. The same inversion exists in the LNetNIInit() error
  path. Call lnet_acceptor_stop() after lnet_shutdown_lndnets(),
  as lnet_dyn_del_ni() and lnet_dyn_del_net() already do.

The four open coded refcount drops are folded into
lnet_acceptor_put_socket(), socket_lock is taken with the _bh
variants now that it is shared with a softirq callback, and the
listening socket leaked when lnet_sock_listen() fails is freed.

Assisted-by: ClaudeCode:claude-opus-5
Test-Parameters: trivial testlist=sanity-selinux,sanity-lnet
Fixes: 2e49bc7dd1 ("LU-18812 lnet: restrict IP addresses that socklnd listens on")
Fixes: 40e4d957e3 ("LU-10391 lnet: use data_ready callback to trigger accept()")
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I62000764b3b8ca8b3628519f50a6ef467a62287b
66738 master J –B ✓T ✓R -1/2−
LU-20412 ksocklnd: move lib-socket and acceptor to the LND
reviewing Timothy Day · CI green — awaiting your review (needs rebase first)
needs rebase 5 unresolved L +319 −348
13d
CI green — awaiting your review (needs rebase first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
build #134012 SUCCESS · tests all Maloo sessions
no vote yet: Jinshan Xiong, Chris Horn
patchsets: PS1 06-18 PS2 10-19
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-10-20 11:25 Gerrit AI review for Lustre COMMIT_MSG:14 — (minor) Is this accurate? Before the patch, the acceptor also stayed off when there was no socklnd net:
Gerrit AI review for Lustre PS2 · 2026-10-20 11:25
(minor) Is this accurate? Before the patch, the acceptor also stayed off when there was no socklnd net:

    lnet_acceptor_start()
        if (lnet_count_acceptor_nets() == 0)  /* not required */
            return 0;

and lnet_add_net_common() only called it when net->net_lnd->lnd_accept was set.

What actually changes:
- The acceptor's lifetime now follows socklnd base startup/shutdown. It is stopped only when the last socklnd NI goes away, so it now keeps running through lnet_shutdown_lndnets() in LNetNIFini().
- An invalid `accept=` value now fails only socklnd NI startup (with -ENETDOWN). Before, it failed LNetNIInit() for every network type with -EINVAL.
- Messages from acceptor.c and lib-socket.c are now logged under S_LND instead of S_LNET.

Would describing those changes be more useful than this sentence?
reply PS2 2026-10-20 11:25 Gerrit AI review for Lustre COMMIT_MSG:17 — (style) LU-20412 is filed as an Improvement, and 8be9e4136965 didn't introduce a bug. It only left lib-socket.c/acceptor.c in LNet after the
Gerrit AI review for Lustre PS2 · 2026-10-20 11:25
(style) LU-20412 is filed as an Improvement, and 8be9e4136965 didn't introduce a bug. It only left lib-socket.c/acceptor.c in LNet after their other users were removed. A Fixes: tag marks this as a bug fix for maintenance-branch backport tracking, which this refactor isn't. Could the tag be dropped and the commit referenced in the body instead (e.g. "Since commit 8be9e4136965 removed the other LNDs, ...")?
reply PS1 2026-06-18 20:58 Timothy Day patchset comment — This is moving a lot of socklnd specific code out of LNet. After this, the lnet_inet*_enumerate() family of functions are the largest offend
Timothy Day PS1 · 2026-06-18 20:58
This is moving a lot of socklnd specific code out of LNet. After this, the lnet_inet*_enumerate() family of functions are the largest offenders.
reply PS1 2026-06-22 14:20 Chris Horn acceptor.c:89 — accept_backlog is definitely tuned by large sites.
Timothy Day PS1 · 2026-06-18 20:59
We might have to think about backward compatibility for these tunables.
Chris Horn PS1 · 2026-06-22 14:20
accept_backlog is definitely tuned by large sites.

You also need to update sanity-lnet 290/291
reply PS2 2026-10-20 11:25 Gerrit AI review for Lustre enumerate.c:3 — (style) This isn't a bug, but this code was moved here verbatim from lib-socket.c, which carries the Oracle (2008, 2010) and Intel (2015, 20
Gerrit AI review for Lustre PS2 · 2026-10-20 11:25
(style) This isn't a bug, but this code was moved here verbatim from lib-socket.c, which carries the Oracle (2008, 2010) and Intel (2015, 2017) copyright lines. Should those notices come along with the moved code?
owner Timothy Day · uploader Timothy Day · PS2 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-20412 ksocklnd: move lib-socket and acceptor to the LND

... since the other LNDs that used these interfaces have
been gone for a long time. The functions for enumerating
ethernet interfaces have been moved to lnet/lnet/enumerate.c
for now. Remove all unneeded EXPORT_SYMBOL().

We now no longer start the acceptor thread if socklnd is
not loaded.

Fixes: 8be9e4136965 ("LU-6209 lnet: Delete all obsolete LND drivers")
Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ide7c66685ec3a0a81a08f1e6a3348a9ebd102589
69840 master J –B ✓T ✓R 0/2
LU-20999 utils: remove lctl getattr and setattr commands
reviewing Timothy Day · CI green — awaiting your review
1 unresolved L +2 −414
13d
build #134119 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Patrick Farrell
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-21 17:20 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) This says getattr was only used against the echo client, but the OSC case removed from osc_iocontrol() was added on purpose by 4143c
Gerrit AI review for Lustre PS1 · 2026-10-21 17:20
(minor) This says getattr was only used against the echo client, but the OSC case removed from osc_iocontrol() was added on purpose by 4143c3bdec ("LU-15452 utils: support lctl getattr for osc"). It also added the FID parsing in jt_str_to_ost_id(), so that

    lctl --device <fsname>-OSTxxxx-osc-<instance> getattr [0x100010000:0x2:0x0]

could dump OST object attributes from a client (parent FID, layout_version, data_version, projid, ...). As far as I can see nothing else in the tree gives that per-object view from a client.

Is dropping this debugging use intentional? If so, could the commit message say so and explain why it is no longer needed? Otherwise, would it make sense to keep `getattr` for OSC devices and remove only setattr and the test_* commands?
owner Timothy Day · uploader Timothy Day · PS1 uploaded 14d ago · NEW · open in Gerrit ↗
commit message
LU-20999 utils: remove lctl getattr and setattr commands

lctl getattr and setattr issued OBD_IOC_GETATTR and OBD_IOC_SETATTR
against the echo client, and test_getattr and test_setattr looped
the same ioctls as micro-benchmarks. Nothing in the test suite or
lustre-iokit uses setattr or either test_ command. The only getattr
caller was the obdecho_test helper in sanity.sh test 180, which
added it in LU-3267 as a regression check for the echo sequence
handling in the ioctl. The echo client no longer takes a bare object
id without a sequence, and test_brw already exercises the same
object lookup path, so the check is redundant.

Remove all four commands and their jt_obd_getattr(),
jt_obd_setattr(), jt_obd_test_getattr() and jt_obd_test_setattr()
handlers, the private jt_str_to_ost_id() helper, the OBD_IOC_GETATTR
and OBD_IOC_SETATTR handlers in the echo client and OSC, and the
getattr step from obdecho_test(). Keep the ioctl numbers reserved in
the UAPI header.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I0d48f2c88bdf3e59cd12b004b04c5bcb6a6a6964
58637 master J –B ✓T ✓R 0/2
LU-18813 osd-wbcfs: store and pin OST objects in MemFS
reviewing Qian Yingjin · CI green — awaiting your review
12 unresolved L +557 −5
14d
build #134043 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+6 earlier PS1 04-02 PS2 04-02 PS3 04-02 PS4 04-03 PS5 04-03 PS6 04-05
PS7 05-25 Timothy Day PS8 01-13 Timothy Day PS9 01-13 Timothy Day PS10 07-04 Timothy Day PS11 10-19 Timothy Day
threads: 12 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre COMMIT_MSG:11 — The body only describes the pinning effect, but the diff also adds a whole /O directory hierarchy (osd_ondisk.c with simple_mkdir(), osd_ost
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
The body only describes the pinning effect, but the diff also adds a whole /O directory hierarchy (osd_ondisk.c with simple_mkdir(), osd_ost_init(), osd_seq_load(), osd_obj_map_insert()/osd_obj_map_delete()) and two new helpers in osd_handler.c, osd_fld_lookup() and fid_is_on_ost().

Could the body say that OST/llog objects are now linked into an O/<seq>/dN tree modelled on osd-ldiskfs, and that this is what pins them? As written most of the 557 added lines are unexplained.
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_internal.h:276 — osd_fld_lookup() is defined in osd_handler.c, not osd_handle.c. Same for the /* osd_procfs.c */ comment above: osd_wbcfs_procfs_init()/_fini
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
osd_fld_lookup() is defined in osd_handler.c, not osd_handle.c. Same for the /* osd_procfs.c */ comment above: osd_wbcfs_procfs_init()/_fini() live in osd_lproc.c.
reply PS11 2026-10-20 21:41 Gerrit AI review for Lustre osd_internal.h:234 — (suggestion) Following up on the PS7 question about sharing this code instead of copying it: the new lustre/osd/osd_lib.c library is now in
Gerrit AI review for Lustre PS11 · 2026-10-20 21:41
(suggestion) Following up on the PS7 question about sharing this code instead of copying it: the new lustre/osd/osd_lib.c library is now in the parent commit and this patch uses osd_obj_seq_find()/osd_obj_seq_name()/osd_obj_map_free() from it. osd_oid_name() is still a verbatim copy of the osd-ldiskfs helper, though, and it does not depend on anything OSD-specific. Could it move into lustre/osd/osd_lib.c next to osd_obj_seq_name(), its sibling? fid_is_on_ost() and osd_fld_lookup() are copies too (the latter is now in three OSDs), but sharing those would need od_is_ost abstracted, so they could be a later step.
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_object.c:646 — fid_is_on_ost() returns 1 for fid_is_last_id(), so LAST_ID objects go through osd_obj_map_insert() and end up as O/<seq>/d0/0. The layout do
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
fid_is_on_ost() returns 1 for fid_is_last_id(), so LAST_ID objects go through osd_obj_map_insert() and end up as O/<seq>/d0/0. The layout documented at the top of osd_ondisk.c (and built by osd-ldiskfs) puts them at O/<seq>/LAST_ID.

osd_oi_insert() in osd-ldiskfs checks fid_is_last_id() first and routes to osd_obj_spec_insert(); that check has no counterpart here.
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_object.c:647 — If osd_obj_map_insert() fails (d_alloc() returning -ENOMEM, or osd_seq_load() failing to allocate/create O/<seq>/dN), rc is returned but the
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
If osd_obj_map_insert() fails (d_alloc() returning -ENOMEM, or osd_seq_load() failing to allocate/create O/<seq>/dN), rc is returned but the inode created by __osd_create() is left in place: oo_inode is set and __osd_object_init() has already set LOHA_EXISTS.

So dt_create() reports failure while dt_object_exists() is true, and a retry for the same FID hits the -EEXIST at the top of this function. osd-ldiskfs osd_create() unwinds this case explicitly:

    set_bit(LU_OBJECT_HEARD_BANSHEE, ...loh_flags);
    loh_attr &= ~LOHA_EXISTS;
    clear_nlink(inode); iput(inode); obj->oo_inode = NULL;

Should the same rollback happen here?
reply PS11 2026-10-20 21:41 Gerrit AI review for Lustre osd_object.c:689 — (style) This isn't a bug, but the object itself has been destroyed by this point; what failed is removing its O/<seq>/dN entry, so something
Gerrit AI review for Lustre PS11 · 2026-10-20 21:41
(style) This isn't a bug, but the object itself has been destroyed by this point; what failed is removing its O/<seq>/dN entry, so something like "cannot remove O/ map entry for "DFID"" would be more accurate. Also, the new messages here and in osd_ondisk.c (lookup FLD, cannot find %s) end with "rc=%d". The osd-ldiskfs originals use the usual ": rc = %d" form.
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_ondisk.c:14 — SUBSYSTEM_DEBUG is not a thing; every other file in this directory uses DEBUG_SUBSYSTEM. libcfs_debug.h defaults DEBUG_SUBSYSTEM to S_UNDEFI
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
SUBSYSTEM_DEBUG is not a thing; every other file in this directory uses DEBUG_SUBSYSTEM. libcfs_debug.h defaults DEBUG_SUBSYSTEM to S_UNDEFINED, so all CDEBUG/CERROR/ENTRY output from this file is filed under the undefined subsystem and "lctl set_param subsystem_debug=osd" will not collect it.
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_ondisk.c:114 — The guard looks inverted relative to osd-ldiskfs simple_mkdir(), which returns early when dd_rdonly is set and only fixes the mode when it a
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
The guard looks inverted relative to osd-ldiskfs simple_mkdir(), which returns early when dd_rdonly is set and only fixes the mode when it actually differs:

    if (unlikely(osd->od_dt_dev.dd_rdonly))
        RETURN(dchild);
    if ((old_mode & S_IALLUGO) != (mode & S_IALLUGO))
        ...fixup...

As written the mode is rewritten only when the device is read-only, and never when it is writable, so the comment above does not match the code.
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_ondisk.c:189 — This frees osd->od_ost_map, but od_ost_map is only assigned on the success path below; osd comes from OBD_ALLOC_PTR() in osd_device_alloc(),
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
This frees osd->od_ost_map, but od_ost_map is only assigned on the success path below; osd comes from OBD_ALLOC_PTR() in osd_device_alloc(), so it is still NULL here. OBD_FREE() is a no-op on NULL, so this leaks the ost_map allocated above whenever simple_mkdir("O") fails.

Should it be OBD_FREE_PTR(ost_map)?
reply PS10 2026-07-28 14:23 Gerrit AI review for Lustre osd_ondisk.c:397 — This isn't a bug, but @obj is never used in this function (only mentioned in the TODO comment below), and simple_mkdir() never uses its @env
Gerrit AI review for Lustre PS10 · 2026-07-28 14:23
This isn't a bug, but @obj is never used in this function (only mentioned in the TODO comment below), and simple_mkdir() never uses its @env either. If the patch is refreshed, consider dropping the unused parameters.
reply PS11 2026-10-20 21:41 Gerrit AI review for Lustre osd_ondisk.c:451 — (nit) The next statement overwrites the mtime set here straight away, so this line could be dropped if the patch is refreshed (osd_index_dir
Gerrit AI review for Lustre PS11 · 2026-10-20 21:41
(nit) The next statement overwrites the mtime set here straight away, so this line could be dropped if the patch is refreshed (osd_index_dir_delete() has the same duplicate).
reply PS11 2026-10-20 21:41 Gerrit AI review for Lustre osd_ondisk.c:461 — (defect) Is this dentry actually made negative anywhere? d_make_discardable() only clears the persistent flag and drops that reference; on t
Gerrit AI review for Lustre PS11 · 2026-10-20 21:41
(defect) Is this dentry actually made negative anywhere? d_make_discardable() only clears the persistent flag and drops that reference; on the VFS unlink path it is vfs_unlink() calling d_delete() afterwards that unlinks the inode. Nothing here does that, so after this dput() the dentry stays hashed and positive on the LRU with refcount 0, and it still holds the ihold() reference from osd_obj_map_insert(). This assumes retain_dentry() still keeps hashed dentries when there is no ->d_delete; memfs sets no d_op.

Result on the OST, after ofd_object_destroy() -> dt_ref_del() + dt_destroy():

    osd_object_delete() -> iput()   /* i_count 2 -> 1, not evicted */

so memfs_evict_inode() -> truncate_inode_pages_range() only runs once the dcache shrinker or umount gets to the dentry. Before this patch, inode_just_drop() freed the object's pages as soon as the destroyed lu_object went away. On a memory-backed OST that means `rm` of a large file does not give the RAM back.

The stale inode also stays in the inode hash. If the same FID is created again (e.g. an OBD_FL_RECREATE_OBJS recreate, or orphan cleanup without SKIP_ORPHAN), insert_inode_locked() in osd_mkfile() should hit it and fail with -EIO ("doubly allocated?").

Would a d_drop() before the final dput() fix this, so the dentry is killed and the inode released? A plain d_delete() would leave a hashed negative dentry, and a later d_lookup() of the same name would then reach the LASSERT(S_ISREG(inode->i_mode)) with inode == NULL. osd_index_dir_delete() has the same pattern for MDT names; that predates this patch, but it matters more here because these are data objects whose IDs can be reused.
owner Qian Yingjin · uploader Timothy Day · PS11 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-18813 osd-wbcfs: store and pin OST objects in MemFS

In this patch, we store and pin OST objects in MemFS.
Thus, the OST objects will not be evicted from cache by the cache
shrinker (i.e. the command "echo 3 > /proc/sys/vm/drop_caches")

Test-Parameters: trivial
Signed-off-by: Yingjin Qian <qian@ddn.com>
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I53f0abca2577cdb15f34df5fa44f55aa57ae96ca
58987 master J –B ✓T ✓R 0/2
LU-17848 osd: deduplicate osd_map_remote_to_local()
reviewing Timothy Day · CI green — awaiting your review
osd-mem 7 unresolved M +56 −89
14d
build #134042 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger, Alex Zhuravlev
patchsets:
+4 earlier PS1 04-27 PS2 01-13 PS3 01-13 Janitor Bot PS4 01-13
PS5 01-18 PS6 05-12 PS7 05-29 PS8 07-04 PS9 10-19
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS9 2026-10-20 20:50 Gerrit AI review for Lustre COMMIT_MSG:10 — (typo) The function is moved, not copied: both osd-ldiskfs and osd-wbcfs drop their static copies. Also, "Mapping between niobuf_local" read
Gerrit AI review for Lustre PS9 · 2026-10-20 20:50
(typo) The function is moved, not copied: both osd-ldiskfs and osd-wbcfs drop their static copies. Also, "Mapping between niobuf_local" reads as if the second half is missing. Maybe something like: "osd-ldiskfs and osd-wbcfs each carry an identical osd_map_remote_to_local() to initialize a niobuf_local array from a byte range. Move it to lustre/osd/osd_lib.c so both OSDs share one copy."
reply PS1 2025-04-28 18:20 Alex Zhuravlev obd.h:467 — I'd disagree, local_niobuf is a structure representing how OSD sees data, mostly in terms of buffers.
Andreas Dilger PS1 · 2025-04-28 05:31
You don't think it is worthwhile to keep the osd_ prefix?

The osd.h is a system-wide header and not a great place to start adding OSD-specific code. Also, this function is too large for a static inline. 

I think there should be a "library" for the shared code of the OSs. At least "osd_common.h" and "osd_common.c" that is linked in to each OSD (via symlinks) rather than a separate library since only one OSD is ever likely to be used at any time on a system.
Timothy Day PS1 · 2025-04-28 18:07
> You don't think it is worthwhile to keep the osd_ prefix?

It's not really an OSD function IMO - it's just mapping between two non-OSD structs.

> The osd.h is a system-wide header and not a great place to start adding OSD-specific code. Also, this function is too large for a static inline. 

I put this next to the "struct niobuf_local" definition, which I thought made sense.

> I think there should be a "library" for the shared code of the OSs. At least "osd_common.h" and "osd_common.c" that is linked in to each OSD (via symlinks) rather than a separate library since only one OSD is ever likely to be used at any time on a system.

I can do that. I'll push this to lustre/osd/ and maybe link into obdclass. I think multiple OSDs would be used. I know some vendors mix ldiskfs/ZFS at least. It's desirable to be able to test these combinations on a local node.
Alex Zhuravlev PS1 · 2025-04-28 18:20
I'd disagree, local_niobuf is a structure representing how OSD sees data, mostly in terms of buffers.
reply PS8 2026-07-28 12:45 Gerrit AI review for Lustre osd.h:6 — (style) The file description still scopes this header to "/O directory" definitions, which no longer covers the niobuf/lnb mapping declarati
Gerrit AI review for Lustre PS8 · 2026-07-28 12:45
(style) The file description still scopes this header to "/O directory" definitions, which no longer covers the niobuf/lnb mapping declaration added below. The matching comment at the top of lustre/osd/osd_lib.c has the same problem. If the patch is refreshed, consider broadening both to say they hold code shared between OSD implementations.
reply PS8 2026-07-28 12:45 Gerrit AI review for Lustre osd.h:59 — (suggestion) This isn't a bug, but the new name reads backwards from what the function does. There is no niobuf input here - the inputs are
Gerrit AI review for Lustre PS8 · 2026-07-28 12:45
(suggestion) This isn't a bug, but the new name reads backwards from what the function does. There is no niobuf input here - the inputs are a plain byte range (offset, len) - and no pages come out either, since lnb_page is explicitly set to NULL for every entry. What it really does is fill an lnb array from a range. Something like osd_map_range_to_lnbs() or osd_init_lnbs() would describe that more accurately.
reply PS8 2026-07-28 12:45 Gerrit AI review for Lustre osd_lib.c:128 — (style) Every other function in this file has a kernel-doc block; this one has none. Now that it is a shared interface declared in osd.h, th
Gerrit AI review for Lustre PS8 · 2026-07-28 12:45
(style) Every other function in this file has a kernel-doc block; this one has none. Now that it is a shared interface declared in osd.h, the contract is worth spelling out - in particular that -EOVERFLOW is returned once maxlnb entries have been filled, and that *nrpages still holds the partial count on that path (both callers just propagate rc and drop it).
reply PS8 2026-07-28 12:45 Gerrit AI review for Lustre osd_lib.c:159 — (minor) This assertion previously lived in osd_io.c, which sets:
Gerrit AI review for Lustre PS8 · 2026-07-28 12:45
(minor) This assertion previously lived in osd_io.c, which sets:

    #define DEBUG_SUBSYSTEM S_OSD

osd_lib.c doesn't define DEBUG_SUBSYSTEM, so libcfs_private.h falls back to S_UNDEFINED and the record produced by LASSERTF() is no longer tagged as osd. Adding a DEBUG_SUBSYSTEM S_OSD define at the top of osd_lib.c would restore that (osd_ost_fini()'s ENTRY/EXIT is in the same situation today).

On a related note, both original copies wrapped this in ENTRY/RETURN and the shared one uses a plain return - was dropping the D_TRACE tracing of the mapping loop intended?
reply PS6 2026-05-20 21:04 Timothy Day test-framework.sh:1183 — I think this is leftover from a previous iteration of the patch. In the current series, it's not a separate module.
Andreas Dilger PS6 · 2026-05-20 20:56
I don't really think that this should be a *separate* module, but just a library that is linked into the existing osd-* modules.  I don't think saving a few KiB of code is going to make a difference (and independent modules have their own overhead) since running multiple OSDs on a single server is extremely uncommon.

IMHO, the main benefit of osd-lib is from code/maintenance reduction.
Timothy Day PS6 · 2026-05-20 21:04
I think this is leftover from a previous iteration of the patch. In the current series, it's not a separate module.
owner Timothy Day · uploader Timothy Day · PS9 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-17848 osd: deduplicate osd_map_remote_to_local()

Mapping between niobuf_local is done for both osd-wbcfs
and osd-ldiskfs. Copy the function to lustre/osd/ to be
shared by both OSDs. Rename it to osd_map_niobuf_to_pages()
to be clearer.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I02df99d2363485946130ee4c8973359cfaae8c5d
67523 master J !B ✓T ✓R 0/2
LU-20519 llite: add some opencache stats
reviewing Timothy Day · CI green — awaiting your review
7 unresolved L +419 −5
19d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.7 / x86_64 ran 1 tests. 1 tests failed: node-provisioning. %% NODE-PROVISIONING FAILED MULTIPLE TIMES FOR review-ldiskfs session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 1 tests. 1 tests failed: node-provisioning. %% NODE-PROVISIONING FAILED MULTIPLE TIMES FOR review-ldiskfs session
build #132732 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger, Patrick Farrell
patchsets: PS1 07-24 PS2 09-30 PS3 10-02
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-24 23:21 Andreas Dilger COMMIT_MSG:10 — (defect) should list the stats parameter name and should have an example of the output being printed.
Andreas Dilger PS1 · 2026-07-24 23:21
(defect) should list the stats parameter name and should have an example of the output being printed.
reply PS3 2026-10-05 08:34 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) The message describes only the hits/misses/threshold lock counters. The patch also adds a second debugfs parameter, `llite.*.open_ca
Gerrit AI review for Lustre PS3 · 2026-10-05 08:34
(minor) The message describes only the hits/misses/threshold lock counters. The patch also adds a second debugfs parameter, `llite.*.open_cache_reopen_hist`, and a `miss_reopen_time` counter, and neither is mentioned. Could they be described here with a short example, since they are user-visible?

The sample output also doesn't match what the code prints. lprocfs_stats_seq_show() pads names to 35 columns, so `snapshot_time`, `hits`, etc. are padded to 35 (as the man page example shows), not about 25.
reply PS3 2026-10-05 08:34 Gerrit AI review for Lustre COMMIT_MSG:24 — (minor) The patch adds two man pages (llite.open_cache_stats.4 and llite.open_cache_reopen_hist.4), so this should say "man pages for the ne
Gerrit AI review for Lustre PS3 · 2026-10-05 08:34
(minor) The patch adds two man pages (llite.open_cache_stats.4 and llite.open_cache_reopen_hist.4), so this should say "man pages for the new parameters".
reply PS3 2026-10-05 08:34 Gerrit AI review for Lustre llite.open_cache_reopen_hist.4:68 — (nit) The code prints the header with "%-11s %14s %4s %4s", which gives `reopen_ms misses % cum%` (one space before `cum%`, not
Gerrit AI review for Lustre PS3 · 2026-10-05 08:34
(nit) The code prints the header with "%-11s %14s %4s %4s", which gives `reopen_ms           misses    % cum%` (one space before `cum%`, not two). Only worth fixing if the patch is refreshed anyway.
reply PS1 2026-07-24 23:21 Andreas Dilger lproc_llite.c:2931 — Please add a man4 page to describe the stats file.
Andreas Dilger PS1 · 2026-07-24 23:21
Please add a man4 page to describe the stats file.
reply PS3 2026-10-05 08:34 Gerrit AI review for Lustre lproc_llite.c:2917 — (style) This isn't a bug, but BIT() is for bitmasks. Here it is printed as a numeric bucket limit in msecs, so `1UL << i` would say what is
Gerrit AI review for Lustre PS3 · 2026-10-05 08:34
(style) This isn't a bug, but BIT() is for bitmasks. Here it is printed as a numeric bucket limit in msecs, so `1UL << i` would say what is meant.
reply PS3 2026-10-05 08:34 Gerrit AI review for Lustre lproc_llite.c:3027 — (minor) This problem predates the patch, but the new label adds one more path into it. If the ll_oc_stats allocation fails, the code reaches
Gerrit AI review for Lustre PS3 · 2026-10-05 08:34
(minor) This problem predates the patch, but the new label adds one more path into it. If the ll_oc_stats allocation fails, the code reaches out_debugfs and calls debugfs_remove_recursive(sbi->ll_debugfs_entry) without clearing the pointer. ll_fill_super() ignores the error and the mount continues. At umount, ll_debugfs_unregister_super() then calls debugfs_remove_recursive() again on the same, already freed dentry. Also, ll_ra_stats and ll_stats are freed here while their debugfs files still exist.

This is ENOMEM-only and doesn't need to block this patch. A separate fix could remove the debugfs dir before freeing the stats and then set ll_debugfs_entry to NULL.
owner Timothy Day · uploader Timothy Day · PS3 uploaded 33d ago · NEW · open in Gerrit ↗
commit message
LU-20519 llite: add some opencache stats

It can be difficult to understand if opencache is effective
without some stats. Add llite.*.open_cache_stats to count the
opens served from a cached open handle, the opens that needed
an open RPC, and the open lock requests triggered by the
opencache_threshold_count and opencache_threshold_ms tunables:

  # lctl get_param llite.*.open_cache_stats
  llite.lustre-ffff888150068000.open_cache_stats=
  snapshot_time             1790789687.052634017 secs.nsecs
  start_time                1790789686.511679375 secs.nsecs
  elapsed_time              0.540954642 secs.nsecs
  hits                      2 samples [reqs]
  misses                    1 samples [reqs]
  threshold_count_locks     1 samples [reqs]

Add sanity test_429b to check the counters, and a man page for
the new parameter.

Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I22cfc5cd0f65c29a6a8acac756ec5d678dce881a
65894 master J !B ✓T ✓R 0/2
LU-20259 tests: copy simul.c to lustre/tests/
reviewing Timothy Day · CI green — awaiting your review
4 unresolved XL +1290 −10
19d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #132746 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Brian Behlendorf, Patrick Farrell
patchsets: PS1 05-14 PS2 05-14 PS3 10-02
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-05-14 17:55 Andreas Dilger COMMIT_MSG:12 — (minor) it would be useful to include the git hash of the imported version into the commit message, in case it ever changes.
Andreas Dilger PS1 · 2026-05-14 17:55
(minor) it would be useful to include the git hash of the imported version into the commit message, in case it ever changes.
reply PS1 2026-05-14 17:55 Andreas Dilger functions.sh:430 — (defect) this should be kept, so that it can be run without external dependencies?
Andreas Dilger PS1 · 2026-05-14 17:55
(defect) this should be kept, so that it can be run without external dependencies?
reply PS3 2026-10-05 10:43 Gerrit AI review for Lustre simul.c:1260 — (minor) This changes behavior rather than just silencing -Wunused-result, which doesn't match the commit message's "only changed to fix comp
Gerrit AI review for Lustre PS3 · 2026-10-05 10:43
(minor) This changes behavior rather than just silencing -Wunused-result, which doesn't match the commit message's "only changed to fix compiler warnings".

With `-s`, mpirun (Open MPI and MPICH/hydra) forwards stdin only to rank 0. Every other rank gets /dev/null, so fgets() returns NULL right away. Upstream ignored that, so the other ranks went into the test and waited on its collectives for rank 0. Now they `break` out of the iteration loop, skip every test, and reach MPI_Finalize(). Rank 0 then hangs (or aborts) in the first MPI_Barrier()/MPI_Gather() after Enter is pressed.

The same EOF on rank 0 (e.g. ^D) silently skips the remaining iterations and still prints "All tests passed!".

Would something like this keep the upstream semantics?

    if (rank == 0 && !fgets(linebuf, sizeof(linebuf), stdin))
        singlestep = 0;

The parallel-scale harness never passes `-s`, so the automated test sessions aren't affected.
reply PS1 2026-05-14 17:55 Andreas Dilger test-framework.sh:541 — (style) prefer `[[ ... ]]` for bash.
Andreas Dilger PS1 · 2026-05-14 17:55
(style) prefer `[[ ... ]]` for bash.

You could fix the `$MDSRATE` check as well, or we could remove that old code completely and just use mdtest instead.
owner Timothy Day · uploader Timothy Day · PS3 uploaded 32d ago · NEW · open in Gerrit ↗
commit message
LU-20259 tests: copy simul.c to lustre/tests/

... rather than depending on the upstream repo [1], which
is seldom updated. This tool is only a single file. The
file was copied from upstream commit 12bae210c127 and only
changed to fix compiler warnings.

Install the binary as 'll_simul' so that the lustre-tests
package does not conflict with the existing 'simul' package.
An external 'simul' is still used if 'll_simul' isn't found.

Clean up the style in run_simul() and remove the test
directory with stack_trap, so it's cleaned up on error.

[1] https://github.com/llnl/simul

Test-Parameters: trivial testlist=parallel-scale env=ONLY=simul
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I3595b70067bcb66708346f6d7da066a502aac7b2
68548 master J !B ✓T ✓R +1/2
LU-20676 llite: hash qstr in ll_iget_for_nfs()
reviewing Emoly Liu · CI green — awaiting your review
M +58 −2
21d
janitor run: 5 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 crashed RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
build #131293 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-11 04:47
no vote yet: Etienne AUJAMES, Qian Yingjin
patchsets:
+2 earlier PS1 09-01 PS2 09-01
PS3 09-01 PS4 09-03 PS5 09-04 PS6 09-07 PS7 09-08
owner Emoly Liu · uploader Emoly Liu · PS7 uploaded 57d ago · NEW · open in Gerrit ↗
commit message
LU-20676 llite: hash qstr in ll_iget_for_nfs()

QSTR_INIT() only sets .name and .len, so the ".lustre" and "fid" qstrs
used by ll_iget_for_nfs() have hash 0, and d_lookup() never matches
the VFS dentry. Then, every open_by_handle_at()/NFS decode of
LU_DOT_LUSTRE_FID or LU_OBF_FID d_add()s a fresh alias hashed under
bucket 0 that no path lookup can find.

To fix this issue, use try_lookup_noperm() instead of the open-coded
hash 0 qstr + d_lookup(). Once the hash is correct, it can return a
cached negative dentry that path lookup created, so drop it to match
a cache miss. On a fileset mount, it can also return a positive dentry
for a user-created ".lustre" directory, so verify the FID of a cached
positive dentry against LU_DOT_LUSTRE_FID and drop it if it doesn't
match. Also mark the FID-instantiated dentries valid with
d_lustre_revalidate() after d_add(), but only on a real filesystem
root mount; on a fileset/subdirectory mount, a valid cached .lustre
alias would let any user reach any FID via $MNT/.lustre/fid/[FID],
bypassing the subtree restriction.

Finally, extend llapi_fid_test test31 to open .lustre and .lustre/fid
via the VFS before decoding LU_OBF_FID, so the cache-hit branch in
ll_iget_for_nfs() is exercised by sanity.sh test_154g.

Test-Parameters: testlist=sanity env=ONLY=154g
Fixes: 52a97b4490 ("LU-8585 llite: add special fid handling for fhandle API")
Signed-off-by: Emoly Liu <emoly@whamcloud.com>
Change-Id: I8bdee04d321d8a13916b839814c4435833ee620a
56710 master J !B ✓T ✓R +0/2−
LU-18169 llite: wait unstable pages to be committed during umount
reviewing Qian Yingjin · CI green — awaiting your review
S +46 −0
22d
janitor run: 2 failing config(s), none unique to this patch — janitor results
2 optional test failure(s) — informational
build #112294 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2025-04-11 07:56 · Timothy Day -1 2026-10-13 14:08
no vote yet: Neil Brown, Patrick Farrell
patchsets: PS1 10-16 PS2 10-24 PS3 04-07
owner Qian Yingjin · uploader Qian Yingjin · PS3 uploaded 576d ago · NEW · open in Gerrit ↗
commit message
LU-18169 llite: wait unstable pages to be committed during umount

The client must wait unstable pages to be committed to the stable
storage during umount.

If a data OBD is in disconnected state during umount, the client
will wait for a certain time (30 seconds, by default) at most, and
then force to deactive the OBD to cleanup the uncommitted unstable
pages.
Otherwise, it will fail the replay-single.sh/test_89.

Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: I307b5e6063f6d726e5f84018ebeecd58bac860ab
68546 master J !B ✓T ✓R +1/2
LU-20675 utils: fix Netlink parse buffer overruns
reviewing Cyril Bordage · CI green — awaiting your review
3 unresolved S +22 −12
29d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #132528 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-10-02 13:48
no vote yet: Manish Regmi, Xinxia Qu
patchsets: PS1 09-01 PS2 09-11 PS3 09-11 PS4 09-29
threads: 0 need your reply · 3 waiting on others · 0 own notes · 0 bot
owner Cyril Bordage · uploader Cyril Bordage · PS4 uploaded 36d ago · NEW · open in Gerrit ↗
commit message
LU-20675 utils: fix Netlink parse buffer overruns

valgrind reported several issues when we try to add a nid that already
exists:
- Conditional jump or move depends on uninitialised value(s) in nla_ok
- Invalid read in jt_add_ni with cfs_expr_list_free
- Invalid free in jt_add_ni

Several changes were made to fix that.

1. Fix the extended-ACK (NLM_F_ACK_TLVS) parsing in
   yaml_netlink_parse_msg_error().
   Skip the embedded copy of the original request before parsing
   the TLVs, and size tb[] as NLMSGERR_ATTR_MAX + 1.

2. Size the value-branch parse arrays in yaml_netlink_msg_parse()
   as policy[maxtype + 1] and attrs[maxtype + 1]. libnl indexes
   these arrays directly by attribute type (1..maxtype inclusive),
   so an array of maxtype elements overflows by one.

3. Size the nested parse arrays in yaml_parse_value_list() as
   nest_policy[num + 1] and nest_info[num + 1] for the same reason.

4. Derive the yaml_nl_node allocation in yaml_parse_key_list() from
   the structure itself. Summing the members by hand left out the
   struct ln_key_list header, so the last lkl_list[] entry overflowed
   the heap, which is what tripped validate_nla() during net show.

Assisted-By: Claude Sonnet 4.5 <noreply@anthropic.com>

Test-Parameters: trivial testlist=sanity-lnet
Fixes: 3c39dac19aaf ("LU-9680 utils: add netlink infrastructure")
Fixes: 70149f4ea89a ("LU-9680 utils: fix Netlink / YAML library handling")
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: Ifea0d949b04ca1b3cf70a47f923e50829f087108
65203 master J !B ✓T ✓R 0/2
LU-19768 ldlm: add LDLM genetlink family
reviewing Timothy Day · CI green — awaiting your review
15 unresolved L +311 −2
30d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #132541 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-09 PS2 07-22 PS3 07-29 PS4 09-29
threads: 15 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-22 21:22 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldlm/ldlm_lockd.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:22
ldlm/ldlm_lockd.c:
 error: ldlm_init():uninitialized symbol 'rc'.
reply PS2 2026-07-28 10:14 Gerrit AI review for Lustre COMMIT_MSG:11 — The body only describes the new family, but the patch also reworks the existing cleanup labels in ldlm_init(): the #endif moves so ldlm_inte
Gerrit AI review for Lustre PS2 · 2026-07-28 10:14
The body only describes the new family, but the patch also reworks the existing cleanup labels in ldlm_init(): the #endif moves so ldlm_interval_tree_slab is now destroyed on client builds too, ldlm_glimpse_work_kmem gains a teardown, and the return value changes shape. Could the body explain that rework so it doesn't read as an unrelated hunk?
reply PS3 2026-07-29 21:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — ldlm/ldlm_lockd.c:
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:21
ldlm/ldlm_lockd.c:
 error: ldlm_init():uninitialized symbol 'rc'.
reply PS4 2026-10-05 10:57 Gerrit AI review for Lustre COMMIT_MSG:11 — (typo) This says "the previous patches", but only one patch comes before this in the series: 2c431c5847 ("LU-19768 obdclass: table-driven ne
Gerrit AI review for Lustre PS4 · 2026-10-05 10:57
(typo) This says "the previous patches", but only one patch comes before this in the series: 2c431c5847 ("LU-19768 obdclass: table-driven netlink framework"). If the message is refreshed, could it name that patch? Naming `lustre_obd_nl_start()`/`struct lustre_nl_obd_ops` too would make the dependency easy to find with git log grep.
reply PS3 2026-07-30 08:59 Gerrit AI review for Lustre kernelcomm.c:114 — (defect) `le_ns` is cached for the whole dump, but nothing pins the namespace - `class_incref()` only keeps the `obd_device` allocation aliv
Gerrit AI review for Lustre PS3 · 2026-07-30 08:59
(defect) `le_ns` is cached for the whole dump, but nothing pins the namespace - `class_incref()` only keeps the `obd_device` allocation alive.

For a server target the namespace is freed from precleanup, not from the final decref:

    class_cleanup() -> obd_precleanup() -> ldto_device_fini()
      -> ofd_device_fini() -> ofd_fini() -> ldlm_namespace_free_post()

Other obd references are still held at that point, and `OBDF_SET_UP` is only cleared after `class_cleanup()` returns, so the device still passes the collect filter the whole time.

`ldlm_namespace_free_post()` frees `ns_stats` inside `ldlm_namespace_debugfs_unregister()`, then sleeps in `ldlm_namespace_sysfs_unregister()` (`wait_for_completion(&ns->ns_kobj_unregister)`) before `kfree(ns->ns_name)` and `OBD_FREE_PTR(ns)`. A dump that lands in that window reaches `lustre_nl_put_dataset(msg, NULL, ...)` and dereferences `stats->ls_num`; after the free completes every `ns->` read below is a use-after-free. `ofd_fini()` also leaves `obd->obd_namespace` pointing at the freed namespace until the line after `ldlm_namespace_free_post()`, so `ldlm_filter_target()` and the `strscpy()` above can read `ns->ns_name` after it is gone.

`ldlm_pools_recalc()` already has the pattern for this - take `ns->ns_lock`, skip the namespace if `LDLM_NS_STOPPING` is set, otherwise `ldlm_namespace_get()` - with the bz21519 / LU-499 comment explaining why the refcount must not be taken on a namespace being freed. Should collect/release use `ldlm_namespace_get()`/`ldlm_namespace_put()` rather than relying on the obd refcount?
reply PS3 2026-07-30 08:59 Gerrit AI review for Lustre kernelcomm.c:168 — (defect) `lno_min_alloc` is left unset, so `lustre_obd_nl_start()` never assigns `cb->min_dump_alloc` and the dump runs in a single NLMSG_GO
Gerrit AI review for Lustre PS3 · 2026-07-30 08:59
(defect) `lno_min_alloc` is left unset, so `lustre_obd_nl_start()` never assigns `cb->min_dump_alloc` and the dump runs in a single NLMSG_GOODSIZE-class skb. `lustre_obd_nl_dump()` returns `rc`, not `msg->len`, so netlink treats the callback as finished after one pass - when the entries stop fitting, `genlmsg_put()` fails and the dump ends with -EMSGSIZE plus whatever happened to fit.

Rough per-entry cost here is the namespace name, seven u32s, a padded u64 and three nested `LDLM_NSS_*` datasets, around 470 bytes, on top of ~800 bytes for the key table. That is roughly 6 namespaces in a 4K skb and ~33 with libnl's default 16K receive buffer, while a client carries one namespace per MGC/MDC/OSC.

The existing dumps avoid this either by sizing the buffer up front (`STATS_MSG_MIN_SIZE`, `DEVICE_KEY_TABLE_PACKET_SIZE`) or by returning `msg->len` and resuming (`lustre_device_list_dump()` with `gdl_start`). Could this do one of the two? `lnc_index` already survives across calls, so returning `msg->len` would resume correctly - though `first` would then need to be per-skb instead of `lnc_index == 0`, since the HDR attribute has to open each message.
reply PS3 2026-07-30 08:59 Gerrit AI review for Lustre kernelcomm.c:187 — (minor) `lustre_ldlm_dump()` and `lustre_ldlm_done()` forward to the framework unchanged, so `ldlm_genl_ops` could point `.dumpit`/`.done` s
Gerrit AI review for Lustre PS3 · 2026-07-30 08:59
(minor) `lustre_ldlm_dump()` and `lustre_ldlm_done()` forward to the framework unchanged, so `ldlm_genl_ops` could point `.dumpit`/`.done` straight at `lustre_obd_nl_dump`/`lustre_obd_nl_done`. Only `.start` needs a wrapper, to bind `&ldlm_ops`.
reply PS4 2026-10-05 10:57 Gerrit AI review for Lustre kernelcomm.c:84 — (style) This isn't a bug, but `base` and `list` don't have a per-struct field prefix. `struct ldlm_entry` just above uses `le_`. If the patc
Gerrit AI review for Lustre PS4 · 2026-10-05 10:57
(style) This isn't a bug, but `base` and `list` don't have a per-struct field prefix. `struct ldlm_entry` just above uses `le_`. If the patch is refreshed, consider something like `lc_base`/`lc_list`. `offsetof()` in `ldlm_ops` would need the same change.
reply PS3 2026-07-30 08:59 Gerrit AI review for Lustre kernelcomm.h:5 — (style) This isn't a bug today, but the new header has no `#ifndef`/`#define` guard, so a second include would redefine `enum lustre_ldlm_at
Gerrit AI review for Lustre PS3 · 2026-07-30 08:59
(style) This isn't a bug today, but the new header has no `#ifndef`/`#define` guard, so a second include would redefine `enum lustre_ldlm_attrs`. Cheap to add while the file is new.
reply PS3 2026-07-30 08:59 Gerrit AI review for Lustre ldlm_lockd.c:23 — (minor) Nothing in this file appears to use anything from `lustre_kernelcomm.h` - `ldlm_netlink_init()`/`ldlm_netlink_fini()` come from the
Gerrit AI review for Lustre PS3 · 2026-07-30 08:59
(minor) Nothing in this file appears to use anything from `lustre_kernelcomm.h` - `ldlm_netlink_init()`/`ldlm_netlink_fini()` come from the local `kernelcomm.h`. Is this include needed?
reply PS4 2026-10-05 10:57 Gerrit AI review for Lustre ldlm_lockd.c:27 — (style) This isn't a bug, but local includes are normally kept in alphabetical order. That would put "kernelcomm.h" before "ldlm_internal.h"
Gerrit AI review for Lustre PS4 · 2026-10-05 10:57
(style) This isn't a bug, but local includes are normally kept in alphabetical order. That would put "kernelcomm.h" before "ldlm_internal.h".
reply PS2 2026-07-28 10:14 Gerrit AI review for Lustre ldlm_netlink.c:53 — (minor) `lru_size` is ns_nr_unused here, but ldlm.namespaces.*.lru_size shows ns_max_unused whenever LRU resize is off, and the current unus
Gerrit AI review for Lustre PS2 · 2026-07-28 10:14
(minor) `lru_size` is ns_nr_unused here, but ldlm.namespaces.*.lru_size shows ns_max_unused whenever LRU resize is off, and the current unused count is already exposed as lock_unused_count. Reusing lru_size for a different field next to the existing parameters is easy to misread - lock_unused_count for this one, and lru_size for the ns_max_unused attribute below, would line up with what admins already know.
owner Timothy Day · uploader Timothy Day · PS4 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-19768 ldlm: add LDLM genetlink family

Add a new ldlm genetlink family that exposes per-namespace lock
statistics (contention, LRU, timeouts, and lock stats) via the
table-driven netlink framework introduced in the previous patches.

TLC-bug-id: TLU-56
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I55bf842919d2cfd922f8050c11869ac962c57814
65205 master J ✗1B ✓T ✓R 0/2
LU-19768 quota: add quota genetlink family
reviewing Timothy Day · CI green — awaiting your review
24 unresolved L +805 −5
30d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanityn@ldiskfs+DNE:test_4seen in 4 other reviews
build #132538 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-09 PS2 07-22 PS3 07-29 PS4 09-29 PS5 09-29
threads: 24 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 10:01 Gerrit AI review for Lustre COMMIT_MSG:10 — A few claims here don't match the code.
Gerrit AI review for Lustre PS2 · 2026-07-28 10:01
A few claims here don't match the code.

"via the table-driven netlink framework": this file doesn't use lustre_nl_obd_ops / lustre_obd_nl_start()/dump()/done() from the previous patch - start/dump/done are hand-rolled here. Is there a reason the framework doesn't fit, and could that reason be stated instead?

"QSD reports per-slave usage and grant state": qsd_collect_acct_obj() sets qne_granted/qne_hardlimit/qne_softlimit to 0 and the dump only emits kbytes/inodes for "acct" records, so no grant state is reported.

"Add new quota genetlink families" is plural, but only the "lquota" family is added.

The qsd_config.c hunk that drops `static` from qfs_list/qfs_list_lock also isn't mentioned - worth a sentence saying why the QSD list has to become module-visible.
reply PS2 2026-07-28 10:01 Gerrit AI review for Lustre lustre_kernelcomm.h:599 — Tab alignment is off on this entry compared to its neighbours; same for the LUSTRE_QUOTA_ATTR_MANAGER and LUSTRE_QUOTA_ATTR_QTYPE lines in t
Gerrit AI review for Lustre PS2 · 2026-07-28 10:01
Tab alignment is off on this entry compared to its neighbours; same for the LUSTRE_QUOTA_ATTR_MANAGER and LUSTRE_QUOTA_ATTR_QTYPE lines in the doc comment above.
reply PS2 2026-07-28 10:01 Gerrit AI review for Lustre lustre_kernelcomm.h:702 — This isn't a bug, but these two prototypes are already in lquota_internal.h, which is what lquota_lib.c includes - so the copies here are un
Gerrit AI review for Lustre PS2 · 2026-07-28 10:01
This isn't a bug, but these two prototypes are already in lquota_internal.h, which is what lquota_lib.c includes - so the copies here are unused. The preceding patch put mdd_netlink_init()/fini() only in mdd_internal.h. If they do stay, note that lquota is server-only (obj-$(CONFIG_LUSTRE_FS_SERVER) in lustre/Makefile), so they belong inside the HAVE_SERVER_SUPPORT block just below rather than above it.
reply PS3 2026-07-30 09:56 Gerrit AI review for Lustre Makefile:16 — (style) This isn't a bug, but appending breaks the alphabetical order of the list - qmt_netlink.o belongs before qmt_pool.o, and qsd_netlink
Gerrit AI review for Lustre PS3 · 2026-07-30 09:56
(style) This isn't a bug, but appending breaks the alphabetical order of the list - qmt_netlink.o belongs before qmt_pool.o, and qsd_netlink.o before qsd_reint.o.
reply PS3 2026-07-30 09:56 Gerrit AI review for Lustre kernelcomm.h:1 — (minor) No #ifndef/#define guard here, so including this header twice in one translation unit redefines enum lustre_quota_attrs, struct quot
Gerrit AI review for Lustre PS3 · 2026-07-30 09:56
(minor) No #ifndef/#define guard here, so including this header twice in one translation unit redefines enum lustre_quota_attrs, struct quota_nl_entry and the typedef. The neighbouring private headers all have one (_QMT_INTERNAL_H, _QSD_INTERNAL_H).

It also leans on its includers for GENRADIX(), MAX_OBD_NAME and LOV_MAXPOOLNAME; pulling in <linux/generic-radix-tree.h> and the lustre headers directly would make it self-contained.
reply PS3 2026-07-30 09:56 Gerrit AI review for Lustre kernelcomm.h:62 — (typo) There is nothing above this line, and no other GENRADIX typedef in the tree, so the "changelog typedefs above" reference doesn't reso
Gerrit AI review for Lustre PS3 · 2026-07-30 09:56
(typo) There is nothing above this line, and no other GENRADIX typedef in the tree, so the "changelog typedefs above" reference doesn't resolve. Did this mean to point at another file?
reply PS3 2026-07-30 09:56 Gerrit AI review for Lustre kernelcomm.h:66 — (style) This isn't a bug, but neither name says which side of quota it belongs to, while everything else in this directory carries its file
Gerrit AI review for Lustre PS3 · 2026-07-30 09:56
(style) This isn't a bug, but neither name says which side of quota it belongs to, while everything else in this directory carries its file prefix (qmt_*, qsd_*, lquota_*). Something like qmt_nl_collect_glb() and qsd_nl_collect_acct() would sort with their neighbours and make the QMT/QSD split visible at the call sites in lquota_nl_start().
reply PS2 2026-07-28 10:01 Gerrit AI review for Lustre lquota_netlink.c:123 — Both collect calls materialise every record before a single byte is sent, and the entry count here is unbounded - one struct quota_nl_entry
Gerrit AI review for Lustre PS2 · 2026-07-28 10:01
Both collect calls materialise every record before a single byte is sent, and the entry count here is unbounded - one struct quota_nl_entry (~208 bytes) per quota ID, per pool, per type on the QMT, plus one per ID per type on every QSD. A filesystem with a large project or user ID space turns an unprivileged dump request into hundreds of MB of GFP_KERNEL allocations, held for the life of the dump.

It also means qmt_pool_lock and qfs_mutex are each held across a full on-disk index scan, blocking pool teardown and qsd_fini() for the duration.

Has collecting incrementally from .dumpit (resuming the index iterator per message) been considered instead?
reply PS2 2026-07-28 10:01 Gerrit AI review for Lustre lquota_netlink.c:180 — This return path can't paginate. netlink_dump() only calls .dumpit again while the previous return was positive; returning 0 ends the dump a
Gerrit AI review for Lustre PS2 · 2026-07-28 10:01
This return path can't paginate. netlink_dump() only calls .dumpit again while the previous return was positive; returning 0 ends the dump and returning a negative value ends it with that errno in NLMSG_DONE. So once the skb fills up the whole dump fails with EMSGSIZE rather than continuing in the next message.

Nothing sets cb->min_dump_alloc either, so the skb is NLMSG_GOODSIZE (~1 page). At roughly 150 bytes per record that is on the order of 25 quota entries before the dump breaks - lustre_device_list_dump() and lustre_obd_nl_start() both pre-size min_dump_alloc for exactly this reason, and even U16_MAX won't cover a real quota table.

Returning msg->len when the buffer fills (state is already carried in gql_index) would let the dump span messages.
reply PS3 2026-07-30 09:56 Gerrit AI review for Lustre lquota_netlink.c:206 — (suggestion) Selecting the attribute layout with a strcmp() on the record-type string is easy to get wrong later: anything that isn't exactl
Gerrit AI review for Lustre PS3 · 2026-07-30 09:56
(suggestion) Selecting the attribute layout with a strcmp() on the record-type string is easy to get wrong later: anything that isn't exactly "global" silently formats as an accounting record. A small enum in struct quota_nl_entry, with the string derived only when it goes on the wire, would make the two cases explicit and drop the per-record compare.
reply PS3 2026-07-30 09:56 Gerrit AI review for Lustre lquota_netlink.c:273 — (suggestion) With no .parallel_ops, the genl core runs .start/.dumpit/.done inside genl_lock() (genl_lock_start(), genl_lock_dumpit()), so t
Gerrit AI review for Lustre PS3 · 2026-07-30 09:56
(suggestion) With no .parallel_ops, the genl core runs .start/.dumpit/.done inside genl_lock() (genl_lock_start(), genl_lock_dumpit()), so the collection here holds the global genl mutex and serialises every other generic netlink user on the node, not just lquota.

lnet_family sets .parallel_ops = true, and the handlers here already do their own locking - could this family set it as well?
reply PS5 2026-10-05 10:50 Gerrit AI review for Lustre lquota_netlink.c:267 — (defect) This op has no .flags, so any local user can run the dump and read every user, group and project limit, grant and usage on the serv
Gerrit AI review for Lustre PS5 · 2026-10-05 10:50
(defect) This op has no .flags, so any local user can run the dump and read every user, group and project limit, grant and usage on the server.

The ioctl path does not allow that. In quotactl_ioctl(), Q_GETQUOTA and LUSTRE_Q_GETQUOTAPOOL for another ID, and LUSTRE_Q_ITERQUOTA, return -EPERM unless check_owner() passes or the caller has CAP_SYS_ADMIN. The glb-*/acct_* debugfs files are root-only too.

Should this op set `.flags = GENL_ADMIN_PERM`, as the lnet_family ops do? That would also stop unprivileged callers from triggering the full collection in lquota_nl_start().
owner Timothy Day · uploader Timothy Day · PS5 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-19768 quota: add quota genetlink family

Add new quota genetlink families that expose per-pool and per-slave
quota usage via the table-driven netlink framework. QMT reports
pool-level grants and limits while QSD reports per-slave usage
and grant state through genradix arrays.

TLC-bug-id: TLU-56
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ibb3bedaefc8c78f2f2b52d593fe0d6e080658cb9
66707 master J ✗1B ✓T ✓R 0/2
LU-20000 lnetctl: bad CPTs/tunables with NL import
reviewing Cyril Bordage · CI green — awaiting your review
3 unresolved L +551 −134
30d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-quota@zfs+DNE:test_1aseen in 21 other reviews
build #132580 SUCCESS · tests all Maloo sessions
no vote yet: Manish Regmi, Xinxia Qu, Serguei Smirnov, Chris Horn, Timothy Day
patchsets:
+6 earlier PS1 06-18 PS2 06-18 PS3 07-01 PS4 07-02 PS5 09-15 PS6 09-16
PS7 09-16 PS8 09-21 PS9 09-25 PS10 09-29 PS11 09-30
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS11 2026-10-02 14:37 Chris Horn lnetctl.c:5443 — Prefer a kernel-doc format https://docs.kernel.org/doc-guide/kernel-doc.html
Chris Horn PS11 · 2026-10-02 14:37
Prefer a kernel-doc format https://docs.kernel.org/doc-guide/kernel-doc.html
reply PS11 2026-10-05 08:59 Gerrit AI review for Lustre lnetctl.c:5476 — (minor) This adds evidence to the NO_MATCH question that is already open on this patchset. Is the claim that the resolver selects an interfa
Gerrit AI review for Lustre PS11 · 2026-10-05 08:59
(minor) This adds evidence to the NO_MATCH question that is already open on this patchset. Is the claim that the resolver selects an interface "the same way the module-parameter path does" accurate?

lustre_lnet_resolve_ip2nets_rule()->lustre_lnet_match_ip_to_intf() only considers AF_INET addresses on non-"lo" interfaces that are UP. In the kernel, ksocknal_startup() calls lnet_inet_enumerate(), which also returns IPv6 addresses (IPv6 first when large NIDs are in use). lnet_inet_select() then takes the first entry. If no usable interface exists, the LND startup fails rather than being skipped.

So on an IPv6-only node, 'options lnet networks=tcp' brings up tcp. The lnet_legacy2yaml output for it ('net: - net type: tcp') gets NO_MATCH ("No UP interfaces were found") here, configures nothing, and the import exits 0. Before this patch, that input at least failed with -ENOMSG. Keeping NO_MATCH as an error for 'net:' blocks would fix the silent no-op. The comment should also mention the IPv4-only limitation.
reply PS11 2026-10-02 14:37 Chris Horn lnetctl.c:5490 — (defect?) In the parent commit, LUSTRE_CFG_RC_NO_MATCH from lustre_lnet_resolve_ip2nets_rule() was an error for a 'net:' block. The import p
Chris Horn PS11 · 2026-10-02 14:37
(defect?) In the parent commit, LUSTRE_CFG_RC_NO_MATCH from lustre_lnet_resolve_ip2nets_rule() was an error for a 'net:' block. The import printed the resolver message and returned -ENOMSG. Only an 'ip2nets:' rule could skip a non-match. Here config_net_local_nis() returns 0 and drops errmsg. The import configures no net and exits 0.

Should NO_MATCH stay an error here, as it was before?
owner Cyril Bordage · uploader Cyril Bordage · PS11 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-20000 lnetctl: bad CPTs/tunables with NL import

This is for netlink API. This fixes the same issues as for the old API
and uses the same tests.

ip2nets is also fixed but has some limitations: the format doesn't
allow to specify different tunables/cpts for interfaces in the same
net. If, at some point, it is needed, we will have to extend the
format.

Assisted-By: Claude Sonnet 4.5 <noreply@anthropic.com>

Test-Parameters: trivial testlist=sanity-lnet
Fixes: 1b3c10b835ca ("LU-19386 lnet: use ip2nets handler for net sequence")
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I101c7a320d325413c387c5a15ac33ca8eff3e4a8
67825 master J !B ✓T ✓R -1/2−
LU-20264 obd: add lustre_current_fsuid/fsgid() helpers
reviewing Timothy Day · CI green — awaiting your review (needs rebase first)
needs rebase 4 unresolved L +486 −12
36d
CI green — awaiting your review (needs rebase first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #129124 SUCCESS · tests all Maloo sessions
no vote yet: Shuichi Ihara, Sebastien Buisson
patchsets: PS1 08-07 PS2 08-11
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-12 02:22 Gerrit AI review for Lustre COMMIT_MSG:24 — (style) The message accounts for the two helpers, the mnt_idmap/nop_mnt_idmap aliases and the four shims that move out of llite_internal.h,
Gerrit AI review for Lustre PS2 · 2026-08-12 02:22
(style) The message accounts for the two helpers, the mnt_idmap/nop_mnt_idmap aliases and the four shims that move out of llite_internal.h, but most of the new header is not mentioned: FS_ALLOW_IDMAP, i_user_ns(), file_mnt_idmap(), the vfsuid_t / from_vfsuid() / ia_vfsuid compat, capable_wrt_inode_uidgid(), ll_vfs_iop_setattr(), and the LL_IOP_*/LL_XATTR_SET/LL_DEFINE_MKDIR trampolines - roughly 200 of the 344 new lines.

None of those has a user in the tree yet, so no build exercises them on any kernel. Could the message at least describe what each group is for, so a reader can tell the unexplained hunks from the intended ones?
reply PS2 2026-08-12 02:22 Gerrit AI review for Lustre mnt_idmapping.h:99 — (defect) mapped_fsuid()/mapped_fsgid() are not new in v5.17 - only their move into <linux/mnt_idmapping.h> and the second argument are. From
Gerrit AI review for Lustre PS2 · 2026-08-12 02:22
(defect) mapped_fsuid()/mapped_fsgid() are not new in v5.17 - only their move into <linux/mnt_idmapping.h> and the second argument are. From v5.13 through v5.16 <linux/fs.h> already carries:

    static inline kuid_t mapped_fsuid(struct user_namespace *mnt_userns)
    {
        return kuid_from_mnt(mnt_userns, current_fsuid());
    }

LC_HAVE_MAPPED_FSUID probes with mapped_fsuid(NULL, NULL), which is a hard error on those kernels, so HAVE_MAPPED_FSUID stays undefined and this block then redefines the same name with a different prototype. Since the header is pulled in by obd.h and lustre_compat/linux/fs.h, doesn't that fail to compile in every translation unit on 5.15.0-88 (Ubuntu 22.04), which lustre/ChangeLog lists as a primary client kernel? SLES15 SP4/SP5 (5.14.21) look exposed too. The probe needs to distinguish the one-argument form rather than treat its absence as "no mapped_fsuid at all".

On v5.12, the one version where this shim really is needed, the direction also looks inverted: the kernel spelled it kuid_from_mnt() = KUIDT_INIT(from_kuid(mnt_userns, kuid)), whereas kuid_into_mnt() = make_kuid(mnt_userns, __kuid_val(kuid)) is the opposite mapping (it is what i_uid_into_mnt() uses). That only diverges once an idmapped mount can exist over Lustre, which is exactly what the rest of this series is heading towards.
reply PS2 2026-08-12 02:22 Gerrit AI review for Lustre mnt_idmapping.h:316 — (minor) 8b7ca4c0bbb2 is not in mainline, and the ->mkdir() return-type change is v6.14, not v6.19: config/lustre-core.m4 already documents i
Gerrit AI review for Lustre PS2 · 2026-08-12 02:22
(minor) 8b7ca4c0bbb2 is not in mainline, and the ->mkdir() return-type change is v6.14, not v6.19: config/lustre-core.m4 already documents it as v6.14-rc4-9-g88d5baf69082 above LC_HAVE_IOPS_MKDIR_RETURNS_DENTRY.

The history list at the top of this file also tags two different commits (a793d79ea3e0 and a1ec9040a2a9) as v5.17-rc1-136-g, so at least one of those counts is wrong as well.
reply PS2 2026-08-12 02:22 Gerrit AI review for Lustre obd.h:1590 — (defect) v6.2 looks like a gap here. It has struct mnt_idmap and nop_mnt_idmap and its ->getattr() takes struct mnt_idmap *, so HAVE_MNT_IDM
Gerrit AI review for Lustre PS2 · 2026-08-12 02:22
(defect) v6.2 looks like a gap here. It has struct mnt_idmap and nop_mnt_idmap and its ->getattr() takes struct mnt_idmap *, so HAVE_MNT_IDMAP_ARG is set and idmap really is a struct mnt_idmap * - but v6.2's mapped_fsuid() still takes struct user_namespace *:

    static inline kuid_t mapped_fsuid(struct user_namespace *mnt_userns,
                                      struct user_namespace *fs_userns)

The fs{g,u}id helpers were only ported to mnt_idmap in v6.3, by c14329d39f2d ("fs: port fs{g,u}id helpers to mnt_idmap"). LC_HAVE_MAPPED_FSUID still passes on v6.2 (both arguments are NULL), so no shim is generated and this call passes the wrong pointer type; v6.2's KBUILD_CFLAGS has -Werror=incompatible-pointer-types, and an uncalled static inline in a header is still type-checked, so every file including obd.h would fail to build.

Would a separate probe on the first argument's type work, with the v6.2 case going through mnt_idmap_owner() from <linux/mount.h>?
owner Timothy Day · uploader Timothy Day · PS2 uploaded 84d ago · NEW · open in Gerrit ↗
commit message
LU-20264 obd: add lustre_current_fsuid/fsgid() helpers

Add helpers that map current's fsuid/fsgid through a mount idmap
into the filesystem's user namespace and return the numeric id as
it should appear on the wire. A NULL idmap means identity mapping
(&nop_mnt_idmap) and a NULL fs_userns defaults to &init_user_ns.

These helpers are written against the current mainline idmapped-mount
API, but Lustre still builds against v4.18 (RHEL8), which predates all
of it: <linux/mnt_idmapping.h> and mapped_fsuid() arrived in v5.17,
vfsuid_t and the i_uid_into_vfsuid() helpers in v6.0, and "struct
mnt_idmap" itself only in v6.2. Add
lustre_compat/linux/mnt_idmapping.h reconstructing the modern spelling
down to v4.18, along with the configure checks it needs, and include
it from obd.h. The mnt_idmap/nop_mnt_idmap type aliases move there
from lustre_compat/linux/fs.h, and the inode_permission(),
generic_permission(), simple_setattr() and setattr_prepare() shims
move there from llite_internal.h.

These will be used by the following patches to plumb struct
mnt_idmap [1] through the client RPC paths.

[1] https://www.kernel.org/doc/html/latest/filesystems/idmappings.html

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I00c5068103144a6ebd293140e305c4c66a6a6964
67574 master J !B ✓T ✓R 0/2
LU-19365 nodemap: allow dynamic IPv6 subranges
reviewing Manish Regmi · CI green — awaiting your review
3 unresolved M +103 −20
42d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #132133 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn, Sebastien Buisson
patchsets:
+3 earlier PS1 07-27 PS2 07-29 PS3 07-29
PS4 08-07 PS5 09-02 PS6 09-15 PS7 09-16 PS8 09-22
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS8 2026-09-22 23:25 Gerrit AI review for Lustre COMMIT_MSG:16 — (style) Not a bug, but the body doesn't account for the range_find_generic() hunk. Non-exact large-NID lookups now return the innermost encl
Gerrit AI review for Lustre PS8 · 2026-09-22 23:25
(style) Not a bug, but the body doesn't account for the range_find_generic() hunk. Non-exact large-NID lookups now return the innermost enclosing mask instead of the first list hit, and that path is not NID classification - it is nodemap_add_ban_range_helper()'s "is this ban inside my own range" check, plus the %guess% nodemap lookup in nodemap_add_banlist() and nodemap_del_banlist(). Worth a line so the banlist behavior change isn't a surprise.
reply PS6 2026-09-16 03:18 Manish Regmi patchset comment — pinging for review
Manish Regmi PS6 · 2026-09-16 03:18
pinging for review
reply PS8 2026-09-22 23:25 Gerrit AI review for Lustre nodemap_range.c:447 — (defect) Narrowing -EEXIST to the same nodemap lets two nodemaps carry the identical nidmask. The other lookups on nmc_netmask_setup pick an
Gerrit AI review for Lustre PS8 · 2026-09-22 23:25
(defect) Narrowing -EEXIST to the same nodemap lets two nodemaps carry the identical nidmask. The other lookups on nmc_netmask_setup pick an entry by list position and only then compare rn_nodemap, so they can land on the wrong owner.

    lctl nodemap_add_range --name c0 --range 2001:db8::/64@tcp
    lctl nodemap_add -d -p c0 c1
    lctl nodemap_add_range --name c1 --range 2001:db8::/64@tcp

list_add() puts c1's range at the head, so afterwards:

nodemap_del_range("c0") calls range_find(..., exact=true), which walks from the head and returns c1's range on the first equal-length match. The rn_nodemap != nodemap test then fails, and c0 cannot drop its own range while c1 exists.

nodemap_add_banlist("c0", 2001:db8::5@tcp) calls range_find(..., false) -> range_find_longest(), where both /64 entries tie and the head wins, so that fails with -EINVAL as well.

Both used to work because the duplicate could not be created. Should the tie-break prefer the range owned by the nodemap being operated on, or should these callers pass the nodemap down?
owner Manish Regmi · uploader Manish Regmi · PS8 uploaded 42d ago · NEW · open in Gerrit ↗
commit message
LU-19365 nodemap: allow dynamic IPv6 subranges

Test 72e failed because IPv6 nidmask insertion treated an identical
dynamic child range as a duplicate and returned EEXIST. The same path
also did not return an enclosing range for a true child subrange.

For dynamic large-NID ranges, select the innermost enclosing nidmask and
return it as the parent. Use the same longest-prefix rule when classifying
NIDs and preserve EEXIST for a duplicate range in the same nodemap. IPv4
CIDR nodemap handling is unchanged.

Assisted-by: Codex:5.6-Sol
Fixes: e9278b8da163 ("LU-17431 nodemap: make dynamic nodemaps hierarchical")
Test-Parameters: trivial testlist=sanity-sec env=ONLY=72e \
  env=FORCE_LARGE_NID=true,LOAD_MODULES_REMOTE=true
Signed-off-by: Manish Regmi <mregmi@ddn.com>
Change-Id: I0f2ca4323492cf1700eda391e290a9e4ee9af1da
52038 master J !B ✓T ✓R 0/2
LU-17044 ptlrpc: add TBF minrate floor scheduling
reviewing Etienne AUJAMES · CI green — awaiting your review
XL +910 −156
45d
janitor run: 2 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #124807 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Chris Horn, Andreas Dilger, Nikitas Angelinas
patchsets:
+7 earlier PS1 08-22 PS2 08-28 PS3 08-28 PS4 08-28 PS5 04-09 Chris Horn PS6 04-10 Chris Horn PS7 04-13 Chris Horn
PS8 04-15 Chris Horn PS9 04-17 Chris Horn PS10 05-07 Chris Horn PS11 05-08 Chris Horn PS12 05-09 Chris Horn
owner Etienne AUJAMES · uploader Chris Horn · PS12 uploaded 178d ago · NEW · open in Gerrit ↗
commit message
LU-17044 ptlrpc: add TBF minrate floor scheduling

The TBF rule model can currently express only one rate. Normal rules
treat rate as a ceiling and realtime rules treat it as both floor and
ceiling, so one rule cannot say "guarantee G RPC/s but cap at
L RPC/s". That makes it impossible to reserve RPC bandwidth for a
loaded class without either removing the cap or moving the class onto
a dedicated realtime rule.

Extend the existing heap-based scheduler with a second token bucket
per class for minimum-rate accounting. The existing bucket continues
to enforce the configured rate ceiling, while the new bucket tracks
saved minrate credit for classes that are falling behind their
guaranteed share. That floor credit boosts heap priority; the ceiling
is enforced separately at dequeue, so a floor-prioritized class still
throttles to its rate. Floor credit is bounded so that an idle class
can recover its guaranteed share after becoming active under load
without accumulating enough priority to starve other traffic.

Add a tbf_mindepth parameter (default -1, meaning adaptive) that
controls the maximum number of saved guaranteed tokens for any rule
with a floor (explicit minrate or legacy realtime). The adaptive
default is 8x the floor rate for realtime rules and 2x the floor rate
for non-realtime rules. For legacy realtime, the floor rate is the
configured rate itself. Operators can override this to a fixed value
to tune how much priority an idle class accumulates before re-entering
the scheduler under load.

Add an explicit minrate= parameter to TBF rules and thread it through
the parser, rule update paths, and rule dumps. start and change
commands can now configure both floor and ceiling, change ...
minrate=0 clears an explicit floor, and get_param shows the effective
range as "min-max". Reject invalid combinations where the floor
exceeds the ceiling. Because the rule model is shared, the new
parameter works across the existing TBF rule types.

Two issues found during testing/review and are fixed here:
 - nrs_tbf_cli_reset_value() updated to set ti_deadline = now so that
   a rate or rule change does not leave a stale past deadline that
   would give the reset client an unfair heap advantage over other
   eligible clients.
 - ptlrpc_nrs_req_throttling_nolock() adjusted so that when a policy
   is stopping or inactive during a runtime policy switch, its
   throttle gate does not prevent queued requests from draining.
   Without this, a policy change can stall the service partition until
   the old policy finishes stopping, because the throttle flag was set
   globally and checked without regard to which policy owns the queued
   work.

Three new sanityn tests cover the minrate= parameter. 77t and 77u
check parsing, start/change, input validation, etc. 77v is a live
functional test:
 - Throttle OST to known max rate via OBD_FAIL_PTLRPC_PAUSE_REQ.
 - Measure baseline rate under congestion.
 - Set minrate TBF rule for secondary UID running under load.
 - Assert protected UID hits within 10% of its floor while background
   load still gets headroom.
 - Repeat with realtime=1 to cover realtime-minrate interaction.
 - Repeat with legacy realtime rule (no explicit minrate)

Heap comparison and dequeue changes:

The single scheduler heap now uses a two-tier comparison. When either
class being compared has accumulated floor tokens, both are ranked by
their min-bucket deadlines; otherwise they are ranked by max-bucket
(ceiling) deadlines. This asymmetry is the mechanism by which floor
credit boosts scheduling priority while keeping floor-ineligible
classes on the normal ceiling path. The comparator adds two strict
tiebreakers beyond deadline and check_time -- head request sequence
number and pointer address -- so that classes with equal refreshed
deadlines cannot oscillate indefinitely (resolving a pre-existing TODO
in the old comparator).

The dequeue path (nrs_tbf_req_get) takes a single frozen ktime_get()
snapshot and runs a retry loop bounded by min(binheap_size + 1,
NRS_TBF_REFRESH_MAX_PASSES) to lazily refresh stale per-class token
state before selecting the heap root. NRS_TBF_REFRESH_MAX_PASSES is a
small constant (currently 32). If the loop exhausts its pass budget
without converging, it arms the throttle timer at the current root's
deadline and returns NULL, deferring to the next dequeue. This
replaces the old recursive self-call that realtime mode used when a
refreshed class moved off the root. Per-dequeue cost is O(log n) in
the common case, hard-capped at O(NRS_TBF_REFRESH_MAX_PASSES * log n)
in the worst case.

Floor bucket initialization:

Both legacy realtime rules (without minrate=) and explicit minrate
rules cap saved floor credit at tr_min_depth (the adaptive
nrs_tbf_min_depth value, or tbf_mindepth when set). Sizing the cap
from the floor rate, rather than from tr_max_depth, gives a class
enough room to accumulate overdue token credit when it has been losing
the heap to another class with older queued requests, so the realtime
deadline-in-the-past mechanism can actually pull it back to the front.

Legacy realtime rules additionally start with a small preloaded floor
bucket (ti_ntoken = tr_max_depth) to preserve existing behavior where
rate acts as both floor and ceiling. Explicit minrate rules start with
zero floor tokens because the heap comparator treats any non-zero
floor token count as a priority signal: when either class in a
comparison has floor tokens, both are ranked on their min-bucket
deadlines. If a newly created minrate class started with preloaded
floor tokens it would immediately jump ahead of all non-floor traffic
in the heap without having actually fallen behind its guaranteed
share. Starting empty ensures that floor priority is only earned while
a class is genuinely being underserved.

Realtime flag interaction with explicit minrate:

When a rule combines realtime=1 with minrate=, the max (ceiling)
bucket loses realtime token semantics and operates as a normal capped
bucket: its deadline advances forward by one token interval after each
service. Only the min (floor) bucket retains realtime scheduling,
where overdue saved tokens keep its deadline in the past to
prioritize catching up. This means "realtime applies to the lower
bound and rate remains the hard cap."

Test-Parameters: trivial
Test-Parameters: testlist=sanityn,conf-sanity
Test-Parameters: testlist=sanityn env=ONLY=77v,ONLY_REPEAT=30
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: I779e63cd84b7a9ca99b54bbe8df8616de77fc770
65412 master J !B ✓T ✓R +1/2
LU-20090 nrs: add allowed dynamic classification types for TBF
reviewing Qian Yingjin · CI green — awaiting your review
3 unresolved L +345 −22
46d
janitor run: 1 failing config(s), none unique to this patch — janitor results
reviews: Chris Horn +1 2026-09-18 19:10
no vote yet: Etienne AUJAMES, Andreas Dilger
patchsets:
+8 earlier PS1 04-20 PS2 05-13 PS3 05-14 PS4 06-10 PS5 06-24 PS6 09-02 Chris Horn PS7 09-05 Chris Horn PS8 09-06 Chris Horn
PS9 09-06 Chris Horn PS10 09-07 Chris Horn PS11 09-11 Chris Horn PS12 09-12 Chris Horn PS13 09-18 Chris Horn
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-09-05 21:43 Chris Horn COMMIT_MSG:12 — "Why do we need this? I don't think somebody will use that."
Etienne AUJAMES PS3 · 2026-05-18 12:48
Why do we need this?
I don't think somebody will use that.
Qian Yingjin PS3 · 2026-05-18 13:23
Please note that current TBF has UID|GID|PROJID|JobID|Opcode|NID 6 sub types in total, that means it can have 2^6 -1 = 63 combinations. In the future, we will add more sub types such as nodemap, OST index, which will increase the total combinations reach 255.
Without any allowed permission, it may result that lookup from class hash table will need 64 search in worst, that maybe have negative impact on the lookup performance.

Thus to reduce the lookup overhead, we limit the maximum allowed combinations with the limit of 16.
Chris Horn PS6 · 2026-09-05 21:43
"Why do we need this? I don't think somebody will use that."

The allowed-type list bounds the lookup cost of the dynamic classifier.
Without it, nrs_tbf_req_classify() must probe every combination of the
enabled sub types. Six sub types give 63 combinations today. The
planned nodemap and OST-index types raise that to 255. The cap of 16
holds the worst-case probe count at 16 hash lookups per request.
reply PS12 2026-09-13 05:47 Gerrit AI review for Lustre lustre_nrs_tbf.h:231 — (minor) Is a set of 16 reachable in practice? The policy argument is capped at 255 bytes (NRS_POL_ARG_MAX, enforced in nrs_policy_start_lock
Gerrit AI review for Lustre PS12 · 2026-09-13 05:47
(minor) Is a set of 16 reachable in practice? The policy argument is capped at 255 bytes (NRS_POL_ARG_MAX, enforced in nrs_policy_start_locked()), and that budget also has to carry the head type and `classify=dynamic`. The 16 shortest distinct combinations already cost 243 of those bytes; a more usual set over nid/uid/gid/jobid/opcode runs to roughly 270 and is refused with -EINVAL and "arg ... is too long" before the allow= parser sees it. If the patch is refreshed, saying that the byte budget is the practical ceiling would make this match what an admin can actually configure.

Small wording while here: "is defined with 16" reads as "is defined as 16", and "most of real use cases" as "most real use cases".
reply PS12 2026-09-13 05:47 Gerrit AI review for Lustre nrs_tbf.c:611 — (style) This isn't a bug, but the message doesn't say which service refused the rule, and an OSS or MDS runs TBF on several of them. __nrs_t
Gerrit AI review for Lustre PS12 · 2026-09-13 05:47
(style) This isn't a bug, but the message doesn't say which service refused the rule, and an OSS or MDS runs TBF on several of them. __nrs_tbf_cli_debug() in this file already prints "%s.%d NRS: ..." from nrs_pol2svc(pol)->srv_name and nrs_pol2cptid(pol), and policy is in hand here. Worth matching if the patch is refreshed.
owner Qian Yingjin · uploader Chris Horn · PS13 uploaded 46d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: add allowed dynamic classification types for TBF

Add an "allow=" key to the TBF policy start command. The key names a
classification type that a dynamic rule can use. A rule starts only
when its type equals an allowed type. A "nid" rule therefore needs
"allow=nid", even under "allow=nid+opcode".

    nrs_policies="tbf nid classify=dynamic allow=nid allow=nid+opcode"
    lctl get_param -n ost.OSS.ost_io.nrs_tbf_allowed_types

The head sorts the allowed types in descending order of granularity,
for the class bucket lookup of the next patch.

nrs_tbf_parse_cmd() now returns the error code of the parser, not
-EINVAL for every error.

Add sanityn/test_77tc.

Test-Parameters: trivial testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: Ia2705a64f1347485da4159268c8925c20eedcdd6
65433 master J !B ✓T ✓R +1/2
LU-20090 nrs: use allowed types for class bucket lookup
reviewing Qian Yingjin · CI green — awaiting your review
3 unresolved L +429 −71
46d
janitor run: 4 failing config(s), none unique to this patch — janitor results
reviews: Chris Horn +1 2026-09-18 19:10
no vote yet: Etienne AUJAMES, Andreas Dilger
patchsets:
+9 earlier PS1 04-21 PS2 05-14 PS3 05-14 PS4 06-11 PS5 06-11 PS6 06-24 PS7 09-02 Chris Horn PS8 09-05 Chris Horn PS9 09-06 Chris Horn
PS10 09-06 Chris Horn PS11 09-07 Chris Horn PS12 09-11 Chris Horn PS13 09-12 Chris Horn PS14 09-18 Chris Horn
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS13 2026-09-13 07:47 Gerrit AI review for Lustre nrs_tbf.c:139 — (nit) Neither this nor nrs_tbf_key2str() writes through the key, and the ntt_str() callbacks already take a const struct nrs_tbf_key *. Wort
Gerrit AI review for Lustre PS13 · 2026-09-13 07:47
(nit) Neither this nor nrs_tbf_key2str() writes through the key, and the ntt_str() callbacks already take a const struct nrs_tbf_key *. Worth making both take const while the signature is being changed anyway.
reply PS13 2026-09-13 07:47 Gerrit AI review for Lustre nrs_tbf.c:525 — (minor) Can this branch ever return something different from READ_ONCE(head->th_dyn_type_mask)?
Gerrit AI review for Lustre PS13 · 2026-09-13 07:47
(minor) Can this branch ever return something different from READ_ONCE(head->th_dyn_type_mask)?

When nac_count > 0 the default rule is started with tr_type_flags = nac_allowed_mask (nrs_tbf_startup()), it is linked on th_list for the whole life of the head, and nrs_type_allowed_check() forces every other rule's type to be one of the nac_types[] entries, each of which is a subset of nac_allowed_mask. So nrs_tbf_dyn_type_mask_update() always leaves th_dyn_type_mask exactly equal to nac_allowed_mask.

If that is the intent, a short note saying the two are the same would help; otherwise the early return reads as if the masks can diverge.
reply PS13 2026-09-13 07:47 Gerrit AI review for Lustre nrs_tbf.c:601 — (minor) The last sentence doesn't seem to match the caller. nrs_tbf_res_get() reaches nrs_class_rule_rematch() precisely for a bucket whose
Gerrit AI review for Lustre PS13 · 2026-09-13 07:47
(minor) The last sentence doesn't seem to match the caller. nrs_tbf_res_get() reaches nrs_class_rule_rematch() precisely for a bucket whose rule is out of date, and then hands the request to that same bucket:

    rule = nrs_class_rule_rematch(head, req);
    if (rule != cli->tc_rule)
            nrs_tbf_cli_reset(head, rule, cli);
    ...
    *resp = &cli->tc_res;

So the bucket is re-pointed at the newly matched rule and keeps serving requests rather than being left to the LRU shrinker. The part about not rehashing a linked bucket is the reason for the local key and reads fine; it is the "takes no new request" claim that looks off.
owner Qian Yingjin · uploader Chris Horn · PS14 uploaded 46d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: use allowed types for class bucket lookup

A rule match walks every rule of the class head. The cost grows with
the rule count.

The dynamic classifier now builds a request key for each allowed type
and finds the class bucket by hash. The module parameter
tbf_dyn_rule_thresh (default 8 rules) starts the hash path.

The default rule takes the union of the allowed types. A "change
default rate=N" command then gives N RPC/s to each live tuple of that
union. The rate no longer applies to each NID.

When the start command has a free allowed type entry, it adds the
policy type to the list. Otherwise it returns -E2BIG.

Fix the cleanup of test_77k, test_77kh and test_77ki.

Add sanityn/test_77t{d,f} and the -E2BIG case of test_77tc.

Test-Parameters: trivial testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: If67f9afc6693310d17ce69c1b1c417ffccbf0b9c
65407 master J !B ✓T ✓R +1/2
LU-20090 nrs: add dynamic granularity classifier for TBF
reviewing Qian Yingjin · CI green — awaiting your review
5 unresolved L +424 −63
46d
janitor run: 4 failing config(s), none unique to this patch — janitor results
reviews: Chris Horn +1 2026-09-18 19:10
no vote yet: Etienne AUJAMES, Sohei Koyama, Andreas Dilger
patchsets:
+8 earlier PS1 04-19 PS2 05-13 PS3 05-14 PS4 06-10 PS5 06-24 PS6 09-02 Chris Horn PS7 09-05 Chris Horn PS8 09-06 Chris Horn
PS9 09-06 Chris Horn PS10 09-07 Chris Horn PS11 09-11 Chris Horn PS12 09-12 Chris Horn PS13 09-18 Chris Horn
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS12 2026-09-13 05:35 Gerrit AI review for Lustre COMMIT_MSG:21 — (minor) One more behaviour-changing hunk isn't covered here: nrs_tbf_startup() now seeds the default rule with `rs_valid_type = head->th_typ
Gerrit AI review for Lustre PS12 · 2026-09-13 05:35
(minor) One more behaviour-changing hunk isn't covered here: nrs_tbf_startup() now seeds the default rule with `rs_valid_type = head->th_type_flag & NRS_TBF_FLAG_VALID`. That is what decides the granularity of traffic no user rule matches (and what test_77tB exercises), so a sentence on it would round the paragraph out.
reply PS12 2026-09-13 05:35 Gerrit AI review for Lustre nrs_tbf.c:186 — (minor) This guard looks carried over from nrs_tbf_cli2str_r(), where skipping a type with no key printer makes sense. Here only ntt_name is
Gerrit AI review for Lustre PS12 · 2026-09-13 05:35
(minor) This guard looks carried over from nrs_tbf_cli2str_r(), where skipping a type with no key printer makes sense. Here only ntt_name is printed, so whether the type has an ntt_str callback has no bearing on the output.

Every entry in nrs_tbf_types[] sets ntt_str today, so nothing is lost right now. But a field added later without a key printer would silently drop out of the `type=` string, and a rule made only of such fields would dump as `type=`. Would dropping the check be simpler?
reply PS12 2026-09-13 05:35 Gerrit AI review for Lustre nrs_tbf.c:531 — (suggestion) Now that the classify key is passed in, could the static branch use it too, the way the dynamic branch two lines above does?
Gerrit AI review for Lustre PS12 · 2026-09-13 05:35
(suggestion) Now that the classify key is passed in, could the static branch use it too, the way the dynamic branch two lines above does?

    memcpy(&cli->tc_key, key, sizeof(cli->tc_key));
    rule = nrs_tbf_rule_match(head, &cli->tc_key);

nrs_tbf_req_classify() already built this exact key with the same head->th_type_flag mask for the nrs_tbf_cli_find() lookup. For a uid/gid/projid policy the rebuild re-runs nrs_tbf_id_cli_set(), including the req_capsule_init()/req_capsule_extend() fallback that re-parses the request body, on every class-bucket miss. It would also make `req` unused here.

The comment on the dynamic branch argues a second build can produce a different key; if that is a concern it applies to the static head as well, where a differing key would mean the class is inserted under a key that the lookup will never find.
reply PS12 2026-09-13 05:35 Gerrit AI review for Lustre sanityn.sh:5941 — (minor) nrs_class_def_rate doesn't exist anywhere in the tree at this commit, so the second sentence reads as a forward reference to a later
Gerrit AI review for Lustre PS12 · 2026-09-13 05:35
(minor) nrs_class_def_rate doesn't exist anywhere in the tree at this commit, so the second sentence reads as a forward reference to a later patch in the chain. Could the comment just say what tbf_rate is here (the ptlrpc module parameter that seeds the default rule's rate) and leave the series out of it?
reply PS12 2026-09-13 05:35 Gerrit AI review for Lustre sanityn.sh:5981 — (style) Not a bug, but test_77tB() and test_77tb() both put the version gate on the first line of the body while this one sits below six `lo
Gerrit AI review for Lustre PS12 · 2026-09-13 05:35
(style) Not a bug, but test_77tB() and test_77tb() both put the version gate on the first line of the body while this one sits below six `local` declarations, one of which shells out to osts_nodes(). If the patch is refreshed, moving the gate to the top would match the other two and the rest of the suite.
owner Qian Yingjin · uploader Chris Horn · PS13 uploaded 46d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: add dynamic granularity classifier for TBF

The TBF policy start command sets one classification type for the
head. A rule of another type cannot start.

Add the dynamic classifier. Each rule takes its class type from its
own match conditions. The head keeps a mask of the types of its live
rules. The key of a dynamic head holds only those fields. The rule
dump adds a "type=" field.

nrs_tbf_id_cli_set() now clears each ID field that the rule does not
match. A "uid" policy put the gid in the key too. One uid under two
gids then got two class buckets, each with the full rule rate.

The rule stop path now holds th_rule_lock over the list removal.

Add sanityn/test_77t{B,h,b}.

Fixes: 3408489c96ba ("LU-20090 nrs: use fixed size key for NRS TBF class bucket")
Test-Parameters: trivial testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: Ie817ea1f714c0e087eb25ec72d1477cd5e2948e2
65391 master J !B ✓T ✓R +1/2
LU-20090 nrs: add static and dynamic classify conf for TBF
reviewing Qian Yingjin · CI green — awaiting your review
1 unresolved L +408 −151
46d
janitor run: 6 failing config(s), none unique to this patch — janitor results
reviews: Chris Horn +1 2026-09-18 19:10
no vote yet: Etienne AUJAMES, Sohei Koyama, Andreas Dilger
patchsets:
+8 earlier PS1 04-17 PS2 05-13 PS3 05-13 PS4 06-09 PS5 06-10 PS6 06-24 PS7 09-02 Chris Horn PS8 09-05 Chris Horn
PS9 09-06 Chris Horn PS10 09-06 Chris Horn PS11 09-11 Chris Horn PS12 09-12 Chris Horn PS13 09-18 Chris Horn
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS7 2026-09-05 21:42 Chris Horn patchset comment — "even that 'optimized' path still walks the rule list in
Sohei Koyama PS6 · 2026-07-08 11:15
Hi Yingjin, I spent the day reviewing this patch set (LU-20090).

A few questions:
Do we really need dynamic? I get that static has a limitation it can't work around, but is it really worth it?

Also, about performance:
the code already falls back to a simple linear rule match when there are few rules (nrs_dynamic_class_rule_match, default threshold 8). The whole hash-lookup-first path, and the rule sequence numbers added in this patch, only kick in for hundreds or thousands of rules. I don't think that's realistic; no admin is going to add that many rules by hand. If we assume the rule count is always small, the simple linear match is enough and we could drop the complex path (and this patch) entirely. (And even that "optimized" path still walks the rule list in nrs_tbf_rule_match_seq, so it isn't really O(1) anyway.)
Qian Yingjin PS6 · 2026-07-08 13:39
The reason why we need dynamic is about the TBF type granluarity. i.e.
If TBF type is "nid", then each client has a 1 corresponding class bucket.
But if TBF type is "nid+uid+gid+projid+opcode", then a client may have (2^5 - 1 = 31) class buckets.
When the cluster has a large number of nodes (more than 1000), the total class buckets will reach 1000 
So that's the reason why we need the dynamic classification.

Please note in the cluster product cluster it already configured with thousands of rules for the TBF scheduler.
Qian Yingjin PS6 · 2026-07-08 13:40
Thanks for you reviewing!
Chris Horn PS7 · 2026-09-05 21:42
"even that 'optimized' path still walks the rule list in
nrs_tbf_rule_match_seq, so it isn't really O(1) anyway"

Correct. The number of rules newer than the matched class bucket's
rule bounds the walk, not the total rule count. The hash lookup
replaces a full list scan on every request. The per-type rule lists in
66704 bound the walk further.

"If we assume the rule count is always small, the simple linear match
is enough"

The rule count is not always small. Some sites already run thousands
of TBF rules. The dynamic classifier also multiplies the bucket count:
a nid+uid+gid+projid+opcode type gives up to 31 buckets per client. A
1000-node cluster then reaches tens of thousands of buckets.
owner Qian Yingjin · uploader Chris Horn · PS13 uploaded 46d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: add static and dynamic classify conf for TBF

Add a "classify=" key to the TBF policy start command. Under
"classify=static", every rule takes the classification type of the
policy. Under "classify=dynamic", each rule takes its type from its
own match conditions. A later patch adds the dynamic classifier. The
strategy does not change until the policy stops.

    lctl set_param *.*.ost_io.nrs_policies="tbf nid classify=dynamic"
    lctl get_param ost.OSS.ost_io.nrs_tbf_classify
    reg_classify:dynamic
    hp_classify:dynamic

The maximum length of a policy argument grows from 16 to 256 bytes. A
second policy uses the command structures later, so they lose the TBF
prefix. For example, struct nrs_tbf_cmd becomes struct nrs_cmd.

Fix the 77k cleanup, which left TBF rules for the next test.

Add sanityn/test_77ta.

Test-Parameters: trivial
Test-Parameters: testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: Ia6d4ebc8705e67421b60eabc5cea54f1de23952a
68834 master J ✗1B ✓T ✓R 0/2
LU-20438 clio: eagerly evaluate P2P DMA capability via layout
reviewing Shivaji Kant · CI green — awaiting your review
4 unresolved M +55 −9
50d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@ldiskfs+DNE:test_63cseen in 4 other reviews
7 optional test failure(s) — informational
build #131691 SUCCESS · tests all Maloo sessions
no vote yet: Jinshan Xiong, Oleg Drokin, Pranjal Shrivastava, Timothy Day
patchsets: PS1 09-11 PS2 09-14
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-09-14 17:45 Gerrit AI review for Lustre COMMIT_MSG:19 — (minor) The message says Data-on-MDT components are exempted because they "never support P2P DMA", but the code does the opposite: lsme_is_d
Gerrit AI review for Lustre PS2 · 2026-09-14 17:45
(minor) The message says Data-on-MDT components are exempted because they "never support P2P DMA", but the code does the opposite: lsme_is_dom() only selects bounds = 1 and the DoM target's import is then consulted exactly like an OST's. Should this sentence be dropped or reworded to match?
reply PS2 2026-09-14 17:45 Gerrit AI review for Lustre lov_io.c:2195 — (minor) The comment doesn't describe the test. lle_valid is set in lov_init_composite() from lov_pattern_supported() + lov_supported_comp_ma
Gerrit AI review for Lustre PS2 · 2026-09-14 17:45
(minor) The comment doesn't describe the test. lle_valid is set in lov_init_composite() from lov_pattern_supported() + lov_supported_comp_magic() + !(lsme_flags & LCME_FL_STALE); an uninstantiated component still gets lle_valid = 1. What actually keeps this loop off an uninstantiated component is lle_raid0.lo_nr staying 0 (and lle_dom.lo_dom staying NULL) because lco_init() was skipped. Worth rewording on a refresh so the next reader doesn't rely on the guarantee stated here.
reply PS2 2026-09-14 17:45 Gerrit AI review for Lustre lov_io.c:2201 — (defect) lov_pattern() only masks off LOV_PATTERN_F_MASK, so this equality matches plain RAID0 alone. Overstriped components are LOV_PATTERN
Gerrit AI review for Lustre PS2 · 2026-09-14 17:45
(defect) lov_pattern() only masks off LOV_PATTERN_F_MASK, so this equality matches plain RAID0 alone. Overstriped components are LOV_PATTERN_RAID0|LOV_PATTERN_OVERSTRIPING, EC parity adds LOV_PATTERN_PARITY and compressed adds LOV_PATTERN_COMPRESS - all three pass lov_pattern_supported(), and lov_init_composite() gives them raid0_ops with a fully populated lle_raid0.lo_sub[]. They land in the else branch and no target inside them is ever interrogated.

With the osc_io_init() check gone, a file created with `lfs setstripe -C` on a non-capable OST now extracts P2P pages and fails halfway through osc_dio_submit() with -EOPNOTSUPP, which is the partial-I/O case the patch is removing and which osc_io_init() used to catch.

Would a `lov_pattern(lsme->lsme_pattern) & LOV_PATTERN_RAID0` test cover these instead?
reply PS2 2026-09-14 17:45 Gerrit AI review for Lustre lov_io.c:2226 — (defect) Is ld_obd ever set on this device? lle_raid0.lo_sub[] and lle_dom.lo_dom hold lovsub objects, and lovsub_object_init() shows what t
Gerrit AI review for Lustre PS2 · 2026-09-14 17:45
(defect) Is ld_obd ever set on this device? lle_raid0.lo_sub[] and lle_dom.lo_dom hold lovsub objects, and lovsub_object_init() shows what their lo_dev is:

    struct lovsub_device *dev = lu2lovsub_dev(obj->lo_dev);

Those lovsub devices are created by cl_type_setup(env, &ld->ld_site, &lovsub_device_type, ...) in lov_device_init()/lov_mdc_dev_init(), which never assigns ld_obd; lu_device_init() memsets the struct, and ld_obd is only set on a device that actually backs an obd_device (obd_setup() and osc_device_alloc()/mdc_device_alloc()).

So obd is NULL for every sub-object here, imp is NULL, and ci_p2pdma_unsupported is set on the first stripe of every DIO. cl_dio_pages_init() then never passes ITER_ALLOW_P2PDMA, and every P2P direct I/O takes the -EFAULT - the feature is off everywhere.

The obd lives one layer down: lu_object_next(&subobj->co_lu)->lo_dev->ld_obd is the OSC (or MDC for DoM) device, both of which do set ld_obd. lov_init_raid0() also already reaches the same target as lov_tgt(dev->ld_lov, oinfo->loi_ost_idx)->ltd_exp.
owner Shivaji Kant · uploader Shivaji Kant · PS2 uploaded 51d ago · NEW · open in Gerrit ↗
commit message
LU-20438 clio: eagerly evaluate P2P DMA capability via layout

Evaluating P2P DMA support per-stripe sequentially inside cl_io_loop via
osc_io_init() suffers from partial-IO discovery failure on heterogeneous
storage pools. Specifically, if a file's first stripe supports P2P DMA
but a subsequent stripe does not, ll_direct_IO will submit successfully,
map ZONE_DEVICE memory for the first chunk, and then fail abruptly midway
resulting in an unexpected -EFAULT and a non-atomic file state.

This patch cleanly shifts the capability interrogation from the OSC loop
up to the LOV composite initialization phase (lov_io_init_composite).
By looping through the entire layout initially (safely exempting
Data-on-MDT components which never support P2P DMA), we guarantee
ci_p2pdma_unsupported is set before cl_dio_pages_init runs on the
first slice, thereby ensuring an immediate and graceful error before
any I/O is dispatched.

Fixes: 83142c39b087 ("LU-20438 clio: Enable P2P DMA in client Direct I/O path")
Signed-off-by: Shivaji Kant <shivajikant@google.com>
Change-Id: Ic798f885fdf5767f6d97277952d5fa650b499851
65796 b2_15 B ✓T ✓R +1/1
LU-19634 kernel: update SLES15 SP6 [6.4.0-150600.23.78.1]
reviewing Jian Yu · CI green — awaiting your review
XS +2 −2
67d
2 optional test failure(s) — informational
build #126023 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-08-28 23:13
patchsets: PS1 05-11 PS2 05-28 PS3 06-04
owner Jian Yu · uploader Jian Yu · PS3 uploaded 152d ago · NEW · backport · open in Gerrit ↗
commit message
LU-19634 kernel: update SLES15 SP6 [6.4.0-150600.23.78.1]

Update SLES15 SP6 kernel to 6.4.0-150600.23.78.1 for Lustre client.

Lustre-change: https://review.whamcloud.com/62719
Lustre-commit: fe51801d4497fc1b5dafebf8608601e3fd526284

Test-Parameters: trivial fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=sles15sp6 serverdistro=el8.10 testlist=sanity

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=sles15sp6 serverdistro=el8.10 testgroup=full-dne-part-1

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=sles15sp6 serverdistro=el8.10 testgroup=full-dne-part-2

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=sles15sp6 serverdistro=el8.10 testgroup=full-dne-part-3

Change-Id: Idde44055208a61519185fd38341c53dd9a4dfec4
Signed-off-by: Jian Yu <yujian@whamcloud.com>
66229 b2_15 B ✓T ✓R +1/1
LU-20266 kernel: update RHEL 9.7 [5.14.0-611.55.1.el9_7]
reviewing Jian Yu · CI green — awaiting your review
XS +2 −2
67d
build #126017 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-06-05 01:22
patchsets: PS1 05-28 PS2 06-04
owner Jian Yu · uploader Jian Yu · PS2 uploaded 152d ago · NEW · backport · open in Gerrit ↗
commit message
LU-20266 kernel: update RHEL 9.7 [5.14.0-611.55.1.el9_7]

Update RHEL 9.7 kernel to 5.14.0-611.55.1.el9_7 for Lustre client.

Lustre-change: https://review.whamcloud.com/65920
Lustre-commit: TBD (from 17408dda24eb80820252d868003ae5c5c97b0782)

Test-Parameters: trivial fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.7 serverdistro=el8.10 testlist=sanity

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.7 serverdistro=el8.10 testgroup=full-dne-part-1

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.7 serverdistro=el8.10 testgroup=full-dne-part-2

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el9.7 serverdistro=el8.10 testgroup=full-dne-part-3

Change-Id: I463660fa411189bbf3f8e9395b496e5d406bf22f
Signed-off-by: Jian Yu <yujian@whamcloud.com>
66462 b2_15 B ✓T ✓R +1/1
LU-20330 kernel: update RHEL 8.10 [4.18.0-553.129.1.el8_10]
reviewing Jian Yu · CI green — awaiting your review
M +88 −2
67d
1 optional test failure(s) — informational
build #126016 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-06-05 01:22
owner Jian Yu · uploader Jian Yu · PS1 uploaded 152d ago · NEW · backport · open in Gerrit ↗
commit message
LU-20330 kernel: update RHEL 8.10 [4.18.0-553.129.1.el8_10]

Update RHEL 8.10 kernel to 4.18.0-553.129.1.el8_10.

Lustre-change: https://review.whamcloud.com/66460
Lustre-commit: TBD (from ddca7c1f47b49e5c9be1d195e8923aca07f16f6d)

Test-Parameters: trivial fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testlist=sanity

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testlist=sanity

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testgroup=full-dne-part-1

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testgroup=full-dne-part-2

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testgroup=full-dne-part-3

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testgroup=full-dne-zfs-part-1

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testgroup=full-dne-zfs-part-2

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el8.10 serverdistro=el8.10 testgroup=full-dne-zfs-part-3

Change-Id: I38c6acb97e29d4ec21336d1f904f3349af640992
Signed-off-by: Jian Yu <yujian@whamcloud.com>
67778 master J ✗2B ✓T ✓R -1/2−
LU-16518 misc: remove unused uapi header helpers
reviewing Timothy Day · CI green — awaiting your review
3 unresolved S +0 −38
78d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@ldiskfs+DNE:test_63cseen in 1 other review
sanity3@zfs:test_907seen in 51 other reviews
build #128751 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain -1 2026-08-18 07:57
no vote yet: Aurélien Cedeyn, Shaun Tancheff, Aurelien Degremont, Andreas Dilger
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-18 07:57 Arshad Hussain lustre_fiemap.h:38 — This now becomes a design question vs Test-Parameters: trivial. -1 (not blocking the patch) to be on safe side considering James + AI commen
Gerrit AI review for Lustre PS1 · 2026-08-06 05:23
(suggestion) get_fe_device() was the only decoder for the low 17 bits of fe_device. The client writes that field with set_fe_device_stripenr() in lov_object.c and a userspace caller reads it back after asking for FIEMAP_FLAG_DEVICE_ORDER, so the reader was always expected to live outside this tree. get_fe_stripenr() survives only because lov_object.c happens to reuse it for its own resume logic.

After this, an installed-header user can still get the stripe number but has to open-code `fe->fe_device & 0x1ffff` for the OST index. Worth keeping the pair together?
Arshad Hussain PS1 · 2026-08-18 07:57
This now becomes a design question vs Test-Parameters: trivial. -1 (not blocking the patch) to be on safe side considering James + AI comment. If this is to be removed, i will very quickly change it. Otherwise LGTM.
reply PS1 2026-08-06 05:23 Gerrit AI review for Lustre lustre_user.h:1303 — (minor) Not a bug, but lmv_is_restriping() in lustre/include/lustre_lmv.h open-codes exactly this:
Gerrit AI review for Lustre PS1 · 2026-08-06 05:23
(minor) Not a bug, but lmv_is_restriping() in lustre/include/lustre_lmv.h open-codes exactly this:

    return lmv_hash_is_splitting(cpu_to_le32(lmv->lmv_hash_type)) ||
           lmv_hash_is_merging(cpu_to_le32(lmv->lmv_hash_type));

It even converts lmv_hash_type twice. Switching that caller over to lmv_hash_is_restriping() may be a better outcome than deleting the helper, and it mirrors how lmv_hash_is_layout_changing() is kept.
reply PS1 2026-08-06 05:23 Gerrit AI review for Lustre lustre_user.h:2003 — (suggestion) Same shape as the fe_device case. hsm_set_cl_event() is called only from mdd/mdt, and nothing in the tree ever reads the event
Gerrit AI review for Lustre PS1 · 2026-08-06 05:23
(suggestion) Same shape as the fe_device case. hsm_set_cl_event() is called only from mdd/mdt, and nothing in the tree ever reads the event bits back, so hsm_get_cl_event() is unused by design rather than by accident - it is the accessor a changelog consumer needs.

Also note hsm_get_cl_flags() and hsm_get_cl_error() immediately below have no in-tree callers either and are being kept, so "no caller in this tree" is not quite the criterion actually applied here. Removing only the event getter leaves the family incomplete.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 90d ago · NEW · open in Gerrit ↗
commit message
LU-16518 misc: remove unused uapi header helpers

... since they are no longer used. fid_seq_is_special(),
get_fe_device(), set_fe_device(), set_fe_stripenr(),
lu_extent_is_whole(), lmv_hash_is_restriping() and
hsm_get_cl_event() were never called since they were first
introduced. The last caller of ostid_set_seq_llog() was
removed a long time ago.

Fixes: 79d06b6fac3d ("LU-2240 mds: Assign special fid sequence to root.")
Fixes: 409719608cf0 ("LU-11848 lov: FIEMAP support for PFL and FLR file")
Fixes: b879bbc27db5 ("LU-9771 flr: lfs setstripe to create a new mirror")
Fixes: 2e2b16c28bcf ("LU-11025 dne: support directory restripe")
Fixes: 2e0ad6d40070 ("b=15599 hsm infrastructure")
Fixes: d0b3e251ad5d ("LU-2158 lvfs: remove llog_lvfs.c and other lvfs code from llog")
Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I2002d56cbc7c8039b24fc808a5dfb1f29c2afdc6
67843 master J !B ✓T ✓R 0/2
LU-9325 obdclass: do not absorb mount options into param= value
reviewing Timothy Day · CI green — awaiting your review
2 unresolved S +11 −3
87d
janitor run: 10 failing config(s), none unique to this patch — janitor results
build #128932 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Minh
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-08 07:19 Gerrit AI review for Lustre obd_mount.c:1202 — Not a bug, but the name no longer describes what this does. It isn't finding a delimiter any more, it answers "does this fragment continue t
Gerrit AI review for Lustre PS1 · 2026-08-08 07:19
Not a bug, but the name no longer describes what this does. It isn't finding a delimiter any more, it answers "does this fragment continue the param value?", which is also what the rewritten kernel-doc now says. Something like lmd_param_continues() would read better at the call site if the patch is refreshed.
reply PS1 2026-08-08 07:19 Gerrit AI review for Lustre obd_mount.c:1218 — A NID list fragment doesn't always carry an '@'. Bracketed address expressions are valid nidstrings and contain commas, e.g. `failover.node=
Gerrit AI review for Lustre PS1 · 2026-08-08 07:19
A NID list fragment doesn't always carry an '@'. Bracketed address expressions are valid nidstrings and contain commas, e.g. `failover.node=192.168.10.[8,10,12]@tcp` (see the `192.168.10.[8,10,12-16]@tcp` example in Documentation/man8/lst.8, and cfs_expr_list_parse() which strsep()s the bracket body on ',').

mount.lustre_tgt turns every ldd_params entry into `param=<entry>`, so with that failover.node value lustre_parse_monolithic() sees:

    s1   = "param=failover.node=192.168.10.[8"
    opts = "10,12]@tcp,svname=..."

The first fragment is "10", which has no '@', so this returns false and the rest of the NID is left behind. entry is then "failover.node=192.168.10.[8" and lmd_validate_param() rejects it (unbalanced '['), giving -EINVAL and "invalid mount string format". Before this patch match_token("10") returned LMD_NUM_MOUNT_OPT, the fragment was absorbed, and the mount worked.

A two-group form such as `192.168.[10,12].[8,10]@tcp` breaks the same way, and `10.0.0.[2,10]@tcp,10.0.1.[2,10]@tcp` silently drops the second NID instead of erroring.

Would it work to keep the '@' test but also treat the fragment as a continuation while the value accumulated so far has an unclosed '['? lmd_validate_param() already tracks exactly that bracket state.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 88d ago · NEW · open in Gerrit ↗
commit message
LU-9325 obdclass: do not absorb mount options into param= value

lmd_find_delimiter() treated any comma-separated token that is not
a known server option as a continuation of a param= value, so any
backend mount options following a param= option (e.g.
errors=remount-ro) were glued into lmd_params and stripped from the
string saved as lmd_opts, silently dropping them and registering
garbage parameters with the MGS.

A param value only spans a comma when it is a NID list split by the
option parser, so require a "@" in the fragment before treating it
as a continuation.

Test-Parameters: trivial
Fixes: 415fa27540 ("LU-9325 obdclass: use match_table for server mount options")
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I5f1615b6cc1fe6fde67f25c9b815eca96a6a6964
54678 master J !B ✓T ✓R 0/2
LU-17707 llite: ensure statahead task and info are valid
reviewing Shaun Tancheff · CI green — awaiting your review
2 unresolved XS +4 −1
96d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #112152 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Neil Brown, Andreas Dilger, Oleg Drokin
patchsets:
+5 earlier PS1 04-05 PS2 06-30 PS3 06-30 PS4 06-30 PS5 06-30
PS6 07-01 PS7 07-02 PS8 09-19 PS9 03-31 PS10 04-01
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2024-07-02 01:50 Qian Yingjin llite_lib.c:3252 — I am afraid with the shared stat()-ahead support (i.e. mdtest shared stat() workload), lli->lli_sai may be NULL without holding lli_sa_lock.
James Simmons PS6 · 2024-07-01 18:17
spin_lock is a heavy memory barrier while smp_store_release is a light weight barrier. You don't need to do both.
Neil Brown PS6 · 2024-07-02 00:14
spin_lock is an acquire memory barrier.
smp_store_release is a release memory barrier.
spin_unlock is also a release memory barrier.
So if the wake_up_process were after the spun_unlock, we could store NULL in sai_task without an explicit memory barrier.
(That doesn't mean we should - I haven't thought about it enough.  It just means we could.  The important point is we need a release between the store of null and the wake_up_process())
Qian Yingjin PS6 · 2024-07-02 01:50
I am afraid with the shared stat()-ahead support (i.e. mdtest shared stat() workload), lli->lli_sai may be NULL without holding lli_sa_lock.
See the patch: https://review.whamcloud.com/c/fs/lustre-release/+/51592
reply PS10 2026-07-31 14:26 Timothy Day llite_lib.c:1907 — We should either use the correct lock or remove the LASSERT().
Andreas Dilger PS10 · 2026-07-31 11:39
It seems strange to get a spinlock just for an LASSERT()?
Timothy Day PS10 · 2026-07-31 14:26
We should either use the correct lock or remove the LASSERT().
owner Shaun Tancheff · uploader Shaun Tancheff · PS10 uploaded 582d ago · NEW · open in Gerrit ↗
commit message
LU-17707 llite: ensure statahead task and info are valid

A spin lock should be held when checking lli_sai

A RELEASE is needed to ensure sai_task is correctly seen by
the statahead thread.

HPE-bug-id: LUS-12236
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ifa4b5a3bf65520d1bc42710223400074ea588b8d
67279 master J !B ✓T ✓R -1/2−
LU-16518 ldlm: remove unused extent rbtree helpers
reviewing Timothy Day · CI green — awaiting your review
1 unresolved S +0 −37
99d
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #127655 SUCCESS · tests all Maloo sessions
reviews: Yang Sheng -1 2026-07-16 17:05
no vote yet: Keguang Xu
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-16 17:23 Timothy Day patchset comment — It triggers a custom static checker I use: https://github.com/tim-day-387/ktest/tree/master/cplugin. But if I mark it unused, I can update t
Yang Sheng PS1 · 2026-07-16 17:05
I agree extent_replace should be removed. But please keep extent_prev_lock.
Timothy Day PS1 · 2026-07-16 17:11
I can mark it unused. But why keep it?
Yang Sheng PS1 · 2026-07-16 17:18
Does it trigger the unused warning? It may be used for some cases for optimization.
Timothy Day PS1 · 2026-07-16 17:23
It triggers a custom static checker I use: https://github.com/tim-day-387/ktest/tree/master/cplugin. But if I mark it unused, I can update the check to ignore __maybe_unused functions.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 111d ago · NEW · open in Gerrit ↗
commit message
LU-16518 ldlm: remove unused extent rbtree helpers

... since they are no longer used. extent_prev_lock() and
extent_replace() were never called after being introduced.

Fixes: 0cf356c4e427 ("LU-11085 ldlm: optimise extent locks with identical extent")
Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ie1f7162b1023c0e396951136b45da532520a742e
62929 master J !B ✓T ✓R 0/2
LU-17000 lnet: Fix overflow return in lnet_net_cmd
reviewing Arshad Hussain · CI green — awaiting your review
stalled 103d 6 unresolved S +16 −3
103d
janitor run: 2 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #119476 SUCCESS · tests all Maloo sessions
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2025-12-20 13:51 Andreas Dilger COMMIT_MSG:9 — (typo) "sets"
Andreas Dilger PS1 · 2025-12-20 13:51
(typo) "sets"
reply PS1 2025-12-20 13:51 Andreas Dilger COMMIT_MSG:11 — But in the error case, won't the error code be bounded by -4095 in the kernel?
Andreas Dilger PS1 · 2025-12-20 13:51
But in the error case, won't the error code be bounded by -4095 in the kernel?
reply PS1 2025-12-20 13:51 Andreas Dilger api-ni.c:6687 — How can len be > INT_MAX when it is < 0 a few lines above?
Andreas Dilger PS1 · 2025-12-20 13:51
How can len be > INT_MAX when it is < 0 a few lines above?
reply PS1 2025-12-20 13:51 Andreas Dilger api-ni.c:6690 — (style) no need for else after GOTO, which also removes one indent on the next line
Andreas Dilger PS1 · 2025-12-20 13:51
(style) no need for else after GOTO, which also removes one indent on the next line
reply PS1 2025-12-20 13:51 Andreas Dilger api-ni.c:8152 — What range of negative numbers can be returned here?
Andreas Dilger PS1 · 2025-12-20 13:51
What range of negative numbers can be returned here?
reply PS1 2025-12-20 13:51 Andreas Dilger api-ni.c:8158 — (style) no need for else after GOTO
Andreas Dilger PS1 · 2025-12-20 13:51
(style) no need for else after GOTO
owner Arshad Hussain · uploader Arshad Hussain · PS1 uploaded 332d ago · NEW · open in Gerrit ↗
commit message
LU-17000 lnet: Fix overflow return in lnet_net_cmd

In case nla_strscpy fails. It seets rc = len.
Since rc is int and len is ssize_t, it could
lead to overflow. This patch checks if the
return len is a valid int range and then safely
casts and assigns to rc. In case it is out of
INT min/max range it sets ERANGE to rc.

CoverityID: 429517 ("Overflowed return value")
Test-Parameters: trivial testlist=sanity-lnet
Fixes: 8f8f6e2f3 ("LU-10003 lnet: use Netlink to support old and new NI APIs")
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I293cfb559fc8e33d84ce012bf072c5b5299ec074
66224 b2_17 B ✓T ✓R +1/1
LU-19249 build: Compatibility updates for kernel v6.16
reviewing Gian-Carlo DeFazio · CI green — awaiting your review
stalled 124d L +321 −183
124d
build #127181 SUCCESS · tests all Maloo sessions
reviews: Shaun Tancheff +1 2026-07-02 23:53
patchsets: PS1 05-27 PS2 05-28 PS3 07-01 Jian Yu PS4 07-02 Jian Yu
owner Gian-Carlo DeFazio · uploader Jian Yu · PS4 uploaded 124d ago · NEW · backport · open in Gerrit ↗
commit message
LU-19249 build: Compatibility updates for kernel v6.16

Linux commit v6.15-rc1-5-g06c567403ae5
  Use try_lookup_noperm() instead of d_hash_and_lookup() outside \
  of VFS
Provide try_lookup_noperm() and lookup_noperm for older kernels.

Linux commit v6.15-rc6-233-g7d0f0f061531
  mm: move folio_index to mm/swap.h and remove no longer needed \
      helper
Drop folio_index and use folio->index directly.

Linux commit v6.15-13744-g41cb08555c41
  treewide, timers: Rename from_timer() to timer_container_of()
Provide timer_container_of for older kernels when is not defined.

Linux commit v6.15-rc6-297-gacc53a0b4c15
  mm: rename page->index to page->__folio_index
Access page index either via folio->index or calculated using
folio_index_page()

Lustre-commit: 59d84ec3ffb83a938f13e0c93ad5c87ec2a0d258
Lustre-change: https://review.whamcloud.com/60619

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el10.1 serverdistro=el9.7 testgroup=full-dne-part-1

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el10.1 serverdistro=el9.7 testgroup=full-dne-part-2

Test-Parameters: optional fstype=ldiskfs mdtcount=4 mdscount=2 \
  clientdistro=el10.1 serverdistro=el9.7 testgroup=full-dne-part-3

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el10.1 serverdistro=el9.7 testgroup=full-dne-zfs-part-1

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el10.1 serverdistro=el9.7 testgroup=full-dne-zfs-part-2

Test-Parameters: optional fstype=zfs mdtcount=4 mdscount=2 \
  clientdistro=el10.1 serverdistro=el9.7 testgroup=full-dne-zfs-part-3

Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I25d4eec9a047a6e3aa796d9327d0857842c9c0ba
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Gian-Carlo DeFazio <defazio1@llnl.gov>
66666 master J ✗1B ✓T ✓R 0/2
LU-20373 build: py3 updates for kernel v7.1
reviewing Shaun Tancheff · CI green — awaiting your review
stalled 128d 2 unresolved L +184 −133
128d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-quota@ldiskfs+DNE:test_48seen in 44 other reviews
build #126998 SUCCESS · tests all Maloo sessions
no vote yet: Timothy Day
patchsets: PS1 06-15 PS2 06-26 PS3 06-26
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-06-16 04:07 Shaun Tancheff osd_handler.c:481 — cast i_ino to (u64) to ensure matches with 7.1+
Shaun Tancheff PS1 · 2026-06-16 04:07
cast i_ino to (u64) to ensure matches with 7.1+
reply PS1 2026-06-16 04:07 Shaun Tancheff osd_iam_lvar.c:361 — cast i_ino to (u64) to ensure matches with 7.1+
Shaun Tancheff PS1 · 2026-06-16 04:07
cast i_ino to (u64) to ensure matches with 7.1+
owner Shaun Tancheff · uploader Shaun Tancheff · PS3 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20373 build: py3 updates for kernel v7.1

Update python configure checks:

v7.0-rc6-4-g14a51045e10d3'
   get rid of busy-waiting in shrink_dcache_tree()
Drops d_u{} union from dcache, it is now anonymous

v7.0-rc5-146-g4e1d77a8f382a
  folio_batch: rename pagevec.h to folio_batch.h
Provide a compat include for folio_batch.h that includes
pagevec.h and defines PAGEVEC_SIZE when it is missing.

v7.0-rc1-1-g96fefcabf340f
  vfs: widen inode hash/lookup functions to u64
In libiam and osd_oi change:
  struct osd_inode_id.oii_ino to u64
cast i_ino to (u64) to ensure older kernels align with upstream

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: If046b6f9df0ec890a6e023b01c4f4a763419be46
64069 master J !B ✓T ✓R +1/2−
LU-19888 libcfs: filter & print ioctl() request with full command
reviewing Arshad Hussain · CI green — awaiting your review
stalled 135d 2 unresolved M +123 −33
135d
janitor run: 7 failing config(s), none unique to this patch — janitor results
reviews: Andreas Dilger +1 2026-06-20 15:22 · Oleg Drokin -1 2026-05-28 20:51 · Jian Yu +1 2026-05-28 10:19
no vote yet: Timothy Day
patchsets:
+2 earlier PS1 02-17 PS2 02-20
PS3 02-20 PS4 02-20 Janitor Bot PS5 02-22 PS6 03-18 PS7 05-28 Andreas Dilger
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-06-20 15:22 Andreas Dilger patchset comment — I don't think ioctl() calls are in a performance critical path anywhere? The `cmd2ioctl()` function is not called if the CDEBUG() mask is n
Oleg Drokin PS6 · 2026-05-27 21:27
do we *REALLY* need this as part of kernel code vs doing it in in the tools when the log is looked at/processed (which happens a lot less frequently)?

Also this is mislabeled as utils, but this patch is all kernel code, zero utils?
Arshad Hussain PS6 · 2026-05-28 04:22
> do we REALLY need this as part of kernel code vs doing it in in the tools when the log is looked at/processed (which happens a lot less frequently)?

I will see if this can be done in userspace. The reason for this was, Debug logs are often consumed immediately, Having the decoded ioctl immediately readable without post-processing is valuable. In normal operation, this code is a no-op and does not affect the ioctl path at all, only when debug flags are explicitly enabled. As such, both are infrequent. 

> Also this is mislabeled as utils, but this patch is all kernel code, zero utils?

Yes, Agree. Should have been libcfs and not utils.
Oleg Drokin PS6 · 2026-05-28 04:51
debug logs are not consumed immediately.
They are stored in a binary buffer (to save on processing that's alredy expensive as it is without adding any additional formatted prints) and usually are never read.

When they ARE read, you are using either lctl debug_kernel command that reads the buffer, interprets the binary data, sorts it and then outputs.
Or you are using something like debug_daemon that writes the binary buffers to a file that you are then passing through something like lctl debug_file that again does the pretty formatting from binary dumps, sorts and outputs the result.

The third path is you have something trigger a debug log dump (dump_on_xxx like a timeout or eviction or whataver) and then you are going to process it with lctl debug_file too.

I am not aware of anything that would just look into the raw binary dumps of the logs, what's the usecase I am missing?
Arshad Hussain PS6 · 2026-05-28 05:19
I Agree. Lustre debug logs are not plain text - they are binary buffers. You're right - for normal Lustre debug consumption, this belongs in userspace. Will move it to userspace.
Andreas Dilger PS6 · 2026-05-28 10:16
Oleg, is the objection to this patch based on the use of an on-stack buffer?  I don't see the harm in making the debug logs more readable, and decoding these numbers is always annoying.

IMHO, it would be relatively safe to return the symbolic ioctl name with a static buffer to the caller, to avoid the on-stack allocation, then it would have zero impact unless `D_VFSTRACE` debugging is enabled.  The risk is low of many threads calling ioctls at the same time, and if that happens it would typically be the same ioctl, and the numeric value is still in the log in case of confusion.
Oleg Drokin PS6 · 2026-05-28 20:51
the objection is extra processing at log time.
I'd rather the processing is to shift to lctl dk/df time. Same usability as this patch, less actual runtime overhead in the kernel.

D_IOCTL is in the default debug mask.

But I guess I missed that we also have CERROR where the message is output straight into the kernel console log.
there's whole one place like that in lustre/lmv/lmv_obd.c
Andreas Dilger PS6 · 2026-06-20 15:22
I don't think ioctl() calls are in a performance critical path anywhere?  The `cmd2ioctl()` function is not called if the CDEBUG() mask is not set, so this adds no overhead in that case. In general default debug masks are not set if they are in any common code paths, so I don't think this will add any measurable runtime overhead. 

My preference would be to have this inline in the debug logs rather than having to do it in post-processing.
reply PS6 2026-05-28 10:16 Andreas Dilger module.c:414 — (minor) this should be changed to print %x regardless, since decoding the decimal value by hand is ugly
Andreas Dilger PS6 · 2026-05-28 10:16
(minor) this should be changed to print %x regardless, since decoding the decimal value by hand is ugly
owner Arshad Hussain · uploader Andreas Dilger · PS7 uploaded 160d ago · NEW · open in Gerrit ↗
commit message
LU-19888 libcfs: filter & print ioctl() request with full command

Currently, D_IOCTL debug just prints full command integer number.
This patch filters out ioctl integer number to IORW string and
adds to the the debug log for easy debug log reading.

This patch introduces no functional changes to ioctl() handling.

Before:
    $ lfs osts
    (dir.c:1991:ll_dir_ioctl()) VFS Op:inode=[0x200000007:0x1:0x0]
    (ffff88800ca1ae10) cmd=800866a8 arg=7ffce147942c

After:
    $ lfs osts
    (dir.c:1991:ll_dir_ioctl()) VFS Op:inode=[0x200000007:0x1:0x0]
    (ffff888033dda790) cmd=800866a8 (_IOR('f', 168, 8)) arg=7fff3073ab4c

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I18d0e85855a2de5a348da3df2e86bce4067ee11f
65457 master J !B ✓T ✓R ✗
LU-1158 idl: introduce struct lu_times for timestamp grouping
reviewing Sohei Koyama · CI green — awaiting your review (CR -1 first)
CR -1 stalled 148d M +56 −32
148d
CI green — awaiting your review (CR -1 first)
blocked on the owner: Sohei Koyama voted -1
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #124267 SUCCESS · tests all Maloo sessions
reviews: Sohei Koyama -1 2026-06-09 09:15 · Andreas Dilger +1 2026-04-25 05:41
no vote yet: Qian Yingjin
patchsets: PS1 04-22 PS2 04-22
owner Sohei Koyama · uploader Sohei Koyama · PS2 uploaded 196d ago · NEW · open in Gerrit ↗
commit message
LU-1158 idl: introduce struct lu_times for timestamp grouping

Group the mtime/atime/ctime triples in struct obdo, struct mdt_body,
struct ost_lvb, struct ost_lvb_v1, struct lu_attr and struct cl_attr
into a shared struct lu_times.  The on-wire order (mtime, atime,
ctime) is preserved, so the packed size and offset of each wire
structure is unchanged.

Existing call sites continue to reference the fields by their
original names (e.g. o_mtime, mbo_mtime, lvb_mtime, la_mtime,
cat_mtime) via compatibility macros, so this patch is a pure
refactor with no behavior change.

The motivation is to prepare the tree for the nanosecond timestamp
conversion in LU-1158 by making per-field changes mechanical: later
patches can introduce helpers that operate on struct lu_times and
swap sec->ns handling in a single place instead of across dozens of
call sites, which keeps conflict surface small and each patch
reviewable.

Test-Parameters: trivial
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I3e7975c12448ecc7f5e67e83bbe19241bebf0d20
64124 master J !B ✓T ✓R ✗
LU-15174 utils: use libyaml for llog YAML record parsing
reviewing Sohei Koyama · CI green — awaiting your review (needs rebase, CR -1 first)
needs rebaseCR -1 stalled 149d 3 unresolved M +124 −93
149d
CI green — awaiting your review (needs rebase, CR -1 first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; Sohei Koyama voted -1
janitor run: 3 failing config(s), none unique to this patch — janitor results
5 optional test failure(s) — informational
build #121980 SUCCESS · tests all Maloo sessions
reviews: Sohei Koyama -1 2026-03-02 06:07
patchsets: PS1 02-19 PS2 02-19 PS3 02-21 PS4 02-21 PS5 02-27
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-02-28 08:14 Andreas Dilger obd.c:57 — (style) This should be up below "units.h". Headers should be in order of:
Andreas Dilger PS5 · 2026-02-28 08:14
(style) This should be up below "units.h". Headers should be in order of:
- system
- standard
- lustre
and alphabetical within each section.

As such, the lustre_disk.h inclusion should be moved after lustre_cfg.h, and limits.h should also be moved up after getopt.h.
reply PS5 2026-02-28 08:14 Andreas Dilger obd.c:3327 — It seems inefficient to initialize and run a yaml parser for every line of text just to find a string, and possibly multiple times per line
Andreas Dilger PS5 · 2026-02-28 08:14
It seems inefficient to initialize and run a yaml parser for every line of text just to find a string, and possibly multiple times per line if there are multiple values.

Something like `strstr(record, key)` to find the key, check for and skip the following `:` and whitespace and optional quote, then continue until trailing quote (if quoted) or next whitespace (if unquoted) before copying into the return value buffer.  That is executing a few lines of code vs. probably 1000 LOC using the libyaml parser to do this.
reply PS5 2026-02-28 08:14 Andreas Dilger obd.c:6013 — Is seems super inefficient to call yaml_llog_get_value() three times in this function to just extract three strings from a line of text.
Andreas Dilger PS5 · 2026-02-28 08:14
Is seems super inefficient to call yaml_llog_get_value() three times in this function to just extract three strings from a line of text.
owner Sohei Koyama · uploader Sohei Koyama · PS5 uploaded 250d ago · NEW · open in Gerrit ↗
commit message
LU-15174 utils: use libyaml for llog YAML record parsing

Replace hand-rolled strstr/sscanf parsing in lustre/utils/obd.c
with libyaml to handle both quoted and unquoted YAML scalar
values transparently. This prepares for a follow-up patch that
adds proper YAML quoting to kernel-side llog output
(class_config_yaml_output).

The current string-based parsing in llog_poollist_cb() is fragile:
it relies on exact character offsets and spacing that break when
the output format changes. The libyaml event-based parser handles
both plain and quoted scalars without any format assumptions.

Add yaml_llog_get_value() helper that extracts a value for a given
key from a YAML flow mapping record, following the pattern already
used in lustre_cfg.c:yaml_get_limit_uid().

Test-Parameters: testlist=conf-sanity
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I2881a418b55f753591245b509d92d221ac39412a
62716 master J !B ✓T ✓R ✗
LU-18141 mgs: don't check for NULL before free'ing
reviewing Timothy Day · CI green — awaiting your review (CR -1 first)
CR -1 stalled 201d 3 unresolved XS +3 −5
201d
CI green — awaiting your review (CR -1 first)
blocked on the owner: Timothy Day voted -1
janitor run: 3 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #118957 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2025-11-26 03:23 · Andreas Dilger +1 2025-11-25 21:49 · Timothy Day -1 2026-01-07 18:13
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-04-16 23:45 Andreas Dilger patchset comment — I have a similar concern as Oleg about using `ksize()` only in `OBD_FREE*()` since that might be the _object_ size and may be larger than th
Oleg Drokin PS1 · 2026-01-07 07:48
I am somewhat uneasy about these changes even if they appear to work now.
Timothy Day PS1 · 2026-01-07 15:09
The real fix IMHO is to make OBD_FREE() not accept a size argument. Size isn't needed. The allocator should know how big the pointer is already. We could use ksize(), for example.
Oleg Drokin PS1 · 2026-01-07 17:59
the only reason we had the size argument so we can sidestep the allocator and have our own accounting of what was allocated/freed, so we can display our own statistic of memory use and of suspected leaks (but it's not foolproof too!). Alternative would be storing the size somewhere? (how much can we trust ksize to be exact?_

If we thing current in-kernel allocator is good enough we can probably do away with a lot of this functionality.
Timothy Day PS1 · 2026-01-07 18:12
kmalloc itself uses ksize (or rather, the internal version of the same function). We don't need to store the size anywhere. If you look at the implementations:
```
#define OBD_FREE_PTR(ptr) OBD_FREE(ptr, sizeof(*(ptr)))

#define OBD_FREE(ptr, size)						      \
do {									      \
	if (likely(ptr)) {						      \
		OBD_FREE_PRE(ptr, size, "kfreed");			      \
		kfree(ptr);						      \
		POISON_PTR(ptr);					      \
	}								      \
} while (0)
```                                                   
We could just redefine `OBD_FREE_PTR` to `OBD_FREE(ptr, ksize(ptr))` and convert everything to `OBD_FREE_PTR`.

Newer kernels (6.12?) have fancy leak detection built-in. But it'll be a while until everyone using Lustre is that up-to-date.
Timothy Day PS1 · 2026-03-16 14:58
Interestingly, the upstream kernel is going in the same direction - https://lwn.net/Articles/1062856
Andreas Dilger PS1 · 2026-04-16 23:45
I have a similar concern as Oleg about using `ksize()` only in `OBD_FREE*()` since that might be the _object_ size and may be larger than the size that was originally passed to `OBD_ALLOC*()`.  If this *always* used `ksize()` for the accounting that would at least be consistent.

I would also be OK with getting rid of the built-in memory leak detection and use the kernel detection *IFF* it was wired in to run all the time (at the very minimum during testing) so that we have some chance of keeping the code with no/minimal leaks during operation.

Today it is a test failure if there is a memory leak, and while that isn't 100% preventing any leak from landing, at least it is visible during testing and not only after running systems continually for a hundred hours at a customer and trying to debug it.
reply PS1 2026-04-16 23:45 Andreas Dilger mgs_handler.c:874 — @green@whamcloud.com, I'm not sure what your concern is here? The `OBD_FREE*()` macros are all checking if `ptr` is non-NULL, and since the
Oleg Drokin PS1 · 2026-01-07 07:48
hm... is this really correct?
What if some compilers decide to calculate the lcfg->XXX arguments first? (e.g. imagine OBD_FREE is a function - then this must be calculated before we jump in)
Andreas Dilger PS1 · 2026-04-16 23:45
@green@whamcloud.com, I'm not sure what your concern is here?  The `OBD_FREE*()` macros are all checking if `ptr` is non-NULL, and since they are macros, the `size` argument cannot be evaluated until after that happens:
```
#define OBD_FREE(ptr, size)                                                   \
do {                                                                          \
        if (likely(ptr)) {                                                    \
                OBD_FREE_PRE(ptr, size, "kfreed");                            \
                kfree(ptr);                                                   \
                POISON_PTR(ptr);                                              \
        }                                                                     \
} while (0)
```

`lustre_cfg_len()` value definitely needs to be calculated before the memory is freed, or it would be dereferencing freed memory.  That is also OK because `size` is only used *before* the memory is freed, and not afterward.
reply PS1 2026-01-07 07:48 Oleg Drokin mgs_nids.c:528 — similar concern here.
Oleg Drokin PS1 · 2026-01-07 07:48
similar concern here.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 343d ago · NEW · open in Gerrit ↗
commit message
LU-18141 mgs: don't check for NULL before free'ing

The common free'ing macros already check for NULL,
so we don't need to explicitly check this beforehand.

The patch has been generated with the coccinelle script below.

@@
expression E;
@@
- if (E != NULL)
(
  OBD_FREE_PTR(E);
|
  OBD_FREE(E, ...);
|
  LIBCFS_FREE(E, ...);
|
  CFS_FREE_PTR(E);
|
  CFS_FREE_PTR_ARRAY(E, ...);
)

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ie6ae568738264444be9703e856254a0470e85f7b
61836 b2_15 J !B ✓T ✓R +1/1
LU-16335 mdt: skip target check for rm_entry
reviewing Etienne AUJAMES · CI green — awaiting your review
stalled 203d M +42 −17
203d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #123904 SUCCESS · tests all Maloo sessions
reviews: Lai Siyao +1 2026-04-14 14:25
no vote yet: Qian Yingjin, Andreas Dilger
patchsets: PS1 10-15 PS2 10-16 PS3 10-17 PS4 04-14
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS4 uploaded 204d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16335 mdt: skip target check for rm_entry

For "lfs rm_entry", target may not exist, sanity check of it may fail
thus causes rm_entry fail.

Add sanity 832.

Lustre-commit: ae98c5fdaaf37daeb328b7110cbcf42754752c9d
Lustre-change: https://review.whamcloud.com/49329

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: I824c7581af05c7494cf03c0c9bc999ca1abfec01
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Qian Yingjin <qian@ddn.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
63255 master J ✗8B ✓T ✓R -1/2−
LU-17000 lnet: refactor lnet_net_show_dump
reviewing Patrick Farrell · CI green — awaiting your review (needs rebase first)
needs rebase stalled 250d 1 unresolved L +260 −230
250d
CI green — awaiting your review (needs rebase first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-quota@zfs+DNE:test_12bseen in 19 other reviews
sanity-quota@zfs+DNE:test_17seen in 23 other reviews
sanity-quota@zfs+DNE:test_25seen in 17 other reviews
sanity-quota@zfs+DNE:test_33seen in 23 other reviews
sanity-quota@zfs+DNE:test_34seen in 23 other reviews
sanity-quota@zfs+DNE:test_37seen in 23 other reviews
sanity-quota@zfs+DNE:test_38seen in 23 other reviews
sanity-sec@zfs:test_25bseen in 31 other reviews
4 optional test failure(s) — informational
build #120343 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Chris Horn, Andreas Dilger
patchsets: PS1 01-06 PS2 01-12
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-01-07 16:19 Chris Horn COMMIT_MSG:28 — This patch could run with `Test-Parameters: trivial` if it is refreshed.
Chris Horn PS1 · 2026-01-07 16:19
This patch could run with `Test-Parameters: trivial` if it is refreshed.
owner Patrick Farrell · uploader Patrick Farrell · PS2 uploaded 295d ago · NEW · open in Gerrit ↗
commit message
LU-17000 lnet: refactor lnet_net_show_dump

Refactor lnet_net_show_dump() to improve readability and
reduce function size from ~360 lines to ~160 lines.

Changes:
- Add lnet_ni_dump_ctx struct to hold shared dump state
- Extract lnet_ni_dump_one_msg_stats() helper for message
  stats (send/recv/drop) - eliminates code duplication
- Extract lnet_ni_dump_health_stats() helper for health
  statistics
- Extract lnet_ni_dump_tunables() helper for net tunables
- Extract lnet_ni_format_cpts() helper for CPT list
  formatting with proper buffer overflow checking
- Extract lnet_ni_dump_extended() to handle all
  verbosity-dependent NI dumping with linear control flow
  instead of goto-based skipping

The refactoring eliminates goto labels (skip_msg_stats,
skip_udsp) by restructuring the verbosity-based logic
into clear conditional blocks.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I210f78fdf201a416f16733bc5ba4afdf45e92065
59657 master J !B ✓T ✓R -1/2−
LU-19094 mdt: Use a new generic mti big buffer to get pfid
reviewing Vandana Rungta · CI green — awaiting your review (needs rebase first)
needs rebase stalled 250d 10 unresolved M +65 −102
250d
CI green — awaiting your review (needs rebase first)
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
janitor run: 2 failing config(s), none unique to this patch — janitor results
3 optional test failure(s) — informational
build #118527 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Neil Brown, Timothy Day
patchsets:
+7 earlier PS1 06-09 PS2 06-09 PS3 06-09 PS4 06-09 PS5 06-17 PS6 06-18 PS7 07-28
PS8 07-28 PS9 07-28 Janitor Bot PS10 07-28 PS11 10-07 PS12 11-13
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2025-06-09 04:34 Vandana Rungta mdt_handler.c:1255 — Abusing big_lov did seem like a very obscure case and would require pfid or pfid_name to be larger than 128 bytes in the current code. The
Shaun Tancheff PS2 · 2025-06-09 03:59
I am not entirely convinced the LASSERT() is failing to do the job of verify the extra big_lov is not abused.

Also adding an extra alloc/free for every pass ... possibly would it be better to add another generic buffer to:   struct mdt_thread_info {} ?
Vandana Rungta PS2 · 2025-06-09 04:34
Abusing big_lov did seem like a very obscure case and would require pfid or pfid_name to be larger than 128 bytes in the current code.  The intention for the change is to prevent future unintended use.

Seemed like an unlikely event that pfid or pfid_name does not fit in 128 bytes.  The extra alloc and free is only if the xattr was greater than 128 bytes - so I chose not to add another generic buffer. If the size is likely to be greater than 128 bytes, then if would make sense to add another generic buffer.
reply PS2 2025-06-09 03:59 Timothy Day mdt_handler.c:4773 — I see in the first rev, it was in mdt_thread_info_reset(). But this made it so mdt_key_fini() would never find the pointers. Would this also
Timothy Day PS2 · 2025-06-09 03:49
Seems like this block should be added to mdt_thread_info_reset()
Vandana Rungta PS2 · 2025-06-09 03:59
Right - that was patch 1.  Since mdt_thread_info_reset is also called from mdt_batch, would it then end up NULLing these values before the buffers are freed in thread_fini?
Timothy Day PS2 · 2025-06-09 03:59
I see in the first rev, it was in mdt_thread_info_reset(). But this made it so mdt_key_fini() would never find the pointers. Would this also cause a memory leak if these weren't freed yet?
reply PS2 2025-06-09 21:13 Vandana Rungta mdt_handler.c:4779 — Thanks Shaun. This does help clarify and makes sense as to why we don't need to initialize those variables.
Shaun Tancheff PS2 · 2025-06-09 03:59
LU_KEY_INIT(mdt, struct mdt_thread_info);
So info was allocated with __GFP_ZERO, so this is probably not needed and the de-constructor is mdt_key_fini(), so if these are not NULL here then probably memory is leaked?

From Documentation/osd-api.txt:
A component (like device or library) can register its own descriptor
(see LU_KEY_INIT macro) and then every new thread will be populating the
environment with buffers described.
Vandana Rungta PS2 · 2025-06-09 04:34
The comments on Line 4750-4753 - at the top of xattr_thread_info_init indicated that the info structure is not zeroed.  If info was allocated with __GFP_ZERO, then we don't need these changes.
Timothy Day PS2 · 2025-06-09 05:53
When mdt_thread_info is first allocated in mdt_key_init() (defined by LU_KEY_INIT), it's OBD_ALLOC_PTR() which has __GFP_ZERO. So it'll be zeroed at first.
Shaun Tancheff PS2 · 2025-06-09 06:21
There seems to be some confusion about the lifetime of mdt_thread_info vs mdt_thread_info_init
init only resets a minimal amount of the info struct upon each request. mdt_thread_info is not alloc()'d with each call and has a much longer lifetime which is why the buffers prefer to be grown and not free()'d until much later.
Vandana Rungta PS2 · 2025-06-09 21:13
Thanks Shaun. This does help clarify and makes sense as to why we don't need to initialize those variables.

In the latest patch (patch4) - I've switched to using a generic buffer for pfid and pfid_name.
reply PS4 2025-06-13 19:41 Timothy Day mdt_handler.c:982 — mdt_big_xattr_get() is doing the exact same thing as mdt_big_generic_xattr_get(), except that it changes which buffer is uses depending on t
Misc Code Checks Robot (Gatekeeper helper) PS4 · 2025-06-09 21:18
warning: sparse:symbol 'mdt_big_generic_xattr_get' was not declared. Should it be static?
Timothy Day PS4 · 2025-06-13 17:09
This warning is valid. Also, there’s some amount of code duplication here with the other xattr fetch function. I wonder if we could avoid that by using an lu_buf in thread info, and having a common function that accepts info/object/name/lu_buf?
Vandana Rungta PS4 · 2025-06-13 19:01
Will fix the warning, was waiting for additional comments before uploading a new patch.

While there is some code duplication between mdt_big_generic_xattr_get and mdt_big_xattr_get, there is value to distinguishing between a generic method that does not store the values returned on md_attr, whereas the latter is specific to stripe get, and those attributes can be stored in md_attr.  Trying to refactor these to be one routine will be harder to read.  

The allocated (or reallocated) memory pointers are stored in lu_buf->buf AND pointers off the thread info.
Timothy Day PS4 · 2025-06-13 19:41
mdt_big_xattr_get() is doing the exact same thing as mdt_big_generic_xattr_get(), except that it changes which buffer is uses depending on the xattr name. Presumably we could do something like:

int mdt_big_xattr_get(struct mdt_thread_info *info, struct mdt_object *o,
		      const char *name)
{
	struct lu_buf *my_buf;

	if (strcmp(name, XATTR_NAME_LMV) == 0) {
		my_buf = info->mti_big_lmv_lu_buf;
	} else if (strcmp(name, XATTR_NAME_LOV) == 0) {
		my_buf = info->mti_big_lov_lu_buf;
	} else {
		my_buf = info->mti_big_generic_lu_buf;
	}

        rc = __mdt_big_xattr_get(info, o, my_buf);

        return rc;
}

I think that logic would be a lot clearer.
reply PS4 2025-06-18 11:01 Vandana Rungta mdt_handler.c:1001 — mti_big_lov_used, and mti_big_lmv_used are set specifically when we get the stripes associated with XATTR_NAME_LOV or XATTR_NAME_LMV and are
Timothy Day PS4 · 2025-06-13 19:41
We never define or check mti_big_generic_used. The other fields have a check like this.

I noticed that mti_big_lov_used is set incorrectly. mdt_big_xattr_get() uses mti_big_lov if the xattr is not XATTR_NAME_LMV. But mti_big_lov_used is set if the xattr is XATTR_NAME_LOV. So the xattr is XATTR_NAME_FOOBAR - mti_big_lov will get used but mti_big_lov_used will not get set. We should fix this as well.
Vandana Rungta PS4 · 2025-06-18 11:01
mti_big_lov_used, and mti_big_lmv_used are set specifically when we get the stripes associated with XATTR_NAME_LOV or XATTR_NAME_LMV and are subsequently checked.  The generic buffer can be used with any "name", and no specific data is saved, so there was no use for mti_big_generic_used.
reply PS5 2025-06-17 17:48 Timothy Day mdt_handler.c:729 — Change the format string instead of casting.
Timothy Day PS5 · 2025-06-17 17:48
Change the format string instead of casting.
reply PS5 2025-06-17 17:48 Timothy Day mdt_handler.c:738 — Same.
Timothy Day PS5 · 2025-06-17 17:48
Same.
reply PS5 2025-06-17 17:48 Timothy Day mdt_handler.c:1003 — I still think it'd be useful to have an LASSERT(info->mti_big_generic_used == 0).
Timothy Day PS5 · 2025-06-17 17:48
I still think it'd be useful to have an LASSERT(info->mti_big_generic_used == 0).
reply PS11 2025-11-13 22:20 Vandana Rungta mdt_handler.c:732 — Fixed
Shaun Tancheff PS11 · 2025-11-13 03:49
%zd
Vandana Rungta PS11 · 2025-11-13 22:20
Fixed
reply PS4 2025-06-13 19:41 Timothy Day mdt_internal.h:571 — They aren't currently, but they probably should be. An lu_buf is just a pointer and a size. A lot of the code handling mti_big_lov/lmv/acl/g
Timothy Day PS4 · 2025-06-13 17:09
These could all be lu_buf?
Vandana Rungta PS4 · 2025-06-13 19:01
These are not lu_bufs.  lu_buf->buf is set to these values after the memory is allocated and pointed to by these fields.
Timothy Day PS4 · 2025-06-13 19:41
They aren't currently, but they probably should be. An lu_buf is just a pointer and a size. A lot of the code handling mti_big_lov/lmv/acl/generic seems to be reimplementing lu_buf methods for no reason.
owner Vandana Rungta · uploader Vandana Rungta · PS12 uploaded 355d ago · NEW · open in Gerrit ↗
commit message
LU-19094 mdt: Use a new generic mti big buffer to get pfid

Added new generic big buffer, and use that when getting
pfid and pfid_name, to avoid any potential overwrite
conflicts since the big lov and big lmv buffers are
saved in mdt_attr pointers.

Refactored the code to use lu_buf in thread info instead
of using mti_big_*, and mti_big_*size. This allows
using the lu_buf methods to allocate and free.

Signed-off-by: Vandana Rungta <vrungta@amazon.com>
Change-Id: I8b3922c5409138db872b4819b2c4e7023613dd56
63139 master J ✗1B ✓T ✓R ✗
LU-9641 mdt: Add kernel doc style for MDT (4)
reviewing Arshad Hussain · CI green — awaiting your review (CR -1 first)
CR -1 dwg stalled 273d 1 unresolved L +158 −148
273d
CI green — awaiting your review (CR -1 first)
blocked on the owner: Arshad Hussain voted -1
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-sec@zfs:test_25bseen in 12 other reviews
build #119975 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain -1 2026-02-04 04:51 · Anjus George +1 2026-01-21 22:20
no vote yet: Andreas Dilger, Timothy Day
patchsets: PS1 12-22 PS2 12-22
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-02-04 04:51 Arshad Hussain mdt_handler.c:1771 — Oh, no this is not correct.
James Simmons PS2 · 2026-02-03 19:32
Is the '<' correct?
Arshad Hussain PS2 · 2026-02-04 04:51
Oh, no this is not correct.
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 317d ago · NEW · open in Gerrit ↗
commit message
LU-9641 mdt: Add kernel doc style for MDT (4)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I2673917fc660ba8ec7d5b9ed63376c3f882c83dc
61818 b2_15 J ✗5B ✓T ✓R +1/1
LU-18595 osd-ldiskfs: use local fake file for iteration
reviewing Etienne AUJAMES · CI green — awaiting your review
stalled 292d M +82 −32
292d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity1@zfs:test_24aseen in 1 other review
conf-sanity1@zfs:test_24bseen in 1 other review
recovery-small@ldiskfs+DNE:test_18cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
replay-single2@ldiskfs+DNE:test_100aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanityn@zfs:test_51cseen in 2 other reviews
2 optional test failure(s) — informational
build #117877 SUCCESS · tests all Maloo sessions
reviews: Andrew Perepechko +1 2026-01-15 16:07
no vote yet: Alexander Boyko, Andreas Dilger
patchsets: PS1 10-14 PS2 10-16 PS3 10-24
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS3 uploaded 376d ago · NEW · backport · open in Gerrit ↗
commit message
LU-18595 osd-ldiskfs: use local fake file for iteration

LU-13783 introduced the alloc_file_pseudo() for directory iteration.
It leads to many file descriptors for a kernel and a special
logic to drop it LU-16973.

One of the reason of alloc_file_pseudo() was a security_alloc() call.
However we could initialize iteration like kernel and skip
security checks for a pseudo files.

Lustre-change: https://review.whamcloud.com/57574
Lustre-commit: 642009da4e03a7f56694a368a7e4ea3584428e02

HPE-bug-id: LUS-12253
Fixes: b0f150eba4c2 ("LU-13783 osd-ldiskfs: use alloc_file_pseudo to create fake files")
Signed-off-by: Alexander Boyko <alexander.boyko@hpe.com>
Change-Id: I67d95d84913520b088578923841065e5b1d8b6df
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
60585 b2_15 J ✗7B ✓T ✓R 0/1
LU-17848 osd-zfs: remove osd_ladvise()/falloc()
reviewing Dominique Martinet · CI green — awaiting your review
stalled 373d M +14 −50
373d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity1@zfs:test_27ccseen in 2 other reviews
sanity1@zfs:test_27ceseen in 2 other reviews
sanity-lfsck@ldiskfs+DNE:test_11bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-pfl@ldiskfs+DNE:test_21bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-pfl@ldiskfs+DNE:test_23eseen in 3 other reviews
sanity-pfl@zfs:test_20aseen in 8 other reviews
sanity-pfl@zfs:test_20bseen in 2 other reviews
build #117935 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Oleg Drokin
patchsets: PS1 08-07 PS2 10-24 Etienne AUJAMES
owner Dominique Martinet · uploader Etienne AUJAMES · PS2 uploaded 376d ago · NEW · backport · open in Gerrit ↗
commit message
LU-17848 osd-zfs: remove osd_ladvise()/falloc()

These are implemented as stub functions that return EOPNOTSUPP.
Remove the functions and add a check in the corresponding dt
functions instead.

Test-Parameters: trivial
Test-Parameters: trivial fstype=zfs
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I6fad0a9ca8b07e3d09701e71773dc896a3845b9e
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/55608
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Lustre-change: https://review.whamcloud.com/55608
Lustre-commit: f1b39460a4712aa670567c8204b943f4423e6126
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
57768 b2_15 J ✗8B ✓T ✓R 0/1
LU-16973 osd: adds SB_KERNMOUNT flag
reviewing Etienne AUJAMES · CI green — awaiting your review
stalled 373d S +19 −0
373d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_49aseen in 3 other reviews
replay-single1@zfs:test_90seen in 1 other review
sanity2@ldiskfs+DNE:test_64eseen in 7 other reviews
sanity2@ldiskfs+DNE:test_64fseen in 7 other reviews
sanity-pfl@ldiskfs+DNE:test_20cseen in 1 other review
sanity-quota@zfs:test_13NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@zfs:test_52seen in 1 other review
sanity-sec@zfs:test_59bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
1 optional test failure(s) — informational
build #117873 SUCCESS · tests all Maloo sessions
no vote yet: Andrew Perepechko, Alexander Boyko, Andreas Dilger, Neil Brown
patchsets: PS1 01-15 PS2 10-16 PS3 10-24
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS3 uploaded 376d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16973 osd: adds SB_KERNMOUNT flag

During umount mntput() is called. It uses delayed_mntput()
function, and it could take much time to finish. A block
device is occupied during delayed work.

[ 8753.941980] Lustre: server umount XXX complete
[ 8800.129136] sysrq: SysRq : Trigger a crash

PID: 319306   TASK:XXXX   CPU: 2    COMMAND: "kworker/2:0"
 #0 __schedule at ffffffff9754e1d4
 #1 preempt_schedule_common at ffffffff9754e6fa
 #2 _cond_resched at ffffffff9754e72d
 #3 invalidate_mapping_pages at ffffffff96e72da5
 #4 invalidate_bdev at ffffffff96f5d13c
 #5 ldiskfs_put_super at ffffffffc1c82e34 [ldiskfs]
 #6 generic_shutdown_super at ffffffff96f1bdcc
 #7 kill_block_super at ffffffff96f1bed1
 #8 deactivate_locked_super at ffffffff96f1b784
 #9 cleanup_mnt at ffffffff96f3b86b

Let's use SB_KERNMOUNT flag during mount, it leads to
synchronous mntput().
It also calls flush_delayed_fput during umount to finish
delayed fput.

Lustre-change: https://review.whamcloud.com/51731
Lustre-commit: eff11c8ce1f89f30dcc5af88b67b3d6c15a631a6

HPE-bug-id: LUS-11629
Signed-off-by: Alexander Boyko <alexander.boyko@hpe.com>
Change-Id: Ia6729f6cbac85c3626562e946a4b96665a143714
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Neil Brown <neilb@suse.de>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
10038 master J ✗5B ✓T ✓R -1/2−
LU-4801 ldlm: use mutex instead of spinlock on server side resources
reviewing Oleg Drokin · CI green — awaiting your review
stalled 456d 2 unresolved S +24 −4
456d
janitor flagged test failures unique to this patch — superseded (tests have since passed)
unique failing testhistory
sanity2@ldiskfs+DNE:test_63aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_63bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_64aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_64cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@ldiskfs+DNE:test_64dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #6747 SUCCESS
reviews: Andreas Dilger -1 2023-01-04 18:09
no vote yet: Neil Brown, Vitaly Fertman, Alex Zhuravlev
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2022-10-07 18:13 Andreas Dilger lustre_dlm.h:995 — Should lr_mutex and lr_lock be a union? Either we are confident that only one will be used at a time, or we have a bigger problem that they
Andreas Dilger PS4 · 2020-02-08 02:47
There is also lr_lvb_mutex, do we need two separate mutex for the same resource?  A mutex is 32 bytes vs. only 4 bytes for a spinlock.
Andreas Dilger PS4 · 2022-10-07 18:13
Should lr_mutex and lr_lock be a union?  Either we are confident that only one will be used at a time, or we have a bigger problem that they will not provide exclusion if different threads on the same node will be using different locks for the same resource.
reply PS4 2022-10-07 18:13 Andreas Dilger ldlm_resource.c:1489 — (style) extra space before "="
Andreas Dilger PS4 · 2022-10-07 18:13
(style) extra space before "="
owner Oleg Drokin · uploader Oleg Drokin · PS4 uploaded 2671d ago · NEW · open in Gerrit ↗
commit message
LU-4801 ldlm: use mutex instead of spinlock on server side resources

Since server side processing of resources during granting is potentially
very cpu-intensive, it well might be that spinlock is
improper choice and by using mutex we allow other threads to do something
useful instead.

Change-Id: I05129f07d32914ce68c30416f71ab92a4c581c53
Signed-off-by Oleg Drokin <oleg.drokin@intel.com>
40125 master J ✗1B ✓T ✓R +0/2−
LU-12682 llite: make undeletable property generic
reviewing Bruno Faccini · CI green — awaiting your review
stalled 456d L +358 −180
456d
janitor flagged test failures unique to this patch — superseded (tests have since passed)
unique failing testhistory
sanity2@zfs:test_63aseen in 5 other reviews
2 optional test failure(s) — informational
build #16915 SUCCESS
reviews: Patrick Farrell (personal) -1 2020-11-06 16:49 · Andreas Dilger +1 2020-10-15 09:31
no vote yet: Qian Yingjin, Neil Brown, Peter Jones
owner Bruno Faccini · uploader Bruno Faccini · PS3 uploaded 2214d ago · NEW · open in Gerrit ↗
commit message
LU-12682 llite: make undeletable property generic

As part of Gerrit change #35856 foreign symlink files/dirs
had the property of being undeletable using unlink/rmdir, in
order to avoid losing reference to external objects by
mistake.

This patch makes this property generic and available to any Lustre
file/dir.

Signed-off-by: Bruno Faccini <bruno.faccini@intel.com>
Change-Id: I252ac6edba506b3f866c74cdd7b90ae6747adaf2
43985 master J ✓B ✓T ✓R 0/2
LU-14758 ptlrpc: add timer for distributed transactions
reviewing Lai Siyao · CI green — awaiting your review
stalled 456d M +130 −25
456d
build #81485 SUCCESS · tests all Maloo sessions
no vote yet: Wang Shilong, Andreas Dilger, Hongchao Zhang
owner Lai Siyao · uploader Lai Siyao · PS4 uploaded 1962d ago · NEW · open in Gerrit ↗
commit message
LU-14758 ptlrpc: add timer for distributed transactions

Add a timer "tdtd_timer" for distributed transactions, if a
distributed transaction doesn't commit in time (3 * OBD_TIMEOUT),
dump the transaction to console to help understand what went wrong.

Besides, if a committed distributed transaction failed to get
canceled, also print warning on console.

Add a tunable to dump the first distributed transaction to console:
    "lctl set_param mdt.<MDTDEV>.distribute_txn_dump=1"

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: Ifa9a56ed031d9e12658743200108631441e16f7b
46857 master J !B ✓T ✓R 0/2
LU-15656 sec: deprecate legacy root squash
reviewing Sebastien Buisson · CI green — awaiting your review
stalled 456d 4 unresolved M +74 −1
456d
janitor run: 1 failing config(s), none unique to this patch — janitor results
3 optional test failure(s) — informational
build #96535 SUCCESS · tests all Maloo sessions
no vote yet: Etienne AUJAMES, Andreas Dilger, Patrick Farrell
patchsets:
+5 earlier PS1 03-17 PS2 03-17 PS3 03-18 PS4 10-07 Andreas Dilger PS5 10-07 Andreas Dilger
PS6 04-17 PS7 06-29 PS8 06-30 PS9 07-03 PS10 07-31
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2022-10-07 17:54 Andreas Dilger conf-sanity.sh:3677 — (style) prefer (( ... )) for numeric comparisons
Andreas Dilger PS4 · 2022-10-07 17:54
(style) prefer (( ... )) for numeric comparisons
reply PS4 2022-10-07 17:54 Andreas Dilger conf-sanity.sh:3867 — (style) prefer (( ... ))
Andreas Dilger PS4 · 2022-10-07 17:54
(style) prefer (( ... ))
reply PS5 2022-11-02 14:22 Sebastien Buisson conf-sanity.sh:3674 — We do. See for instance sanity-sec test_15 and test_17.
Andreas Dilger PS5 · 2022-10-21 22:36
Do we have equivalent nodemap-based root squash tests somewhere?  It would also be useful to update the LOM to indicate that this set_param/conf_param mechanism is deprecated and to use nodemap instead (preferably referencing a section that explains the details of how to do it).
Sebastien Buisson PS5 · 2022-11-02 14:22
We do. See for instance sanity-sec test_15 and test_17.

Regarding LOM, let's discuss in dedicated patch #46740.
reply PS6 2023-06-29 14:14 Sebastien Buisson conf-sanity.sh:3925 — It makes sense, I will add this fail_loc and update the test.
Patrick Farrell PS6 · 2023-05-16 15:35
Is it possible to create a test to test that we can still modify legacy root squash settings?  Perhaps using a fail_loc to disable the new check?  I get this slight nervous feeling testing only one direction that we might break this in some distant future :)
Patrick Farrell PS6 · 2023-05-16 15:36
To be clear 'using a fail loc to disable the new check' so we can create the legacy setting for testing
Sebastien Buisson PS6 · 2023-06-29 14:14
It makes sense, I will add this fail_loc and update the test.
owner Sebastien Buisson · uploader Sebastien Buisson · PS10 uploaded 1192d ago · NEW · open in Gerrit ↗
commit message
LU-15656 sec: deprecate legacy root squash

The legacy root squash mechanism relies on 2 parameters:
- the root_squash parameter specifies the UID and GID to which the
  root user is squashed when accessing the Lustre file system;
- the nosquash_nids parameter specifies the set of clients to which
  root squash does not apply.
This legacy mechanism has become redundant with the ability provided
by the nodemap feature to implement root squash, in a much more
flexible way.
Sor for new file systems, prevent setting the root_squash and
nosquash_nids parameters. For upgraded file systems, maintain the
ability to change the already set values.

Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: I439f2ad2272592da73066c7f8edf8b7a360a2286
51899 master J !B ✓T ✓R -1/2−
LU-17022 obdclass: start converting obd flags to a bitmap
reviewing Neil Brown · CI green — awaiting your review
stalled 456d 1 unresolved L +155 −134
456d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #100471 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2023-11-26 17:50
no vote yet: Timothy Day
patchsets: PS1 08-09 PS2 08-09 Andreas Dilger PS3 11-24
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2023-11-24 08:45 Aurelien Degremont obd_config.c:806 — spin_unlock() without spin_lock()?
Aurelien Degremont PS3 · 2023-11-24 08:45
spin_unlock() without spin_lock()?
owner Neil Brown · uploader Neil Brown · PS3 uploaded 1076d ago · NEW · open in Gerrit ↗
commit message
LU-17022 obdclass: start converting obd flags to a bitmap

struct obd_device has multiple single-bit flags.  This usage is not
normal in Linux and requires a spinlock when there is any chance of
concurrent access.  This makes access from bh or irq context awkward
as all spinlock need to be protected.

It is more normal to declare an unsigned long, or a bitmap, and use
set_bit, clear_bit, test_bit, etc.

This patch starts the process with obd_attached and obd_set_up
becoming flags OBDF_ATTACHED and OBDF_SET_UP.

In one case test is followed by setting the flag to zero.  This is now
done with test_and_clear_bit(), so the lock isn't needed.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Id9a5c323cf088bf2cf4f94c8e81739053c959e8f
52946 master J !B ✓T ✓R 0/2
LU-17242 debug: CDEBUG performance testing
reviewing Timothy Day · CI green — awaiting your review
stalled 456d 3 unresolved M +109 −2
456d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #102462 SUCCESS · tests all Maloo sessions
no vote yet: Alexey Lyashkov, Andreas Dilger
patchsets:
+5 earlier PS1 11-02 PS2 11-03 PS3 11-03 PS4 11-06 PS5 11-07
PS6 11-07 PS7 11-07 PS8 11-08 PS9 02-24 PS10 02-25
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2023-11-07 01:13 Timothy Day debug_perf.c:35 — I was thinking about adding the timing check to the kunit test itself i.e. returning a KUNIT_FAIL() when things take too long.
Andreas Dilger PS4 · 2023-11-06 22:14
It would probably be useful to grab the time at the start, and add a single CWARN() at the end that prints the number of loops and elapsed time, so that this is useful even without kunit?
Timothy Day PS4 · 2023-11-07 01:13
I was thinking about adding the timing check to the kunit test itself i.e. returning a KUNIT_FAIL() when things take too long.
reply PS4 2023-11-07 03:14 Andreas Dilger debug_perf.c:41 — Yes, the CDEBUG() macro is not evaluating the format string unless the message will actually be saved/printed (the cfs_cdebug_show() check b
Andreas Dilger PS4 · 2023-11-06 22:14
Good that you have added this in.  Back in the day we were even looking at printing the CDEBUG messages without any printk formatting (doing *all* of the binary->ASCII conversion in "lctl" when the debug log was converted/sorted) because the number formatting itself was showing on the CPU profiles.

That effort was abandoned because tracking the printk formats vs. the binary dump was too complex to get right in the end, but it is still useful to understand the performance overhead of this.
Timothy Day PS4 · 2023-11-07 01:13
The performance overhead of formatting seems huge.

I ran this test with 1 billion statements. It took about 3 minutes 40 seconds with current debugging. It took the same amount of time with the most recent rev of my tracing patch (which still uses printf formatting). If you remove that single printf and have the tracepoint output a string literal, outputting 1 billions statements takes 0.5 seconds.

The upstream implementation of trace_printk has some clever tricks to avoid useless formatting. We should be able to take advantage of that to get real performance improvements without any huge refactors.
Andreas Dilger PS4 · 2023-11-07 03:14
Yes, the CDEBUG() macro is not evaluating the format string unless the message will actually be saved/printed (the cfs_cdebug_show() check before calling libcfs_debug_msg()).
reply PS9 2024-02-24 21:02 Timothy Day sanity.sh:9618 — I should probably restore this afterwards.
Timothy Day PS9 · 2024-02-24 21:02
I should probably restore this afterwards.
owner Timothy Day · uploader Timothy Day · PS10 uploaded 983d ago · NEW · open in Gerrit ↗
commit message
LU-17242 debug: CDEBUG performance testing

To ensure that performance doesn't degrade from debugging
changes, we must test performance. We do this by timing a
kernel module.

In the future, this test may be converted to use the kunit
framework. But that change is far too large for this patch.
This test was not added to the test package. I don't expect
this test to be generally useful - it serves a very narrow
goal.

Test-Parameters: trivial
Test-Parameters: testlist=sanity env=ONLY=62,ONLY_REPEAT=10,SLOW=yes
Test-Parameters: testlist=sanity env=ONLY=62,ONLY_REPEAT=10,SLOW=yes
Test-Parameters: testlist=sanity env=ONLY=62,ONLY_REPEAT=10,SLOW=yes
Test-Parameters: testlist=sanity env=ONLY=62,ONLY_REPEAT=10,SLOW=yes
Test-Parameters: testlist=sanity env=ONLY=62,ONLY_REPEAT=10,SLOW=yes
Test-Parameters: testlist=sanity env=ONLY=62,ONLY_REPEAT=10,SLOW=yes
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I273429b700bae080310994ff5e2a8e5a05b58eb5
53367 master J ✓B ✓T ✓R +1/2
LU-13031 ofd: add jobid xattr to ost object
reviewing Thomas Bertschinger · CI green — awaiting your review
stalled 456d 2 unresolved L +242 −115
456d
1 optional test failure(s) — informational
build #104591 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-05-06 01:03
no vote yet: Mikhail Pershin, Patrick Farrell
patchsets:
+1 earlier PS1 12-07
PS2 12-19 PS3 01-09 PS4 04-30 PS5 05-01 PS6 05-05
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2024-01-09 01:56 Thomas Bertschinger sanity.sh:20721 — I thought it made sense to have the OST inode checking be its own test, rather than add it into check_seq_oid(), so that it can easily test
Thomas Bertschinger PS3 · 2024-01-09 01:56
I thought it made sense to have the OST inode checking be its own test, rather than add it into check_seq_oid(), so that it can easily test multiple settings for the parameter.

Right now I've duplicated the logic of parsing "lfs getstripe" output to get the object's filename -- do you think would it be worthwhile to try to refactor this so that the 2 tests call some common function do to this?
reply PS3 2024-01-09 01:56 Thomas Bertschinger sanity.sh:20756 — does this need "skip parallel run"? I saw that the check_seq_oid() test (27z) has it. I wasn't sure if that's because the usage of "sync" mi
Thomas Bertschinger PS3 · 2024-01-09 01:56
does this need "skip parallel run"? I saw that the check_seq_oid() test (27z) has it. I wasn't sure if that's because the usage of "sync" might interfere with other tests, or something.
owner Thomas Bertschinger · uploader Thomas Bertschinger · PS6 uploaded 913d ago · NEW · open in Gerrit ↗
commit message
LU-13031 ofd: add jobid xattr to ost object

This stores the jobid of the process that creates an object in an
extended attribute in the OST inode for that object. The name of the
extended attribute is determined by a new sysfs parameter
"obdfilter.*.job_xattr". The default value is "user.job". A value of
"NONE" means that the jobid will not be stored.

This builds on 23a2db28dcf1 ("LU-13031 jobstats: store jobid in xattr
when files are created"), which stores the jobid in the MDT inode
for the file. Note that the jobid need not be the same on the MDT
inode and the OST inodes, because the process that creates a file
might not be the same process that performs the initial write to a
given stripe.

Signed-off-by: Thomas Bertschinger <bertschinger@lanl.gov>
Change-Id: I9ab1aa394def3869c8d87a252bd9f95962f214f6
41189 master J ✓B ✓T ✓R ✗
LU-14315 tests: Increase fsx iteration to improve coverage
reviewing Arshad Hussain · CI green — awaiting your review (CR -1 first)
CR -1 stalled 463d XS +4 −3
463d
CI green — awaiting your review (CR -1 first)
blocked on the owner: Arshad Hussain voted -1
build #78653 SUCCESS
reviews: Arshad Hussain -1 2021-01-28 04:40 · James Nunez +1 2021-01-12 04:01 · Andreas Dilger +1 2021-01-12 04:01
no vote yet: Wang Shilong, Qian Yingjin
owner Arshad Hussain · uploader Andreas Dilger · PS4 uploaded 2122d ago · NEW · open in Gerrit ↗
commit message
LU-14315 tests: Increase fsx iteration to improve coverage

Test-suite sanityn.sh test_16* is already running 2500
iterations of fsx. To increase coverage particularly for
fallocate() call increase iteration from 2500 to 10000.
Although this increases the runtime sightly it also greatly
increase the coverage for the fsx runs.

Runtime For testcase 16a fstype=ldiskfs
---------------------------------------
Iteration:2500           Runtime:150s
Iteration:10000          Runtime:350s

Runtime For testcase 16a fstype=zfs
---------------------------------------
Iteration:500            Runtime:40s
Iteration:6000           Runtime:520s

Test-Parameters: trivial testlist=sanityn
Test-Parameters: fstype=zfs testlist=sanityn
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Idb04b7d52e58c7df56580604ddfefd80f38fc989
59546 b2_15 J !B ✓T ✓R +1/1
LU-17043 enc: fix osd lookup cache for long encrypted names
reviewing Etienne AUJAMES · CI green — awaiting your review
LTS15 stalled 517d XS +2 −2
517d
janitor run: 1 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #113905 SUCCESS · tests all Maloo sessions
reviews: Sebastien Buisson +1 2025-06-05 13:16
no vote yet: Andreas Dilger
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 518d ago · NEW · backport · open in Gerrit ↗
commit message
LU-17043 enc: fix osd lookup cache for long encrypted names

Fix osd lookup cache to support files with long encrypted names.
Those encrypted names can be up to 256 bytes, not NUL terminated.

Lustre-change: https://review.whamcloud.com/52016
Lustre-commit: e16d5d7d6fb274b22a76fcd5858849215550d4e0

Fixes: 29f8eb2a67 ("LU-16405 osd: lookup cache")
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: Ica2329c8a0990395307a14fe9bb9d43db3b364ed
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
59353 b2_15 J ✓B ✓T ✓R +1/1
LU-16385 obdlcass: stop MGC before MGS
reviewing Etienne AUJAMES · CI green — awaiting your review
stalled 531d S +8 −4
531d
build #113594 SUCCESS · tests all Maloo sessions
reviews: Alex Zhuravlev +1 2025-05-21 18:15
no vote yet: Mikhail Pershin
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 531d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16385 obdlcass: stop MGC before MGS

drops a reference to MGC when MGS is being umounted so that
MGC doesn't try to disconnected from a missing MGS which
can take long and hurt HA.

Lustre-change: https://review.whamcloud.com//49378
Lustre-commit: 817184a9788ae399dcd5cf53ae7c9801e4778a43

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Ib15f1ca56c47201bf6e29c12b3f81a11e55944ca
Reviewed-by: Mikhail Pershin <mpershin@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
53660 b2_15 J ✓B ✓T ✓R 0/1
LU-16235 hsm: check CDT state before adding actions llog
reviewing Etienne AUJAMES · CI green — awaiting your review
stalled 536d S +24 −12
536d
build #113393 SUCCESS · tests all Maloo sessions
no vote yet: Nikitas Angelinas
patchsets: PS1 01-12 PS2 01-12 PS3 05-14
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS3 uploaded 538d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16235 hsm: check CDT state before adding actions llog

Don't allow HSM requests to be added to the actions llog when
cdt_state is in CDT_STOPPED/CDT_STOPPING as the CDT is unavailable, or
in CDT_INIT as any HSM requests in the llog may not have been fully
processed and so cdt_last_cookie may not have been set appropriately,
otherwise a colliding cookie value can be reused in
mdt_agent_record_add() and the assertions in
cdt_agent_record_hash_add() can be triggered:

"ASSERTION( carl0->carl_cat_idx == carl1->carl_cat_idx ) failed"
"ASSERTION( carl0->carl_rec_idx == carl1->carl_rec_idx ) failed"

Requests needed to implement the Remove Archive on Last Unlink (RAoLU)
policy are allowed when the CDT is shutdown, as those are safe
operations. They are also allowed during CDT initialization, even
though this can lead to the assertions being triggered, as doing so
maintains administrator expectations regarding file archives always
being removed when the RAoLU policy is enabled. This could possibly be
improved by e.g. failing when mdt_handle_last_unlink() is not able to
add an HSM remove request, or saving the requests in an llog so they
can be sent if the CDT is available later.

For the same reason, the llog needs to be processed before setting
cdt_state to CDT_RUNNING in the coordinator thread.

Lustre-change: https://review.whamcloud.com/48842
Lustre-commit: fe5706e0c19f96e4f821790004f05ab265002e9d

Change-Id: I4b5f5ee22f74827b31d8ed5917a8fc16e35d1f16
Signed-off-by: Nikitas Angelinas <nikitas.angelinas@hpe.com>
HPE-bug-id: LUS-8231, LUS-11064
Fixes: e26d7cc3 ("LU-14399 hsm: process hsm_actions in coordinator")
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
53295 b2_15 J ✗4B ✓T ✓R 0/1
LU-13048 mdd: allow release after a non-blocking migrate
reviewing Etienne AUJAMES · CI green — awaiting your review
stalled 651d L +515 −130
651d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
replay-single@zfs:test_39NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
replay-single@zfs:test_41NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
replay-single@zfs:test_42NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lfsck@zfs:test_11bseen in 1 other review
failed enforced testplatformdetail
review-dne-part-5 RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: lustre-rsync-test. session
build #110482 SUCCESS · tests all Maloo sessions
no vote yet: Guillaume Courrier, Andreas Dilger
patchsets: PS1 11-30 PS2 11-30 PS3 01-18 PS4 01-15
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS4 uploaded 657d ago · NEW · backport · open in Gerrit ↗
commit message
LU-13048 mdd: allow release after a non-blocking migrate

lfs setstripe -i0 file
lfs hsm_archive file
lfs migrate -n -i1 file
lfs hsm_release file

These actions lead to "Cannot send HSM request ...: Operation not
permitted". This happens because of data version mismatch. This error
is returned by mdt_hsm_release() when the data versions are not the
same.

This patch only corrects the non-blocking migrations.

mdd_swap_layouts is updated to check and update the HSM archive
version when possible. The new and old data versions are added as
arguments to this function. If the old data version does not match
the data version in the HSM attribute, we don't update the HSM
attribute because we don't know what caused the inconsistency.

During a swap between a volatile and a regular file, if both objects
have an HSM xattr, mdd_swap_layouts was called from the MDT HSM layer
(release and restore). In this case, we want to swap the HSM xattr
(previously done using SWAP_LAYOUTS_MDS_HSM as a last argument to
mdd_swap_layouts).

If only the regular file has an HSM attribute, mdd_swap_layouts was
called after a migration (blocking or not). In this case, we want to
update the HSM archive version only if the file is not dirty and if
the new data version is provided.

Also, this patch removes the CL_LAYOUT event that was emitted for a
release. Since a CL_HSM event with HE_RELEASE flag is also emitted,
the CL_LAYOUT is unecessary.

For "lfs swap_layouts", the operation is denied on 2 files with HSM
xattr (HSM xattr swap will cause inconsistencies).
With non-HSM file and archived file, the operation is allowed but the
dirty flag is set on the HSM file.

Add lustre_swab_close_data_special() to swab close_data fields inside
the union (specific to some types of close).

Add regression test sanity-hsm 607a, 607b and 607c.

Lustre-change: https://review.whamcloud.com/49236
Lustre-commit: 94d02e5774cc0d9ca5c3c34d21c2698ab89f3a6d

Test-Parameters: clientversion=2.15.4 testlist=sanity-hsm
Test-Parameters: serverversion=2.15.4 testlist=sanity-hsm env=EXCEPT="114 409a"
Test-Parameters: testlist=sanity-hsm env=ONLY=607,ONLY_REPEAT=15
Signed-off-by: Courrier Guillaume <guillaume.courrier@cea.fr>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: I6e90131235f96255b636eea366ad0cef5f4f0b19
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
54470 master J –B ✓T ✓R +2/2
LU-10499 utils: show pin information in 'lfs pcc state' command
reviewing Qian Yingjin · CI green — awaiting your review
stalled 693d S +35 −9
693d
build #107860 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-09-27 01:43 · Feng Lei +1 2024-09-26 02:45
patchsets: PS1 03-20 PS2 09-20 PS3 09-23
owner Qian Yingjin · uploader Qian Yingjin · PS3 uploaded 772d ago · NEW · open in Gerrit ↗
commit message
LU-10499 utils: show pin information in 'lfs pcc state' command

If xattr lustre.pin exists, show its content in 'lfs pcc state'
command.

EX-5249 utils: don't complain for missing lustre.pin

Don't print an error when running "lfs pcc status" against an older
server without the "lustre.pin" xattr returns EOPNOTSUPP.
Was-Change-Id: Iab235b8be497386752915baeb31347cf8137eed0

EX-bug-id: EX-5249
Test-Parameters: trivial
Change-Id: I867ea3b246fc3b7d10e166d754c081c8afc462d5
Signed-off-by: Lei Feng <flei@whamcloud.com>
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
▶

Awaiting review — CI not green yet

(91)
70283 master J –B ✓T ↻R +1/2
LU-20984 lnet: check Netlink attributes fit in the message
reviewing Oleg Drokin · awaiting review (CI not green yet)
pw_shepherd 1 unresolved M +131 −65
5h
failed enforced testplatformdetail
review-ldiskfs-dne-arm retesting RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 5 tests. 1 tests failed: lnet-selftest. session
build #135243 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-11-04 03:35
patchsets: PS1 10-30 PS2 11-02
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-31 21:44 Gerrit AI review for Lustre api-ni.c:3188 — (suggestion) nla_ok() only proves the attribute header fits within `rem`. It says nothing about the payload size. An LN_SCALAR_ATTR_INT_VALU
Gerrit AI review for Lustre PS1 · 2026-10-31 21:44
(suggestion) nla_ok() only proves the attribute header fits within `rem`. It says nothing about the payload size. An LN_SCALAR_ATTR_INT_VALUE attribute with nla_len == 4 (header only) placed last in the message still passes the new check and the type check, and nla_get_s64() then reads 8 bytes past the end of the message. The same applies to the other nla_get_s64() calls reached after nla_next(): lnet_genl_parse_tunables(), health, hop/priority, Multi-Rail, peer state, notify_time, the ping timeout, the selftest timeout, and the LND lnd_nl_set() handlers.

This predates the patch and is limited to GENL_ADMIN_PERM commands. But the commit message says the read past the end of the message is closed, and for integer values it is not. Would a `nla_len(attr) < sizeof(s64)` check next to the type checks (or in nla_extract_val()) be worth adding? liblnetconfig always sends these as NLA_PUT_S64, so it would not reject anything real.
tags: pw_shepherd
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-20984 lnet: check Netlink attributes fit in the message

The LNet Netlink handlers walk the nested attributes of a request
using the length stored in its first attribute header, which was
never compared with the length of the message received.  They also
step to a value attribute with nla_next() and read it without
checking that it is still within the enclosing attribute, and
read integer values without checking that the attribute is long
enough to hold one.  A malformed request could therefore make the
parser read past the end of the message.

Check the first attribute with nla_ok() against the message length
before walking it, and check every attribute reached by nla_next()
before using it.  Add lnet_nla_is_int() to check both the type and
the length of an integer value attribute, and use it everywhere such
a value is read, including the LND tunables handlers.  Also check
that each CPT given for a NI is in range and that the list fits in
the configuration it is stored in.

Test-Parameters: trivial
Fixes: 8f8f6e2f36e5 ("LU-10003 lnet: use Netlink to support old and new NI APIs.")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I24e92280785004a4472e0d3d9a66e986157a6431
67626 master J !B ✓T ✓R +2/2
LU-20513 selftest: page-size agnostic simple check
reviewing Chris Horn · blocked on the owner: Verified -1 by Oleg Drokin
Verified -1 M +146 −33
10h
blocked on the owner: Verified -1 by Oleg Drokin
awaiting review (CI not green yet)
janitor run: 2 failing config(s), none unique to this patch — janitor results
reviews: Andreas Dilger +1 2026-08-16 03:14 · Timothy Day +1 2026-09-29 15:37
no vote yet: Jinshan Xiong, Oleg Drokin
patchsets: PS1 07-29 PS2 07-29
owner Chris Horn · uploader Chris Horn · PS2 uploaded 97d ago · NEW · open in Gerrit ↗
commit message
LU-20513 selftest: page-size agnostic simple check

The LST_BRW_CHECK_SIMPLE pattern writes the magic value at the first
and at the last __u64 of each page of the bulk buffer. The two nodes
of a test can have different page sizes. Then they do not agree on
the marked offsets, and the node with the smaller page size reports
bulk data corruption.

For example, a 1MiB transfer from a node with 64KiB pages to a node
with 4KiB pages. The sender writes the magic value at offset 0 and at
offset 65528 of each 64KiB page. The receiver looks for the magic
value at offset 4088 of the buffer, and does not find it. Every such
transfer fails.

Put the markers at a fixed stride in the bulk buffer, and not at page
boundaries. The stride is 4096 bytes, which is the smallest supported
page size. Thus each page of each node gets at least one marker. Put
another marker at the end of the buffer to detect a short transfer.
All the offsets are relative to the buffer. Thus the two nodes agree
on them for all page sizes.

This also makes the markers agree when the two nodes use a different
start offset in the bulk buffer.

The marker positions are visible on the wire. Thus add the session
feature LST_FEAT_BULK_STRIDE, and keep the former positions when the
session does not have this feature. A test node that does not know
the feature rejects the session in sfw_make_session(). The user sees
this at lst add_group, which tells the user to select the features
with the LST_FEATURES environment variable.

The console takes the version of a Netlink session request as the
feature mask of the new session. But lst sent the version of the
Netlink interface. Thus the session got the features LST_FEAT_BULK_LEN
only, and LST_FEATURES had no effect. Send the selected features, and
keep them when the console accepts the request. The reply carries the
version of the Netlink interface, and not the features.

The LST_BRW_CHECK_NONE and LST_BRW_CHECK_FULL patterns do not change.

Extend lnet-selftest.sh to validate check=none/simple/full

Assisted-by: Claude:claude-opus-5
Fixes: fe651f6b21a4 ("LU-521 lnet: make LST support variable page size")
Test-Parameters: trivial
Test-Parameters: clientdistro=rocky9.5 clientarch=aarch64 serverarch=x86_64 testlist=lnet-selftest
Signed-off-by: Chris Horn <chorn@ddn.com>
Change-Id: I27be7f5c0bfe3787a491c6d75aef762b5db498fd
69332 master J –B ✓T ✓R +3/2
LU-20157 llite: clear PageUptodate only on reclaim
reviewing Alexey Lyashkov · blocked on the owner: Verified -1 by Oleg Drokin
Verified -1 218_review_blocker218_review_priority master-next L +220 −61
11h
blocked on the owner: Verified -1 by Oleg Drokin
awaiting review (CI not green yet)
build #134662 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov +1 2026-10-29 06:14 · Timothy Day +1 2026-10-29 12:57 · Andreas Dilger +1 2026-10-28 21:32 · Patrick Farrell +1 2026-10-28 21:12
no vote yet: Qian Yingjin, wangdi, Andrew Perepechko, Alexander Boyko, Oleg Drokin
patchsets:
+3 earlier PS1 09-30 PS2 09-30 PS3 10-13
PS4 10-14 PS5 10-23 PS6 10-26 Patrick Farrell PS7 10-27 Andreas Dilger PS8 10-28 Andreas Dilger
tags: 218_review_blocker 218_review_priority
owner Alexey Lyashkov · uploader Andreas Dilger · PS8 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-20157 llite: clear PageUptodate only on reclaim

Client lock replay could deadlock with a buffered read.  Before
replaying locks, ldlm_cancel_unused_locks_for_replay() cancels the
idle locks of the namespace, and discarding their pages in
osc_lock_discard_pages() took invalidate_lock of the inode exclusively
in vvp_io_init().  A reader filling the page cache of that inode holds
invalidate_lock shared while its read RPC waits for the import to
leave recovery, so the replay thread waited for the reader and the
reader for the replay.  A blocking AST or LRU cancel waited the same
way for any reader of the inode (LU-19427).

vvp_page_delete() cleared PageUptodate on every cl_page teardown.
This violates the kernel invariant, relied upon since v5.13
79e3094c53c5 ("mm/filemap: drop check for truncated page after I/O"),
that invalidation leaves PG_uptodate intact.  A buffered read racing
a DLM blocking AST could therefore find a !uptodate folio and return
-EIO (LU-16651) instead of retrying, which is why invalidate_lock was
taken there.

The flag is only needed where page removal can fail after the cl_page
is already gone.  That is ->release_folio: do_release_folio() commits
cl_page_delete() before __remove_mapping() decides whether
folio_ref_freeze() succeeds, so an extra vmpage reference can leave a
folio in the mapping with no cl_page.  Such a folio is invisible to
osc_page_gang_lookup(), which walks osc->oo_tree rather than
mapping->i_pages, and would be served stale forever.  The lock cancel
and truncate paths remove the folio unconditionally: cl_page_discard()
via generic_error_remove_folio(), and ll_invalidate_folio() via
filemap_remove_folio().

Move the clear into do_release_folio(), inside the !cl_page_in_use()
branch so it fires only when the cl_page is actually destroyed.  This
covers reclaim and also O_DIRECT write invalidation, which reaches
->release_folio through invalidate_inode_pages2_range() and never held
invalidate_lock.  The lli_page_inv_lock seqlock is retained for the
reclaim race named in LU-16160.

With lock cancel no longer clearing PG_uptodate, it no longer needs to
exclude page cache filling, so drop ci_invalidate_page_cache and the
filemap_invalidate_lock() pair added by LU-16651.  The
HAVE_INVALIDATE_LOCK configure check has no remaining users and is
removed.

The reclaim refcount race itself is deliberately left alone, and
PG_uptodate is still cleared to mask it.  Gating the teardown on a
page_ref_freeze() of the vmpage was tried and rejected: where the
freeze succeeds the folio is freed and PG_uptodate is never observed,
so skipping the clear gains nothing, while a removal that still fails
in the residual window between the unfreeze and __remove_mapping()
would leave an orphan with PG_uptodate set.  Aborting the release on a
failed freeze does prevent orphans, but changes ->release_folio
semantics for every caller and regressed sanity 255b and 398a.
Closing the window properly requires deferred teardown from
->free_folio.

Add recovery-small test_18d (from Di Wang) and test_18e (from
Alexander Boyko) for the lock replay deadlock, and sanityn test_126a-c
for a blocking AST, an mmap fault reader and an LRU cancel waiting for
a reader of another stripe of the same file.

Test-Parameters: testlist=sanity env=ONLY=833,ONLY_REPEAT=50
Test-Parameters: testlist=sanityn env=ONLY=16f,ONLY_REPEAT=20
Test-Parameters: testlist=sanity-pcc env=ONLY=99b,ONLY_REPEAT=50
Fixes: f2a16793fa43 ("LU-14541 llite: avoid stale data reading")
Fixes: b4da788a819f ("LU-16160 llite: SIGBUS is possible on a race with page reclaim")
Fixes: bba59b1287c9 ("LU-16651 llite: hold invalidate_lock when invalidate cache pages")
Fixes: 7e0ccbf24182 ("Revert "LU-19427 llite: fix invalidate_lock deadlock for mixed BIO/DIO"")
Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: I832610825184b701124f939a4a1750ae5108125b
64705 master J –B ✓T ✗5R 0/2
LU-19412 libcfs: DNS multi-address name resolution
reviewing Louis-Marie Nicolas · blocked on the owner: enforced tests failed
pw_shepherd 9 unresolved L +546 −71
12h
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
custom-1001 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-3 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-3 RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #134776 SUCCESS · tests all Maloo sessions
no vote yet: Etienne AUJAMES
patchsets: PS1 03-19 PS2 03-19 Janitor Bot PS3 10-29
threads: 9 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre COMMIT_MSG:17 — (minor) Every libcfs_strnid() user in userspace changes behaviour here, not only mount.lustre/mkfs.lustre: failed lookups now return -ENOENT
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(minor) Every libcfs_strnid() user in userspace changes behaviour here, not only mount.lustre/mkfs.lustre: failed lookups now return -ENOENT instead of -EINVAL, all of 127.0.0.0/8 is rejected rather than only 127.0.0.1, and hostname lookups can now return IPv6 NIDs. These were mentioned in a Gerrit reply but not in the commit message. Please add them here.
reply PS2 2026-10-29 17:17 Louis-Marie Nicolas patchset comment — About libcfs_strnid(): Done. Behavior changes to note: lookup failures may now return -ENOENT (instead of -EINVAL), and I widened the loopba
Andreas Dilger PS2 · 2026-03-25 11:41
I would assume that the libcfs_nidstr() function just becomes a 1-NID special case of libcfs_nidstrs()?  That should reduce code duplication.

Please also update the `mount.lustre(8)` and `mkfs.lustre(8)` man pages with details of how this works.
Louis-Marie Nicolas PS2 · 2026-10-29 17:17
About libcfs_strnid(): Done. Behavior changes to note: lookup failures may now return -ENOENT (instead of -EINVAL), and I widened the loopback rejection a bit from 127.0.0.1 only to 127.0.0.0/8.
About the man pages: TBD.
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre nidstrings.c:374 — (minor) Before this patch, hostname lookups used AF_INET only, so the old "Now consider AF_INET6" loop never matched anything and hostname N
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(minor) Before this patch, hostname lookups used AF_INET only, so the old "Now consider AF_INET6" loop never matched anything and hostname NIDs were always IPv4. With AF_UNSPEC, a site that has dual-stack DNS but runs IPv4-only LNet will get IPv6 NIDs from the AAAA records added to mount sources and to the mgsnode=/failover.node= params that mkfs/tunefs write. Those params are persisted and sent to the MGS config log, so older peers will see them too. Is that what is intended for existing configurations? If not, IPv6 results could be limited to hostnames that have no A record, or put behind an option.
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre nidstrings.c:377 — (defect) Before this patch, libcfs_ip_str2addr_size() and libcfs_ip_str2addr() only called getaddrinfo() when the string began with a letter
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(defect) Before this patch, libcfs_ip_str2addr_size() and libcfs_ip_str2addr() only called getaddrinfo() when the string began with a letter. Now any string that inet_pton() rejects goes to getaddrinfo(). glibc's getaddrinfo() parses inet_aton() shorthand, so typos that used to be rejected now quietly become a different NID:

    192.168.1@tcp   -> 192.168.0.1@tcp
    10.1@tcp        -> 10.0.0.1@tcp
    12@tcp          -> 0.0.0.12@tcp
    0x0a000001@tcp  -> 10.0.0.1@tcp

This goes through libcfs_strnid() as well, so it affects lctl, lnetctl, liblnetconfig nidlist parsing and mkfs/mount.lustre, not only hostname expansion. Every malformed NID also costs a DNS query now, which can hang until the resolver times out on a cluster with no DNS reachable.

Could the alpha-first check come back, or could the numeric forms be rejected (for example, try AI_NUMERICHOST first and refuse to resolve if it succeeds)? libcfs_ip_str2addrs() at the getaddrinfo() call for o2ib/gip has the same problem.
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre nidstrings.c:1232 — (style) This isn't a bug, but for the new exported API:
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(style) This isn't a bug, but for the new exported API:
- the comment should be kernel-doc, describing each argument and the return value (0 on success, even when nf > nr, i.e. truncated)
- `nr`/`nf` are cryptic, and `nf` is the name already used for `struct netstrfns *` all over this file, which is why the local had to be renamed to `netfns`. Something like `nr_stored`/`nr_found` would read better
- the prototype is in include/uapi/linux/lnet/nidstr.h outside `#ifdef __KERNEL__`, but only the userspace library implements it. Should it go inside a `#ifndef __KERNEL__` block?
reply PS2 2026-03-25 11:41 Andreas Dilger conf-sanity.sh:12409 — It might be better to make up a "more fake" address, in case the "+10" address is live and in use? That might result in the mount trying a
Andreas Dilger PS2 · 2026-03-25 11:41
It might be better to make up a "more fake" address, in case the "+10" address is live and in use?  That might result in the mount trying a totally unrelated test cluster.
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre conf-sanity.sh:12912 — (minor) Carried over from patchset 2, which had no reply and is unchanged: mgs_ip1 + 10 may be a live address on the test network. Since tes
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(minor) Carried over from patchset 2, which had no reply and is unchanged: mgs_ip1 + 10 may be a live address on the test network. Since test_161b then checks that the client has it as an MGS peer NID, the client may actually try to talk to that host. An address that can never be in use (e.g. one from 192.0.2.0/24, as test_161c/d already use) would be safer.
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre mount_utils.c:1057 — (minor) The new malformed-source check jumps to out_bad_mnt_str without printing anything, unlike the strchr() check just above it. The user
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(minor) The new malformed-source check jumps to out_bad_mnt_str without printing anything, unlike the strchr() check just above it. The user only sees the usage text. If the patch is refreshed, please print "Invalid mount string" here as well.
reply PS3 2026-10-31 09:54 Gerrit AI review for Lustre mount_utils.c:1142 — (suggestion) Joining every address of a hostname with ',' tells the client they are interfaces of one node (see mount.lustre(8): "comma-sepa
Gerrit AI review for Lustre PS3 · 2026-10-31 09:54
(suggestion) Joining every address of a hostname with ',' tells the client they are interfaces of one node (see mount.lustre(8): "comma-separated list of NIDs, if there are different LNet interfaces for the same MGSNODE"). A DNS name with A records for both members of an MGS/OSS HA pair is a common setup. It used to resolve to only the first address; now both addresses are merged into one peer, and LNet discovery from each one will return a different peer. Should this case be documented as unsupported, or detected?
tags: pw_shepherd
owner Louis-Marie Nicolas · uploader Louis-Marie Nicolas · PS3 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-19412 libcfs: DNS multi-address name resolution

Expand hostnames into all supported addresses when converting NIDs
for mount.lustre and mkfs.lustre, instead of using only the first
resolved address. Group addresses from each hostname with commas
while preserving separators between explicitly specified NIDs.

Add libcfs_strnids() and resolver callbacks with stored and total
address counts so callers can resize their buffers. Support mixed
IPv4 and IPv6 results for tcp and efa, retaining each address size.
Reject failed lookups, loopback addresses and IPv6 link-local
addresses.

Grow conversion buffers to preserve expanded NID lists and filesystem
suffixes.

Test-Parameters: testlist=conf-sanity
Signed-off-by: Louis-Marie Nicolas <lnicolas@ddn.com>
Assisted-by: Codex:codex-6.1-sol (review)
Change-Id: Icf09a7bcf4b4eae399525c01a31f710d04bd2015
70368 master J –B ✓T …R 0/2
LU-21107 build: remove kernel objects in make clean
reviewing Thomas Bertschinger · awaiting review (CI not green yet)
1 unresolved S +20 −0
18h
build #135333 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Arshad Hussain, Timothy Day
patchsets: PS1 11-03 PS2 11-03
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-11-03 20:22 Thomas Bertschinger patchset comment — I moved it over to the Makefile. In order to get it to run during distclean and maintainer-clean, I had to add the "*-recursive" targets as
Timothy Day PS1 · 2026-11-03 18:21
We eventually want to remove the top-level autoMakefile.am. It doesn't seem like this make target has an explicit dependency on automake. Could we add it to the top-level Makefile instead?
Thomas Bertschinger PS1 · 2026-11-03 20:22
I moved it over to the Makefile. In order to get it to run during distclean and maintainer-clean, I had to add the "*-recursive" targets as dependents. This way of handling it seems a little inelegant but it does seem to work. I am definitely not an autotools expert; maybe there's a better way to integrate with those targets.
owner Thomas Bertschinger · uploader Thomas Bertschinger · PS2 uploaded 18h ago · NEW · open in Gerrit ↗
commit message
LU-21107 build: remove kernel objects in make clean

make clean should remove kernel object files. Previously, it did via
the MOSTLYCLEANFILES variable. However, when that variable was
removed, nothing was left that cleaned up the kernel modules. This
cleans them up by delegating to the Kbuild clean target.

The new target runs for make clean, distclean, and maintainer-clean.

Signed-off-by: Thomas Bertschinger <bertschinger@lanl.gov>
Fixes: 31e5fc87aebf ("LU-18876 build: remove MOSTLYCLEANFILES")
Test-Parameters: trivial
Change-Id: Ie5a7894000f2eee81c0c7a1101615cdbb258cf5e
70241 master J –B ✓T …R 0/2
LU-11962 lfs: find files with a foreign component
reviewing Andreas Dilger · awaiting review (CI not green yet)
ssompccro M +165 −51
20h
build #135327 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Jian Yu
patchsets: PS2 11-01 PS3 11-03
tags: ssom pccro
owner Andreas Dilger · uploader Andreas Dilger · PS3 uploaded 21h ago · NEW · open in Gerrit ↗
commit message
LU-11962 lfs: find files with a foreign component

"lfs find --foreign" only matches a file whose whole layout is
foreign, and "lfs find -L foreign" never matches, since the layout
check skips foreign entries.  There is no way to find the files that
have a foreign mirror component, as PCC-RO adds.  For directories,
"lfs find --foreign" matches the wrong ones, since the foreign LMV
check is inverted, and "lfs find ! --foreign" prints every unstriped
directory without checking the other options, such as -type f.

Match a composite layout in find_check_foreign() if it has a foreign
component, of the requested type if given, and match foreign layouts
and components with "-L foreign" in find_check_layout().  A file whose
whole layout is foreign now also matches a negated pattern, such as
"! -L raid0".  Fix the foreign directory check, and remove the
shortcut that printed an unstriped directory for "! --foreign".

Add sanity test_56ya for foreign files and directories, and
sanity-pcc test_21ba to find a file attached to PCC-RO.

Test-Parameters: trivial testlist=sanity-pcc
Fixes: ce98bfe5f726 ("LU-10499 pcc: add readonly mode for PCC")
Fixes: baba1fd07a97 ("LU-14489 utils: fix 'lfs find --mdt-count'")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5 ltvm llm_code_and_review_tools
Change-Id: Id8a52c244eadf77dd146a24fe9df46a812500c1e
50871 master J –B ✓T …R 0/2
LU-9512 llite: Add O_TMPFILE support
reviewing Arshad Hussain · awaiting review (CI not green yet)
lug23ddhackathon 2 unresolved L +525 −33
1d
build #135319 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Qian Yingjin, Andreas Dilger, Sebastien Buisson, Oleg Drokin, Timothy Day
patchsets:
+29 earlier PS1 05-05 PS2 05-22 PS3 05-22 PS4 05-22 PS5 08-12 PS6 08-12 PS7 08-12 PS8 08-13 PS9 08-14 PS10 08-14 PS11 08-14 PS12 08-24 PS13 08-24 PS14 08-25 PS15 08-26 PS16 08-26 PS17 09-07 PS18 09-07 PS19 09-09 PS20 09-09 PS21 09-14 PS22 09-21 PS23 09-30 PS24 10-01 PS25 10-04 PS26 10-04 PS27 10-05 PS28 10-05 PS29 10-07
PS30 10-16 PS31 10-26 PS32 11-02 PS33 11-03 PS34 11-03
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS32 2026-11-02 23:36 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) The body covers the client side but not several server-side changes that alter behaviour or on-disk format:
Gerrit AI review for Lustre PS32 · 2026-11-02 23:36
(minor) The body covers the client side but not several server-side changes that alter behaviour or on-disk format:

- a new per-file LMA incompat bit, LMAI_TMPFILE, set at create time and never cleared
- the new MDS_CREATE_TMPFILE op bias and sp_cr_tmpfile
- mdd_link() now drops the object from the orphan index and logs CL_CREATE instead of CL_HARDLINK on the first link
- mdd_close() now keeps an orphan with nlink > 1
- mdt_finish_open() no longer returns -ENOTDIR for MDS_OPEN_VOLATILE | MDS_OPEN_DIRECTORY

Could these be described and named, so they can be found later with git log?
reply PS32 2026-11-02 23:36 Gerrit AI review for Lustre lustre_user.h:485 — (defect) lma_incompat bits mean "a Lustre version that doesn't know this bit must refuse the object". osd_get_lma() and osd_check_lma() retu
Gerrit AI review for Lustre PS32 · 2026-11-02 23:36
(defect) lma_incompat bits mean "a Lustre version that doesn't know this bit must refuse the object". osd_get_lma() and osd_check_lma() return -EOPNOTSUPP for any bit outside LMA_INCOMPAT_SUPP. The bit is set at create time and nothing clears it when the file is linked into the namespace, so every file ever created with O_TMPFILE keeps it.

After a server downgrade (or a backup restored on an MDS without this patch), those ordinary named files become inaccessible. The flag is only needed while the object is still a nameless orphan. Could it be held in lma_compat, or cleared in mdd_link() when the object leaves the orphan index?

Also, LMAI_TMPFILE, LUSTRE_TMPFILE_FL and MDS_CREATE_TMPFILE are new wire/on-disk values without the matching CHECK_VALUE_X() in lustre/utils/wirecheck.c and LASSERTF() in both wiretest.c copies, unlike their neighbours (LMAI_ENCRYPT, LUSTRE_ENCRYPT_FL, MDS_NAMEHASH).
tags: lug23dd hackathon
owner Arshad Hussain · uploader Arshad Hussain · PS34 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-9512 llite: Add O_TMPFILE support

This patch adds VFS tmpfile (O_TMPFILE (nameless))
file support. The file will be automatically deleted
when it is closed.

VFS tmpfile (tmpfile) support which is little different
from standard volatile file creation already present.
While volatile file is either destroyed on close or
swapped (migrate) but never link'ed. The tmpfile
support via inode_operations->tmpfile can be linked
and be brought out of orphan list and can be listed like
regular file.

tmpfile uses unique (LUSTRE_VOLATILE_HDR + random) as
name, same as volatile file. This is because, currently
any file with such unique name is already put on
orphan (unlink, yet still open). Therefore tmpfile
piggybacks on this already implemented feature to
implement tmpfiles. However, tmpfile and volatile
files in Lustrefs is not same as mentioned above.

With this we have:
- File open with ll_tmpfile (O_TMPFILE): linking allowed
- regular open-unlinked: linking not allowed
- Volatile file (HSM/migrate): linking not allowed

Test is exercised against older 2.16 server also.
New sanity/63d test is added as verification.

Test-Parameters: trivial serverversion=2.17.0 testlist=sanity
Test-Parameters: trivial serverversion=2.16.0 testlist=sanity env=ONLY="63d"
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I74b44bf2e4cfac10fef09d32679b104e83020b36
67100 master J ✗1B ✓T ✗1R -1/2−
LU-18687 misc: use bound workqueues
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
needs rebase 1 unique failure 11 unresolved M +96 −95
6d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-slow@ldiskfs+DNE:test_255cseen in 1 other review
failed enforced testplatformdetail
review-zfs RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: sanity-quota. session
build #131615 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets: PS1 07-07 PS2 09-11
threads: 11 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre COMMIT_MSG:9 — The body opens mid-sentence as a continuation of the subject, so the patch has no statement of what it accomplishes and why before it descri
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
The body opens mid-sentence as a continuation of the subject, so the patch has no statement of what it accomplishes and why before it describes how. Could it start with a short paragraph along the lines of "cfs_cpt_bind_workqueue() relied on apply_workqueue_attrs(), which is not exported ..."?

Several parts of the diff aren't accounted for:

- the new cfs_cpt_wq_cpu(), cfs_cpt_queue_work(), cfs_cpt_queue_delayed_work() and cfs_cpt_mod_delayed_work() helpers are not named anywhere, so this is hard to find later with `git log -S`
- the swi_init_workitem() signature change and the new swi_cpt field in struct swi_workitem
- the removal of compat_alloc_workqueue_attrs()/compat_free_workqueue_attrs()/compat_apply_workqueue_attrs() from lustre_compat/symbols.c
- most importantly, that max_active changes meaning (per-pool to per-CPU) for every workqueue created through cfs_cpt_bind_workqueue()

A `Test-Parameters:` line covering lnet-selftest would also be useful here given the change affects the LST work schedulers.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre lib-cpt.h:324 — A second consequence of the bound workqueue: max_active is applied per pool_workqueue, and a bound wq has one per CPU where an unbound wq ha
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
A second consequence of the bound workqueue: max_active is applied per pool_workqueue, and a bound wq has one per CPU where an unbound wq has one per node. So `nthrs` silently turns from a system/node-wide ceiling into a per-CPU ceiling, multiplying effective concurrency by the CPU count. That hits obd_zombid (cfs_cpt_number()), ll-readahead-wq and tgt_nid_notifier (1) - see the tgt_mount.c comment.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre lib-cpt.h:338 — "The @tbl/@cpt the caller binds to here must match what it later passes to cfs_cpt_queue_work()" describes a binding this function no longer
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
"The @tbl/@cpt the caller binds to here must match what it later passes to cfs_cpt_queue_work()" describes a binding this function no longer performs - `tbl` and `cpt` are now unused and the body is just alloc_workqueue() plus ERR_PTR() wrapping. Should the unused parameters be dropped, and the name changed to something that doesn't claim a CPT binding?
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre lib-cpt.h:342 — Dropping WQ_UNBOUND makes this a per-CPU workqueue, and cfs_cpt_wq_cpu() below returns the queueing CPU whenever it is inside the partition.
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
Dropping WQ_UNBOUND makes this a per-CPU workqueue, and cfs_cpt_wq_cpu() below returns the queueing CPU whenever it is inside the partition. So work now runs on the CPU that submitted it rather than being spread over the partition's cores by the scheduler.

That looks like it undoes what the callers wanted. ll-readahead-wq is sized `cfs_cpt_weight(cfs_cpt_tab, CFS_CPT_ANY) >> 1` and exists so the reader thread doesn't do the readahead itself - kickoff_async_readahead() even says "allowing the user thread to do fast i/o" - but the work item now lands on the reader's own CPU. lst_test_wq[i] is sized `cfs_cpt_weight(cpt) - 1` for the same reason and gets confined the same way.

Would keeping WQ_UNBOUND and still calling queue_work_on() work better? For an unbound wq the cpu argument selects the pool for that CPU's node/pod, so you keep the partition affinity and still get parallelism across its cores, with no need for apply_workqueue_attrs().
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre lib-cpt.h:359 — This isn't a bug, but a one-line note on why raw_ is used here (the result is only a placement hint, so migration between the read and queue
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
This isn't a bug, but a one-line note on why raw_ is used here (the result is only a placement hint, so migration between the read and queue_work_on() is harmless) would save the next reader a trip to check whether preemption is disabled.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre lib-cpt.h:361 — This check can't fire. cfs_cpt_cpumask() returns `&cptab->ctb_cpumask` or `&cptab->ctb_parts[cpt].cpt_cpumask` on SMP, and the !CONFIG_SMP s
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
This check can't fire. cfs_cpt_cpumask() returns `&cptab->ctb_cpumask` or `&cptab->ctb_parts[cpt].cpt_cpumask` on SMP, and the !CONFIG_SMP stub returns cpu_online_mask - never NULL. It also doesn't protect against a NULL @tbl, since in that case cfs_cpt_cpumask() hands back a small non-NULL offset and cpumask_test_cpu() faults on the next line anyway. Dropping it would be clearer.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre lib-cpt.h:367 — cpumask_any_and() is `#define`d to cpumask_first_and(), so the "fall back to any online CPU in the partition" in the comment above is really
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
cpumask_any_and() is `#define`d to cpumask_first_and(), so the "fall back to any online CPU in the partition" in the comment above is really "always the lowest-numbered online CPU". With a bound workqueue every caller outside the partition then funnels onto that one CPU. cpumask_any_and_distribute() would match the comment's intent.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre rpc.c:200 — srpc_serv_is_framework(scd->scd_svc) is evaluated twice in adjacent ternaries. If the patch is refreshed, a local `bool fw = srpc_serv_is_fr
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
srpc_serv_is_framework(scd->scd_svc) is evaluated twice in adjacent ternaries. If the patch is refreshed, a local `bool fw = srpc_serv_is_framework(scd->scd_svc);` would read better and keep the two selections obviously in step.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre selftest.h:559 — "CFS_CPT_ANY items ... are left to the core" doesn't match cfs_cpt_wq_cpu(): for CFS_CPT_ANY it uses cptab->ctb_cpumask, which normally cont
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
"CFS_CPT_ANY items ... are left to the core" doesn't match cfs_cpt_wq_cpu(): for CFS_CPT_ANY it uses cptab->ctb_cpumask, which normally contains the current CPU, so it returns raw_smp_processor_id() rather than WORK_CPU_UNBOUND. Framework RPCs on lst_serial_wq get a concrete CPU like everything else.
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre tgt_mount.c:1720 — tgt_nu_wq is created with nthrs 1, which used to mean at most one NID-update work item in flight. With the workqueue now bound, max_active 1
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
tgt_nu_wq is created with nthrs 1, which used to mean at most one NID-update work item in flight. With the workqueue now bound, max_active 1 is per-CPU, so up to num_online_cpus() of these can run at once.

lnet_notify_net_update() invokes the callbacks under ln_api_mutex, so a net delete and a subsequent net add are queued in order, but if they are queued from different CPUs they now execute concurrently. Two tgt_nid_notifier() runs each send a full NID snapshot via tgt_nids_notify(), so the MGS/targets can end up with the older snapshot last. Was losing that serialization intended?
reply PS2 2026-09-12 12:13 Gerrit AI review for Lustre symbols.c:23 — (minor) This patch removes the last user of this header from this file - compat_alloc_workqueue_attrs()/compat_free_workqueue_attrs()/compat
Gerrit AI review for Lustre PS2 · 2026-09-12 12:13
(minor) This patch removes the last user of this header from this file - compat_alloc_workqueue_attrs()/compat_free_workqueue_attrs()/compat_apply_workqueue_attrs() are gone, and nothing left here touches __flush_workqueue() or HAVE_FLUSH___WORKQUEUE.

If the patch is refreshed, the include can go too.
owner Timothy Day · uploader Timothy Day · PS2 uploaded 53d ago · NEW · open in Gerrit ↗
commit message
LU-18687 misc: use bound workqueues

... and adjusted callers to schedule work in a CPT aware manner,
so we don't need unexported symbols from Linux.

Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ia15e62d11d362ecccafb6cadd1c19853c00d0f6e
67498 master J !B ✓T ✗1R -2/2−
LU-19805 llite: unregister client BDI on pre-5.11 kernels
reviewing Oleg Drokin · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 6 unresolved M +48 −5
13d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 crashed RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
build #129722 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-08-21 21:19
no vote yet: Shaun Tancheff
patchsets: PS1 07-23 PS2 07-29 Andreas Dilger PS3 07-29 Andreas Dilger
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-08-20 10:07 Gerrit AI review for Lustre COMMIT_MSG:37 — (minor) This says the gate is the presence of bdi_dev_name(), added by 68f23b8906 and picked up in RHEL 8.6, but the new configure test prob
Gerrit AI review for Lustre PS3 · 2026-08-20 10:07
(minor) This says the gate is the presence of bdi_dev_name(), added by 68f23b8906 and picked up in RHEL 8.6, but the new configure test probes backing_dev_info.dev_name, which is a different commit: 6bd87eec23cb ("bdi: add a ->dev_name field to struct backing_dev_info", v5.7).

68f23b8906's bdi_dev_name() still returns dev_name(bdi->dev), so it alone is not the property the patch relies on. The two commits also end up attributed to each other between here and the config/lustre-core.m4 comment.

Would it be clearer to say the gate is the cached dev_name copy, and to re-check the RHEL 8.6 claim against that commit rather than against 68f23b8906?
reply PS3 2026-08-20 10:07 Gerrit AI review for Lustre lustre-core.m4:947 — (minor) The sha and the quoted subject belong to different commits. 6bd87eec23cb is Christoph Hellwig's "bdi: add a ->dev_name field to stru
Gerrit AI review for Lustre PS3 · 2026-08-20 10:07
(minor) The sha and the quoted subject belong to different commits. 6bd87eec23cb is Christoph Hellwig's "bdi: add a ->dev_name field to struct backing_dev_info"; "memcg: fix a crash in wb_workfn when a device disappears" is 68f23b8906 (Ted Ts'o, v5.6).

The next line then credits 6bd87eec23cb with adding bdi_dev_name(), which 68f23b8906 did. The rest of the sentence (the worker keeping its own copy of the name) does describe 6bd87eec23cb correctly, so only the subject and that one clause need fixing.
reply PS3 2026-08-20 10:07 Gerrit AI review for Lustre lustre-core.m4:962 — (minor) The test compiles a reference to the dev_name field, but the macro, the configure message and the AC_DEFINE description all say bdi_
Gerrit AI review for Lustre PS3 · 2026-08-20 10:07
(minor) The test compiles a reference to the dev_name field, but the macro, the configure message and the AC_DEFINE description all say bdi_dev_name(). Those are separable: v5.6 has the function without the cached field, and only the field makes the name outlive device_unregister().

Since the name is what someone reads when they later decide whether the test is right, a name that disagrees with the test invites "correcting" it to probe the function and quietly losing the property the patch depends on. LC_HAVE_BDI_DEBUG_STATS just below is the model here:

    [if 'struct backing_dev_info' has 'dev_name' field]

Renaming to HAVE_BDI_DEV_NAME_FIELD would make the C-side guards say what they mean too.
reply PS3 2026-08-21 21:19 Andreas Dilger llite_lib.c:1599 — ```
James Simmons PS3 · 2026-08-20 19:44
There has to be a better way then this ifdef mess.
Andreas Dilger PS3 · 2026-08-21 21:19
```
#if !defined(SB_I_PERSB_BDI) && !defined(HAVE_BDI_DEV_NAME)
#define SB_I_CGROUPWB 0
#endif
```
?
reply PS3 2026-08-20 10:07 Gerrit AI review for Lustre llite_lib.c:1683 — (suggestion) Is this branch needed? bdi_debug_register() creates the stats file as a child of debug_dir:
Gerrit AI review for Lustre PS3 · 2026-08-20 10:07
(suggestion) Is this branch needed? bdi_debug_register() creates the stats file as a child of debug_dir:

    bdi->debug_dir = debugfs_create_dir(name, bdi_debug_root);
    bdi->debug_stats = debugfs_create_file("stats", 0444, bdi->debug_dir, ...);

so debugfs_remove_recursive(bdi->debug_dir) in the #else already takes the stats file with it on kernels that have the field. That makes "restore the debug_stats removal that pre-v5.3 kernels need" in the commit message hard to back up.

Dropping it would also leave LC_HAVE_BDI_DEBUG_STATS with no users at all - this is its only one - so the configure test could go too.
reply PS3 2026-08-21 21:19 Andreas Dilger llite_lib.c:1687 — This looks like the only real issue, the others are largely cosmetic.
Gerrit AI review for Lustre PS3 · 2026-08-20 10:07
(minor) Not something this patch introduces, but both branches touch fields that only exist under CONFIG_DEBUG_FS:

    #ifdef CONFIG_DEBUG_FS
        struct dentry *debug_dir;
        struct dentry *debug_stats;
    #endif

With CONFIG_DEBUG_FS=n the HAVE_BDI_DEBUG_STATS test fails too, so the #else is what gets compiled, and bdi->debug_dir is not a member. The patch narrows the affected range (it now needs HAVE_BDI_DEV_NAME as well), but v5.7-v5.10 without debugfs still won't build. Worth wrapping in #ifdef CONFIG_DEBUG_FS while these lines are being rewritten?
Andreas Dilger PS3 · 2026-08-21 21:19
This looks like the only real issue, the others are largely cosmetic.
owner Oleg Drokin · uploader Andreas Dilger · PS3 uploaded 98d ago · NEW · open in Gerrit ↗
commit message
LU-19805 llite: unregister client BDI on pre-5.11 kernels

Repeated client mount/umount eventually fails with:

  sysfs: cannot create duplicate filename '/devices/virtual/bdi/fs-ffffa08a8a808000'
  kobject_add_internal failed for fs-ffffa08a8a808000 with -EEXIST
  llite: Unable to mount <unknown>: rc = -17

ll_fill_super() names the per-superblock BDI after the superblock
address (ll_get_cfg_instance()), so that name is only unique for as
long as the BDI does not outlive the superblock.

LU-16954 set SB_I_CGROUPWB on the Lustre superblock.  Every cgroup
bdi_writeback created for the mount takes a reference on the BDI in
wb_init(), and those references are only dropped by bdi_unregister()
via cgwb_bdi_unregister().  Kernels older than v5.11 have no
SB_I_PERSB_BDI, so generic_shutdown_super() only calls bdi_put():
release_bdi() cannot run while a cgwb holds a reference, and the cgwbs
are not killed because that only happens from bdi_unregister().  The
BDI and its sysfs node therefore stay behind after umount, and the next
mount that gets a struct super_block back at the same address fails
with -EEXIST.

LU-16954 compensated for this by unregistering the BDI device from
ll_put_super().  LU-17745 disabled that for kernels which still have
backing_dev_info.debug_stats (before commit v5.2-rc3-11-g2d146b924e),
since RHEL 8.2 crashed in wb_workfn(), called dev_name(wb->bdi->dev)
with no NULL check.  That was fixed by commit v5.5-5400-g68f23b8906
("memcg: fix a crash in wb_workfn when a device disappears"), which
added bdi_dev_name(), and which RHEL picked up in 8.6.  The condition
that matters is therefore not the absence of debug_stats but presence
of bdi_dev_name(): on RHEL 8.6 and later the explicit unregister is
safe, and without it every mount/umount cycle strands a BDI.

Key the unregister off a new HAVE_BDI_DEV_NAME test and restore the
debug_stats removal that pre-v5.3 kernels need.  Only ask for cgroup
writeback where the BDI can be unregistered again, so kernels with
neither SB_I_PERSB_BDI nor bdi_dev_name() do not strand BDIs either.
That affects RHEL 8.0 through 8.5, and SLES15 SP2/SP3, Ubuntu 20.04.

This removes the sysfs name collision.  On pre-v5.11 kernels the BDI
itself is still only freed once the memory cgroups referencing it go
away; a module has no exported way to break that cycle.

Reproduced on a RHEL 8.10 client booted with cgroup v2 (memory and io
controllers) by mounting, writing a file from a non-root cgroup, and
unmounting in a loop: without the patch the mount fails after ~10
iterations and one /sys/class/bdi/<fsname>-<address> entry is stranded
per cycle; with it, 100 iterations pass leaving none.  No regression
test is added, because triggering the failure requires cgroup v2 with
both the memory and io controllers on a client kernel older than v5.11,
which no autotest client configuration provides, and a test that cannot
fail without the fix is worse than none.

Test-Parameters: clientdistro=el8.10 testlist=conf-sanity
Test-Parameters: clientdistro=ubuntu2404 testlist=conf-sanity
Fixes: facff17860 ("LU-17745 llite: fix the umount panic due to BDI unregister")
Fixes: dcc1dd39a6 ("LU-16954 llite: add SB_I_CGROUPWB on super block for cgroup")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-4.8 llm_code_and_review_tools
Change-Id: I7cfbc98da727bc8ddb53c9282f62c666f5d5d929
65737 master J –B ✓T ✗2R -1/2−
LU-10026 csdc: set compress component for file
reviewing Marc Vef · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase csdc 14 unresolved XL +1163 −16
13d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
custom-1001 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-pfl. session
review-dne-part-7 RHEL 9.8 / x86_64 ran 6 tests. 1 tests failed: sanity-pcc. session
build #132858 SUCCESS · tests all Maloo sessions
no vote yet: Roman Bolshakov, Andreas Dilger, Artem Blagodarenko
patchsets:
+10 earlier PS1 05-07 PS2 05-07 PS3 05-28 PS4 05-28 PS5 06-11 PS6 06-11 PS7 06-16 Artem Blagodarenko PS8 06-16 Artem Blagodarenko PS9 07-24 Artem Blagodarenko PS10 08-19 Artem Blagodarenko
PS11 08-19 Artem Blagodarenko PS12 08-20 Artem Blagodarenko PS13 08-20 Artem Blagodarenko PS14 08-21 Artem Blagodarenko PS15 10-05 Roman Bolshakov
threads: 14 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS15 2026-10-06 08:14 Gerrit AI review for Lustre COMMIT_MSG:56 — (minor) The body doesn't mention the client-side gate added by squashing Ib1e2123ff: the new lustre_check_lov_user_md() and lustre_check_lov
Gerrit AI review for Lustre PS15 · 2026-10-06 08:14
(minor) The body doesn't mention the client-side gate added by squashing Ib1e2123ff: the new lustre_check_lov_user_md() and lustre_check_lov_comp_md_v1() in ptlrpc/pack_generic.c, and their calls from ll_lov_setstripe_ea_info() and ll_xattr_set(). These reject a compress layout when `llite.*.enable_compression=0`, which is a user-visible behaviour change. Could a short paragraph describing them be added?
reply PS11 2026-08-20 12:36 Artem Blagodarenko patchset comment — Hi Andreas. Thanks for poining to this. I have reverted all fixed by Patchset 11 pushing wrong branch. I have reverted to Patchset 10 where
Andreas Dilger PS11 · 2026-08-19 23:52
@ablagodarenko@thelustrecollective.com it looks like the patches were rebased, but did not address any of the AI review comments?  While we can't go overboard changing every detail of the patches, I think it does make sense to fix the code where possible so that we don't carry technical debt later.
Artem Blagodarenko PS11 · 2026-08-20 12:36
Hi Andreas. Thanks for poining to this. I have reverted all fixed by Patchset 11 pushing wrong branch. I have reverted to Patchset 10 where I addressed AI bot comments and fixed build.
reply PS14 2026-10-05 17:51 Roman Bolshakov patchset comment — Squashed Ib1e2123ffdb239c3e1401d682ae9c2c49e3f4a6f into the change. I'll address a couple more comments in another push.
Roman Bolshakov PS14 · 2026-10-05 17:51
Squashed Ib1e2123ffdb239c3e1401d682ae9c2c49e3f4a6f into the change. I'll address a couple more comments in another push.
reply PS9 2026-08-19 23:52 Andreas Dilger lfs-getstripe.1:331 — Should be fixed if patch is refreshed.
Gerrit AI review for Lustre PS9 · 2026-07-28 09:23
(minor) There is no `.TP` before this entry, so `--compress-type|--compr-type` and its description get folded into the `-z, --extension-size` paragraph above instead of starting their own tagged item. The two entries below it do have theirs.
Oleg Drokin PS9 · 2026-08-12 02:29
weird but in my man output it looks ok.
Artem Blagodarenko PS10 · 2026-08-19 19:47
The entry was missing its .TP in the troff source. Some man implementations are lenient and reflow correctly, but others fold the entry into the previous paragraph. Added .TP for correctness.
Artem Blagodarenko PS10 · 2026-08-19 19:47
Done. Added the missing .TP before the --compress-type|--compr-type entry.
Andreas Dilger PS9 · 2026-08-19 23:52
Should be fixed if patch is refreshed.
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre llapi_layout_compress_set.3:105 — (minor) Neither of the two new man3 pages has an EXAMPLES section. Lustre llapi pages are expected to carry a short usage example showing th
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) Neither of the two new man3 pages has an EXAMPLES section. Lustre llapi pages are expected to carry a short usage example showing the required header and a realistic call.
reply PS15 2026-10-06 08:14 Gerrit AI review for Lustre llapi_layout_compress_set.3:71 — (minor) This, and the matching EINVAL entry under ERRORS, says a `stripe_size` that is not a multiple of `chunk_size` is an error. llapi_lay
Gerrit AI review for Lustre PS15 · 2026-10-06 08:14
(minor) This, and the matching EINVAL entry under ERRORS, says a `stripe_size` that is not a multiple of `chunk_size` is an error. llapi_layout_compress_set() never fails for that: it decrements `log_bits` until the chunk divides the stripe and stores the smaller chunk (sanity-pfl test_100c expects 3*64KiB to become 128KiB). Similarly, gzip/lz4/lz4fast levels outside the listed ranges are clamped by their from_*_level() helpers, not rejected with EINVAL as the text above says (test_100c expects gzip:15 to read back as 9). If the patch is refreshed, could the page describe the rounding and clamping instead?
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre llapi_parse_compress_type.3:62 — (minor) llapi_parse_compress_type() also returns -EINVAL - for a level that isn't a valid number or falls outside +/-COMPR_LEVEL_MAX - which
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) llapi_parse_compress_type() also returns -EINVAL - for a level that isn't a valid number or falls outside +/-COMPR_LEVEL_MAX - which neither RETURN VALUES nor ERRORS mentions. Mixing -1 with -Exxx returns in one function is also awkward for callers; would returning -EINVAL for the unknown-type case be more consistent?
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre lustreapi.h:1457 — (minor) The 9 used as the lz4 default collides with a real level. from_lz4_level(10) returns 9, and to_lz4_level(9) returns 9 because 9 == L
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) The 9 used as the lz4 default collides with a real level. from_lz4_level(10) returns 9, and to_lz4_level(9) returns 9 because 9 == LZ4HC_DEFAULT_CLEVEL, so 'lfs setstripe -Z lz4:10' reports back as lz4:9 and level 10 can never be displayed - even though lfs-setstripe.1 documents 1-16 as the valid lz4 range.
reply PS15 2026-10-06 08:14 Gerrit AI review for Lustre file.c:2838 — (defect) This gate runs only for regular files: ll_lov_setstripe_ea_info(), and the `lov.` branch in ll_xattr_set(). A directory default goe
Gerrit AI review for Lustre PS15 · 2026-10-06 08:14
(defect) This gate runs only for regular files: ll_lov_setstripe_ea_info(), and the `lov.` branch in ll_xattr_set(). A directory default goes through ll_setstripe_ea() -> ll_dir_setstripe() (and the LL_IOC_LOV_SETSTRIPE case in ll_dir_ioctl()), which never calls lustre_check_lov_user_md(). So on a client with `enable_compression=0`:

    lfs setstripe -E eof -Z lz4 $dir    # accepted
    touch $dir/f                        # MDS instantiates a compress layout

This still produces a file the client can't handle. lsm_lmm_verify_v1v3() rejects it with "file compression not enabled", and the PS14 report shows a later unlink or stripe change hitting the lov_io_layout_at() LBUG. Should ll_dir_setstripe() apply the same check? Or, if allowing compressed defaults on a disabled client is intended, should the client reject the layout cleanly instead of asserting?
reply PS15 2026-10-06 08:14 Gerrit AI review for Lustre xattr.c:425 — (defect) On this `lov.` path nothing validates `size` before lustre_check_lov_user_md() walks the entries. lustre_check_lov_comp_md_v1() rea
Gerrit AI review for Lustre PS15 · 2026-10-06 08:14
(defect) On this `lov.` path nothing validates `size` before lustre_check_lov_user_md() walks the entries. lustre_check_lov_comp_md_v1() reads `lcm_entry_count` and then up to 65535 `lcm_entries[]`, but the buffer here is only the `size` bytes copied in by the VFS.

The `lustre.` xattr namespace needs only write permission on the inode, so any file owner can trigger it:

    setxattr(f, "lustre.lov.add", buf, 8, 0);  /* buf starts with LOV_USER_MAGIC_COMP_V1 */

That reads lcm_entry_count past the end of an 8-byte allocation and keeps reading for up to ~3MB. KASAN reports it as slab-out-of-bounds. Before this patch, little-endian clients only read `lmm_magic` here.

The next change in the series ("utils: add 'lfs find' support for compressed file") adds a `size < need` check just above this call. Since this patch introduces the read, should that check move here? Passing `size` into lustre_check_lov_user_md(), the way lustre_swab_lov_user_md() takes one, would also let it validate the buffer itself.
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre lod_qos.c:3191 — (minor) This applies the chunk adjustment to every component including extension ones, where llc_stripe_size holds the extension size rather
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) This applies the chunk adjustment to every component including extension ones, where llc_stripe_size holds the extension size rather than a real stripe size. lod_declare_layout_add() deliberately skips LCME_FL_EXTENSION components for exactly that reason, so the same input layout gets different chunk_lum_bits depending on whether it arrives via create or via --component-add. Should this site skip extension components as well?

While there: the comment added in lod_declare_layout_add() says chunk adjustment is deferred until instantiation, but nothing calls lod_adjust_compr_chunk_size() on the instantiation path - the only three callers are here, lod_declare_layout_add() and lod_striping_from_default().
reply PS15 2026-10-06 08:14 Gerrit AI review for Lustre pack_generic.c:2672 — (defect) -ENOTSUPP (524) is kernel-internal and has no userspace errno, so this reaches `lfs setstripe` through ioctl()/setxattr() as "Unkno
Gerrit AI review for Lustre PS15 · 2026-10-06 08:14
(defect) -ENOTSUPP (524) is kernel-internal and has no userspace errno, so this reaches `lfs setstripe` through ioctl()/setxattr() as "Unknown error 524". The erasure-coding check just above it in ll_lov_setstripe_ea_info() returns -EOPNOTSUPP for the same kind of rejection. Should this be -EOPNOTSUPP too?

While here, a couple of nits: `rc` is never changed from 0, there's a double blank line after the EXPORT_SYMBOL(), and the default case in lustre_check_lov_user_md() logs "Invalid LOV magic" but still returns 0.
tags: csdc
owner Marc Vef · uploader Roman Bolshakov · PS15 uploaded 29d ago · NEW · open in Gerrit ↗
commit message
LU-10026 csdc: set compress component for file

Introduce per-component compression support for composite LOV layouts.
A new LCME_FL_COMPRESS component flag marks entries that carry
compress fields; the flag is set when the user supplies a compression
type via 'lfs setstripe -Z' and is propagated through the LOD and LOV
layers so that compressed components are distinguished from plain
ones.

LOD layer:
- lod_parse_striping(): read lcme_compr_type/lvl/chunk_lum_bits from
  the user-supplied lov_comp_md_v1 when LOV_PATTERN_COMPRESS is set.
- lod_use_defined_striping(): likewise for pre-defined layouts.
- lod_get_default_lov_striping(): carry compress fields into the LOD
  component when inheriting a default layout that includes
  compression.
- lod_generate_lovea(): serialise llc_compr_* fields into the on-wire
  lcm entry when LOV_PATTERN_COMPRESS is set.
- lod_adjust_compr_chunk_size(): new helper that rounds down the
  requested chunk-size exponent so the chunk fits evenly within one
  stripe and within one RPC (clamped to COMPR_CHUNK_MAX_BITS in the
  following changes).

API / utils layer:
- 'lfs setstripe' gains --compress|-Z <type>[:<level>] and
  --compress-chunk=<size> options to set the compression type, level,
  and chunk size on a new component.  Like -S and -c, -Z is inherited
  by subsequent -E components unless overridden by another -Z.

  Example:
	$ lfs setstripe -Eeof -Z lz4:5 --compress-chunk=512 <file>

- 'lfs getstripe' gains --compress-type, --compress-level, and
  --compress-chunk options to print individual compress parameters:

  Example:
	$ lfs getstripe <file>
    lcme_compr_type:     lz4
    lcme_compr_lvl:      5
    lcme_compr_chunk_kb: 512
      lmm_pattern:       raid0,compress

- llapi_layout_merge(): copy compress fields when merging layouts.
- Two new man3 pages: llapi_layout_compress_set.3 and
  llapi_parse_compress_type.3.

Misc:
- dump_lsm() in lov_ea.c prints compress fields for debugging.
- compr_name_from_type() helper added in lov_internal.h and wired up
  in dump_lsm() to print compression type names in debug output.

Test-Parameters: testlist=sanity-pfl serverversion=2.17
Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Signed-off-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Signed-off-by: Marc Vef <mvef@whamcloud.com>
Signed-off-by: Roman Bolshakov <rbolshakov@ddn.com>
Change-Id: Ife0382469cbc5099e0c6dc96534bb169ddeff61e
Was-Change-Id: Ib1e2123ffdb239c3e1401d682ae9c2c49e3f4a6f
63539 master J !B ✓T ✗1R -1/2−
LU-19822 lnet: interfaces can be manually disabled
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 11 unresolved L +342 −11
13d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #132750 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Chris Horn
patchsets: PS1 01-23 PS2 01-23 Janitor Bot PS3 03-09 PS4 05-20 PS5 10-02
threads: 10 need your reply · 0 waiting on others · 1 own notes · 0 bot
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but the subject describes a state rather than an action. Something imperative such as "lnet: allow LNet interfaces
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(style) This isn't a bug, but the subject describes a state rather than an action. Something imperative such as "lnet: allow LNet interfaces to be manually disabled" would match the usual convention. Also, the body calls this "an lnetctl tunable", but what the patch adds is the `lnetctl net disable` / `lnetctl net enable` command pair.
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre COMMIT_MSG:25 — (minor) Does "sends are routed over the other available interfaces" hold for non-MR peers? For those, lnet_select_preferred_best_ni() and ln
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(minor) Does "sends are routed over the other available interfaces" hold for non-MR peers? For those, lnet_select_preferred_best_ni() and lnet_handle_any_router_nmr_dst() reuse the preferred local NI recorded by lnet_set_non_mr_pref_nid(). If that NI is disabled, lnet_handle_send() returns -ENETDOWN for every non-reserved-portal send to the peer, even when other healthy NIs exist on the same net. It may be the right choice, since non-MR peers need a stable source NID, but the commit message should say so. Otherwise admins disabling an interface on a node that talks to non-MR or discovery-disabled peers will be surprised.
note PS4 2026-05-21 02:22 James Simmons api-ni.c:4900 — We really should use the Netlink interface. Once its not net namespace aware and second there is a limit to how many interfaces you can disa
James Simmons PS4 · 2026-05-21 02:22
We really should use the Netlink interface. Once its not net namespace aware and second there is a limit to how many interfaces you can disable at a time compared to Netlink.
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre api-ni.c:4532 — (defect) When the NI is re-enabled, does anything restore *ni->ni_status to LNET_NI_STATUS_UP? Two paths write DOWN into the ping buffer whi
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(defect) When the NI is re-enabled, does anything restore *ni->ni_status to LNET_NI_STATUS_UP? Two paths write DOWN into the ping buffer while the NI is disabled:

- on a router, lnet_update_ni_status_locked() does it directly
- on any node, a ping buffer rebuild such as `lnetctl net add`/`del` of another NI goes through lnet_ping_target_update()->lnet_ping_target_install_locked(). That stores ns_status = lnet_ni_get_status_locked(ni), which is DOWN for a disabled NI

After `net enable`, lnet_ni_get_status_locked() falls through to *ni->ni_status, which is still DOWN. On a non-router nothing ever flips it back: the UP update in lnet_parse() requires lnet_routing_enabled(), and lnet_inc_ni_healthv() only sets UP on a health transition. As a result, `lnetctl net show` keeps reporting the NI as down, and peers keep seeing it DOWN in ping/push data. Should the enable path set the status back to UP (when the NI is not fatal) and push the update, and the disable path set DOWN symmetrically on non-routers as well?
reply PS4 2026-05-22 16:39 Chris Horn lib-move.c:1501 — The two "goto select_ni" above could mean we select an NI that has been disabled. Administratively disabled should probably be the first che
Chris Horn PS4 · 2026-05-22 16:39
The two "goto select_ni" above could mean we select an NI that has been disabled. Administratively disabled should probably be the first check as it is a human operator telling us explicitly not to use an interface.
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre lib-move.c:1508 — (minor) Every caller of lnet_find_best_ni_on_spec_net() passes cur_best_ni == NULL, so best_ni is always NULL here. The NI also can't be dis
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(minor) Every caller of lnet_find_best_ni_on_spec_net() passes cur_best_ni == NULL, so best_ni is always NULL here. The NI also can't be disabled underneath us, because lnet_ni_set_disabled() takes LNET_LOCK_EX and our caller holds a cpt lock. As far as I can tell this block is dead code, and the "selected on another net before the admin disabled it" case in the comment can't happen. If the patch is refreshed, consider dropping it.
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre lib-move.c:1539 — (defect) With this skip, lnet_get_best_ni() can return NULL for a net that still has NIs configured; before this change it always returned o
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(defect) With this skip, lnet_get_best_ni() can return NULL for a net that still has NIs configured; before this change it always returned one. Some callers pick the net first, without considering whether any NI on it is usable:

- lnet_find_route_locked() uses lnet_find_best_lpni(NULL, NULL, gw, LNET_NET_ANY), which can choose a gateway NI on a net whose local NIs are all disabled. lnet_handle_find_routed_path() then hits the "Internal Error. Expected local ni on %s but non found" CERROR and returns -EFAULT. With routes over two local nets (e.g. o2ib and tcp) and all o2ib NIs disabled to "block certain routes", some sends to the remote net would fail this way instead of using the tcp route.
- lnet_find_best_ni_on_local_net() compares lpn_healthv and lpn_sel_priority before net health, so a fully disabled net with a UDSP-preferred or healthier peer net still wins. The NULL best_ni then turns into PASS_THROUGH to the routed path, even though another local net could reach the peer directly.

Should route and net selection skip nets with no enabled NI, e.g. via lnet_get_net_healthv_locked() or a helper that checks for at least one enabled NI?
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre router.c:1734 — (minor) The comment says lnet_local_ni_superseded() uses the same ordering as lnet_get_best_ni(), but it doesn't skip manually disabled NIs.
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(minor) The comment says lnet_local_ni_superseded() uses the same ordering as lnet_get_best_ni(), but it doesn't skip manually disabled NIs. Take a disabled NI A at full health and an enabled NI B with a reduced health value. Here B is considered superseded by A, so with discovery disabled on the gateway, lnet_notify() for a gateway failure reported via B no longer marks the route down, even though path selection can never use A. Should a disabled `alt` be skipped here as well?
reply PS4 2026-05-22 16:39 Chris Horn lnetctl.c:3638 — `default: return 0;` reports success on an unrecognized or malformed option. getopt_long returns '?' for both an unknown flag and a known fl
Chris Horn PS4 · 2026-05-22 16:39
`default: return 0;` reports success on an unrecognized or malformed option. getopt_long returns '?' for both an unknown flag and a known flag missing its argument, so e.g. `lnetctl net disable --net tcp --bogus` or `lnetctl net disable --net` exits 0 having done nothing. Return an error here (e.g. `return -EINVAL;`) so invalid invocations fail. The test_229 negative cases only exercise *missing* options, not this path.
reply PS5 2026-10-05 11:08 Gerrit AI review for Lustre lnetctl.c:192 — (minor) The new `lnetctl net disable` / `lnetctl net enable` commands, and the `manually_disabled` field in `net show -v 2`, aren't document
Gerrit AI review for Lustre PS5 · 2026-10-05 11:08
(minor) The new `lnetctl net disable` / `lnetctl net enable` commands, and the `manually_disabled` field in `net show -v 2`, aren't documented in Documentation/man8/lnetctl.8. If the patch is refreshed, could the man page be updated in the same change?
reply PS4 2026-05-21 03:05 Timothy Day sanity-lnet.sh:4481 — I should have a test case that ensures that a ping from a disabled interface or to a disabled interface fails.
Timothy Day PS4 · 2026-05-21 03:05
I should have a test case that ensures that a ping from a disabled interface or to a disabled interface fails.
owner Timothy Day · uploader Timothy Day · PS5 uploaded 32d ago · NEW · open in Gerrit ↗
commit message
LU-19822 lnet: interfaces can be manually disabled

Implement lnetctl net disable/enable to allow admins to selectively
block traffic on LNet interfaces. Currently, the only way to
manually disable an LNet interface is to delete it. An lnetctl
tunable would give admins a network agnostic method to
temporarily block traffic to a subset of clients or block
certain routes.

The request is sent over Netlink as a "disabled" key in the local
NI section of an LNET_CMD_NETS NLM_F_REPLACE message, so no new
ioctl is needed and several interfaces can be changed with a single
command:

  lnetctl net disable --net tcp --if eth0,eth1

This patch also implements the needed kernel infrastructure. A
disabled interface is never considered by local NI selection, so
sends are routed over the other available interfaces (if any).
Sends that name a disabled interface as the source fail with
-ENETDOWN. recv are dropped outright. The state is reported as
"manually_disabled" in the health stats of 'lnetctl net show -v 2',
so admins can tell why an interface is down.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I2387ef98f265b3fa77a5b8a22413a5c29b4c627f
69495 master J –B ✗T –R 0/2
LU-20315 ptlrpc: mark module init functions __init
reviewing Timothy Day · blocked on the owner: build failure
3 unresolved S +22 −22
21d
blocked on the owner: build failure
awaiting review (CI not green yet)
build #133575 FAILURE
no vote yet: Arshad Hussain
patchsets: PS1 10-07 PS2 10-13
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-08 04:23 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) The subject has no LU-XXXXX ticket. The earlier __init/__exit cleanups in this series (libcfs, lnet, target, obdclass) all used LU-2
Gerrit AI review for Lustre PS1 · 2026-10-08 04:23
(style) The subject has no LU-XXXXX ticket. The earlier __init/__exit cleanups in this series (libcfs, lnet, target, obdclass) all used LU-20315 "Fix missing __init and __exit annotations". Should this be "LU-20315 ptlrpc: mark module init functions __init"? LU-20315 is currently marked Done, so it may need reopening or a new ticket.
reply PS1 2026-10-08 04:23 Gerrit AI review for Lustre COMMIT_MSG:13 — (minor) The gss flavour isn't reached from ptlrpc_init(). gss_init_tunables() and gss_init_at_reply_offset() are in the separate ptlrpc_gss.
Gerrit AI review for Lustre PS1 · 2026-10-08 04:23
(minor) The gss flavour isn't reached from ptlrpc_init(). gss_init_tunables() and gss_init_at_reply_offset() are in the separate ptlrpc_gss.ko module and are called from sptlrpc_gss_init(). If the patch is refreshed, consider rewording, e.g. "... and the gss module's init helpers called from sptlrpc_gss_init()".
reply PS1 2026-10-08 04:23 Gerrit AI review for Lustre wiretest.c:33 — (minor) This file is generated by `make -C lustre/utils newwiretest`, which copies wirehdr.c and then appends the output of wirecheck. wirec
Gerrit AI review for Lustre PS1 · 2026-10-08 04:23
(minor) This file is generated by `make -C lustre/utils newwiretest`, which copies wirehdr.c and then appends the output of wirecheck. wirecheck.c main() still prints "void lustre_assert_wire_constants(void)", so the next wire-protocol change that regenerates this file will silently drop the __init. This function is also by far the largest one in the patch.

The same generator output is used for the userspace lustre/utils/wiretest.c, so wirecheck can't just emit __init. Options: put the __init on the prototype in ptlrpc_internal.h instead, or have wirecheck emit __init and define it as empty in lustre/utils/wirehdr.c.
owner Timothy Day · uploader Timothy Day · PS2 uploaded 21d ago · NEW · open in Gerrit ↗
commit message
LU-20315 ptlrpc: mark module init functions __init

The helpers that ptlrpc_init() calls once at module load, and the
helpers they call in turn, are only reachable during initialisation:
request cache and XID setup, connection table, LNet portals, lproc
and sysfs registration, NRS, the pinger, the HR threads, sptlrpc and
its null, plain and gss flavours, nodemap, early reply size and the
wire constant assertions.

Mark them __init so the kernel places them in the init section and
frees them once ptlrpc_init() returns, instead of keeping them
resident for the life of the module.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I5e37805c5b11489b92cadc360a842ab36a6a6964
64263 master J !B ✗T –R ✗
LU-19938 lnet: CONFIG_MEM_ALLOC_PROFILING support
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; build failure; Timothy Day voted -1
needs rebaseCR -1 S +11 −5
22d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; build failure; Timothy Day voted -1
awaiting review (CI not green yet)
janitor run: build failed — no tests ran — janitor results
build #121991 FAILURE
reviews: Timothy Day -1 2026-03-02 19:48
no vote yet: Alex Zhuravlev
owner Timothy Day · uploader Timothy Day · PS1 uploaded 249d ago · NEW · open in Gerrit ↗
commit message
LU-19938 lnet: CONFIG_MEM_ALLOC_PROFILING support

Support CONFIG_MEM_ALLOC_PROFILING by wrapping our allocators
in alloc_hooks. We may need to update other functions as well.

Test-Parameters: forbuildonly
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I0263ead8233800aa0eb14ba4c466974d471d3380
54552 master J !B ✓T ✗2R -1/2−
LU-17671 libcfs: track each OBD_ALLOC()
reviewing Alex Zhuravlev · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 1 unresolved M +188 −13
22d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 crashed RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-2 crashed RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-selinux, sanity-sec, recovery-small. %% THIS TEST SESSION CRASHED %% session
build #131936 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown, Timothy Day
patchsets:
+39 earlier PS1 03-25 PS2 03-26 PS3 03-27 PS4 03-28 PS5 03-28 PS6 03-28 PS7 03-28 PS8 03-29 PS9 03-29 PS10 03-29 PS11 03-29 PS12 04-05 PS13 05-23 PS14 11-13 PS15 11-13 PS16 11-15 PS17 11-15 PS18 11-15 PS19 11-16 PS20 11-17 PS21 11-24 PS22 12-06 PS23 12-08 PS24 12-11 PS25 01-23 PS26 01-23 PS27 02-12 PS28 02-21 PS29 03-18 PS30 06-06 PS31 10-30 PS32 10-30 PS33 10-30 PS34 10-30 PS35 10-30 PS36 10-31 PS37 11-07 PS38 12-17 PS39 03-24
PS40 03-24 PS41 05-11 PS42 06-16 PS43 06-28 PS44 09-18
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS44 2026-09-18 04:57 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — lustre/llite/file.c:
Misc Code Checks Robot (Gatekeeper helper) PS44 · 2026-09-18 04:57
lustre/llite/file.c:
 parse ll_file_ioctl():error: Function too hairy.  Giving up. 5 seconds
warn: ll_file_ioctl():Function too hairy.  No more merges.
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS44 uploaded 47d ago · NEW · open in Gerrit ↗
commit message
LU-17671 libcfs: track each OBD_ALLOC()

and dump leaked ones when a module is being unloaded

Test-Parameters: fortestonly
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Ia499928bde821cc3a6b558a175b0e279bdfc68fa
53190 master J !B ✓T ✗1R -1/2−
LU-15372 mdd: Add projid in Changelog
reviewing Arshad Hussain · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 26 unresolved L +400 −52
22d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-7 failed 2× RHEL 9.7 / x86_64 ran 6 tests. 1 tests failed: sanity-ec. session
build #129922 SUCCESS · tests all Maloo sessions
no vote yet: Robert Read, Etienne AUJAMES, Aurelien Degremont, Andreas Dilger
patchsets:
+52 earlier PS1 11-21 PS2 11-29 PS3 11-30 PS4 05-02 PS5 05-02 PS6 05-02 PS7 05-06 PS8 05-07 PS9 05-07 PS10 05-08 PS11 05-09 PS12 05-12 PS13 05-12 PS14 05-14 PS15 05-14 PS16 05-19 PS17 06-21 PS18 06-22 PS19 06-28 PS20 12-07 PS21 04-01 PS22 04-07 PS23 04-08 PS24 04-11 Andreas Dilger PS25 04-13 PS26 04-13 PS27 04-13 PS28 04-25 PS29 05-11 PS30 05-13 PS31 05-17 PS32 06-08 Etienne AUJAMES PS33 06-08 Etienne AUJAMES PS34 06-09 PS35 06-09 PS36 06-09 Etienne AUJAMES PS37 06-09 Etienne AUJAMES PS38 06-09 PS39 06-09 PS40 06-09 Etienne AUJAMES PS41 06-10 PS42 06-10 Etienne AUJAMES PS43 06-10 Etienne AUJAMES PS44 06-11 Etienne AUJAMES PS45 06-11 Etienne AUJAMES PS46 06-11 Etienne AUJAMES PS47 06-11 Etienne AUJAMES PS48 06-12 Etienne AUJAMES PS49 06-12 Etienne AUJAMES PS50 07-16 Etienne AUJAMES PS51 07-22 Etienne AUJAMES PS52 08-07 Etienne AUJAMES
PS53 08-10 Etienne AUJAMES PS54 08-14 Etienne AUJAMES PS55 08-19 Etienne AUJAMES PS56 08-20 Etienne AUJAMES PS57 08-21 Etienne AUJAMES
threads: 26 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS52 2026-08-08 10:05 Gerrit AI review for Lustre COMMIT_MSG:15 — The "Before change" record shows `ef=0x33`, but 0x33 already includes CLFE_PROJID (0x20), which does not exist before this patch. Should tha
Gerrit AI review for Lustre PS52 · 2026-08-08 10:05
The "Before change" record shows `ef=0x33`, but 0x33 already includes CLFE_PROJID (0x20), which does not exist before this patch. Should that read `ef=0x13` (CLFE_UIDGID|CLFE_NID|CLFE_NID_BE)?
reply PS56 2026-08-20 22:38 Gerrit AI review for Lustre COMMIT_MSG:24 — mdd_llog_record_calc_size() also gained a `type` argument and now adds CLFE_OPEN / CLFE_XATTR to the declared record size. That is independe
Gerrit AI review for Lustre PS56 · 2026-08-20 22:38
mdd_llog_record_calc_size() also gained a `type` argument and now adds CLFE_OPEN / CLFE_XATTR to the declared record size. That is independent of projid: before this patch a CL_SETXATTR / CL_GETXATTR declare computed llog_data_len(24 + 144) = 168, while the record written by mdd_changelog_data_store_by_fid() is 24 + 144 + sizeof(struct changelog_ext_xattr) = 424 bytes, so the declared length was short by 256 bytes.

Could the commit message say that this hunk fixes the under-declared record length for the OPEN/XATTR record types? It is a separate fix and would deserve its own `Fixes:` tag if split out.
reply PS47 2026-06-12 07:23 Arshad Hussain lustre_user.h:1922 — Yes. We need to change the commit message for this.
Arshad Hussain PS47 · 2026-06-12 06:06
(we need to add ) CL_PROJID   = 25?
Etienne AUJAMES PS47 · 2026-06-12 06:45
No, this enum is for changelog type.
e.g:
```
07RMDIR 06:25:21.451572548 2026.06.12 0x1 t=[0x2000013a1:0x7f7d:0x0] j=rmdir.0
```
CL_RMDIR = 7 is the changelog type.

But here we don't add a new type but a new field that can be added for every types.
Arshad Hussain PS47 · 2026-06-12 07:23
Yes. We need to change the commit message for this.
reply PS47 2026-06-12 06:06 Arshad Hussain lustre_user.h:1932 — (add here as well) NOPEN, "PROJID", ?
Arshad Hussain PS47 · 2026-06-12 06:06
(add here as well) NOPEN, "PROJID", ?

So, we can have ability to mdd.<MDT>.changelog_mask=+PROJID ?
reply PS53 2026-08-11 08:30 Gerrit AI review for Lustre lustre_user.h:2168 — (suggestion) Once CLFE_PROJID ships, changelog_extra_field_size(CLFE_PROJID) is frozen at 4 bytes forever, so this struct can never grow wit
Gerrit AI review for Lustre PS53 · 2026-08-11 08:30
(suggestion) Once CLFE_PROJID ships, changelog_extra_field_size(CLFE_PROJID) is frozen at 4 bytes forever, so this struct can never grow without burning a second CLFE_* bit. Would a reserved word now be worth it?

    struct changelog_ext_projid {
            __u32 cep_projid;
            __u32 cep_padding;
    };

changelog_ext_nid carries `extra`/`padding` for the same reason, and it would also leave room for the file attribute flags (immutable, projinherit, ...) that were discussed on an earlier patch set and then dropped.
reply PS49 2026-06-12 06:45 Etienne AUJAMES mdc_changelog.c:315 — We did not asked for projid field (otherwise, changelog_trim() will remove projid field to provide a compatible record for old client).
Etienne AUJAMES PS49 · 2026-06-12 06:45
We did not asked for projid field (otherwise, changelog_trim() will remove projid field to provide a compatible record for old client).
reply PS53 2026-08-11 08:30 Gerrit AI review for Lustre mdd_internal.h:906 — (style) Not a bug, but the name reads like a getter while the return value is 0/-ENOENT, so all three call sites end up as `if (!mdd_changel
Gerrit AI review for Lustre PS53 · 2026-08-11 08:30
(style) Not a bug, but the name reads like a getter while the return value is 0/-ENOENT, so all three call sites end up as `if (!mdd_changelog_projid(...))` meaning "a projid was found" - which reads backwards.

A boolean would say what the call sites actually mean:

    if (mdd_changelog_get_projid(env, type, &projid))
            xflags |= CLFE_PROJID;
reply PS56 2026-08-20 22:38 Gerrit AI review for Lustre mdd_internal.h:906 — (style) This returns 0 / -ENOENT but every caller uses it as a predicate (`if (!mdd_changelog_projid(...))`). A `bool` return and a name tha
Gerrit AI review for Lustre PS56 · 2026-08-20 22:38
(style) This returns 0 / -ENOENT but every caller uses it as a predicate (`if (!mdd_changelog_projid(...))`). A `bool` return and a name that reads like a getter (mdd_changelog_get_projid()) would make the call sites easier to read.

The `else if (parent && (parent->la_valid & LA_PROJID)) p = 0;` branch also assigns a value `p` already holds; it only exists to pick 0-vs-ENOENT, which a comment would make clearer.
reply PS56 2026-08-20 22:38 Gerrit AI review for Lustre mdd_object.c:2098 — This record is for `vic`, but the projid ends up being `obj`'s. mdd_changelog_data_store() only passes the FID down, and mdd_changelog_proji
Gerrit AI review for Lustre PS56 · 2026-08-20 22:38
This record is for `vic`, but the projid ends up being `obj`'s. mdd_changelog_data_store() only passes the FID down, and mdd_changelog_projid() reads MDD_ENV_VAR(env, cattr), which mdd_xattr_set() filled from `md_obj` (the source file) before calling mdd_xattr_split().

Chain: `lfs mirror split --mirror-id N src -f dst` -> LL_LEASE_LAYOUT_SPLIT -> mdt_close_handle_layouts() (mdt_open.c:2386, `mdt_object_child(o)` is src) -> mdd_xattr_set() -> mdd_la_get(obj, cattr) -> mdd_xattr_split() -> the two CL_LAYOUT records here.

`dst` is opened at a user-supplied path in mirror_split() (lfs.c:2843), so it can live under a directory with a different project. Nothing in mdd_xattr_split() copies the projid across, unlike mdd_xattr_merge() which sets vic's projid from cattr first, so the record for `dst` reports src's project. Should the projid be read from the object the record names?
reply PS27 2026-04-25 03:44 Arshad Hussain llog_osd.c:896 — Etienne, you are correct and thanks for the detail explaination!
Etienne AUJAMES PS27 · 2026-04-17 15:26
Please check the  https://review.whamcloud.com/28251.
The computed offset is not correct.
Arshad Hussain PS27 · 2026-04-19 11:10
Alright, It have been sometime, I will check this. Will get back with findings.
Arshad Hussain PS27 · 2026-04-20 11:12
Is this the problem you see? Currently, projid is moved after XATTR. Since this is part of XATTR it should be moved along with XATTR and not after. I will get this changed.
Etienne AUJAMES PS27 · 2026-04-20 12:21
Please check https://review.whamcloud.com/c/fs/lustre-release/+/28251/22/lustre/include/uapi/linux/lustre/lustre_user.h#1504


e.g: xattr_mov should be unchanged:
```
max_xattr_mov = sizeof(struct changelog_ext_rename) +
    sizeof(struct changelog_ext_jobid) +
    sizeof(struct changelog_ext_extra_flags) +
    sizeof(struct changelog_ext_uidgid) +
    sizeof(struct changelog_ext_nid) +
    sizeof(struct changelog_ext_openmode);
```

But now with:
```
	xattr_mov = (char *)rec +
			changelog_rec_offset(
			    (enum changelog_rec_flags)
				    (crf_wanted & CLF_SUPPORTED),
			    (enum changelog_rec_extra_flags)
				    (cref_want & ~CLFE_XATTR))
```
You get:
```
max_xattr_mov = sizeof(struct changelog_ext_rename) +
    sizeof(struct changelog_ext_jobid) +
    sizeof(struct changelog_ext_extra_flags) +
    sizeof(struct changelog_ext_uidgid) +
    sizeof(struct changelog_ext_nid) +
    sizeof(struct changelog_ext_openmode) +
    sizeof(struct changelog_ext_projid);
```
So you should update all the *_mov to unset CLFE_PROJID:
```
	xattr_mov = (char *)rec +
			changelog_rec_offset(
			    (enum changelog_rec_flags)
				    (crf_wanted & CLF_SUPPORTED),
			    (enum changelog_rec_extra_flags)
				    (cref_want & ~(CLFE_XATTR|CLFE_PROJID)))
```
Notes here to help the syntax:
```
cref_want & ~(CLFE_XATTR|CLFE_PROJID) == cref_want & (CLFE_XATTR - 1)
```
So you can use something like this to avoid those kind of errors in the future:
```
#define CLFE_PROJID_MASK = (CLFE_PROJID - 1)
#define CLFE_XATTR_MASK = (CLFE_XATTR - 1)
...
#define CLFE_UIDGID_MASK = (CLFE_UIDGID - 1)
...
	uidgid_mov = (char *)rec +
			changelog_rec_offset(
				(enum changelog_rec_flags)
				    (crf_wanted & CLF_SUPPORTED),
				(enum changelog_rec_extra_flags)
				    (cref_want & CLFE_UIDGID_MASK));
```
Arshad Hussain PS27 · 2026-04-25 03:44
Etienne, you are correct and thanks for the detail explaination! 

Added CLFE_BEFORE_MASK macro as you have mentioned. 

Done
reply PS47 2026-06-12 06:06 Arshad Hussain llog_osd.c:931 — This is correct, I added this in PS41. But this masked out all PROJID. That is reason we see the failure now, IMO. I am checking.
Arshad Hussain PS47 · 2026-06-12 06:06
This is correct, I added this in PS41. But this masked out all PROJID. That is reason we see the failure now, IMO. I am checking.

Before
```
$ bpftrace -e 'kprobe:changelog_trim_rec { printf("rec: %p, crf_want: %d, cref_want: %d\n", arg0, arg1, arg2); }'
Attaching 1 probe...
rec: 0xffff888010368010, crf_want: 12288, cref_want: 32
rec: 0xffff8880103680c0, crf_want: 12288, cref_want: 32
```


After
```
$ bpftrace -e 'kprobe:changelog_trim_rec { printf("rec: %p, crf_want: %d, cref_want: %d\n", arg0, arg1, arg2); }'
Attaching 1 probe...
rec: 0xffff93c473000010, crf_want: 12288, cref_want: 0
rec: 0xffff93c4730000b8, crf_want: 12288, cref_want: 0
```
reply PS57 2026-08-22 13:47 Gerrit AI review for Lustre sanity-sec.sh:10335 — (style) Not a bug, but this leaves a double blank line before the `is_rmentry_supported` block.
Gerrit AI review for Lustre PS57 · 2026-08-22 13:47
(style) Not a bug, but this leaves a double blank line before the `is_rmentry_supported` block.
owner Arshad Hussain · uploader Etienne AUJAMES · PS57 uploaded 75d ago · NEW · open in Gerrit ↗
commit message
LU-15372 mdd: Add projid in Changelog

This patch adds projid support into Changelog. Projid would be
printed under section "projid=".

 # touch /mnt/lustre/f1

 Before change:
 01CREAT 0x0 t=[0x200000401:0x7:0x0] j=touch.0 ef=0x33 u=0:0
   nid=0@lo p=[0x200000401:0x5:0x0] f1

 After change:
 01CREAT 0x0 t=[0x200000402:0x4:0x0] j=touch.0 ef=0x33 u=0:0
   nid=0@lo projid=7200 p=[0x200000402:0x3:0x0] f1

This patch introduces the mdd_key_exit() callback to reset the
la_valid flag for all attributes used in the MDD thread context,
ensuring these attributes can be safely used to determine project IDs.

Add regression test sanity 160z and update 160u to handle the new
changelog format. This needs project quota enabled for ZFS.
restore_project_quota(), project_quota_enabled() have been added in
test-framework.sh for this purpose.

Test-Parameters: testlist=sanity clientversion=2.15 env=ONLY=160
Test-Parameters: testlist=sanity serverversion=2.15 env=ONLY=160
Test-Parameters: testlist=sanity env=ONLY=160z,ONLY_REPEAT=20
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: Ie716fd812e2cb3e24c7a5cd04a1ec43b31eb4c23
41689 master J !B ✗T –R 0/2
LU-14407 osd-zfs: add basic direct IO support
reviewing Brian Behlendorf · blocked on the owner: build failure
31 unresolved L +500 −47
41d
blocked on the owner: build failure
awaiting review (CI not green yet)
janitor run: build failed — no tests ran — janitor results
build #132233 FAILURE
no vote yet: Olaf Faaland, Migeljan Imeri, Brian Atkinson, Timothy Day, Patrick Farrell (personal), Akash B, Alex Zhuravlev
patchsets:
+5 earlier PS3 12-16 Timothy Day PS4 05-02 James Simmons PS5 05-04 Jihyeon Gim PS6 06-18 Migeljan Imeri PS7 06-26 Migeljan Imeri
PS8 09-15 Migeljan Imeri PS9 09-15 Migeljan Imeri PS10 09-15 Migeljan Imeri PS11 09-22 Migeljan Imeri PS12 09-23 Migeljan Imeri
threads: 30 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre COMMIT_MSG:9 — The autoconf test added here needs both DMU_DIRECTIO and DMU_UNCACHEDIO, and the comment next to it in lustre-build-zfs.m4 calls it a "ZFS 2
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
The autoconf test added here needs both DMU_DIRECTIO and DMU_UNCACHEDIO, and the comment next to it in lustre-build-zfs.m4 calls it a "ZFS 2.4 check". If DMU_UNCACHEDIO only appeared in 2.4, then HAVE_DMU_DIRECT stays undefined on 2.3 and the whole feature compiles out there, which does not match "As of OpenZFS 2.3". Should the uncached-IO probe be a separate test so 2.3 still gets plain direct IO?
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre COMMIT_MSG:19 — This says the mechanism has no granularity and that "standard" means direct IO is only done when requested, and further down that the defaul
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
This says the mechanism has no granularity and that "standard" means direct IO is only done when requested, and further down that the default behavior is unchanged unless direct=always is set. osd_dmu_use_direct() does something different: under ZFS_DIRECT_STANDARD it returns B_TRUE unconditionally when od_nonrotational is set, and otherwise whenever the IO or file size crosses od_writethrough_max_iosize / od_readcache_max_iosize / od_readcache_max_filesize. Combined with the new od_nonrotational auto-detection at mount, an existing pool can switch to direct IO for all OST traffic without any property change. Can the message describe the actual "standard" policy?
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre COMMIT_MSG:32 — (typo) "advantge" -> "advantage". Also "honor these setting" a few lines up reads better as "these settings".
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
(typo) "advantge" -> "advantage". Also "honor these setting" a few lines up reads better as "these settings".
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre COMMIT_MSG:36 — Several user-visible hunks are not described here: the new `readcache_max_io_mb` and `writethrough_max_io_mb` sysfs tunables, the automatic
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
Several user-visible hunks are not described here: the new `readcache_max_io_mb` and `writethrough_max_io_mb` sysfs tunables, the automatic od_nonrotational detection (which also changes the OS_STATFS_NONROT flag reported to clients), the widening of `lnb_dio` to 2 bits in lustre/include/obd.h, and the new folio_lock()/folio_unlock() around the cached dio folios. Could the body cover those, or should any of them be split out?
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre COMMIT_MSG:44 — This is osd-zfs only, and the default CI run is ldiskfs. Worth adding a `Test-Parameters: fstype=zfs ...` line so the new paths actually get
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
This is osd-zfs only, and the default CI run is ldiskfs. Worth adding a `Test-Parameters: fstype=zfs ...` line so the new paths actually get exercised before landing.
reply PS6 2026-06-18 16:54 Timothy Day patchset comment — You might find https://review.whamcloud.com/c/fs/lustre-release/+/57453/1 interesting. We can wire up ZFS DIO to be per-IO, similar to what
Timothy Day PS6 · 2026-06-18 16:54
You might find https://review.whamcloud.com/c/fs/lustre-release/+/57453/1 interesting. We can wire up ZFS DIO to be per-IO, similar to what ldiskfs does.
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre lustre-build-zfs.m4:611 — (style) `flags2` is set but never used, which will warn. The other tests in this file add a `(void) flag;` for exactly this - or just use it
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
(style) `flags2` is set but never used, which will warn. The other tests in this file add a `(void) flag;` for exactly this - or just use it in one of the calls below.
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre obd.h:497 — (minor) The field is now tri-valued (0 none, 1 direct/fake folio, 2 unaligned - use DMU_UNCACHEDIO), but the comment still only describes th
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
(minor) The field is now tri-valued (0 none, 1 direct/fake folio, 2 unaligned - use DMU_UNCACHEDIO), but the comment still only describes the TLS-page meaning, and value 2 is not a TLS page at all. Worth spelling the three values out here since osd-ldiskfs also uses this field.
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre osd_handler.c:584 — (minor) This comment is now stale - od_nonrotational is no longer "only set if explicitly set by the user", osd_mount() computes it. Worth u
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
(minor) This comment is now stale - od_nonrotational is no longer "only set if explicitly set by the user", osd_mount() computes it. Worth updating while the behavior is changing.
reply PS10 2026-09-17 13:40 Gerrit AI review for Lustre osd_handler.c:795 — The unlock happens after the put. folio_alloc() in osd_dio_get_folio() leaves a single reference, so folio_put() here frees the folio and fo
Gerrit AI review for Lustre PS10 · 2026-09-17 13:40
The unlock happens after the put. folio_alloc() in osd_dio_get_folio() leaves a single reference, so folio_put() here frees the folio and folio_unlock() then touches freed memory.

Even with the order swapped, PG_locked is in PAGE_FLAGS_CHECK_AT_FREE, so freeing a still-locked folio trips "BUG: Bad page state". The unlock has to come before the put.
reply PS10 2026-09-16 22:57 Brian Behlendorf osd_handler.c:1190 — What I think we want is to only return that this is a non-rotational pool when there are no rotational devices (at all) in the vdev hierarch
Brian Behlendorf PS10 · 2026-09-16 22:57
What I think we want is to only return that this is a non-rotational pool when there are no rotational devices (at all) in the vdev hierarchy.  The vd_nonrot value is propagated to the top-level parents, so I think something like this should work (untested):

```
static int
osd_detect_nonrotational(spa_t *spa)
{
	vdev_t *rvd = spa->spa_root_vdev;

	for (int i = 0; i < rvd->vdev_children; i++) {
		vdev_t *vd = rvd->vdev_child[i];

		if (vd->vdev_islog || vd->vdev_ishole)
			continue;

		if (vd->vdev_nonrot == B_FALSE)
			return (B_FALSE);
	}

	return (B_TRUE);
}
```
reply PS3 2024-12-16 06:43 Timothy Day osd_internal.h:1042 — This function was the biggest change compared to the earlier version of ZFS DIO. I think this is correct, but this needs a second look.
Timothy Day PS3 · 2024-12-16 06:43
This function was the biggest change compared to the earlier version of ZFS DIO. I think this is correct, but this needs a second look.
owner Brian Behlendorf · uploader Migeljan Imeri · PS12 uploaded 41d ago · NEW · open in Gerrit ↗
commit message
LU-14407 osd-zfs: add basic direct IO support

As of OpenZFS 2.3 direct IO is supported.  This functionality allows
the zfs-osd to optionally bypass the ARC cache and perform the I/O
directly to the storage.  This may improve performance when using a
fast flash based pool or large disk based pool.

The new "direct" dataset property can be used to enable direct IO
for the OSD.  When set to "always" the DMU_DIRECTIO flag will always
be passed to the new DMU interface to request direct IO.  When set
"disabled" direct IO will never be requested.

This initial mechanism provides no granularity so the long term
intent is to extend Lustre to only request direct IO when it makes
sense.  This way the property can be left at its default value of
"standard" which indicates direct IO should only be done when
requested.  However, supporting the "always" and "disabled" values
is important to make sure Lustre datasets honor these setting in
the same way as the ZFS Posix Layer.  Hopefully, we'll be able to
take advantage of some of the existing Lustre/ldiskfs tunings to
control when direct IO should be performed.

The behavior of the existing DMU interfaces used by Lustre has not
been changed for OpenZFS 2.1.  This means versions of Lustre without
this change can still be built against OpenZFS 2.1.  They will simply
not be able to take advantge of the direct IO support.

Furthermore, new versions of Lustre with this change are compatible
with all OpenZFS releases.  Again the default behavior will remain
unchanged unless the "direct=always" dataset property is manually set.

For reference, the new ZFS interfaces which can be used to request
direct IO by passing the DMU_DIRECTIO flag are the following:

    - dmu_read_abd()
    - dmu_write_abd()

Test-Parameters: fstype=zfs
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: MigeljanImeri <mimeri@lanl.gov>
Change-Id: I5a651a196f716feac671b71010733ea129543d38
67194 master J !B ✓T ✗1R 0/2
LU-20162 obdclass: pin debugfs entries
reviewing Alex Zhuravlev · blocked on the owner: enforced tests failed
fortestonly S +30 −4
47d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. This build will be scored -1 since fortestonly was specif session
build #131892 SUCCESS · tests all Maloo sessions
patchsets: PS1 07-13 PS2 07-13 PS3 09-17
tags: fortestonly
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS3 uploaded 48d ago · NEW · open in Gerrit ↗
commit message
LU-20162 obdclass: pin debugfs entries

pin debugfs entries so a racing umount blocks awaiting for them
to get closed/release and only then release internal structures
those debugfs entries may access.

Test-Parameters: fortestonly fstype=zfs
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Id049cf6e9d2767de5e0b197b184ae36940583411
68661 master J !B ✓T ✗1R 0/2
LU-18687 build: move aops compat code into fs.h
reviewing Shaun Tancheff · blocked on the owner: enforced tests failed
4 unresolved L +271 −219
55d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity. session
build #131407 SUCCESS · tests all Maloo sessions
patchsets: PS1 09-05 PS2 09-09 PS3 09-09 PS4 09-09
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-09-06 18:03 Gerrit AI review for Lustre COMMIT_MSG:12 — (minor) The body describes the handler migration and the wbe_* removal, but a few hunks change behavior and aren't mentioned:
Gerrit AI review for Lustre PS1 · 2026-09-06 18:03
(minor) The body describes the handler migration and the wbe_* removal, but a few hunks change behavior and aren't mentioned:

- cl_object.h and llite_lib.c drop the HAVE_MAPPING_SET_FOLIO_ORDER_RANGE gating of FGF_FOLIO_MAX_ORDER/FGF_FOLIO_MAX_SIZE and LL_SBI_LARGE_FOLIOS
- ll_write_end() loses its `#ifdef SB_I_CGROUPWB` guard
- ll_invalidate_folio() gains the OBD_FAIL_LLITE_PAGE_INVALIDATE_PAUSE block that used to exist only in ll_invalidatepage()
- the HAVE_RELEASEPAGE_WITH_INT / RELEASEPAGE_ARG_TYPE handling and the `(void *)` cast on .releasepage are dropped

Could these get a sentence each, or be split out? Also, the path in the second line is include/lustre_compat/linux/fs.h, not include/lustre_compat/fs.h.
reply PS4 2026-09-10 14:47 Gerrit AI review for Lustre fs.h:372 — (minor) This is keyed off mapping_set_folio_order_range(), but fgf_set_order() itself is older: it is in include/linux/pagemap.h from v6.7,
Gerrit AI review for Lustre PS4 · 2026-09-10 14:47
(minor) This is keyed off mapping_set_folio_order_range(), but fgf_set_order() itself is older: it is in include/linux/pagemap.h from v6.7, while mapping_set_folio_order_range() only appears in v6.12. So on v6.7..v6.11 - which covers the 6.8 and 6.11 kernels - this macro replaces a working kernel helper with a stub, tree-wide, for everything that reaches lustre_compat.h.

Harmless for the one caller in rw26.c today, since Lustre never turns on large folios on those kernels. But a later caller that wants the real thing gets 0 back with no build error to point at it. The compat helpers just above avoid that by keeping a Lustre name (ll_aops_read, ll_aops_release, ...).

If the patch is refreshed, could this be an ll_fgf_set_order() wrapper, or a stub gated on its own HAVE_FGF_SET_ORDER test, rather than shadowing the kernel symbol? A name saying what it does would also read better than _safe.
reply PS1 2026-09-06 18:03 Gerrit AI review for Lustre llite_lib.c:174 — (minor) With the HAVE_MAPPING_SET_FOLIO_ORDER_RANGE guard gone here and around FGF_FOLIO_MAX_ORDER in cl_object.h, kernels that cannot do la
Gerrit AI review for Lustre PS1 · 2026-09-06 18:03
(minor) With the HAVE_MAPPING_SET_FOLIO_ORDER_RANGE guard gone here and around FGF_FOLIO_MAX_ORDER in cl_object.h, kernels that cannot do large folios now set LL_SBI_LARGE_FOLIOS and ll_folio_max = 8. The IO paths are unaffected (mapping_set_folio_order_range() and fgf_set_order() are no-op stubs there), but llite.*.large_folios reads 1 and llite.*.folio_order_max reads 8 on a client that only ever allocates order-0 folios, and folio_order_max_store() will accept up to 8. Should these two tunables still reflect what the kernel can actually do?
reply PS4 2026-09-10 14:47 Gerrit AI review for Lustre rw26.c:604 — (style) Not a bug, but the continuation lines still line up with the old `static int ll_write_begin(` opening paren, so they now sit one col
Gerrit AI review for Lustre PS4 · 2026-09-10 14:47
(style) Not a bug, but the continuation lines still line up with the old `static int ll_write_begin(` opening paren, so they now sit one column past `int ll_write_begin_kiocb(` - column 26 instead of 25. Same one-off in ll_write_end_kiocb() below and in both declarations in llite_internal.h; the copies in lustre_compat/linux/fs.h and the memfs_write_end_kiocb() ones are aligned correctly. Worth straightening if the patch is refreshed for anything else.
owner Shaun Tancheff · uploader Shaun Tancheff · PS4 uploaded 56d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: move aops compat code into fs.h

Migrate the aops handlers into compat specific handlers in
include/lustre_compat/fs.h

This also allows us to kill the wbe_* macros

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I900a1e73a44a3ce3abd387a5c573e8d7e9bad57f
52127 master J !B ✓T ✗1R 0/2
LU-16796 quota: Change struct qmt_pool_info to use refcount_t
reviewing Arshad Hussain · blocked on the owner: enforced tests failed
lug23ddhackathon 4 unresolved S +8 −9
61d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 5 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
5 optional test failure(s) — informational
build #130897 SUCCESS · tests all Maloo sessions
no vote yet: Sergey Cheremencev, Andreas Dilger, Timothy Day
patchsets:
+2 earlier PS1 08-28 PS2 08-28
PS3 09-03 PS5 05-17 PS6 08-10 PS7 08-31 PS8 09-03
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-08-11 05:09 Gerrit AI review for Lustre qmt_internal.h:393 — (defect) refcount_inc() cannot take a counter back up from 0. It WARNs ("addition on 0; use-after-free") and pins the counter at REFCOUNT_SA
Gerrit AI review for Lustre PS6 · 2026-08-11 05:09
(defect) refcount_inc() cannot take a counter back up from 0. It WARNs ("addition on 0; use-after-free") and pins the counter at REFCOUNT_SATURATED, after which refcount_dec_and_test() never returns true again.

qpi_ref is resurrected from 0 by design:

    qmt_pool_destroy()            qmt_pool_lookup()
      qpi_putref() -> 0             down_read(qmt_pool_lock)
      qmt_pool_free()               pool still on qmt_pool_list
        down_write(...) blocks      qpi_getref()   /* 0 -> 1 */

The getref in qmt_pool_lookup()/qti_pools_add() runs under the read lock while the pool is still linked, so it strictly precedes the list_del_init() in qmt_pool_free().

Once saturated the pool is never freed, so the lu_device_get() taken in qmt_pool_alloc() is never dropped, and the lu_device_fini() LASSERTF(ld_ref == 0) LBUGs when the MDT is unmounted.

Would refcount_inc_not_zero() in the lookup path (skipping a pool that is already dead, and dropping the recheck in qmt_pool_free()) work here, or should qpi_ref stay atomic_t?
reply PS6 2026-08-11 05:09 Gerrit AI review for Lustre qmt_internal.h:399 — (minor) With atomic_read() this caught a count that had already gone negative. refcount_dec_and_test() saturates rather than going negative,
Gerrit AI review for Lustre PS6 · 2026-08-11 05:09
(minor) With atomic_read() this caught a count that had already gone negative. refcount_dec_and_test() saturates rather than going negative, and refcount_read() returns unsigned int, so a corrupted counter now reads as a large positive and the assert passes. If it is being kept so an over-put produces a crash dump rather than a warning, it no longer covers that case.
reply PS6 2026-08-11 05:09 Gerrit AI review for Lustre qmt_pool.c:86 — (style) This isn't a bug, but refcount_read() returns unsigned int, so %u matches this field better than %d.
Gerrit AI review for Lustre PS6 · 2026-08-11 05:09
(style) This isn't a bug, but refcount_read() returns unsigned int, so %u matches this field better than %d.
reply PS6 2026-08-11 05:09 Gerrit AI review for Lustre qmt_pool.c:254 — (defect) This recheck is only reachable after refcount_dec_and_test() already returned true, so it can only fire when another thread took a
Gerrit AI review for Lustre PS6 · 2026-08-11 05:09
(defect) This recheck is only reachable after refcount_dec_and_test() already returned true, so it can only fire when another thread took a reference in the window before list_del_init() above - exactly the 0 -> 1 transition refcount_t forbids (see qmt_internal.h).

The comparison also changes meaning: refcount_read() is unsigned, so "> 0" is now just "!= 0". A saturated counter reads as a large positive and takes this early exit, leaking the pool rather than freeing it.
tags: lug23dd hackathon
owner Arshad Hussain · uploader Arshad Hussain · PS8 uploaded 62d ago · NEW · open in Gerrit ↗
commit message
LU-16796 quota: Change struct qmt_pool_info to use refcount_t

This patch changes struct qmt_pool_info to use
refcount_t instead of atomic_t

Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ia33fafab3dbb86ff72b8c3d26b6fb2a27b334cf4
53169 master J !B ✓T ✗1R -1/2−
LU-17295 llite: parallel creates via d_lookup_done
reviewing Qian Yingjin · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 9 unresolved S +16 −0
68d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: recovery-small. session
15 optional test failure(s) — informational
build #125505 SUCCESS · tests all Maloo sessions
no vote yet: Sohei Koyama, Shuichi Ihara, Andreas Dilger, Lai Siyao, Neil Brown, Alex Zhuravlev
patchsets:
+31 earlier PS1 11-17 PS2 11-26 Sohei Koyama PS3 11-26 Sohei Koyama PS4 12-02 Sohei Koyama PS5 12-17 Sohei Koyama PS6 12-19 Sohei Koyama PS7 12-20 Sohei Koyama PS8 03-05 Lai Siyao PS9 03-06 Sohei Koyama PS10 03-06 Sohei Koyama PS11 05-07 Sohei Koyama PS12 05-08 Sohei Koyama PS13 05-08 Sohei Koyama PS14 05-09 Sohei Koyama PS15 05-12 Sohei Koyama PS16 05-12 Sohei Koyama PS17 05-12 Sohei Koyama PS18 05-14 Sohei Koyama PS19 05-14 Sohei Koyama PS20 05-14 Sohei Koyama PS21 05-14 Sohei Koyama PS22 05-16 Sohei Koyama PS23 05-19 Sohei Koyama PS24 05-27 Sohei Koyama PS25 11-10 Sohei Koyama PS26 11-10 Sohei Koyama PS27 11-25 Sohei Koyama PS28 11-26 Sohei Koyama PS29 11-26 Sohei Koyama PS30 12-09 Sohei Koyama PS31 02-27 Sohei Koyama
PS32 03-03 Sohei Koyama PS33 03-03 Sohei Koyama PS34 03-09 Sohei Koyama PS35 03-11 Sohei Koyama PS36 05-25 Sohei Koyama
threads: 9 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS34 2026-03-09 10:04 Qian Yingjin lustre_compat.h:108 — This should use:
Qian Yingjin PS34 · 2026-03-09 10:04
This should use:
#ifndef DCACHE_PAR_LOOKUP?
reply PS1 2024-07-30 02:00 Sohei Koyama namei.c:1181 — OK, the performance data was shared in Jira. https://jira.whamcloud.com/browse/LU-17295
Lai Siyao PS1 · 2023-11-20 02:04
what the shared lock is protecting? IMHO this can be done without inode loc.
Sohei Koyama PS1 · 2024-07-23 00:53
Removing this lock now scales file creation performance for a shared directory from multiple clients on a single node.
Is it okay to remove this VFS lock?
Qian Yingjin PS1 · 2024-07-24 01:23
Have you benchmarked with this patch?
If so, could you please share the performance data.

The patch is mostly OK but with some minor places needing to refine according to comments.
Sohei Koyama PS1 · 2024-07-30 02:00
OK, the performance data was shared in Jira. https://jira.whamcloud.com/browse/LU-17295
reply PS1 2023-11-20 02:06 Lai Siyao namei.c:1186 — should this be called before unlock?
Lai Siyao PS1 · 2023-11-20 02:06
should this be called before unlock?
reply PS1 2023-11-20 02:04 Lai Siyao namei.c:1194 — is this assertion still valid? maybe a specific test should be created against this race.
Lai Siyao PS1 · 2023-11-20 02:04
is this assertion still valid? maybe a specific test should be created against this race.
reply PS4 2024-12-04 03:11 Lai Siyao namei.c:1198 — If we don't lock inode, this can be removed. And This can be applied to all parent directory locking code on client side since we reply on M
Lai Siyao PS4 · 2024-12-04 03:11
If we don't lock inode, this can be removed. And This can be applied to all parent directory locking code on client side since we reply on MDT locking.
reply PS6 2024-12-20 02:26 Lai Siyao namei.c:1193 — IMHO it should be like this:
Lai Siyao PS6 · 2024-12-20 02:26
IMHO it should be like this:

#ifdef HAVE_INODE_LOCK_SHARED
	if (open_flags & O_CREAT)
		inode_unlock(dir);
	else
                inode_unlock_shared(dir);
#else
        inode_unlock(dir);
#endif
reply PS33 2026-03-08 06:40 Sohei Koyama namei.c:1406 — You’re absolutely right, Yingjin.
Qian Yingjin PS33 · 2026-03-07 10:36
Do we really need lli_create_rwsem as we only acquire read lock on it... With or without it the results are same.
Sohei Koyama PS33 · 2026-03-08 06:40
You’re absolutely right, Yingjin.
I realized (after your comment) that lli_create_rwsem has no effect in this patchset 33, and moreover I found a pattern that can cause a deadlock (unfortunately).

```
PID A (fallocate / O_CREAT → ll_atomic_open):
  holds i_rwsem exclusive
  → acquires lli_create_rwsem (read)
  → releases i_rwsem
  → MDS RPC
  → tries to reacquire i_rwsem exclusive via inode_lock(dir)
  → blocks

PID B (setfattr → path lookup):
  walk_component
  → acquires i_rwsem shared
  → __lookup_slow
  → d_alloc_parallel
  → waits for PID A’s parallel lookup to complete
  → blocks

Deadlock:
  PID A: holds the parallel lookup → needs i_rwsem exclusive
  PID B: holds i_rwsem shared → needs the parallel lookup to complete
```

This is the structural reason why i_rwsem cannot be dropped in ll_atomic_open().
reply PS34 2026-03-09 12:17 Sohei Koyama namei.c:1424 — The patch that called d_lookup_done() at the end of atomic_open() caused a deadlock in the racer test, so it was not pushed....
Qian Yingjin PS34 · 2026-03-09 10:04
I think d_lookup_done should be put in the end of atomic_open() and the server has already granted the DLM lock to the client.
Qian Yingjin PS34 · 2026-03-09 10:17
Otherwise, the dentry may be raced and deleted by unlink or rename() operation?
Sohei Koyama PS34 · 2026-03-09 12:17
The patch that called d_lookup_done() at the end of atomic_open() caused a deadlock in the racer test, so it was not pushed....
reply PS34 2026-03-09 12:22 Qian Yingjin namei.c:1582 — Where do you put d_lookup_done()?
Qian Yingjin PS34 · 2026-03-09 12:22
Where do you put d_lookup_done()?
I'd suggest to put here (Line 1582) before inode_lock() or Line 1577 before release the granted lock.
owner Qian Yingjin · uploader Sohei Koyama · PS36 uploaded 163d ago · NEW · open in Gerrit ↗
commit message
LU-17295 llite: parallel creates via d_lookup_done

VFS holds parent i_rwsem exclusive for O_CREAT, serializing
all creates in the same directory.  This bottlenecks HPC
workloads that create many files in a shared directory.

In ll_atomic_open(), release i_rwsem to allow parallel MDS
RPCs for concurrent file creates.  Immediately call
d_lookup_done() on the dentry to clear DCACHE_PAR_LOOKUP
set by the VFS d_alloc_parallel() before entering
atomic_open.  Without this, any process calling
d_alloc_parallel() for the same filename will block in
d_wait_lookup() while holding i_rwsem, causing an ABBA
deadlock when ll_atomic_open() tries to re-acquire i_rwsem
at the end.

The MDS provides create atomicity via LDLM locks, so
client-side dentry serialization through PAR_LOOKUP is not
needed.  The VFS atomic_open() wrapper also calls
d_lookup_done() after we return, but that is a no-op since
the flag is already cleared.

Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: I5101bb8b108817e6facaafc7d28b497245fc3024
65762 master J ✗1B ✓T ✗1R 0/2
LU-10026 csdc: prefer uncompressed mirror for read and write
reviewing Marc Vef · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
1 unique failure csdc 4 unresolved L +213 −47
74d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity3@zfs:test_907seen in 57 other reviews
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
build #129912 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Artem Blagodarenko, Zhenyu Xu
patchsets:
+7 earlier PS1 05-08 PS2 05-28 PS3 05-28 PS4 06-11 PS5 06-11 PS6 07-27 Artem Blagodarenko PS7 07-28 Artem Blagodarenko
PS8 08-19 Artem Blagodarenko PS9 08-19 Artem Blagodarenko PS10 08-20 Artem Blagodarenko PS11 08-20 Artem Blagodarenko PS12 08-21 Artem Blagodarenko
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS12 2026-08-22 12:56 Gerrit AI review for Lustre lod_lov.c:622 — This bonus is added once per allocated stripe, which is exactly the weight the OS_STATFS_NONROT bonus a few lines above uses, so the two can
Gerrit AI review for Lustre PS12 · 2026-08-22 12:56
This bonus is added once per allocated stripe, which is exactly the weight the OS_STATFS_NONROT bonus a few lines above uses, so the two can cancel out.

Two mirrors, no LCME_FL_PREF_WR anywhere, one stripe each:

    mirror 0: compressed,   stripe on a NONROT OST -> pref = 1
    mirror 1: uncompressed, stripe on a rotating OST -> pref = 1

lme_preference ties, so the `!found_preferred` fallback below keeps the lower index (`>` is strict) and sets lme_prefer on mirror 0. lod_primary_pick() then classifies mirror 0 as case B (preferred + compressed) and mirror 1 as case C, and B outranks C, so the write goes to the compressed mirror.

A wider compressed mirror wins outright rather than tying: 4 NONROT stripes compressed = 4 vs 1 NONROT stripe uncompressed = 2.

Mixed flash/disk mirrors are the case the non-rotational preference was added for, so this is not an exotic layout. Should the uncompressed bonus be on a different scale than the per-stripe NONROT count (or applied once per mirror) so it can't be traded away against OST speed?

The comment also says "mirror", but this sits in the per-stripe loop of one component.
reply PS12 2026-08-22 12:56 Gerrit AI review for Lustre lod_object.c:8060 — (style) Not a bug, but this comment has a UTF-8 em dash in it; the rest of the tree is plain ASCII. A plain '-' would do.
Gerrit AI review for Lustre PS12 · 2026-08-22 12:56
(style) Not a bug, but this comment has a UTF-8 em dash in it; the rest of the tree is plain ASCII. A plain '-' would do.
reply PS12 2026-08-22 12:56 Gerrit AI review for Lustre lod_object.c:8088 — Ranking B (preferred + compressed) above C (uncompressed) reads as "an explicit `lfs setstripe --flags=prefer` beats the compression heurist
Gerrit AI review for Lustre PS12 · 2026-08-22 12:56
Ranking B (preferred + compressed) above C (uncompressed) reads as "an explicit `lfs setstripe --flags=prefer` beats the compression heuristic". But lme_prefer is not only user intent: when no component carries LCME_FL_PREF_WR, lod_fill_mirrors() picks the highest lme_preference non-stale mirror and sets lme_prefer = 1 on it.

So tier B is reachable on a file the user never flagged, and the heuristic ends up overriding its own compression preference. Should case B be restricted to mirrors that actually carry LCME_FL_PREF_WR, or should the synthesized preference be tracked separately from the user flag?
reply PS12 2026-08-22 12:56 Gerrit AI review for Lustre lov_io.c:662 — (minor) ci_ndelay_tried > 0 means "not the first lov_io_mirror_init() for this env", which is broader than "this is an FLR error retry".
Gerrit AI review for Lustre PS12 · 2026-08-22 12:56
(minor) ci_ndelay_tried > 0 means "not the first lov_io_mirror_init() for this env", which is broader than "this is an FLR error retry".

ll_file_io_generic() restarts the io for reasons unrelated to mirror failure and preserves the counter:

    partial_io -> io->ci_need_restart = 1   (file.c)
    retried = io->ci_ndelay_tried; goto restart;

A single buffered read larger than max_io_bytes therefore takes the uncompressed mirror for the first chunk only; from the second chunk on ci_ndelay_tried is non-zero, lis_mirror_index has been advanced by one, and the first in-range mirror is accepted even when it is compressed. The layout-change restart in vvp_io_iter_init() has the same shape.

Would gating on something that only the -EAGAIN mirror-failover path sets (io->ci_tried_all_mirrors, or a dedicated flag set where cl_io_loop() retries) keep the failover fix without giving up the preference on ordinary io continuation?
tags: csdc
owner Marc Vef · uploader Artem Blagodarenko · PS12 uploaded 75d ago · NEW · open in Gerrit ↗
commit message
LU-10026 csdc: prefer uncompressed mirror for read and write

When accessing a mirrored file with both compressed and uncompressed
components, choose uncompressed components for read (lov_io.c).

When writing to mirrored files with both compressed and uncompressed
mirrors, prefer the uncompressed components to write; this is better
for performance, more compatible with older clients, and better fits
the model of compressing files after initial write. The write-side
preference is implemented via lod_fill_mirrors() and lod_primary_pick()
using a new lme_compressed flag.

Note: the changes to lod_fill_mirrors() and lod_primary_pick() affect
all FLR files, not only those with compressed mirrors. Plain FLR writes
will also use the updated preferred-mirror selection logic.

DDN-bug-id: EX-6510
Was-Change-Id: I62a117d5cc3d34e2c0c96d1a9ade8eef0a2d1291

Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Signed-off-by: Artem Blagodarenko <ablagodarenko@gmail.com>
Signed-off-by: Marc Vef <mvef@whamcloud.com>
Change-Id: I043b27bd891c039901075a08c76630f8f0f9f182
65769 master J !B ✓T ✗1R 0/2
LU-10026 csdc: add ll_compr_hdr structure
reviewing Marc Vef · blocked on the owner: enforced tests failed
csdc 4 unresolved L +270 −58
74d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
build #129913 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Artem Blagodarenko
patchsets:
+9 earlier PS1 05-08 PS2 05-28 PS3 05-28 PS4 06-11 PS5 06-11 PS6 07-28 Artem Blagodarenko PS7 07-28 Artem Blagodarenko PS8 07-31 Andreas Dilger PS9 07-31 Andreas Dilger
PS10 08-19 Artem Blagodarenko PS11 08-19 Artem Blagodarenko PS12 08-20 Artem Blagodarenko PS13 08-20 Artem Blagodarenko PS14 08-21 Artem Blagodarenko
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS14 2026-08-22 12:39 Gerrit AI review for Lustre COMMIT_MSG:21 — (minor) Two hunks aren't accounted for by the body.
Gerrit AI review for Lustre PS14 · 2026-08-22 12:39
(minor) Two hunks aren't accounted for by the body.

COMPR_GET_CHUNK_SIZE() in lustre_user.h gains argument parentheses and a 1U base. That is a real hardening of the macro, but nothing in the message mentions it.

llapi_layout_compress_set() gains a type range check that makes the function return -1/EINVAL for inputs it previously accepted. That is a behaviour change to a public liblustreapi entry point and deserves a line.

Are both meant to ride along in this patch?
reply PS14 2026-08-22 12:39 Gerrit AI review for Lustre lustre_idl.h:4134 — (minor) This isn't a bug today, but the two arguments are treated asymmetrically: `lvl` is masked with 0x0f, `bits` isn't. The matching acce
Gerrit AI review for Lustre PS14 · 2026-08-22 12:39
(minor) This isn't a bug today, but the two arguments are treated asymmetrically: `lvl` is masked with 0x0f, `bits` isn't. The matching accessor LLCH_CHUNK_LUM_BITS() does mask on the way out.

    LLCH_LEVEL_AND_CHUNK(3, 16) -> (16 << 4) | 3 == 259

The result is an int, so the overflow only disappears when it's stored into the __u8 llch_level_and_chunk, and the header then decodes as chunk_lum_bits 0 (64 KiB) rather than anything detectable. Valid chunk_lum_bits is 0..10 so no current caller can hit it, but masking `bits` the same way as `lvl` would keep the macro self-contained.
reply PS14 2026-08-22 12:39 Gerrit AI review for Lustre liblustreapi_layout.c:1721 — (minor) Documentation/man3/llapi_layout_compress_set.3 doesn't seem to be updated to match. Its ERRORS section lists EINVAL only for the str
Gerrit AI review for Lustre PS14 · 2026-08-22 12:39
(minor) Documentation/man3/llapi_layout_compress_set.3 doesn't seem to be updated to match. Its ERRORS section lists EINVAL only for the stripe_size/chunk_size cases, and DESCRIPTION enumerates the valid `type` values without saying that an out-of-range type or the new LL_COMPR_TYPE_UNCHANGED sentinel is now rejected. Should the man page change land in the same patch?
reply PS14 2026-08-22 12:39 Gerrit AI review for Lustre liblustreapi_layout.c:1736 — (style) Not a bug, but the first test can never decide the branch on its own: LL_COMPR_TYPE_UNCHANGED is 255 and LL_COMPR_TYPE_MAX is 8, so
Gerrit AI review for Lustre PS14 · 2026-08-22 12:39
(style) Not a bug, but the first test can never decide the branch on its own: LL_COMPR_TYPE_UNCHANGED is 255 and LL_COMPR_TYPE_MAX is 8, so `type >= LL_COMPR_TYPE_MAX` already covers the sentinel. Keeping it reads as documentation, but a reader has to work that out.
tags: csdc
owner Marc Vef · uploader Artem Blagodarenko · PS14 uploaded 75d ago · NEW · open in Gerrit ↗
commit message
LU-10026 csdc: add ll_compr_hdr structure

It is an important structure for CSDC feature. Will be used
in the next patches.

Also adds:
- LL_COMPR_TYPE_UNCHANGED enum value (used to signal that the
  compression type should not be changed on update).
- LL_LZ4FAST_MAX_LEVEL define (15: the largest value the 4-bit
  stored level field can hold for the LZ4FAST algorithm).
- LLCH_FL_COMPR_CSUM / LLCH_FL_HDR_CSUM flags in llch_flags to
  signal checksum presence explicitly (a crc32 of 0 is ambiguous
  otherwise).
- wirecheck: pin COMPR_CHUNK_MIN_BITS, COMPR_CHUNK_MAX_BITS, and
  LL_LZ4FAST_MAX_LEVEL values.

Signed-off-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Signed-off-by: Marc Vef <mvef@whamcloud.com>
Change-Id: I26f2fc7c0212f1a4cad36805c75aa766d6aed548
65761 master J !B ✓T ✗1R 0/2
LU-10026 utils: add 'lfs find' support for compressed file
reviewing Marc Vef · blocked on the owner: enforced tests failed
csdc 9 unresolved L +715 −67
74d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
build #129911 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Artem Blagodarenko, Zhenyu Xu
patchsets:
+12 earlier PS1 05-08 PS2 05-28 PS3 05-28 PS4 06-11 PS5 06-11 PS6 06-17 Artem Blagodarenko PS7 06-18 Artem Blagodarenko PS8 07-24 Artem Blagodarenko PS9 07-27 Artem Blagodarenko PS10 07-27 Andreas Dilger PS11 07-27 Andreas Dilger PS12 07-27 Andreas Dilger
PS13 08-19 Artem Blagodarenko PS14 08-19 Artem Blagodarenko PS15 08-20 Artem Blagodarenko PS16 08-20 Artem Blagodarenko PS17 08-21 Artem Blagodarenko
threads: 9 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre COMMIT_MSG:9 — (minor) The first three bullets read as new functionality, but `--comp-flags=[^]compress` and `--comp-flags=[^]nocompr` already work (LCME_F
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(minor) The first three bullets read as new functionality, but `--comp-flags=[^]compress` and `--comp-flags=[^]nocompr` already work (LCME_FL_COMPRESS/LCME_FL_NOCOMPR are in comp_flags_table[]), and so does `-L compress` (LOV_PATTERN_COMPRESS is in lov_pattern_names[]). This patch documents them and adds test coverage rather than adding them. Could the wording say "document" for those three, so the message matches the diff?
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre lustre_user.h:3278 — (style) COMPR_LEVEL_MAX is already defined with the same value earlier in this header, just after `enum ll_compr_type`, with a comment expla
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(style) COMPR_LEVEL_MAX is already defined with the same value earlier in this header, just after `enum ll_compr_type`, with a comment explaining it. Two definitions can drift apart later; can this one be dropped?
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre sanity-pfl.sh:3078 — (style) extra blank line. Also z1..z4 here, and `expect` in test_100d, are not declared `local`.
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(style) extra blank line. Also z1..z4 here, and `expect` in test_100d, are not declared `local`.
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre lfs.c:4637 — (style) not a bug, but `compress-chunk` already appears in this long_opts[] further down, so it is listed twice now. getopt_long takes the f
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(style) not a bug, but `compress-chunk` already appears in this long_opts[] further down, so it is listed twice now. getopt_long takes the first match so it still works; `compr-chunk` looks like the only new alias actually needed here.
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre lfs.c:8226 — (typo) this comment uses a UTF-8 em dash; the tree is otherwise plain ASCII. Same in the `%LZ` directory-branch comment in liblustreapi_pfin
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(typo) this comment uses a UTF-8 em dash; the tree is otherwise plain ASCII. Same in the `%LZ` directory-branch comment in liblustreapi_pfind.c.
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre lfs.c:8248 — (defect) atoi() cannot report a parse failure, so `--compr-level=abc` silently becomes level 0, and `--compr-level=+abc` becomes "level > 0"
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(defect) atoi() cannot report a parse failure, so `--compr-level=abc` silently becomes level 0, and `--compr-level=+abc` becomes "level > 0", i.e. every compressed component. The unsigned range check above cannot catch it.

`-Z gzip:abc` is rejected by llapi_parse_compress_type(), and the setstripe `--compress-level` path uses strtol() with an end-pointer check, so the three spellings of the same thing disagree. strtol() plus `*end != '\0'` here would line them up.
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre liblustreapi_pfind.c:509 — (minor) This helper backs every numeric `lfs find` predicate, and the new exact-match branch only changes behaviour when `margin == 0`. `lfs
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(minor) This helper backs every numeric `lfs find` predicate, and the new exact-match branch only changes behaviour when `margin == 0`. `lfs find -z N` with a plain number is such a caller: lfs.c does `fp_ext_size_units /= SEL_UNIT_SIZE`, so 1/1024 becomes 0, and an exact `-z` match that previously reported "no match" now matches. That may well be desirable, but it is a silent change to an unrelated option.

The new compression predicates are the only callers passing margin 0; the rest pass 1 or a unit size, and with margin 1 this function already returns 1 on an exact match. Passing 1 there would avoid touching the shared helper, and would also make `--compr-level=-N` / `--compr-chunk=-N` mean "< N" like `-c -N`, `--size -N` and friends, rather than "<= N".

The table above the function (rows 5 and 6, and the note about the interval `(limit - margin, limit]`) no longer describes the code either.
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre liblustreapi_pfind.c:975 — (defect) Negation is handled differently for level/chunk than for type. `fp_exclude_compr_lvl` is passed into find_value_cmp() as `negopt`,
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(defect) Negation is handled differently for level/chunk than for type. `fp_exclude_compr_lvl` is passed into find_value_cmp() as `negopt`, so `found_lvl` ends up meaning "some component does not match" instead of "no component matches", and the aggregation here then ignores the exclude flag entirely - unlike the fp_check_compr_type block just above.

For a file with two compressed components, level 3 and level 5:

    lfs find ! --compr-level=3 dir

entry(lvl 5) makes find_value_cmp() return -1, negopt flips it to 1, found_lvl is set, and the file is reported - even though it does have a level-3 component. The equivalent `! --compr-type=gzip` on a gzip+lz4 file correctly does not match.

Should the level and chunk comparisons drop the negopt argument and be inverted here the same way type is?
reply PS17 2026-08-22 12:35 Gerrit AI review for Lustre liblustreapi_pfind.c:1771 — (defect) `fp_lum_size` is the size common_param_init() allocated for the lmd buffer (>= XATTR_SIZE_MAX, 64KiB), not the length of the layout
Gerrit AI review for Lustre PS17 · 2026-08-22 12:35
(defect) `fp_lum_size` is the size common_param_init() allocated for the lmd buffer (>= XATTR_SIZE_MAX, 64KiB), not the length of the layout stored in it.

For a non-composite lum, llapi_layout_get_by_xattr() never narrows that value, so llapi_layout_objects_in_lum() computes (65536 - 32) / 24 = 2729 objects and __llapi_comp_alloc() rejects it with EINVAL because 2729 > LOV_MAX_STRIPE_COUNT (2000).

So this call fails for every plain V1/V3 file and always falls through to llapi_layout_get_by_path(); only composite layouts reach the new path, because the entry loop resets the size to `ent->lcme_size`. Passing the actual layout length instead would make the fast path work for non-PFL files too.
tags: csdc
owner Marc Vef · uploader Artem Blagodarenko · PS17 uploaded 75d ago · NEW · open in Gerrit ↗
commit message
LU-10026 utils: add 'lfs find' support for compressed file

* Add "--comp-flags=[^]compress" to locate file with/without
  compressed components.
* Add "--comp-flags=[^]nocompr" to locate file with/without setting
  component compress preference.
* Add "[!] --layout=compress" to locate file with/without compressed
  components.
* Add "[!] --compress-type=<compress-type>" to locate compressed file
  with/without specified compress algorithm.
* Add "[!] --compress-level=[+-]<compress-level>" to locate compressed
  file with/without specified compress level.
* Add "[!] --compress-chunk=[+-]<compress-chunk>" to locate compressed
  file with/without specified compress chunk in KiB.

utils: add -Z option for 'lfs getstripe/find'

Add support for "lfs getstripe -Z" to get the last instantiated
component compression information.

Add support for "lfs find -Z <type>[:[+-]<level>]" to keep consistent
options with "lfs setstripe -Z".
DDN-bug-id: EX-6856
Was-Change-Id: Ia5e2a2ea6937dc2b46e224cec808504a196b974c

utils: logical AND for 'lfs find' compression exprs

All search expressions provided to 'lfs find' must be combined as a
logical AND. Fix newly added options for compression support, so that
they comply with this logical AND.
DDN-bug-id: EX-7714
Was-Change-Id: I3b28cd87c1d304df6d04753b413d46f5abcfe16e

csdc: don't set compression layout when disabled

When llite_enable_compression is disabled
(lfs set_param llite.*.enable_compression=0), we should check
it before sending it to MDS lest we get a file with compressed
component which we cannot handle.
DDN-bug-id: EX-7593
Was-Change-Id: Ib1e2123ffdb239c3e1401d682ae9c2c49e3f4a6f

utils: support 'lfs find --printf %LZ'

Add support for "lfs find --printf %LZ" to print the compression
type:level of the last instantiated component of a file.
DDN-bug-id: EX-6856
Was-Change-Id: Iaf1b6c031b06c70e7b5be51354697aa6bdcc9850

csdc: right error code in case compression is disabled

Currently, if compression is disabled on a client the error
message is confusing "Cannot set layout EA: Unknown error 524"

Let's replace the error code from  ENOTSUPP to EOPNOTSUPP,
so error messages become more informative

ctl get_param -n llite.*.enable_compression
0
lfs setstripe -i 0 -c 1 -E -1 -Z lz4 /mnt/lustre/foo.txt
Cannot set layout EA: Operation not supported
lfs setstripe: cannot create composite file
'/mnt/lustre/foo.txt': Inappropriate ioctl for device

This message could be even more informative, but this version
is already much better.
DDN-bug-id: EX-10577
Was-Change-Id: I7fd67d5d3d20bc7de169f35f6fa63b53f2bfe718

Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Signed-off-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Signed-off-by: Marc Vef <mvef@whamcloud.com>
Change-Id: Ic36946738c3463fd862aeca4ee2e2c2ed85eff84
64942 master J –B ✗T –R 0/2
LU-17916 dbg: force build with in-kernel crypto
reviewing Sebastien Buisson · blocked on the owner: build failure
fortestonly 1 unresolved XS +1 −1
77d
blocked on the owner: build failure
awaiting review (CI not green yet)
build #123844 FAILURE
patchsets: PS1 03-27 PS2 04-13
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-21 17:21 Misc Code Checks Robot (Gatekeeper helper) COMMIT_MSG:1 — lustre/llite/file.c:
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-21 17:21
lustre/llite/file.c:
 parse ll_file_ioctl():error: Function too hairy.  Giving up. 14 seconds
warn: ll_file_ioctl():Function too hairy.  No more merges.
tags: fortestonly
owner Sebastien Buisson · uploader Sebastien Buisson · PS2 uploaded 204d ago · NEW · open in Gerrit ↗
commit message
LU-17916 dbg: force build with in-kernel crypto

Force build with in-kernel crypto.

Test-Parameters: forbuildonly
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: I0943412d7b42cbdcb50271bb0bf728425ed4fb3d
65668 master J !B ✓T ✗1R -1/2−
LU-11433 lnet: move wire constant checks into wiretest.c
reviewing Sonia Sharma · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase L +472 −288
94d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #126671 SUCCESS · tests all Maloo sessions
patchsets:
+2 earlier PS1 05-04 PS2 05-05 Janitor Bot
PS3 05-05 PS4 06-16 PS5 06-16 Janitor Bot PS6 06-17 PS7 06-17 Janitor Bot
owner Sonia Sharma · uploader Janitor Bot · PS7 uploaded 140d ago · NEW · open in Gerrit ↗
commit message
LU-11433 lnet: move wire constant checks into wiretest.c

Move lnet_assert_wire_constants() out of api-ni.c into a dedicated
wiretest.c file, following the same pattern as used by Lustre wire
constant checks.

Update lnet/utils/wirecheck.c to generate the standalone LNet wiretest
coverage and add missing checks for LNet wire-visible structures and
constants, including NID, message header, ping metadata, acceptor, and
counters.

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Sonia Sharma <sonia.sh.sharma@oracle.com>
Change-Id: I57dbdbde8f1b1a5398231e0f325a00662016697e
65197 master J ✗40B ✓T ✗11R 0/2
LU-20108 sec: updates for in-kernel crypto
reviewing Shaun Tancheff · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
40 unique failures 11 unresolved L +424 −28
99d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-slow@ldiskfs+DNE:test_64bseen in 2 other reviews
sanity-lfsck@ldiskfs+DNE:test_42NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_37seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_39seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_40seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_41seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_42seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_43seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_45seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_46seen in 3 other reviews
sanity-sec@ldiskfs+DNE:test_47seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_48aseen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_49seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_50seen in 2 other reviews
sanity-sec@ldiskfs+DNE:test_52seen in 4 other reviews
sanity-sec@ldiskfs+DNE:test_56seen in 1 other review
sanity-sec@ldiskfs+DNE:test_57seen in 1 other review
sanity-sec@ldiskfs+DNE:test_58seen in 1 other review
sanity-sec@ldiskfs+DNE:test_59aseen in 3 other reviews
sanity-sec@ldiskfs+DNE:test_59bseen in 1 other review
sanity-sec@ldiskfs+DNE:test_59cseen in 1 other review
sanity-sec@ldiskfs+DNE:test_60NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_62NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@ldiskfs+DNE:test_65seen in 1 other review
sanity-sec@zfs:test_39seen in 2 other reviews
sanity-sec@zfs:test_40seen in 2 other reviews
sanity-sec@zfs:test_41seen in 2 other reviews
sanity-sec@zfs:test_42seen in 2 other reviews
sanity-sec@zfs:test_43seen in 2 other reviews
sanity-sec@zfs:test_45seen in 2 other reviews
sanity-sec@zfs:test_46seen in 2 other reviews
sanity-sec@zfs:test_47seen in 2 other reviews
sanity-sec@zfs:test_48aseen in 2 other reviews
sanity-sec@zfs:test_49seen in 2 other reviews
sanity-sec@zfs:test_50seen in 2 other reviews
sanity-sec@zfs:test_52seen in 4 other reviews
sanity-sec@zfs:test_59aseen in 3 other reviews
sanity-sec@zfs:test_59bseen in 1 other review
sanity-sec@zfs:test_60NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-sec@zfs:test_65seen in 1 other review
failed enforced testplatformdetail
review-dne-part-2 failed 2× RHEL 8.10 / x86_64 ran 11 tests. 5 tests failed: sanity-pfl, lnet-selftest, pjdfstest, sanity-sec, sanity-lfsck. session
review-dne-part-2 failed 2× RHEL 9.7 / x86_64 ran 11 tests. 5 tests failed: sanity-pfl, lnet-selftest, pjdfstest, sanity-sec, sanity-lfsck. session
review-dne-part-3 failed 2× RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-3 failed 2× RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-7 failed 2× RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-pcc. session
review-dne-part-7 failed 2× RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanity-pcc. session
review-dne-selinux-ssk-part-2 failed 2× RHEL 8.10 / x86_64 ran 5 tests. 2 tests failed: sanity-selinux, sanity-sec. session
review-dne-zfs-part-2 failed 2× RHEL 8.10 / x86_64 ran 11 tests. 4 tests failed: sanity-pfl, lnet-selftest, pjdfstest, sanity-sec. session
review-dne-zfs-part-3 failed 2× RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-7 failed 2× RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-pcc. session
review-ldiskfs-ubuntu failed 2× RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
32 optional test failure(s) — informational
build #127103 SUCCESS · tests all Maloo sessions
no vote yet: Sebastien Buisson
patchsets: PS1 04-09 PS2 04-09 Janitor Bot PS3 04-10 PS4 06-29
threads: 11 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre COMMIT_MSG:39 — Several hunks are not accounted for by the body, which makes it hard to tell what is deliberate:
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
Several hunks are not accounted for by the body, which makes it hard to tell what is deliberate:

- LC_FSCRYPT_OPS_INODE_INFO_OFFS and the new `lli_crypt_info` field (Linux v6.17-rc1-2-g93221de31a8df) are not mentioned at all.
- the new llcrypt_prepare_new_inode()/llcrypt_set_context() calls in ll_dir_setdirstripe(), which change how the encryption context reaches the MDS.
- dropping `.max_namelen` from lustre_cryptops.
- the llcrypt_d_revalidate() signature change for HAVE_D_REVALIDATE_WITH_INODE_NAME.
- FSCRYPT_CONTENTS_ALIGNMENT / LL_CRYPTO_BLOCK_SIZE.
- the ll_get_dummy_policy() restructuring.

Could the body cover each of these, or the independent ones be split into their own changes? The Fixes: tag itself checks out (sha and subject match 048e2cc7d2d5).
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre lustre-core.m4:1543 — (typo) the AC_DEFINE description says fscrypt_parse_test_dummy_encryption() but this defines HAVE_FSCRYPT_ADD_TEST_DUMMY_KEY.
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
(typo) the AC_DEFINE description says fscrypt_parse_test_dummy_encryption() but this defines HAVE_FSCRYPT_ADD_TEST_DUMMY_KEY.
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre lustre_crypto.h:26 — (typo) this `#else` and the `#endif` below it are labelled with CRYPTO_DUMMY_CONTEXT, but the condition being closed is HAVE_FSCRYPT_DUMMY_P
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
(typo) this `#else` and the `#endif` below it are labelled with CRYPTO_DUMMY_CONTEXT, but the condition being closed is HAVE_FSCRYPT_DUMMY_POLICY.
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre lustre_crypto.h:60 — Should this branch keep `.max_namelen = NAME_MAX,`? fscrypt_operations::max_namelen only disappeared in 5.16, and configure still allows in-
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
Should this branch keep `.max_namelen = NAME_MAX,`? fscrypt_operations::max_namelen only disappeared in 5.16, and configure still allows in-kernel fscrypt down to 5.4 (LC_FSCRYPT_SUPPORT only probes for struct fscrypt_policy_v2). On 5.4-5.15 the field ends up 0 and fscrypt_setup_filename() then rejects every name with -ENAMETOOLONG. Same question for the CONFIG_LL_ENCRYPTION definition below.
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre lustre_crypto.h:124 — (style) `pgno` is s32 everywhere else in this API - llcrypt_encrypt_pagecache_blocks()/llcrypt_decrypt_pagecache_blocks() in include/lustre_
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
(style) `pgno` is s32 everywhere else in this API - llcrypt_encrypt_pagecache_blocks()/llcrypt_decrypt_pagecache_blocks() in include/lustre_compat/linux/llcrypt.h, brw_page.bp_pgno, cl_folio_pgno() - and llcrypt_finalize_bounce_page() just below uses s32 too. Using s16 here silently narrows the caller's value; could these use s32 for consistency?
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre lustre_crypto.h:131 — On kernels without the folio variant this hands a tail page to fscrypt, which dereferences `page->mapping`:
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
On kernels without the folio variant this hands a tail page to fscrypt, which dereferences `page->mapping`:

    struct page *fscrypt_encrypt_pagecache_blocks(struct page *page, ...)
    {
        const struct inode *inode = page->mapping->host;

Tail pages of a large folio do not carry `mapping`, so any `pgno > 0` looks like a NULL/garbage dereference rather than an encryption of the intended page. bp_pgno is set unconditionally from cl_folio_pgno() in osc_prep_async_page(), so a direct-IO write whose user buffer is backed by a large folio reaches here with a non-zero value. The decrypt helper below has the same issue for kernels before 6.3. Should these fall back to an error, or use fscrypt_encrypt_block_inplace()/the block helpers when pgno is non-zero?
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre lustre_crypto.h:185 — This turns llcrypt_inherit_context() into a constant 0 for every kernel from 5.10 on, but only ll_dir_setdirstripe() was converted to the pr
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
This turns llcrypt_inherit_context() into a constant 0 for every kernel from 5.10 on, but only ll_dir_setdirstripe() was converted to the prepare_new_inode()/set_context() pair. The two remaining callers are not:

    ll_lookup_it()          namei.c:1224
    ll_new_node_prepare()   namei.c:1832

Both rely on it to fill op_data->op_file_encctx before md_create(). With it stubbed out, op_file_encctx stays NULL, the create RPC carries no encryption context, and ll_new_node_finish() then calls ll_set_encflags(inode, NULL, 0, true), whose preload leg goes to llcrypt_prepare_readdir() and fails. So creating a file or symlink in an encrypted directory fails after the object has already been created on the MDS. Should namei.c be converted in the same patch?
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre crypto.c:655 — `.max_namelen = NAME_MAX` is dropped here for every configuration: CRYPTO_MAX_NAMELEN expands to nothing in all three of its definitions (lu
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
`.max_namelen = NAME_MAX` is dropped here for every configuration: CRYPTO_MAX_NAMELEN expands to nothing in all three of its definitions (lustre_crypto.h lines 50, 60 and 273). It is also listed twice in this initializer, which suggests one of the two was meant to carry the value.

For the default embedded-llcrypt build the field still exists and is read:

    llcrypt_setup_filename()
      -> llcrypt_fname_encrypted_size(dir, iname->len,
                                      lsi->lsi_cop->max_namelen, ...)

with max_namelen now 0, `if (orig_len > max_len) return false;` fires for any non-empty name, so llcrypt_setup_filename() returns -ENAMETOOLONG for every name in an encrypted directory once the key is loaded.
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre dir.c:558 — This runs after md_create() and ll_prep_inode(), so the encryption context no longer rides along with the create RPC as it did via llcrypt_i
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
This runs after md_create() and ll_prep_inode(), so the encryption context no longer rides along with the create RPC as it did via llcrypt_inherit_context() above. llcrypt_set_context() is called with a non-NULL inode, which takes the second leg of ll_set_context() and issues a separate md_setxattr(XATTR_CREATE); its comment says that leg "should only be used when explicitly setting a new encryption policy on an existing, empty directory".

If that setxattr fails the GOTO leaves an already-created, unencrypted directory on the MDS. Would calling llcrypt_prepare_new_inode()/llcrypt_set_context(NULL, op_data) before md_create() keep the old single-RPC behaviour?

The ll_set_encflags() call further down also still reads op_data->op_file_encctx, which is now NULL on this path.
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre llite_lib.c:1215 — This break-on-success is keyed off HAVE_FSCRYPT_OPS_LEGACY_NAME (6.7+), but the call it guards is the parse above, which exists from 5.19. O
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
This break-on-success is keyed off HAVE_FSCRYPT_OPS_LEGACY_NAME (6.7+), but the call it guards is the parse above, which exists from 5.19. On 5.19-6.6 a successful parse falls straight into the warning chain and prints "Error processing option ... [0]".

Worse on 6.3-6.6, where HAVE_FSCRYPT_ADD_TEST_DUMMY_KEY is also gone (fscrypt_add_test_dummy_key() was dropped in 6.3): nothing resets err, control reaches `err = -1` and ll_options() returns it, so `-o test_dummy_encryption` always fails the mount.

On 5.19-6.2 the opposite happens: a parse failure is reported, then `err = llcrypt_add_test_dummy_key(sb, policy)` overwrites it, and that returns 0 when dummy_policy->policy is NULL - so a bad test_dummy_encryption= value is silently accepted.

Should this be the same `if (!err) break;` that the else branch has, placed directly after the parse call?
reply PS4 2026-07-28 10:46 Gerrit AI review for Lustre llite_lib.c:1235 — (style) new console messages are expected to end with `: rc = %d\n` rather than `[%d]`, and the continuation `err);` is indented two tabs pa
Gerrit AI review for Lustre PS4 · 2026-07-28 10:46
(style) new console messages are expected to end with `: rc = %d\n` rather than `[%d]`, and the continuation `err);` is indented two tabs past the string instead of one.
owner Shaun Tancheff · uploader Shaun Tancheff · PS4 uploaded 127d ago · NEW · open in Gerrit ↗
commit message
LU-20108 sec: updates for in-kernel crypto

Linux commit v5.18-rc2-4-g218d921b581ea
  fscrypt: add new helper functions for test_dummy_encryption

Splits fscrypt_set_test_dummy_encryption() into
  fscrypt_parse_test_dummy_encryption() and
  fscrypt_add_test_dummy_key()

Linux commit v6.2-rc2-19-g51e4e3153ebc3
  fscrypt: support decrypting data from large folios
A page of data in a large folio can be decrypted.

Linux commit v6.2-rc6-5-g097d7c1fcb8d4
  fscrypt: clean up fscrypt_add_test_dummy_key()
Drops fscrypt_add_test_dummy_key()

Linux commit v6.6-rc3-1-g5970fbad1036d
  fscrypt: make it clearer that key_prefix is deprecated
Linux commit v6.6-rc3-2-g40e13e18168fd
  fscrypt: make the bounce page pool opt-in instead of opt-out
Linux commit v6.6-rc3-4-g7a0263dc904f3
  fscrypt: replace get_ino_and_lblk_bits with just has_32bit_inodes
Linux commit v6.6-rc3-5-g5b11888471806
  fscrypt: support crypto data unit size less than filesystem block
           size
Some struct fscrypt_operations members added and changed.

Linux commit v6.14-rc1-18-g59b59a943177e
 fscrypt: Change fscrypt_encrypt_pagecache_blocks() to take a folio

fscrypt_encrypt_pagecache_blocks can accept a folio and return a
bounce page of encrypted data.

Fixes: 048e2cc7d2 ("LU-15420 sec: handle simple fscrypt changes for 5.15 kernels")
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I684edf03f728667a364041adabe18fdb493340fd
63543 master J !B ✓T ✗2R 0/2
LU-19824 ldlm: don't allow sysfs reads before ldlm is setup
reviewing Timothy Day · blocked on the owner: enforced tests failed
8 unresolved S +19 −3
99d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-4 crashed RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-dom. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 RHEL 9.7 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
7 optional test failure(s) — informational
build #127752 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Alex Zhuravlev
patchsets: PS1 01-23 PS2 07-18
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 00:34 Gerrit AI review for Lustre COMMIT_MSG:12 — (style) The body only motivates the per-cpu counter case, but two of the three gated readers, lock_reclaim_threshold_mb and lock_limit_mb, r
Gerrit AI review for Lustre PS2 · 2026-07-28 00:34
(style) The body only motivates the per-cpu counter case, but two of the three gated readers, lock_reclaim_threshold_mb and lock_limit_mb, read plain __u64 globals that cannot crash. Could the message explain why those are gated as well?

It would also help later git log searches to name the symbols: the new field is init_state, and the attribute that actually crashes is lock_granted_count.
reply PS2 2026-07-28 00:34 Gerrit AI review for Lustre COMMIT_MSG:13 — (defect) This fixes a crash, so it should carry a Fixes: tag. The window was opened when lock_granted_count first exposed ldlm_granted_total
Gerrit AI review for Lustre PS2 · 2026-07-28 00:34
(defect) This fixes a crash, so it should carry a Fixes: tag. The window was opened when lock_granted_count first exposed ldlm_granted_total from ldlm_proc_setup(), which ran long before ldlm_reclaim_setup() did the percpu_counter_init().

    Fixes: 33b55f223a42 ("LU-6529 ldlm: improve proc interface of lock reclaim")
reply PS2 2026-07-28 00:34 Gerrit AI review for Lustre ldlm_internal.h:228 — (style) Not a bug, but every other field in struct ldlm_state carries the struct's prefix: ldlm_cb_service, ldlm_cancel_service, ldlm_client
Gerrit AI review for Lustre PS2 · 2026-07-28 00:34
(style) Not a bug, but every other field in struct ldlm_state carries the struct's prefix: ldlm_cb_service, ldlm_cancel_service, ldlm_client, ldlm_bl_pool. If the patch is refreshed, ldlm_init_state would match. The enum tag and the member name can coexist, since C keeps tag and member namespaces separate.
reply PS1 2026-01-24 07:58 Andreas Dilger ldlm_lockd.c:3226 — (minor) this should be annotated as `unlikely()` since it would only ever be true at setup and cleanup time.
Andreas Dilger PS1 · 2026-01-24 07:58
(minor) this should be annotated as `unlikely()` since it would only ever be true at setup and cleanup time.

(minor) it probably would generate less code to conditionally print the value instead of having two separate scnprintf() calls:
```
        return scnprintf(buf, PAGE_SIZE, "%llu\n", 
                         likely(ldlm_state->init_state == LDLM_INIT_ALL) ?
                         ldlm_reclaim_threshold_mb : 0);
```
reply PS2 2026-07-28 00:34 Gerrit AI review for Lustre ldlm_lockd.c:3233 — (minor) ldlm_reclaim_threshold_mb and ldlm_lock_limit_mb are plain __u64 globals, so reading them early cannot crash; gating them only chang
Gerrit AI review for Lustre PS2 · 2026-07-28 00:34
(minor) ldlm_reclaim_threshold_mb and ldlm_lock_limit_mb are plain __u64 globals, so reading them early cannot crash; gating them only changes what userspace sees. 0 is also a meaningful value for these two tunables, since both store handlers treat 0 as "disabled", so during the ldlm_cleanup() window a monitoring tool now reads "reclaim disabled" rather than the configured value.

lock_reclaim_threshold_count and lock_limit_count expose the same two settings in lock units and are left ungated, so the two views disagree in that window. Would it be simpler to leave these two alone and gate only lock_granted_count? Same comment applies to lock_limit_mb_show().
reply PS2 2026-07-28 00:34 Gerrit AI review for Lustre ldlm_lockd.c:3550 — (defect) Some evidence for the barrier question already raised on this line. This plain store can become visible before percpu_counter_init(
Gerrit AI review for Lustre PS2 · 2026-07-28 00:34
(defect) Some evidence for the barrier question already raised on this line. This plain store can become visible before percpu_counter_init()'s store to ldlm_granted_total.counters on arm64/ppc64; a reader then passes the check in lock_granted_count_show() and calls per_cpu_ptr(NULL, cpu), which is the same access the patch is trying to prevent. percpu_counter_init()'s internal spin_unlock() does not help, since it is a release barrier for the stores before it, not for this later one.

A barrier here alone would not be enough either. The read side has only a control dependency from the flag load to the counter load, and control dependencies do not order loads, so the reader can still load fbc->counters ahead of init_state. smp_store_release() here paired with smp_load_acquire() at the three read sites is what would order both ends.
reply PS2 2026-07-20 11:48 Alex Zhuravlev ldlm_lockd.c:3550 — probably some kind of mb() is needed just before this line?
Alex Zhuravlev PS2 · 2026-07-20 11:48
probably some kind of mb() is needed just before this line?
reply PS2 2026-07-28 00:34 Gerrit AI review for Lustre ldlm_lockd.c:3570 — (defect) Clearing the flag here does not close the teardown race, because ldlm_reclaim_cleanup() is the very next statement:
Gerrit AI review for Lustre PS2 · 2026-07-28 00:34
(defect) Clearing the flag here does not close the teardown race, because ldlm_reclaim_cleanup() is the very next statement:

    ldlm_state->init_state = LDLM_INIT_NONE;
    ldlm_reclaim_cleanup();   /* percpu_counter_destroy() */

A reader that already passed the check in lock_granted_count_show() is still inside percpu_counter_sum_positive() when free_percpu(fbc->counters) runs, so __percpu_counter_sum() walks freed per-cpu memory, and after fbc->counters is set to NULL it walks per_cpu_ptr(NULL, cpu).

What actually drains in-flight show() calls is sysfs_remove_group(), and that does not run until roughly 35 lines further down. Moving sysfs_remove_group() above ldlm_reclaim_cleanup() would close it properly and make the flag unnecessary on this side.

ldlm_cleanup() runs from ldlm_put_ref() on the last target umount, so a monitoring agent polling /sys/fs/lustre/ldlm/ reaches this.
owner Timothy Day · uploader Timothy Day · PS2 uploaded 109d ago · NEW · open in Gerrit ↗
commit message
LU-19824 ldlm: don't allow sysfs reads before ldlm is setup

If you attempt to access per_cpu counters before they are
initialized, you may crash. To avoid this, short-circuit
sysfs read in LDLM until LDLM is properly setup. This is
tracked by a new field in ldlm_state.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I96dad1d36f9d6dd6fac425009ea91ab71d75fecf
50831 master J ✓B ✓T ✗2R 0/2
LU-6142 llite: simplify flock initialization
reviewing Neil Brown · blocked on the owner: enforced tests failed
S +18 −12
99d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-5 RHEL 8.7/x86_64 ran 6 tests. 1 tests failed: sanityn. session
review-dne-zfs-part-1 RHEL 8.7/x86_64 ran 6 tests. 1 tests failed: sanity. session
3 optional test failure(s) — informational
build #95390 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets: PS1 05-02 PS2 06-07 PS3 06-07
owner Neil Brown · uploader Neil Brown · PS3 uploaded 1246d ago · NEW · open in Gerrit ↗
commit message
LU-6142 llite: simplify flock initialization

flock locks always have fl_start and fl_end initialised to 0 and
OFFSET_MAX, so the fields can be unconditionally copied into
flock.l_flock.

Since Linux 3.16 Commit 130d1f956ab3 ("locks: ensure that fl_owner is
always initialized properly in flock and lease codepaths"), the
fl_owner field is correctly initialised so it too can be copied
directly.  On older kernels we still need to provide an explicit
value.

So improve the sanity checking and return EINVAL rather than using
LASSERT().  lustre shouldn't crash if some other calls us wrongly.

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I4d49b328430266c0a9aeba7d62ccefc7258cd8a4
67125 master J ✗1B ✓T ✗1R -1/2−
LU-20461 acl: Add a prefix for posix_acl_to_xattr
reviewing Yang Sheng · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
1 unique failure 4 unresolved S +11 −10
99d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanityn@ldiskfs+DNE:test_71aseen in 3 other reviews
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
9 optional test failure(s) — informational
build #127317 SUCCESS · tests all Maloo sessions
reviews: Timothy Day -1 2026-07-08 13:28
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body never names the new symbol. Spelling out ll_posix_acl_to_xattr() would make this findable with `git log --grep` later. It w
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
(style) The body never names the new symbol. Spelling out ll_posix_acl_to_xattr() would make this findable with `git log --grep` later. It would also help to record what actually went wrong - LU-20461 is a stack corruption in ll_set_acl(), not a compiler diagnostic - so the severity is visible from the message alone.
reply PS1 2026-07-08 14:33 Timothy Day patchset comment — What kernel version were you using? Would you expect that kernel to have posix_acl_to_xattr() natively? Or would it need compat_posix_acl_to
Timothy Day PS1 · 2026-07-08 13:28
We are intentionally using the upstream Linux API directly rather than defining an ll_ wrapper. As part of Lustre upstreaming efforts, we want the modules in lnet/ and lustre/ to use the latest kernel APIs natively rather than relying on inline #ifdef or ll_ thin wrappers.

What compiler error or warning do you see?
Yang Sheng PS1 · 2026-07-08 14:27
You can look the LU-20461 for detail. Anyway, It is not so hard to be fixed, but really tricky to trace. So i think we need verify carefully if doing in this way.
Timothy Day PS1 · 2026-07-08 14:33
What kernel version were you using? Would you expect that kernel to have posix_acl_to_xattr() natively? Or would it need compat_posix_acl_to_xattr()?
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre posix_acl_xattr.h:37 — (defect) In this branch the rename is a no-op - ll_posix_acl_to_xattr() expands to exactly the call the three callers already made. So it is
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
(defect) In this branch the rename is a no-op - ll_posix_acl_to_xattr() expands to exactly the call the three callers already made. So it isn't clear this can explain or fix the LU-20461 crash.

The disassembly in the ticket shows ll_set_acl() calling the kernel's old 4-arg posix_acl_to_xattr() with new-style arguments: %rdx is &value_size on the stack, %ecx is 0xc40 (GFP_NOFS), there is no kmalloc() ahead of it, and `value` ends up holding the int return (CR2 = 0x1c at the following memcpy). That is the unexpanded source-level call, i.e. HAVE_POSIX_ACL_TO_XATTR_ALLOC_BUFFER was defined against a kernel that has the old prototype.

The other explanation doesn't hold: all three call sites reach this header unconditionally (llite/acl.c -> llite_internal.h -> lustre_compat.h, and osd_internal.h -> lustre_compat.h), so with the old macro in place the compat wrapper could not have been silently skipped.

If that's right, the defect is in the detection, not the name. The conftest leans on -Werror turning -Wint-conversion into an error; a hard type error is harder to lose:

    void *(*p)(struct user_namespace *, const struct posix_acl *,
               size_t *, gfp_t) = posix_acl_to_xattr;

Could you confirm whether config.h in that build had HAVE_POSIX_ACL_TO_XATTR_ALLOC_BUFFER set (or whether the modules were built against different kernel headers than the running kernel)?
reply PS1 2026-07-27 19:08 Gerrit AI review for Lustre posix_acl_xattr.h:39 — (minor) With the posix_acl_to_xattr redefinition gone, the escape hatch that came with it is dead: config/lustre-core.m4:3707 still AC_DEFIN
Gerrit AI review for Lustre PS1 · 2026-07-27 19:08
(minor) With the posix_acl_to_xattr redefinition gone, the escape hatch that came with it is dead: config/lustre-core.m4:3707 still AC_DEFINEs old_posix_acl_to_xattr(), and nothing in the tree has ever called it. Worth dropping in the same patch.

It could not have worked anyway - config.h is included first, so old_posix_acl_to_xattr(a, b, c, d) expanded to posix_acl_to_xattr(a, b, c, d), which this header's macro then rewrote back into compat_posix_acl_to_xattr() with the arguments in the wrong roles.
owner Yang Sheng · uploader Yang Sheng · PS1 uploaded 119d ago · NEW · open in Gerrit ↗
commit message
LU-20461 acl: Add a prefix for posix_acl_to_xattr

The compiler might be confused by defining a macro
with the same name. So add a prefix to avoid such an issue.

Fixes: f85a7cf4c8d3 ("LU-20133 build: Compatibility updates for kernel v7.0")
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Change-Id: I535f589bde085e0c8e1f6081f24d7c2cd261db5c
63307 master J ✓B ✓T ✗1R -1/2−
LU-19769 lnet: simplify lnet_net_show_dump
reviewing Oleg Drokin · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 116d 3 unresolved L +354 −229
116d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-sec. session
5 optional test failure(s) — informational
build #120267 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn
threads: 1 need your reply · 0 waiting on others · 2 own notes · 0 bot
reply PS1 2026-01-13 04:05 Oleg Drokin COMMIT_MSG:9 — Auggie is Augment's cli tool you can run in a terminal, much better than mucking around with vs code and such: https://docs.augmentcode.com/
Andreas Dilger PS1 · 2026-01-13 03:05
(minor) "Augment"?
Oleg Drokin PS1 · 2026-01-13 04:05
Auggie is Augment's cli tool you can run in a terminal, much better than mucking around with vs code and such: https://docs.augmentcode.com/cli/overview
note PS1 2026-04-14 16:45 James Simmons api-ni.c:5873 — Not properly aligned.
James Simmons PS1 · 2026-04-14 16:45
Not properly aligned.
note PS1 2026-04-14 16:45 James Simmons api-ni.c:5983 — Better would be
James Simmons PS1 · 2026-04-14 16:45
Better would be

if (!lnd || !lnd->lnd_nl_get || !lnd->lnd_keys)
    return rc;
    
It removed one level of indentation and the checkpatch issue below.
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 297d ago · NEW · open in Gerrit ↗
commit message
LU-19769 lnet: simplify lnet_net_show_dump

This is 100% agent-refactoring using auggie and whatever
default model they use underneath.

1. Reduced Function Size: The main function went from ~363 lines to
~142 lines (61% reduction)

2. Created 7 Helper Functions:
• lnet_ni_format_cpts() - Formats CPT list as a string
• lnet_ni_show_basic_info() - Outputs NID, status, and interface
  info
• lnet_ni_show_stats() - Outputs basic send/recv/drop statistics
• lnet_ni_show_msg_stats_type() - Outputs detailed message
  statistics
• lnet_ni_show_health_stats() - Outputs health monitoring
  statistics
• lnet_ni_show_tunables() - Outputs network and LND tunables
• lnet_ni_show_extended() - Orchestrates all extended information
  output

3. Improved Code Quality:
• Reduced nesting depth from 6 to 4 levels
• Better separation of concerns
• Each function has a single, clear responsibility
• Comprehensive documentation for all helper functions
• Improved error handling and propagation

4. Reusability Analysis:
• Several helper functions (CPT formatting, basic info, stats,
  health stats) can be reused in other parts of the codebase
• The message stats function is specific to network interface dump
  but follows a pattern that could be applied to similar functions
  like lnet_peer_ni_show_dump()

Change-Id: I0843206c84da5f53c48550ef1ec047a3c50b39f9
Signed-off-by: Oleg Drokin <green@whamcloud.com>
46326 master J !B ✓T ✗1R -1/2−
LU-15485 lprocfs: preallocate all lprocfs_stats
reviewing Chris Horn · blocked on the owner: enforced tests failed
stalled 134d XS +4 −2
134d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-3 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #85992 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2022-01-31 20:54
no vote yet: Ann Koehler
patchsets: PS1 01-26 PS2 01-26 PS3 01-31
owner Chris Horn · uploader Chris Horn · PS3 uploaded 1737d ago · NEW · open in Gerrit ↗
commit message
LU-15485 lprocfs: preallocate all lprocfs_stats

Allocating the stats as-needed leads to fragmentation.

lprocfs_alloc_stats() preallocates only for IRQ_SAFE stats.  It does
this so that it doesn't have to try to allocate memory in an interrupt
handler. When the stats are allocated as-needed, this can lead to
fragmentation. Change lprocfs_alloc_stats() to preallocate all stats.

HPE-bug-id: LUS-642
Signed-off-by: Ann Koehler <amk@cray.com>
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: Iaed09f6763fe53e273672829bece417c9370a15e
61473 master J !B ✗T –R -1/2−
LU-19410 utils: lnetdump
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; build failure
needs rebase stalled 134d 1 unresolved XL +2630 −7
134d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; build failure
awaiting review (CI not green yet)
janitor run: build failed — no tests ran — janitor results
build #117156 FAILURE
no vote yet: Yonatan Nachum, Chris Horn, Artem Blagodarenko
patchsets: PS1 09-22 PS2 09-23 PS3 10-03
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-03-27 19:15 Andreas Dilger COMMIT_MSG:12 — NB: the `ignore` keyword is even stronger, in that Jenkins won't even try to build the patch if it is only posted for review/reference
Andreas Dilger PS3 · 2026-03-27 19:15
NB: the `ignore` keyword is even stronger, in that Jenkins won't even try to build the patch if it is only posted for review/reference
owner Timothy Day · uploader Timothy Day · PS3 uploaded 396d ago · NEW · open in Gerrit ↗
commit message
LU-19410 utils: lnetdump

Implement a tool to capture LNet packet dumps
using eBPF.

Test-Parameters: forbuildonly
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I9b19e59ec758de19d95a09fb291066414cf6bf8e
56788 master J !B ✓T –R -1/2−
LU-16897 lnet: sparse read optimization (SRO)
reviewing Cyril Bordage · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 135d 12 unresolved XL +1107 −79
135d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #123774 SUCCESS
no vote yet: Frank Sehr, Manish Regmi, Qian Yingjin, Sohei Koyama, Serguei Smirnov, Chris Horn, Andreas Dilger
patchsets:
+63 earlier PS1 10-25 PS2 11-18 PS3 12-11 PS4 12-12 PS5 12-13 PS6 12-16 PS7 12-20 PS8 12-20 PS9 12-27 PS10 01-24 PS11 01-24 PS12 01-24 PS13 01-28 PS14 01-28 PS15 01-28 PS16 01-28 PS17 01-29 PS18 02-04 PS19 02-05 PS20 02-05 PS21 02-12 PS22 02-21 PS23 02-21 PS24 02-26 PS25 02-26 PS26 02-26 PS27 03-05 PS28 03-06 PS29 03-15 PS30 03-16 PS31 03-16 PS32 03-18 PS33 03-19 PS34 03-19 PS35 03-20 PS36 03-20 PS37 05-12 PS38 05-28 PS39 05-28 PS40 05-30 PS41 05-31 PS42 06-20 PS43 06-20 PS44 06-25 PS45 06-26 PS46 06-26 PS47 06-27 PS48 07-02 PS49 07-02 PS50 07-02 Andreas Dilger PS51 07-17 PS52 08-01 PS53 09-19 PS54 09-19 PS55 09-19 PS56 10-01 PS57 10-03 PS58 10-30 PS59 10-31 PS60 10-31 PS61 11-12 PS62 12-12 PS63 12-18
PS64 01-14 PS65 01-18 PS66 02-26 PS67 03-03 PS68 04-11
threads: 12 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS57 2025-10-08 19:38 Andreas Dilger COMMIT_MSG:33 — I don't understand why test_910 and test_911 need to be explicitly skipped here? These are new tests being added by this patch, so they sho
Andreas Dilger PS57 · 2025-10-08 19:38
I don't understand why test_910 and test_911 need to be explicitly skipped here?  These are new tests being added by this patch, so they should be skipped automatically by the subtest itself based on the server version or testing for the sparse_read option.

Also, it looks like test_60g interop is only an issue with servers <2.13.

If that is not done properly in this patch, then it will just cause all other interop testing to fail for these subtests in the future.
reply PS57 2025-10-08 19:38 Andreas Dilger COMMIT_MSG:34 — The 2.16 client will not even have test_910 and test_911 in the sanity.sh script, so listing those subtests here is unnecessary.
Andreas Dilger PS57 · 2025-10-08 19:38
The 2.16 client will not even have test_910 and test_911 in the sanity.sh script, so listing those subtests here is unnecessary.
reply PS52 2025-09-10 08:03 Cyril Bordage patchset comment — I think I found the problems. I have a patch in mind. I am testing my theory and I need be sure it is the best way.
Andreas Dilger PS52 · 2025-09-09 22:23
Cyril, can you please post a rebased version of the patch and I will try to get someone else to do a code review to see if they can spot the bugs you are trying to find.
Cyril Bordage PS52 · 2025-09-10 08:03
I think I found the problems. I have a patch in mind. I am testing my theory and I need be sure it is the best way.
reply PS63 2026-03-03 08:45 Cyril Bordage lib-lnet.h:157 — In lnet_md_sparse_save_bitmap. Did I miss something?
Serguei Smirnov PS63 · 2026-01-08 20:34
Is sd_md_start initialized somewhere?
Cyril Bordage PS63 · 2026-03-03 08:45
In lnet_md_sparse_save_bitmap. Did I miss something?
reply PS63 2026-03-03 08:45 Cyril Bordage lib-msg.c:987 — hole_length is used on clients and only when we have holes, so sd_hole_length will be always greater than 0. But if we have a "small" page,
Serguei Smirnov PS63 · 2026-01-08 20:34
It seems like sd_hole_length could be 0, are we guaranteed not to come here then? Because otherwise it'll overflow.
Cyril Bordage PS63 · 2026-03-03 08:45
hole_length is used on clients and only when we have holes, so sd_hole_length will be always greater than 0. But if we have a "small" page, sd_hole_length could be smaller that sizeof(sd_layout). So, I changed the type.
reply PS57 2025-11-12 15:10 Cyril Bordage lustre_net.h:1468 — I have added what SRO is
Andreas Dilger PS57 · 2025-10-17 03:33
(style) this comment doesn't explain what "sro_threshold" is, except to say that it is the threshold for SRO...  Better to just name the variable well:
```
        unsigned int bd_sparse_read_threshold_pages;
```
and don't have a comment at all.  It is a _bit_ long for my liking, but has the benefit that the usage can be found along with all the other places where "sparse_read_threshold" is used.
Cyril Bordage PS57 · 2025-11-12 15:10
I have added what SRO is
reply PS57 2025-10-17 03:33 Andreas Dilger lustre_net.h:1470 — (style) spaces around that `*`
Andreas Dilger PS57 · 2025-10-17 03:33
(style) spaces around that `*`
reply PS57 2025-11-03 17:13 Andreas Dilger lustre_idl.h:683 — (style) renaming this to `pb_sparse_read_threshold_4kb` would make it more clear to users what it is for.
Andreas Dilger PS57 · 2025-10-17 03:33
(style) `pb_sparse_read_threshold_4kb`
Andreas Dilger PS57 · 2025-11-03 17:13
(style) renaming this to `pb_sparse_read_threshold_4kb` would make it more clear to users what it is for.
reply PS47 2025-09-10 08:03 Cyril Bordage niobuf.c:395 — From what I saw, yes it is enough because we have the import in this case.
Serguei Smirnov PS47 · 2025-06-27 22:36
If it is necessary to check that imp is not NULL here, is it enough to only check the rq_type and rq_reqmsg above?
Cyril Bordage PS47 · 2025-09-10 08:03
From what I saw, yes it is enough because we have the import in this case.
reply PS63 2026-03-03 08:45 Cyril Bordage niobuf.c:238 — It is int, so it is not a problem if it less than zeroes. It will represent the shift we need to apply to the quantity of received data.
Serguei Smirnov PS63 · 2026-01-08 20:34
Is this safe? Is bd_nob_transferred always at least the layout struct size?
Cyril Bordage PS63 · 2026-03-03 08:45
It is int, so it is not a problem if it less than zeroes. It will represent the shift we need to apply to the quantity of received data.
reply PS43 2025-09-19 13:48 Cyril Bordage pers.c:25 — Compared to vanilla function, we don't have the memset part. The reason is that here we have "have a shrunk bitmap of size nbits-shift" inst
Andreas Dilger PS43 · 2025-06-20 23:07
What *is* fed in to the high bits in this case?  Is it doing sign-extending?  Does that make sense for unsigned arguments?
Cyril Bordage PS43 · 2025-09-10 08:03
I am not sure whether I got your question right about sign extension…
Anyway, this function shrunk the bitmap, that is why we don't need to add 0s. Does that answer your question?
Andreas Dilger PS43 · 2025-09-10 15:07
Then I don't understand why this duplicate function is needed?  Shift right will always zero-fill the top bits, so it doesn't seem different from the "trunc" version here?
Cyril Bordage PS43 · 2025-09-19 13:48
Compared to vanilla function, we don't have the memset part. The reason is that here we have "have a shrunk bitmap of size nbits-shift" instead of size nbits.
reply PS57 2025-10-17 03:33 Andreas Dilger sanity.sh:35689 — (style) adding tests at the end is prone to repeated conflicts as other patches are landing. Better to use some intermediate test number to
Andreas Dilger PS57 · 2025-10-17 03:33
(style) adding tests at the end is prone to repeated conflicts as other patches are landing.  Better to use some intermediate test number to avoid this (e.g. test_119d).
owner Cyril Bordage · uploader Cyril Bordage · PS68 uploaded 207d ago · NEW · open in Gerrit ↗
commit message
LU-16897 lnet: sparse read optimization (SRO)

When a sparse file is read, pages representing holes are built with
zeroes and sent. Sparse read optimization (SRO) will prevent sending
zeroes through network.

When an OSS wants to send an LNet message containing pages coming from
holes, md is remapped to skip holes and an LNET_MSG_PUT_SPARSE is sent
to share the new mapping with hole locations. When the client receives
this message, it does the remapping and ACK. Then, the server will
send the remapped data as usual.

SRO works at ptlrpc and LNet level, leaving lnd code untouched. It
requires the patch on the client and the OSSs. If the OSS or the
client does not have the patch, SRO will simply be disabled.

SRO is configured per client (one value for each OST):
$ lctl set_param osc.*.sparse_read_threshold_kb=<uint>
If the value is 0, SRO is simply disabled. If the value is greater, it
defines the threshold for the minimum number of sparse pages needed
(on the client) in an LNet message to have the optimization enabled.
The value in kiB is rounded up to correspond to a multiple of
PAGE_SIZE. Indeed, since SRO increases the number of messages shared
between the OSS and the client, it won't be always productive. Thus,
the threshold can be tuned depending on the environment.

Test-Parameters: testlist=sanity serverversion=2.16 env=SANITY_EXCEPT="65i 65j 65k 65l 65n 65o 65p 65q 65r 66 69 73 77a 77b 77c 77d 77g 77k 77l 78 81a 81b 99 101b 101c 101d 101g 101h 101i 101j 101m 102b 102c 102d 102f 102i 102j 102k 102m 102n 102s 102t 103b 103e 103f 104a 104d 105a 105b 105c"
Test-Parameters: testlist=sanity clientversion=2.16 env=SANITY_EXCEPT="0d 119p 230b"
Test-Parameters: testlist=sanity,sanity-flr env=SPARSE_READ_THRESHOLD=1
Test-Parameters: testlist=sanity env=ONLY="910 911" clientarch=aarch64 clientdistro=el9.5
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I81ed101ee2a774866c03a5d44526e00ab96b210e
63658 master J !B ✓T ✗2R +0/2−
LU-16246 osd-ldiskfs: ensure r/w ordering of do_index_ops
reviewing liuqinfei · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 141d 1 unresolved S +25 −0
141d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 5 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: recovery-small. session
build #121067 SUCCESS · tests all Maloo sessions
reviews: Artem Blagodarenko +1 2026-06-15 11:42
no vote yet: Andrew Perepechko, Alex Zhuravlev
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-06-15 11:42 Artem Blagodarenko lod_object.c:56 — Liu Qinfei, thank for the explantion
Artem Blagodarenko PS1 · 2026-02-12 23:17
I don't see shared variables here. Please, describe there and how obj->do_index_ops is shared
liuqinfei PS1 · 2026-02-14 03:54
obj->do_index_ops is a cross-thread shared variable in Lustre’s dt_try_as_dir lazy initialization mechanism: one thread assigns values to the OSD-layer and LOD-layer obj->do_index_ops in sequence (OSD first, then LOD) via lod_index_try/osd_index_try, while other threads check the LOD-layer obj->do_index_ops—if it is non-null, they assume the OSD-layer is also initialized (and skip assignment), which relies on the implicit assumption that the assignment order is visible across threads. This works on x86 (strong memory ordering) where the assignment sequence is preserved in cross-thread visibility, but on ARM (weak memory ordering), the shared obj->do_index_ops variable’s visibility is reordered: other threads may see the LOD-layer obj->do_index_ops as non-null (from another thread’s assignment) yet the OSD-layer as null, breaking the assumption and causing errors, as the shared variable’s cross-thread visibility does not maintain the intended assignment order.
Insert a read barrier between the two read operations to guarantee the ordering.
Artem Blagodarenko PS1 · 2026-06-15 11:42
Liu Qinfei, thank for the explantion
owner liuqinfei · uploader liuqinfei · PS1 uploaded 278d ago · NEW · open in Gerrit ↗
commit message
LU-16246 osd-ldiskfs: ensure r/w ordering of do_index_ops

Add smp_rmb() in lod_lookup() to guarantee ordered reads of
obj->do_index_ops and next->do_index_ops variables on ARM platform.
Add smp_wmb() in osd_index_try() to ensure ordered assignment of
dt->do_index_ops variable on ARM platform.
Both barriers prevent potential out-of-order execution issues
specific to ARM architecture.

Signed-off-by: liuqinfei <lucas.liuqinfei@huawei.com>
Signed-off-by: luo rixin <luorixin@huawei.com>
Change-Id: If27c4770c3c84560e51de955849364846661252d
65417 master J !B ✓T ✗2R 0/2
LU-20163 ptlrpc: debugfs entries in ptlrpc
reviewing Alex Zhuravlev · blocked on the owner: enforced tests failed
stalled 158d XS +1 −1
158d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
build #125699 SUCCESS · tests all Maloo sessions
no vote yet: Mikhail Pershin
patchsets: PS1 04-20 PS2 05-13 PS3 05-28
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS3 uploaded 160d ago · NEW · open in Gerrit ↗
commit message
LU-20163 ptlrpc: debugfs entries in ptlrpc

we should register debugfs entries after all the internal structures
(like NRS) have been initialized and unregister before any internal
structures are released. should fix problem like this:

 watchdog: BUG: soft lockup - CPU#7 stuck for 22s! [lctl:47830]
 irq event stamp: 0
 hardirqs last  enabled at (0): [<0000000000000000>] 0x0
 softirqs last disabled at (0): [<0000000000000000>] 0x0
 CPU: 7 PID: 47830 Comm: lctl Tainted: G        W  O        5.14.0 #17
 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
 Call Trace:
  <IRQ>
  __pv_queued_spin_lock_slowpath+0x242/0x2b0
  do_raw_spin_lock+0x8f/0xa0
  ptlrpc_lprocfs_nrs_policies_seq_show+0x13c/0x900 [ptlrpc]
  seq_read_iter+0x100/0x460
  seq_read+0x131/0x160
  full_proxy_read+0x4b/0x70
  vfs_read+0x8e/0x3b0
  ksys_read+0x50/0xc0
  do_syscall_64+0x38/0xe0

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I2039c43b294aa1698fe4e2b6d343f2310f6ea5aa
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
63447 master J ✓B ✓T ✗2R -2/2−
LU-18318 lnet: Add lnet routing between IPv6 tcp and o2ib
reviewing Xinxia Qu · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 159d 7 unresolved L +288 −70
159d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
3 optional test failure(s) — informational
build #120679 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-05-05 07:27
no vote yet: Cyril Bordage, Serguei Smirnov, Chris Horn
patchsets: PS1 01-18 PS2 01-18 PS3 01-18 PS4 01-18
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-05-07 16:40 Andreas Dilger patchset comment — I'm not advocating to do a massive restructuring of the code immediately, but I think it would be preferable to move in the right direction
Andreas Dilger PS4 · 2026-05-05 07:27
One major problem with this patch that the "large NID" is not *only* an IPv6 NID of 16-byte IOv6+4-byte network number=20 bytes, but potentially any other size NID as well, so this would shift the offset of all of these messages and break the protocol if some other size NID was used. It doesn't make sense to need a new protocol revision every time that a new NID size is used. 

The size of the NID is encoded into struct lnet_nid itself, including IPv4 NIDs (which have "size 0", with implicit +8 bytes to the size), so it would be better to rework this patch to allow a variable sized "struct lnet_nid" and then use the NID size to calculate the offset of the rest of the message buffers.
Xinxia Qu PS4 · 2026-05-07 04:24
Hi, Are you proposing that we use `struct lnet_nid` directly in `struct kib_immediate_msg` for `ibim_hdr` (with length determined by NID size), rather than separate `struct lnet_hdr_nid4`/`lnet_hdr_nid16` types?
Implementing this variable‑size NID scheme for full IPv6@o2ib support would require refactoring `struct kib_msg` and related code — fields would need dynamic offset‑based access, and we’d need to address potential alignment and memory‑allocation issues. Thanks!
Andreas Dilger PS4 · 2026-05-07 16:40
I'm not advocating to do a massive restructuring of the code immediately, but I think it would be preferable to move in the right direction to handling variable-sized NIDs.

There is already code in this patch to partly handle this, but for only two fixed NID sizes.  These could be replaced with checking nid_size from the NID to determine the offsets.
reply PS4 2026-05-07 16:40 Andreas Dilger o2iblnd-idl.h:137 — We still need version interoperability, but unlike the incrementing version numbers we can explicitly choose to remove support for old featu
Andreas Dilger PS4 · 2026-05-05 07:27
Rather than reserving separate version numbers up to 15, it would be better to just consider these three bits (0x0010, 0x0001, 0x0002) used for the old "version" but change the version into a compatibility but mask instead of sequential version numbers (which are not very flexible).  Then use 0x0004 (or 0x0020) to mean "LARGE_NID" and check for this bit independent of the version number.

It would be nice to rename  "VERSION_2=0x0002" to be related to the reason this new protocol version was added. Something like "MAP_ON_DEMAND", but I don't think there is a separate meaning for the 0x0010 bit. It should just be a sanity check and always be set, and verified in the places that are currently checking for _V1 or _V2.  That avoids issues with the new "LARGE_NID" bit being set, since this bit can just be checked independently. 

Since V1 is extremely old (V2 was added in 2009) it doesn't really make sense to keep compatibility with that version anymore, and it could just be dropped.
Xinxia Qu PS4 · 2026-05-07 04:24
Oh, I see. You mean keeping the previous 3 bits as the old version field and using the remaining 13 bits as new feature extension bits, with "LARGE_NID" needing only 1 of them.

A related thought: an incrementing version number scheme is typically tied to connection and version negotiation—for example, a message with a higher version number may remain forward compatible to some extent with messages of lower versions. If that kind of version negotiation isn’t needed, we can use feature bits instead. Thanks!
Andreas Dilger PS4 · 2026-05-07 16:40
We still need version interoperability, but unlike the incrementing version numbers we can explicitly choose to remove support for old features selectively as needed, or never.

This has worked extremely well for Lustre protocol interoperability negotiation, since we can have short-lived "features" that are only determining if the peer has a particularly impactful bug fix, but can be quickly deprecated, while some features remain permanently negotiable if they do not need to be enabled all the time (hypothetically like compression or encryption at the LNet level, not that we would implement that).
reply PS4 2026-05-07 04:24 Xinxia Qu o2iblnd-idl.h:138 — Sure, we should use a feature‑oriented naming. Thanks!
Andreas Dilger PS4 · 2026-05-05 07:27
"MSG3" is not a good name for this. Better to name it after what it means, "LARGE_NID" or similar.
Xinxia Qu PS4 · 2026-05-07 04:24
Sure, we should use a feature‑oriented naming. Thanks!
reply PS4 2026-05-07 04:24 Xinxia Qu o2iblnd.c:217 — Hi, are you suggesting to replace the `ibm_version` field in `struct kib_msg` with a new `ibm_features` field, implemented as a bit‑field, t
Andreas Dilger PS4 · 2026-05-05 07:27
The mag_version field should be renamed to msg_features and users updated appropriately.
Xinxia Qu PS4 · 2026-05-07 04:24
Hi, are you suggesting to replace the `ibm_version` field in `struct kib_msg` with a new `ibm_features` field, implemented as a bit‑field, to free up bits for extensions? Thanks!
reply PS4 2026-05-07 04:24 Xinxia Qu o2iblnd.c:223 — Oh, I see, Thanks!
Andreas Dilger PS4 · 2026-05-05 07:27
IMHO, these only V_1/V_2 checks should be replaced with "version & IBLND_MSG_VERSION_CHECK", where it is checking the 0x10 bit and nothing else, then let the rest of the bits define features.
Xinxia Qu PS4 · 2026-05-07 04:24
Oh, I see, Thanks!
reply PS4 2026-05-07 04:24 Xinxia Qu o2iblnd.c:270 — Sounds great! Thanks!
Andreas Dilger PS4 · 2026-05-05 07:27
All of this "is_msg3" passing is unnecessary, IMHO. It should be possible to pass the msg_features field to these functions and check if the LARGE_NID bit is set, then CALCULATE the message SIZE based on the size of the NID.
Xinxia Qu PS4 · 2026-05-07 04:24
Sounds great! Thanks!
reply PS4 2026-05-07 04:24 Xinxia Qu o2iblnd.c:3870 — Yes, it seems this is mainly checking some constants. `IBLND_MSG_VERSION` is like an alias for `IBLND_MSG_VERSION_2`, serving as a simpler d
Andreas Dilger PS4 · 2026-05-05 07:27
This should not really be an LASSERT. It is OK to check that the actual version numbers stay the same, but not that the current version is always V2.
Xinxia Qu PS4 · 2026-05-07 04:24
Yes, it seems this is mainly checking some constants. `IBLND_MSG_VERSION` is like an alias for `IBLND_MSG_VERSION_2`, serving as a simpler default for V2. If a new VERSION is introduced later, `IBLND_MSG_VERSION` might either be unnecessary or should point to the new default VERSION.
owner Xinxia Qu · uploader Xinxia Qu · PS4 uploaded 289d ago · NEW · open in Gerrit ↗
commit message
LU-18318 lnet: Add lnet routing between IPv6 tcp and o2ib

Typical cross-network forwarding scenario:
A <-o2ib(IPv4)-> R <-tcp(IPv6)-> B

Add kib_msg immediate/get/putreq msg3 to support nid16(IPv6).
An ipv4@o2ib NIs will use msg3 for ipv6@tcp6 traffic, and keep
previous version msg for ipv4@tcp to preserve performance and
compatibility.

Signed-off-by: Xinxia Qu <xqu@ddn.com>
Change-Id: Ife74e8baffaa18a9ea4fdf648ab00979bd89122f
61992 b2_15 J ✗28B ✓T ✗2R +2/1
LU-16011 lnet: remove LBUG() in srpc_client_rpc_expired()
reviewing Etienne AUJAMES · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
28 unique failures stalled 165d XS +0 −1
165d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity1@zfs+DNE:test_24aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity1@zfs+DNE:test_24bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity2@zfs:test_41bseen in 2 other reviews
conf-sanity2@zfs:test_41cseen in 2 other reviews
conf-sanity2@zfs:test_42seen in 2 other reviews
conf-sanity2@zfs:test_43aseen in 2 other reviews
conf-sanity2@zfs:test_43bseen in 2 other reviews
conf-sanity2@zfs:test_44seen in 2 other reviews
conf-sanity2@zfs+DNE:test_50hseen in 1 other review
conf-sanity2@zfs+DNE:test_50iNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_1nseen in 3 other reviews
ost-pools@zfs:test_11seen in 3 other reviews
ost-pools@zfs:test_15seen in 3 other reviews
ost-pools@zfs:test_16seen in 3 other reviews
ost-pools@zfs:test_19seen in 3 other reviews
ost-pools@zfs:test_20seen in 3 other reviews
ost-pools@zfs:test_21seen in 3 other reviews
ost-pools@zfs:test_22NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_23aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_23bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_24NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_27NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs:test_28NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
ost-pools@zfs+DNE:test_15seen in 3 other reviews
ost-pools@zfs+DNE:test_16seen in 3 other reviews
ost-pools@zfs+DNE:test_20seen in 3 other reviews
ost-pools@zfs+DNE:test_21seen in 3 other reviews
sanityn@zfs:test_39dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 7 tests. 2 tests failed: lnet-selftest, sanity. session
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity. session
build #117881 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov +1 2025-10-23 09:14 · Timothy Day +1 2025-10-23 14:27
no vote yet: Chris Horn
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 377d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16011 lnet: remove LBUG() in srpc_client_rpc_expired()

We shouldn't crash just because an RPC expired.

Lustre-change: https://review.whamcloud.com/55785
Lustre-commit: edc9b7f5204a7a3979a8e69c075f55fdaab6ad4f

Fixes: e5026380 ("LU-16011 lnet: use preallocate bulk for server")
Test-Parameters: trivial
Test-Parameters: testgroup=review-ldiskfs-arm testlist=sanity-lnet,lnet-selftest
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ia4e9bf7f688b2920c91444f57f7a7da2b1f89a67
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
21299 master J –B ✓T ✗0R +2/2
LU-8395 lnet: Limit total number of lnet-selftest threads
reviewing Doug Oucharek · blocked on the owner: enforced tests failed
stalled 196d S +11 −1
196d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
reviews: Dmitry Eremin +1 2017-07-19 15:57 · Andreas Dilger +1 2016-10-07 17:15
no vote yet: Patrick Farrell, Amir Shehata
owner Doug Oucharek · uploader Doug Oucharek · PS1 uploaded 3765d ago · NEW · open in Gerrit ↗
commit message
LU-8395 lnet: Limit total number of lnet-selftest threads

On densely cored systems, lnet-selftest can create too
many scheduler threads.  This patch limits the total
thread count to 64 regardless of CPU parititioning.

Signed-off-by: Doug Oucharek <doug.s.oucharek@intel.com>
Change-Id: I4012a321fcfc607bf17ffaad50e17268a1acc56f
45963 master J !B ✓T ✗1R +0/2−
LU-15069 llite: Clean up bit shift for assert
reviewing Patrick Farrell · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 199d S +6 −7
199d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-4 CentOS 8.3/x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
build #85372 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2022-01-05 06:03
patchsets: PS1 01-04 PS2 01-04
owner Patrick Farrell · uploader Patrick Farrell · PS2 uploaded 1764d ago · NEW · open in Gerrit ↗
commit message
LU-15069 llite: Clean up bit shift for assert

There is a bizarre comment which says we're not converting
pages to bytes yet to save cost in checking an assert, but
we do that conversion immediately after the assert *and*
it requires doing a similar shift in the assert.

This is quite strange - clean it up.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: Id2bb4e6910276537d807828a9a33439dea054c3b
21296 master J –B ✓T ✓R -1/2−
LU-8330 wiretest: Add IOCTL checking to wiretest
reviewing Nathaniel Clark · awaiting review (CI not green yet)
stalled 211d XL +765 −322
211d
1 optional test failure(s) — informational
build #4272 SUCCESS
reviews: Andreas Dilger -1 2026-04-06 23:25
no vote yet: Arshad Hussain
owner Nathaniel Clark · uploader Nathaniel Clark · PS17 uploaded 2778d ago · NEW · open in Gerrit ↗
commit message
LU-8330 wiretest: Add IOCTL checking to wiretest

Add IOCTL checking (to ensure they don't change) to wiretest, but
don't add to ptlrpc ASSERTS.  Doing this, showed that the
OBD_IOC_GET_MNTOPT doesn't work in user-space as mntopt_t isn't
defined in user-space and throws an error if the appropriate header is
included.  This type is an enum, so should be the same as a long.

Change-Id: I6edf4c8bdd501a62cc7214ad14d3bb92822ffb99
Signed-off-by: Nathaniel Clark <nclark@whamcloud.com>
59272 master J !B ✓T ✗2R -1/2−
LU-19025 ldlm: ldlm_completion_ast() may never timeout
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 250d 4 unresolved M +50 −27
250d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: recovery-small. session
review-ldiskfs-ubuntu failed 2× RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
1 optional test failure(s) — informational
build #113812 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Shaun Tancheff, Vandana Rungta, Neil Brown, Oleg Drokin
patchsets:
+1 earlier PS1 05-16
PS2 05-28 PS3 05-28 Janitor Bot PS4 05-28 PS5 05-28 PS6 05-28
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2025-05-21 03:52 Timothy Day ldlm_request.c:308 — Yeah, just to match. There was actually a l_wait_event_abortable_timeout() at one point. Probably should revive that?
Oleg Drokin PS1 · 2025-05-21 02:34
hm, I thought this was a partial revert of the prior patch, but it's not.
So why are you opencoding l_wait_event_abortable here? just to better match the timeout case?
Timothy Day PS1 · 2025-05-21 03:52
Yeah, just to match. There was actually a l_wait_event_abortable_timeout() at one point. Probably should revive that?
reply PS1 2025-05-21 02:34 Oleg Drokin ldlm_request.c:314 — or a timeout occurs?
Oleg Drokin PS1 · 2025-05-21 02:34
or a timeout occurs?
reply PS1 2025-05-21 02:05 Timothy Day ldlm_request.c:323 — Double checking this:
Timothy Day PS1 · 2025-05-21 02:05
Double checking this:

 * Returns:
 * 0 if the @condition evaluated to %false after the @timeout elapsed,
 * 1 if the @condition evaluated to %true after the @timeout elapsed,
 * the remaining jiffies (at least 1) if the @condition evaluated
 * to %true before the @timeout elapsed, or -%ERESTARTSYS if it was
 * interrupted by a signal.

So almost right, just need to handle the return codes better. We should probably double check the other wait_events.
reply PS1 2025-05-21 18:55 Timothy Day ldlm_request.c:323 — The deadlock was observed on a production host - 6 or so threads stuck in ldlm_completion_ast() for > 1200 seconds. MDS was not responsive.
Oleg Drokin PS1 · 2025-05-21 02:34
looking at it some more, I think you misunderstood what's going on here.

The ldlm_expired_completion_wait() is going to either cancel the lock by invalidating the import on a client or for a server do the whole "waiting indefinitely" because if we are waiting on another server thread, we cannot really just stop waiting on another server lock.

In here you make it always obey the timeout which breaks the infinite wait on server locks logic I think?
Timothy Day PS1 · 2025-05-21 03:52
If you look at the original code before https://review.whamcloud.com/c/fs/lustre-release/+/35985, we were doing a single l_wait_event() which would timeout. There was no infinite wait at all unless NO_TIMEOUT was set. You can see the original macros in https://review.whamcloud.com/c/fs/lustre-release/+/37729. In fact, we never did a second wait at all. If the lock wasn't granted or cancelled after timeout, we gave up.
Oleg Drokin PS1 · 2025-05-21 05:08
Well, it's kinda convoluted I guess.

ldlm_expired_completion_wait() prints "lock timed out (enqueued at %lld, %llds ago); not entering recovery in server code, just going back to sleep" though it of course does nto ever go back to sleep?

Neil replaced a single populate lwi (that's based on timeout / no timeout) with two and the second one is sorta infinite where previously it was not.

But the end result is probably the same - the thread that waits for the lock sleeps indefinitely anyway until the lock is granted if the conflicting lock is a server lock and if it's not (and esp. on the client) the ldlm_expired_completion_wait() makes sure the lock is cancelled sooner rather than later anyway?
Timothy Day PS1 · 2025-05-21 17:19
The new code can deadlock, but the old code didn't seem to have this issue. https://review.whamcloud.com/c/fs/lustre-release/+/55550 is trying to fix a similar problem, although I think we ought to restore the old behavior - instead of the approach in that patch.
Oleg Drokin PS1 · 2025-05-21 18:28
what's the deadlock scenario you have in mind?

The code is supposed to deadlock even in the old original approach for a lock that's helf by another server thread

Looking at 55550 I guess this seeems somewhat related, but the information provided is very little.
Timothy Day PS1 · 2025-05-21 18:55
The deadlock was observed on a production host - 6 or so threads stuck in ldlm_completion_ast() for > 1200 seconds. MDS was not responsive. None of the locks set LDLM_FL_NO_TIMEOUT, so I looked at the code and noticed that a indefinite sleep was introduced in a previous patch.

> The code is supposed to deadlock even in the old original approach for a lock that's helf by another server thread

From my reading, absent LDLM_FL_NO_TIMEOUT, the original code wouldn't be stuck in ldlm_completion_ast() indefinitely?
owner Timothy Day · uploader Timothy Day · PS6 uploaded 524d ago · NEW · open in Gerrit ↗
commit message
LU-19025 ldlm: ldlm_completion_ast() may never timeout

ldlm_completion_ast() may never timeout, even without NO_TIMEOUT.
One of the waits in this function has no timeout. So we might:

wait_event_idle_timeout()
-> ldlm_expired_completion_wait()
  -> l_wait_event_abortable()

This will not continue until the lock is granted/canceled, or until
an allowlisted signal is sent. On the server, this could hang forever.
A previous version of Lustre had timeouts on both waits.

Fix this by using wait_event_interruptible_timeout() instead.
Also, enhance the signal blocking code to mirror the style in the
upstream kernel (Ceph, in this case).

Fixes: 366959b8cba5 ("LU-10467 ldlm: convert waiting in ldlm_completion_ast()")
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I58e4849efeb1e1bde24e77a5c66f0b0a654fd76e
58175 master J ✗4B ✓T ✗4R -2/2−
LU-18741 lnet: Alternative Names Policy interface names
reviewing Frank Sehr · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
needs rebase 4 unique failures stalled 337d L +428 −36
337d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_150NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@ldiskfs+DNE:test_510NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_150NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_510NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #116457 SUCCESS · tests all Maloo sessions
patchsets:
+2 earlier PS1 02-23 PS2 02-24
PS3 09-11 PS4 09-11 PS5 09-11 PS6 09-11 PS7 09-11
owner Frank Sehr · uploader Frank Sehr · PS7 uploaded 418d ago · NEW · open in Gerrit ↗
commit message
LU-18741 lnet: Alternative Names Policy interface names

lnetctl doesn't recognize alternative names. Added netlink interface
to be able to read alternative name. The priority is interface name,
link name the possible alternative names. Alternative names are
available since Rocky 8.5.

Test-Parameters: trivial
Signed-off-by: Frank Sehr <fsehr@whamcloud.com>
Change-Id: I701aacd57f0b3d2cccf46830665ab25df6d73229
60498 master J ✓B ✓T ✗12R -1/2−
LU-19223 shrinkers: Add nr_scanned to all shrinkers
reviewing Patrick Farrell · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 371d M +36 −15
371d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 8.10 / x86_64 ran 13 tests. 1 tests failed: sanity-sec. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 13 tests. 1 tests failed: sanity-sec. session
review-dne-part-5 RHEL 8.10 / x86_64 ran 7 tests. 2 tests failed: recovery-small, lustre-rsync-test. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: recovery-small. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 8 tests. 1 tests failed: sanity. session
4 optional test failure(s) — informational
build #115489 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Neil Brown, Timothy Day
patchsets: PS1 08-02 PS2 08-03
owner Patrick Farrell · uploader Patrick Farrell · PS2 uploaded 457d ago · NEW · open in Gerrit ↗
commit message
LU-19223 shrinkers: Add nr_scanned to all shrinkers

If the Lustre shrinkers can't free any pages but don't set
nr_scanned, they may be called forever by the kernel - see
do_shrink_slab() in the kernel.

Add nr_scanned support to the remaining Lustre shrinkers:
- LDLM pools server and client shrinkers
- Lu site shrinker
- Page pools shrinkers

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: Ica35a0dabe1dce78fd3cd29174ef142a965be824
61989 b2_15 J ✗4B ✓T ✗1R +1/2
LU-16157 lnet: lst read-outside of allocation
reviewing Etienne AUJAMES · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
4 unique failures stalled 375d S +32 −10
375d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity4@zfs:test_122bseen in 3 other reviews
recovery-small@zfs+DNE:test_10dseen in 2 other reviews
recovery-small@zfs+DNE:test_18aseen in 1 other review
recovery-small@zfs+DNE:test_18bseen in 2 other reviews
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity. session
build #117883 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov +1 2025-10-23 09:11
no vote yet: Andreas Dilger
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 377d ago · NEW · open in Gerrit ↗
commit message
LU-16157 lnet: lst read-outside of allocation

lnet_selftest want a some parameters from userspace,
but it never sends. It caused a read of outside of allocation
like
BUG: KASAN: slab-out-of-bounds in lstcon_testrpc_prep+0x19e7/0x1bb0
Read of size 4 at addr ffff8888bbaa866c by task lt-lst/6371

lustre-change: https://review.whamcloud.com/48547
lustre-commit: 222fbed52e02122c752fcb7fca153e9d8fe487bf

Test-Parameters: trivial testlist=lnet-selftest
Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Change-Id: I2a98e60c4be65c49fa9da4b418e50f1c7309b69d
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
8977 master J –B ✓T ✗10R 0/2
LU-3496 oss: rename OST_* RPC opcodes to OSS_*
reviewing Andreas Dilger · blocked on the owner: enforced tests failed
stalled 399d XL +861 −923
399d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-1 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
review-dne-part-3 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
review-zfs crashed RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. %% THIS TEST SESSION CRASHED %% session
1 optional test failure(s) — informational
build #4041 SUCCESS
owner Andreas Dilger · uploader Andreas Dilger · PS9 uploaded 2788d ago · NEW · open in Gerrit ↗
commit message
LU-3496 oss: rename OST_* RPC opcodes to OSS_*

For consistency with MDS_* RPC opcodes, and the thought that the RPC
opcodes relate to the remote OSS node more than the target, rename
the OST_* constants to their OSS_* equivalents, along with RQF_OST_*
and OBD_FAIL_OST_* definitions.

Fix up other RPC opcode declarations to avoid typedefs.

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I83e98e2778276de91856c5b944396f27773ebbe5
55468 master J ✗5B ✓T ✗2R 0/2
LU-17022 obdclass: cleanup obd_device refcounting
reviewing Timothy Day · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
5 unique failures stalled 413d M +94 −141
413d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity3@ldiskfs+DNE:test_122aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_123Fseen in 1 other review
conf-sanity3@ldiskfs+DNE:test_123GNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity3@ldiskfs+DNE:test_135seen in 1 other review
conf-sanity3@ldiskfs+DNE:test_153aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-3 RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-5 RHEL 9.3/x86_64 ran 6 tests. 1 tests failed: sanityn. session
1 optional test failure(s) — informational
build #105595 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Neil Brown, Alex Zhuravlev
patchsets: PS1 06-19 PS2 06-19 PS3 06-20 PS4 06-20
owner Timothy Day · uploader Timothy Day · PS4 uploaded 867d ago · NEW · open in Gerrit ↗
commit message
LU-17022 obdclass: cleanup obd_device refcounting

With the removal of lu_ref, class_incref()/decref() are now only
thin wrappers around kref. So remove them.

Replace all of the various obd_device freeing functions with
a single obd_device_free() function. Cleanup some of the
kref usage so that obd_device_free() can be call when
the last reference is dropped. This is more in line with
other usages of kref.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I165798ef973bad7c37d3af814af0b635a08a1082
53313 master J !B ✓T ✗5R -1/2−
LU-1158 general: support nanosecond timestamps
reviewing Feng Lei · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 449d 12 unresolved XL +1749 −1110
449d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
awaiting review (CI not green yet)
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
custom-1002 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
custom-1004 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: pjdfstest. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
build #115287 SUCCESS · tests all Maloo sessions
no vote yet: Sohei Koyama, Andreas Dilger, Lai Siyao, Neil Brown
patchsets:
+56 earlier PS1 12-04 PS2 12-04 PS3 12-04 PS4 12-04 PS5 12-05 PS6 12-06 PS7 12-11 PS8 12-11 PS9 12-11 PS10 12-11 PS11 12-11 PS12 07-23 PS13 07-23 PS14 07-23 PS15 07-24 PS16 07-25 PS17 07-25 PS18 07-26 PS19 07-26 PS20 07-26 PS21 07-26 PS22 07-31 PS23 07-31 PS24 07-31 PS25 07-31 PS26 07-31 PS27 07-31 PS28 07-31 PS29 07-31 PS30 07-31 PS31 07-31 PS32 08-01 PS33 08-05 PS34 08-05 PS35 08-05 PS36 08-05 PS37 08-05 PS38 08-06 PS39 08-06 PS40 08-06 PS41 08-08 PS42 08-10 Andreas Dilger PS43 08-10 PS44 08-10 PS45 08-26 PS46 11-16 PS47 11-16 PS48 11-17 PS49 01-17 Andreas Dilger PS50 02-10 PS51 02-10 PS52 02-10 PS53 02-11 PS54 02-13 PS55 02-14 Sohei Koyama PS56 02-14 Sohei Koyama
PS57 02-15 PS58 07-25 Sohei Koyama PS59 07-25 Sohei Koyama PS60 07-25 Sohei Koyama PS61 07-25 Sohei Koyama
threads: 11 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS42 2024-08-10 01:07 Feng Lei COMMIT_MSG:36 — I was didn't find that this has been added. :)
Feng Lei PS42 · 2024-08-10 01:07
I was didn't find that this has been added. :)
reply PS44 2024-08-23 00:07 Feng Lei cl_object.h:152 — xxx_time is epoch seconds. xxx_time_ns is epoch nanoseconds. xxx_time_nsec is nanosecond part of timeval.
Lai Siyao PS44 · 2024-08-16 09:26
IMHO all the time fields don't need to be renamed, so that the patch size can be much smaller.
Feng Lei PS44 · 2024-08-23 00:07
xxx_time is epoch seconds. xxx_time_ns is epoch nanoseconds. xxx_time_nsec is nanosecond part of timeval. 
On the other hand, renaming var names causes compiling error and helps to find any potential mis-using.
reply PS21 2024-07-31 02:24 Feng Lei lustre_idl.h:1527 — Done
Andreas Dilger PS21 · 2024-07-30 16:39
(minor) It is a bit confusing that all of these fields have been named "ns" when they may hold seconds when communicating with older peers.  It would be useful to add a comment like:

        __s64 lvb_mtime_ns; /* seconds before 2.16.0 */

for all of these fields.
Feng Lei PS21 · 2024-07-31 02:24
Done
reply PS55 2025-02-14 08:38 Feng Lei lustre_idl.h:1513 — This struct should not be changed.
Feng Lei PS55 · 2025-02-14 08:38
This struct should not be changed.
reply PS55 2025-02-14 08:38 Feng Lei lustre_idl.h:1524 — Add padding fields to keep the size of struct unchanged.
Feng Lei PS55 · 2025-02-14 08:38
Add padding fields to keep the size of struct unchanged.
reply PS55 2025-02-14 08:38 Feng Lei lustre_idl.h:1935 — You should place some padding fields after this field to keep the size of mdt_body unchanged.
Feng Lei PS55 · 2025-02-14 08:38
You should place some padding fields after this field to keep the size of mdt_body unchanged.
reply PS56 2025-02-15 10:48 Feng Lei lustre_idl.h:1527 — Remove this field to keep the size of ost_lvb?
Feng Lei PS56 · 2025-02-15 10:48
Remove this field to keep the size of ost_lvb?
reply PS44 2024-08-16 09:26 Lai Siyao dir.c:1957 — I don't see place this is called.
Lai Siyao PS44 · 2024-08-16 09:26
I don't see place this is called.
reply PS55 2025-02-14 08:38 Feng Lei dir.c:2371 — Should align with tab.
Feng Lei PS55 · 2025-02-14 08:38
Should align with tab.
reply PS55 2025-02-14 08:38 Feng Lei dir.c:2397 — This line is too long.
Feng Lei PS55 · 2025-02-14 08:38
This line is too long.
reply PS24 2024-07-31 04:16 Feng Lei sanity.sh:183 — This makes sense because: 1) bash recgonizes "000000008" as invalid oct number; 2) touch xxx.000000008 is not touch xxx.8.
Feng Lei PS24 · 2024-07-31 04:16
This makes sense because: 1) bash recgonizes "000000008" as invalid oct number; 2) touch xxx.000000008 is not touch xxx.8.
It is safer to keep nanosecond a 9-digits string and compare them with [[ ]].
owner Feng Lei · uploader Sohei Koyama · PS61 uploaded 467d ago · NEW · open in Gerrit ↗
commit message
LU-1158 general: support nanosecond timestamps

Change most s64 timestamps in memory from epoch seconds to
epoch nanoseconds. Change the variable names from
xxx_(a/m/c)time to xxx_(a/m/c)time_ns to indicate this change.

struct ost_lvb, mdt_body and obdo are special. They support
nanosecond timestamps by adding additional xxx_a/m/ctime_nsec
fields. These time_nsec fields are only the nanosecond part of
timestamps. Original xxx_a/m/ctime is kept as the epoch seconds.
They are treated differently because they don't have regular
pack/unpack functions, or sometime they are dereferenced from
message body directly without packing/unpacking.

Also rename obdo.o_ioepoch to o_padding_3 because this field was
unused since commit v2_7_50_0-38-gd5d5b349f23e and was never used
in production.

To cooperate with client/server without this change,
OBD_CONNECT_NANOSEC_TIME connection flag is enabled.
Only if both client and server support the flag, the connection
has this flag.

When a time_ns field is packed to connection without
OBD_CONNECT_NANOSEC_TIME flag, time_ns should be converted
from nanosecond to second so that peer client/server can
recieve epoch seconds as before.

Opposite coverting happens during unpacking timestamps from
connection without OBD_CONNECT_NANOSEC_TIME flag.

Now the a/m/c timestamps of lustre file/dir should have
non-zero nsec fields.

Change sanity.sh/test_39 series test cases to check nsec
field in timestamps.

Remove utimensat_08 from pjdfstest ALWAYS_EXCEPT list for new
clients and servers.

Old client without nanosecond timestamps supporting should be
able to work with this version of server reporting only seconds.

Old server without nanosecond timestamps supporting should be
able to work with this version of client reporting only seconds.

Signed-off-by: Lei Feng <flei@whamcloud.com>
Test-Parameters: testlist=sanity serverbuildno=4607 serverjob=lustre-master
Test-Parameters: testlist=sanity clientbuildno=4607 clientjob=lustre-master
Test-Parameters: testlist=pjdfstest
Test-Parameters: testlist=pjdfstest serverbuildno=4607 serverjob=lustre-master
Test-Parameters: testlist=pjdfstest clientbuildno=4607 clientjob=lustre-master
Change-Id: I231ef0315a47f4587f917e197c36e3e321c8a58a
56118 master J !B ✓T ✗15R 0/2
LU-18162 lu: convert to lu_device to use kref
reviewing Timothy Day · blocked on the owner: enforced tests failed
stalled 456d 1 unresolved M +151 −76
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 10 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 crashed RHEL 9.3/x86_64 ran 9 tests. 2 tests failed: replay-dual, mds-survey. %% THIS TEST SESSION CRASHED %% session
review-dne-part-3 crashed RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed RHEL 9.3/x86_64 ran 11 tests. 1 tests failed: mmp. %% THIS TEST SESSION CRASHED %% session
review-dne-part-5 RHEL 9.3/x86_64 ran 6 tests. 1 tests failed: sanityn. session
review-dne-part-6 crashed RHEL 9.3/x86_64 ran 6 tests. 1 tests failed: replay-single. %% THIS TEST SESSION CRASHED %% session
review-dne-part-8 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
review-dne-zfs-part-2 crashed RHEL 8.9/x86_64 ran 9 tests. 1 tests failed: mds-survey. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-3 crashed RHEL 8.9/x86_64 ran 3 tests. 1 tests failed: conf-sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-5 crashed RHEL 8.9/x86_64 ran 6 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 crashed RHEL 8.9/x86_64 ran 6 tests. 1 tests failed: replay-single. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.9/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 9.3/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.9/x86_64, RHEL 9.3/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed RHEL 8.9/x86_64, SLES 15.5/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-zfs crashed RHEL 8.9/x86_64 ran 10 tests. 1 tests failed: replay-single. %% THIS TEST SESSION CRASHED %% session
17 optional test failure(s) — informational
build #107041 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Andreas Dilger
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2024-09-04 16:33 Timothy Day lu_object.h:412 — I went with kref to get the automatic free when the last reference is dropped. This patch is mostly intended to support the OSD cleanups in
Arshad Hussain PS1 · 2024-08-26 04:05
(defect?)I tried passing env after obtaining it with lu_env_find() and it did not work for me. I am not sure if this is correct?
Timothy Day PS1 · 2024-08-27 00:52
I think it's context dependent - although I'm not super familiar with how these lu_env are working. Based on the message below, it crashing in one scenario at least.
Arshad Hussain PS1 · 2024-08-27 05:43
Instead of kref - we can still convert to refcount_t (only for places that require env context). It is still a win-win, and a direct conversion. Thoughts?
Timothy Day PS1 · 2024-09-04 16:33
I went with kref to get the automatic free when the last reference is dropped. This patch is mostly intended to support the OSD cleanups in https://review.whamcloud.com/c/fs/lustre-release/+/55705/4. I'll have to dive into why this is crashing. Hopefully nothing major.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 804d ago · NEW · open in Gerrit ↗
commit message
LU-18162 lu: convert to lu_device to use kref

Convert lu_device to use kref for ld_ref. Several subsystems
don't take proper references on the lu_device - so add
lu_device_get() and lu_device_put() calls where needed.

Add wrappers for ldto_device_{alloc,init,fini,free}(). This
enables us to grab references between init/fini and make
assertions about callers.

Move lu_device_get() and lu_device_put() to the lu_device.h
header. These functions are stubs and ought to be inline
rather than complete EXPORT'ed functions.

Implement ldto_device_next() to enable the different layers of
Lustre to navigate the lu_site without the benefit of calling
ldto_device_free() directly.

Update lu_site_print() to accept an `int` rather than an
`atomic_t`. This is a requirement for the kref conversion.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I0a29af160c1a5c681d8a3887f2574246afe76248
57676 master J !B ✓T ✗2R +0/2−
LU-18615 mdt: setup protocal for super hide
reviewing Zanhua Huang · blocked on the owner: enforced tests failed
stalled 456d 1 unresolved S +20 −2
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.4 / x86_64 ran 4 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-sec. session
1 optional test failure(s) — informational
build #110251 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2025-01-16 17:09 · Timothy Day +1 2025-01-15 17:04
no vote yet: Patrick Farrell
patchsets: PS1 01-07 PS2 01-07 PS3 01-13 PS4 01-13
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2025-01-16 17:09 Andreas Dilger layout.c:735 — I don't think we should have a dedicated RPC just to set this one bit.
Timothy Day PS4 · 2025-01-15 17:04
Perhaps we could use an already existing request format? Curious if anyone else has thoughts.
Andreas Dilger PS4 · 2025-01-16 17:09
I don't think we should have a dedicated RPC just to set this one bit.
owner Zanhua Huang · uploader Zanhua Huang · PS4 uploaded 659d ago · NEW · open in Gerrit ↗
commit message
LU-18615 mdt: setup protocal for super hide

This is the first patch to implement "lfs hide [path]". With this cmd,
[path] will be hidden from directory listing "ls -a". Similar to
.lustre.

We mark a file/directory as hidden by setting a one-bit flag in the
lma_compact of trusted.lma. Here in this patch, we reset this bit as
	LMAC_HIDDEN = 0x00000080
in enum lma_compat.

The "lfs hide [path]" cmd will be run from a lustre client. Therefore,
this patch also reserves the new ptlrpc req_format to be sent between
clients and MDSs.
1. We reserve "MDS_HIDE = 65" in "enum mds_cmd"
2. We "#define OBD_FAIL_MDS_HIDE_NET 0x2410"

We also provide the new req_format "RQF_MDS_HIDE" in this patch.

Signed-off-by: Zanhua Huang <zanhua@amazon.com>
Change-Id: I797ae49d74c95fac7aa765ed83cda0c4603a7aa3
10039 master J –B ✓T ✓R +0/2−
LU-4801 ldlm: Do not call ldlm_reprocess_all from enqueue
reviewing Oleg Drokin · awaiting review (CI not green yet)
stalled 456d XS +1 −5
456d
reviews: Vitaly Fertman -1 2014-09-25 21:32 · Alex Zhuravlev +1 2014-07-30 16:36
no vote yet: Dmitry Eremin, Liang Zhen
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 4488d ago · NEW · open in Gerrit ↗
commit message
LU-4801 ldlm: Do not call ldlm_reprocess_all from enqueue

ldlm_handle_enqueue0 seems to be always calling ldlm_reprocess_all
for the lock resource hich iseems to be excessive and a waste of
resources.
Move the call to the cancel case for cancel on block locks.

Change-Id: Ie380497866b83a81cb099777bb4c94936c6bd91a
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
14987 master J –B ✓T ✗0R -2/2−
LU-6657 mgs: eviction notifier
reviewing Hiroya Nozaki · blocked on the owner: enforced tests failed
stalled 456d L +459 −39
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
reviews: Christopher J. Morrone -1 2015-05-29 20:21 · Andreas Dilger -1 2015-06-03 22:10
no vote yet: Mikhail Pershin
owner Hiroya Nozaki · uploader Hiroya Nozaki · PS3 uploaded 4177d ago · NEW · open in Gerrit ↗
commit message
LU-6657 mgs: eviction notifier

In suppress ping environment the evicted client is not able to recover
from evicted state until an access goes to the server which has
evicted the client.

This patch provides a new feature for client to recover from evicted
state in ping-less environment though it works well with pinger.

Signed-off-by: Hiroya Nozaki <nozaki.hiroya@jp.fujitsu.com>
Change-Id: I6475ce8dd1506d6e8f9e2405fab6a94ee25f9df1
18199 master J –B ✓T ✗0R +0/2−
LU-7722 build: add --no-initramfs to weak-modules
reviewing Li Xi · blocked on the owner: enforced tests failed
stalled 456d M +58 −13
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
reviews: Christopher J. Morrone -1 2016-01-28 19:32 · Dmitry Eremin +1 2016-01-28 16:00
owner Li Xi · uploader Li Xi · PS1 uploaded 3932d ago · NEW · open in Gerrit ↗
commit message
LU-7722 build: add --no-initramfs to weak-modules

In most of cases, Lustre modules are not necessary for initramfs.
Thus, regenerating initramfs in scripts of RPMs is a waste of
time.

This patch adds --no-initramfs argument to weak-modules command
in the scripts of RPMs by default. --enable-initramfs could be
used to change this behavior when configuring.

Signed-off-by: Li Xi <lixi@ddn.com>
Change-Id: I3e490f9cacfd74619d774e44729cdbfc8c60db1c
20218 master J –B ✓T ✗0R 0/2
LU-8145 libcfs: add dump debug trace on error support
reviewing Gu Zheng · blocked on the owner: enforced tests failed
stalled 456d M +52 −0
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
no vote yet: Oleg Drokin
owner Gu Zheng · uploader Gu Zheng · PS1 uploaded 3824d ago · NEW · open in Gerrit ↗
commit message
LU-8145 libcfs: add dump debug trace on error support

As we can not monitoring the debug trace all the time, especially when
the error will happen. So here we add dump trace on error support,
that will trigger the trace dump thread if it is not started.

Change-Id: I57b5a7d94512e21d98cc25b4c0392690d01bbd37
Signed-off-by: Gu Zheng <gzheng@ddn.com>
26205 master J –B ✗T –R -1/2−
LU-8192 nodemap: modify lctl to allow non-contiguous nm ranges
reviewing Kit Westneat · blocked on the owner: build failure
stalled 456d L +313 −263
456d
blocked on the owner: build failure
awaiting review (CI not green yet)
reviews: Andreas Dilger -1 2017-04-03 16:56
no vote yet: Sebastien Buisson
owner Kit Westneat · uploader Kit Westneat · PS1 uploaded 3508d ago · NEW · open in Gerrit ↗
commit message
LU-8192 nodemap: modify lctl to allow non-contiguous nm ranges

This patch modifies the nodemap_add_range and nodemap_del_range lctl
commands to accept the full LNET range syntax.

Signed-off-by: Kit Westneat <kit.westneat@gmail.com>
Change-Id: Iec7e9115f745be3ba623f640e183076bfd072ccc
28714 master J –B ✓T ✗0R +1/2
LU-9914 lnet: gracefully handle peers with too many NIs
reviewing Olaf Weber · blocked on the owner: enforced tests failed
stalled 456d M +93 −13
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
reviews: Amir Shehata +1 2018-01-08 20:06
no vote yet: Sonia Sharma
owner Olaf Weber · uploader Olaf Weber · PS2 uploaded 3221d ago · NEW · open in Gerrit ↗
commit message
LU-9914 lnet: gracefully handle peers with too many NIs

The lnet_interfaces_max tunable governs the upper bound on the
number of interfaces (NIs) this node thinks any node in the
cluster can have (including itself). It is tunable to provide a
"soft" upper bound as opposed to hard-coded one.

When a peer with too many NIs shows up, peer discovery ends up
stuck in a loop because the Push/Ping data it sends fails the
validation check against the number of interfaces. This is
undesirable behavior even though it implies that the node is
misconfigured.

To prevent peer discovery from getting stuck like this, make the
following changes:
 - lnet_ping_info_validate() does not check against
   lnet_interfaces_max
 - its callers keep track of the number of NIs the peer claims
   to have in lp_data_nnis.
 - but lnet_peer_push_event() will drop a Push with too many NIs,
   and force a Ping
 - while lnet_discovery_event_reply() will also drop a Ping Reply
   with too many NIs, and set lp_ping_error to ensure discovery stops
 - and lnet_peer_is_uptodate() will signal that rediscovery (prompted
   by LNET_PEER_REDISCOVER) should skip a peer that has too many NIs.
 - lnet_discovery_event_reply() will emit an error message suggesting
   that lnet_interfaces_max should be increased. It remains up to the
   administrator to judge whether the suggested value is realistic or
   sign of a problem.
 - lnet_ping_target_setup() now has to explicitly check whether the
   node itself has more NIs than lnet_interfaces_max. This is still
   something you are not supposed to do.

Signed-off-by: Olaf Weber <olaf.weber@hpe.com>
Change-Id: I4e9ec42d320893ef8a85e84e75ccf54518f446fd
31390 master J –B ✓T ✗4R 0/2
LU-10704 open: fetch LOOKUP lock for normal open
reviewing Li Dongyang · blocked on the owner: enforced tests failed
stalled 456d L +163 −169
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-part-3 CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-quota. session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
2 optional test failure(s) — informational
build #3193 SUCCESS
no vote yet: Lai Siyao, Andreas Dilger, Mikhail Pershin
owner Li Dongyang · uploader Li Dongyang · PS5 uploaded 2833d ago · NEW · open in Gerrit ↗
commit message
LU-10704 open: fetch LOOKUP lock for normal open

This is done on both sides:
1. MDT take LOOKUP on normal open.
2. client revalidate dentry for atomic_open().

Signed-off-by: Lai Siyao <lai.siyao@intel.com>
Change-Id: Ia91697d15303cf6ce8723816ed5a0473a559e36a
33086 master J –B ✓T ✗0R 0/2
LU-11286 osp: Add an entry to show statfs state from OST
reviewing Jinshan Xiong · blocked on the owner: enforced tests failed
stalled 456d S +43 −1
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
build #521 SUCCESS
no vote yet: Patrick Farrell, Andreas Dilger
owner Jinshan Xiong · uploader Jinshan Xiong · PS3 uploaded 2980d ago · NEW · open in Gerrit ↗
commit message
LU-11286 osp: Add an entry to show statfs state from OST

Add a sys entry to dump the statfs results from OST; also
fix a problem in 'lfs df' for statfs.

Signed-off-by: Jinshan Xiong <jinshan.xiong@uber.com>
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I4795e94be3876aea21ede8fa1a9f8dc1ffab13f3
33548 master J –B ✓T ✓R 0/2
LU-8365 ldiskfs: fix wrong logic of stream allocation
reviewing Yang Sheng · awaiting review (CI not green yet)
stalled 456d S +30 −13
456d
2 optional test failure(s) — informational
build #2145 SUCCESS
no vote yet: Alexander Zarochentsev, Andreas Dilger, Alex Zhuravlev, Li Dongyang
owner Yang Sheng · uploader Andreas Dilger · PS3 uploaded 2895d ago · NEW · open in Gerrit ↗
commit message
LU-8365 ldiskfs: fix wrong logic of stream allocation

The stream allocation has been changed in upstream.
But looks like some logic different than original.
The stream allocation should just be used in group
preallocation and we should update goal every time
to keep stream allocation closer last position.

Signed-off-by: Yang Sheng <ys@whamcloud.com>
Change-Id: Id3e4b52cf05badd7027f841b6a1f887bed6fe8a7
33862 master J ✗1B ✓T ✓R +2/2
LU-11775 osc: check imp_invalid without imp_lock
reviewing Li Dongyang · blocked on the owner: Verified -1 by Oleg Drokin
Verified -1 stalled 456d XS +0 −2
456d
blocked on the owner: Verified -1 by Oleg Drokin
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — superseded (tests have since passed)
unique failing testhistory
conf-sanity-slow@zfs:test_69NEW unique failure for this branch in the last 30 days, but was seen 0 times across 0 other branches 0 reviews
build #5675 SUCCESS
reviews: Patrick Farrell +1 2019-06-04 13:52 · Alexander Boyko +1 2019-06-04 11:55
no vote yet: Zhenyu Xu, Andreas Dilger, Alex Zhuravlev, Oleg Drokin
owner Li Dongyang · uploader Alexander Boyko · PS3 uploaded 2710d ago · NEW · open in Gerrit ↗
commit message
LU-11775 osc: check imp_invalid without imp_lock

We don't need to hold imp_lock while checking the
imp_invalid flag. This avoids the contention on
imp_lock in osc_io_ter_init().

Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Change-Id: Ic825ad09f6c8020058d0fa9a417281c1258156ce
34066 master J ✗1B ✓T ✗10R 0/2
LU-11817 lnet: add timing statistics
reviewing Amir Shehata · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
1 unique failure stalled 456d L +351 −30
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-quota@zfs+DNE:test_12bseen in 11 other reviews
failed enforced testplatformdetail
review-dne-part-1 crashed CentOS 8.3/x86_64 ran 12 tests. 3 tests failed: recovery-small, sanityn, sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 failed 2× crashed CentOS 8.3/x86_64 ran 16 tests. 2 tests failed: mds-survey, ost-pools. %% THIS TEST SESSION CRASHED %% session
review-dne-part-4 crashed CentOS 8.3/x86_64 ran 14 tests. 2 tests failed: sanity-pfl, replay-single. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk crashed CentOS 8.3/x86_64 ran 8 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-ssk CentOS 8.3/x86_64 ran 5 tests. 3 tests failed: sanity-sec, recovery-small, sanity. session
review-dne-zfs-part-2 crashed CentOS 8.3/x86_64 ran 16 tests. 2 tests failed: sanity-pcc, mds-survey. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-4 crashed CentOS 8.3/x86_64 ran 10 tests. 1 tests failed: insanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-ubuntu crashed CentOS 8.3/x86_64, Ubuntu 20.04/x86_64 ran 8 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
build #19160 SUCCESS
no vote yet: Cyril Bordage
owner Amir Shehata · uploader Cyril Bordage · PS6 uploaded 2085d ago · NEW · open in Gerrit ↗
commit message
LU-11817 lnet: add timing statistics

Calculate the max and average time of
1. LNet Message sends: from the point a message is sent to the LND
   till the point the tx credits are returned
4. LND queue: from the point a tx is queued on an internal queue
   until the point it's posted for send.
2. LND tx: from the point a message is put on the wire till
   the point tx is completed
3. LND rx: from the point LND is notified that a message arrived
   to the point message rx processing is completed

Timing statistics are disabled by default and can be enabled on
demand.

Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I2f829858f99780a94640cdd9cc1a60de4bdaebce
35184 master J !B ✓T ✗1R -1/2−
LU-12421 lfs: fix ladvise range
reviewing Patrick Farrell · blocked on the owner: enforced tests failed
stalled 456d M +162 −24
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 1 tests failed: sanity-pcc. session
build #6761 SUCCESS
reviews: Li Xi -1 2019-07-13 02:34
no vote yet: Qian Yingjin, Andreas Dilger
owner Patrick Farrell · uploader Patrick Farrell · PS6 uploaded 2671d ago · NEW · open in Gerrit ↗
commit message
LU-12421 lfs: fix ladvise range

lfs ladvise mistakenly treats ranges like 0-1M as [0-1M],
requesting action on 0,1045876, but this is actually 1M+1.

We just need to subtract 1 from 'end' to reflect that
ranges are [x,y), not [x,y].

This is easiest to test with lockahead, as incorrect ranges
show up when requesting adjacent locks, such as 0-1M and
1M-2M.

Add a general set of simple lfs ladvise lockahead tests.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: Iad065316d166383356c2910d6604736b07029d8e
36229 master J !B ✗T –R 0/2
LU-12782 llite: Convert attr lock to rwlock
reviewing Patrick Farrell · blocked on the owner: build failure
stalled 456d L +146 −109
456d
blocked on the owner: build failure
awaiting review (CI not green yet)
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #95693 FAILURE
no vote yet: Wang Shilong, Qian Yingjin, Andreas Dilger, Li Dongyang, Shilong Wang
patchsets: PS5 06-18 PS6 06-18 PS7 06-18
owner Patrick Farrell · uploader Patrick Farrell · PS7 uploaded 1234d ago · NEW · open in Gerrit ↗
commit message
LU-12782 llite: Convert attr lock to rwlock

Under some shared file workloads, the cl_object_attr_lock
ends up 'hot'.  Because it is a spinlock which is often
used only for reading, it can easily be converted to an
rwlock.

This should show up in some shared file workloads, notably
shared file reading.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I50d6f04f31eeea3ab5af58a1b6b56c1d4cfc7093
36492 master J !B ✓T ✗4R -1/2−
LU-10968 hsm: encapsulate copyaction_private
reviewing Ben Evans · blocked on the owner: enforced tests failed
stalled 456d L +531 −200
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-arm CentOS 7.0/x86_64, CentOS 8.0/aarch64 ran 5 tests. 1 tests failed: sanity. session
4 optional test failure(s) — informational
build #12512 SUCCESS
reviews: Quentin Bouget -1 2020-03-09 12:01
no vote yet: Qian Yingjin, Nikitas Angelinas, Aurelien Degremont, nathan r, Andreas Dilger
owner Ben Evans · uploader Ben Evans · PS24 uploaded 2436d ago · NEW · open in Gerrit ↗
commit message
LU-10968 hsm: encapsulate copyaction_private

hsm_copyaction_private is allocated and populated by the
llapi_hsm_action_begin call, which shouldn't be changed.
In order to add more info to the structure, create a set of
get/set methods, and use them. The first new method will be
for archive_id.

Signed-off-by: Ben Evans <bevans@cray.com>
Test-Parameters: testlist=sanity-hsm
Cray-bug-id: LUS-5990
Change-Id: I3e23a5093ed6d6b528e8d41d06f31479d531683b
36596 master J ✗34B ✓T –R 0/2
LU-12916 osd: use writeback cache in ldiskfs
reviewing Alex Zhuravlev · blocked on the owner: janitor: test failures unique to this patch
34 unique failures stalled 456d L +463 −22
456d
blocked on the owner: janitor: test failures unique to this patch
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_52NEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
conf-sanity2@ldiskfs+DNE:test_53aseen in 3 other reviews
conf-sanity2@ldiskfs+DNE:test_53bseen in 3 other reviews
conf-sanity2@ldiskfs+DNE:test_54aseen in 2 other reviews
conf-sanity2@ldiskfs+DNE:test_54bseen in 3 other reviews
conf-sanity2@ldiskfs:test_52NEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
conf-sanity2@ldiskfs:test_53aseen in 3 other reviews
conf-sanity2@ldiskfs:test_53bseen in 3 other reviews
conf-sanity2@ldiskfs:test_54aseen in 2 other reviews
conf-sanity2@ldiskfs:test_54bseen in 3 other reviews
sanity1@ldiskfs+DNE:test_56abNEW unique failure for this branch in the last 30 days, and was seen 7 times across 1 other branches 1 reviews
sanity1@ldiskfs:test_56abNEW unique failure for this branch in the last 30 days, and was seen 6 times across 1 other branches 1 reviews
sanity-lfsck@ldiskfs+DNE:test_16NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity-lfsck@ldiskfs:test_16NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_3aNEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_3bNEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_3cNEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_5NEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_6NEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_7aNEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_7bNEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_7cNEW unique failure for this branch in the last 30 days, and was seen 5 times across 1 other branches 1 reviews
sanity-quota@ldiskfs+DNE:test_12aseen in 2 other reviews
sanity-quota@ldiskfs+DNE:test_17NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs:test_3aNEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_3bNEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_3cNEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_5NEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_6NEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_7aNEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_7bNEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_7cNEW unique failure for this branch in the last 30 days, and was seen 4 times across 1 other branches 1 reviews
sanity-quota@ldiskfs:test_12aseen in 2 other reviews
sanity-quota@ldiskfs:test_17NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
4 optional test failure(s) — informational
build #14539 SUCCESS
no vote yet: Wang Shilong, Qian Yingjin, Shuichi Ihara, Andreas Dilger
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS29 uploaded 2355d ago · NEW · open in Gerrit ↗
commit message
LU-12916 osd: use writeback cache in ldiskfs

this is a proto to play with the idea: the cache is used
in all the cases, the writes aren't synchronous.

all delayed writes are counted under "delayed_writes" in
osd-ldiskfs.*.stats in pages

TODO:
1) direct sync IO from private buffers
2) sync IO + wait from pageceche
   set PG_writeback, drop from IO completion
   wait in osd_trans_stop()
3) sync IO w/o wait from pagecache
   set PG_writeback, drop from IO completion
4) no IO, just copy into pagecache
   mark pages/buffers dirty

define policy for 1-4

Test-Parameters: fortestonly testlist=sanity,sanityn,sanity-benchmark
Test-Parameters: fortestonly testlist=sanity,sanityn,sanity-benchmark
Test-Parameters: fortestonly testlist=sanity,sanityn,sanity-benchmark
Test-Parameters: fortestonly testlist=sanity,sanityn,sanity-benchmark
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Iabe362aa9ab777b2cac8c6a244415b899cbf2744
36821 master J ✗2B ✓T ✗1R +0/2−
LU-12991 lnet: remove rspt zombie list
reviewing Amir Shehata · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
2 unique failures stalled 456d M +65 −132
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-quota@zfs+DNE:test_12bseen in 70 other reviews
sanityn@zfs+DNE:test_39dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-4 failed 2× CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: replay-single. session
3 optional test failure(s) — informational
build #11239 SUCCESS
reviews: Serguei Smirnov +1 2020-01-18 01:03 · Neil Brown -1 2020-01-22 03:23
no vote yet: Alexey Lyashkov, Alexander Boyko, Olaf Weber
owner Amir Shehata · uploader Amir Shehata · PS6 uploaded 2482d ago · NEW · open in Gerrit ↗
commit message
LU-12991 lnet: remove rspt zombie list

Add a direct pointer to the MD in the rspt and increment
the md_refcount to account for this use.

When an MD is unlinked detach the rspt from the MD, that
will cause the md_refcount to be decremented and the pointer
from the rspt to the MD NULLed out.

The next time the monitor thread runs it'll see that rspt with
a NULL MD pointer and free it.

When response times out the MD is detached from the rspt and
the md_refcount decremented. If the MD is unlinkable, then
it'll be freed by the call to lnet_md_unlink(). Otherwise
we'll call lnet_md_finalize() which will send an unlink event
callback.

When a response is received and the MD is unlinkable, then
the MD is detached from the rspt. This will result in an
rspt with the md_pointer NULL, which will be freed the next
time it's encountered by the monitor thread.

Removing the rspt zombie list simplifies the management
of the rspt blocks.

Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I9c9a3c8b23032307d1c3badaa8d3a51a4e98e137
37801 master J ✗2B ✓T ✗2R 0/2
LU-13329 libcfs: catch improper failloc race cleanup
reviewing Oleg Drokin · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
2 unique failures stalled 456d S +9 −1
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-sec@zfs:test_15seen in 7 other reviews
sanity-sec@zfs:test_18NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
build #12539 SUCCESS
no vote yet: Neil Brown
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 2435d ago · NEW · open in Gerrit ↗
commit message
LU-13329 libcfs: catch improper failloc race cleanup

If we are resetting a failloc race and there's a waiter,
then it would not be woken up which is obviously not
a state we want to be in.

Change-Id: I97eccbacb6a04358e2cf2b42c28c402067bc20ca
Signed-off-by: Oleg Drokin <green@whamcloud.com>
38812 master J ✗1B ✓T ✗3R 0/2
LU-13625 socklnd: bind socket to correct IP addr
reviewing Amir Shehata · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
1 unique failure stalled 456d M +39 −38
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-quota@zfs+DNE:test_12bseen in 100 other reviews
failed enforced testplatformdetail
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-1 CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 CentOS 7.0/x86_64 ran 10 tests. 3 tests failed: sanity-quota, sanity-pfl, replay-single. session
1 optional test failure(s) — informational
build #14741 SUCCESS
no vote yet: Alexey Lyashkov, Serguei Smirnov, Aurelien Degremont, Chris Horn, Neil Brown
owner Amir Shehata · uploader Amir Shehata · PS1 uploaded 2345d ago · NEW · open in Gerrit ↗
commit message
LU-13625 socklnd: bind socket to correct IP addr

choose_ipv4_src() can end up choosing the wrong IP address if
the destination IP address is on the same subnet as one of
the other IP's assigned to the device. This will force the
passive side of the socket to look up that other IP address,
create the wrong NID. All LNet messages to the active will then
be dropped. The socklnd should honor the specifications
provided by LNet.

Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: Iad8246a737b923638d775f253934b5b70a795d60
40568 master J !B ✗T –R 0/2
LU-10973 lnet: lustre log parser
reviewing Amir Shehata · blocked on the owner: build failure
stalled 456d XL +1477 −7
456d
blocked on the owner: build failure
awaiting review (CI not green yet)
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #84634 FAILURE
no vote yet: Cyril Bordage, Serguei Smirnov, Chris Horn
patchsets:
+4 earlier PS16 08-23 PS17 08-23 PS18 08-23 PS19 08-27
PS20 09-03 PS21 09-13 PS22 10-15 PS23 10-25 PS24 11-23 Serguei Smirnov
owner Amir Shehata · uploader Serguei Smirnov · PS24 uploaded 1806d ago · NEW · open in Gerrit ↗
commit message
LU-10973 lnet: lustre log parser

Added a log parser utility. It parses dlm, rpctrace and net logs.
It is able to generate a sequence diagram showing the communication
between the client and the servers.

It can also generate a YAML file containing all RPC sends and receives
in the parsed log. This aids in debugging logs as well as enabling
test scripts which verify specific behavior.

Some of the LNet logging was modified to add information which the
parser can use.

Test-Parameters: trivial
Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I507cc0e7e63ccde79ea4be9b459a1898550713de
40736 master J ✗2B ✓T ✗4R 0/2
LU-10360 mgs: Mount to dynamically added networks
reviewing Amir Shehata · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
2 unique failures stalled 456d L +614 −65
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
recovery-small@zfs:test_155NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity2@zfs:test_311NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-4 RHEL 9.3 / x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-selinux-ssk-part-1 RHEL 8.9 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.9 / x86_64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9 / x86_64 ran 5 tests. 1 tests failed: sanity. session
4 optional test failure(s) — informational
build #109134 SUCCESS · tests all Maloo sessions
no vote yet: Frank Sehr, Neil Brown, Serguei Smirnov, Chris Horn, Andreas Dilger, Mikhail Pershin, Oleg Drokin
patchsets:
+6 earlier PS4 09-15 James Simmons PS5 10-14 James Simmons PS6 10-26 James Simmons PS7 11-04 Serguei Smirnov PS8 10-02 James Simmons PS9 10-10 Serguei Smirnov
PS10 10-10 Serguei Smirnov PS11 10-21 Serguei Smirnov PS12 10-28 Serguei Smirnov PS13 11-23 Mikhail Pershin PS14 11-24 Mikhail Pershin
owner Amir Shehata · uploader Mikhail Pershin · PS14 uploaded 710d ago · NEW · open in Gerrit ↗
commit message
LU-10360 mgs: Mount to dynamically added networks

This feature adds the ability for clients to mount servers on
networks or NIDs which has been dynamically added post server
bring up.

As an example, servers can initially be configured with a tcp
network. Then a new network can be added after the servers are mounted
using lnetctl:

   lnetctl net add --net tcp441 --if eth1

A new client which has not mounted the file system yet and
only exists on the tcp441 network, can then successfully
mount the file system on tcp441 network.

This is accomplished as follows:

The MGS registers with LNet for updates whenever a newly added
network or NID are dynamically added to LNet or when through
discovery LNet finds out about an update to a peer's NID list.

The notification causes the MGS to update its Imperative Recovery
log with the new NIDs.

After updating the IR log, a notification is sent to the clients
currently mounting the FS.

When new clients connect to the MGS, the IR log is sent to the
client. The client then uses that IR log to create connections
instead of relying only on the llog, which would be out of date
at this point.

NOTE: This feature relies on LNet dynamic discovery feature.

Test-Parameters: fortestonly
Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I1cc82917f2d407e7f6e18b6bf206568a35c5d2d5
40937 master J ✓B ✓T ✗2R -1/2−
LU-13638 ptlrpc: addition change for callback discard
reviewing Yang Sheng · blocked on the owner: enforced tests failed
stalled 456d S +15 −9
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-dne-part-4 CentOS 8.3/x86_64 ran 10 tests. 2 tests failed: sanity-quota, replay-single. session
review-dne-selinux-ssk CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanity. session
build #19571 SUCCESS
reviews: Alexey Lyashkov -1 2022-08-17 18:18
no vote yet: Qian Yingjin, Shuichi Ihara, Zhenyu Xu, Serguei Smirnov, Amir Shehata, Andreas Dilger
owner Yang Sheng · uploader Yang Sheng · PS4 uploaded 2065d ago · NEW · open in Gerrit ↗
commit message
LU-13638 ptlrpc: addition change for callback discard

--Fix some style issue;
--decrease ibc_nsends_posted along with ibc_sending, else
  we may hit the ASSERT in kiblnd_destroy_conn();
--We should bypass checking delayed request and then handle
  it in ptlrpc_unregister_reply();

Fixes: babf023227 (LU-13368 lnet: discard the callback)
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Change-Id: I84dc43acad1e010bf1370dc115f2f12002a35b4d
47150 master J !B ✓T …R 0/2
LU-15003 sec: test native fscrypt
reviewing Sebastien Buisson · awaiting review (CI not green yet)
stalled 456d XS +1 −0
456d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #88772 SUCCESS · tests all Maloo sessions · test queue
patchsets:
+6 earlier PS1 04-26 PS2 04-29 PS3 04-29 PS4 06-02 PS5 06-02 PS6 06-02
PS7 06-03 PS8 06-13 PS9 06-24 PS10 06-30 PS11 08-02
owner Sebastien Buisson · uploader Sebastien Buisson · PS11 uploaded 1555d ago · NEW · open in Gerrit ↗
commit message
LU-15003 sec: test native fscrypt

Test native fscrypt.

Change-Id: I28caaa57f3c7c479ae192716aed3fbddae700f6a
Test-Parameters: fortestonly clientdistro=ubuntu2004 serverdistro=el8.5 trivial testlist=sanity-sec
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
50398 master J ✓B ✓T ✗1R -1/2−
LU-16663 tests: add yaml testing wrappers for utils
reviewing Timothy Day · blocked on the owner: enforced tests failed
stalled 456d 1 unresolved S +33 −9
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-ldiskfs-dne CentOS 8.5/x86_64 ran 5 tests. 1 tests failed: sanity. session
build #93243 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2023-03-24 23:07
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2023-03-25 02:49 Timothy Day sanity.sh:5500 — Good catch. I didn't notice either of those issues.
Andreas Dilger PS1 · 2023-03-24 23:07
(minor) I see that "lctl get_param -y" is not (yet) documented in the usage message.

Also, "lctl get_param" doesn't have a long "-y/--yaml" option, but it should.  Also, long options "-F/--format/--classify", "-n/--no-name", "-N/--no-value", "-R/--recursive" should be added.
Timothy Day PS1 · 2023-03-25 02:49
Good catch. I didn't notice either of those issues.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 1321d ago · NEW · open in Gerrit ↗
commit message
LU-16663 tests: add yaml testing wrappers for utils

Add tester for lfs, lctl YAML output. Use this tester
on a number of common sanity tests. This will improve
YAML test coverage, while not requiring a large number
of custom test cases to be made.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I4679003ce7ee670b2a4a6aaf31c289e4e2aa86be
51920 master J !B ✓T ✗2R 0/2
LU-8802 obd: add strong locking to OBD lifecycle management
reviewing Timothy Day · blocked on the owner: enforced tests failed
stalled 456d M +43 −26
456d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-zfs RHEL 8.8/x86_64 ran 8 tests. 1 tests failed: sanity-quota. session
build #100190 SUCCESS · tests all Maloo sessions
no vote yet: Alexey Lyashkov, Andreas Dilger, Neil Brown, Alex Zhuravlev
patchsets: PS1 08-10 PS2 11-07
owner Timothy Day · uploader Timothy Day · PS2 uploaded 1092d ago · NEW · open in Gerrit ↗
commit message
LU-8802 obd: add strong locking to OBD lifecycle management

The OBD lifecycle code can race in certain conditions.
This is most noticable for class_{attach,detach,setup,cleanup}
and class_{incref,decref}. Implement a new global lock,
obd_lifecycle_management_lock, to stop these different
functions from racing. This lock can reliably prevent
the crashing seen in patch 51895 (caused by attempting
to setup and teardown the same OBD device in different
threads).

OBD devices are setup infrequently, so the potential for
lock contention is low. The time to setup about 10,000
OBD devices is around 10 seconds, with or without this
patch.

Lockless versions of certain functions have been
provided, since certain OBD cleanup and setup
routines must call some of these class_* functions.

Further, class_{attach,detach,setup,cleanup} have
been un-exported to make it harder to abuse these
functions. They were only used in a small number
of places.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I4b0242b5d37de58fd67578edd3c624a3b971cbfe
53300 master J ✗2B ✓T ✗1R -1/2−
LU-17327 tests: add test case for online MDT/OST addition
reviewing Jian Yu · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
2 unique failures stalled 456d M +189 −5
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity2@zfs:test_46bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity2@zfs:test_46bNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
failed enforced testplatformdetail
custom-1002 RHEL 8.9/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
build #103890 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Lai Siyao
patchsets:
+42 earlier PS1 11-30 PS2 11-30 PS3 12-04 PS4 12-04 PS5 12-06 Andreas Dilger PS6 12-06 Andreas Dilger PS7 12-06 Andreas Dilger PS8 12-06 Andreas Dilger PS9 12-06 Andreas Dilger PS10 12-06 Andreas Dilger PS11 12-07 Andreas Dilger PS12 12-07 Andreas Dilger PS13 12-07 Andreas Dilger PS14 12-07 Andreas Dilger PS15 12-07 Andreas Dilger PS16 12-07 Andreas Dilger PS17 12-08 Lai Siyao PS18 12-08 Andreas Dilger PS19 12-08 Andreas Dilger PS20 12-11 Andreas Dilger PS21 01-26 Lai Siyao PS22 01-30 Lai Siyao PS23 02-12 Andreas Dilger PS24 03-04 Lai Siyao PS25 03-06 Andreas Dilger PS26 03-07 Andreas Dilger PS27 03-07 Andreas Dilger PS28 03-07 Andreas Dilger PS29 03-07 Andreas Dilger PS30 03-08 Andreas Dilger PS31 03-09 Andreas Dilger PS32 03-16 Andreas Dilger PS33 03-16 Andreas Dilger PS34 03-22 Andreas Dilger PS35 03-25 Andreas Dilger PS36 03-25 Andreas Dilger PS37 03-25 Andreas Dilger PS38 03-25 Andreas Dilger PS39 03-25 Andreas Dilger PS40 03-28 Andreas Dilger PS41 03-28 Andreas Dilger PS42 03-30 Andreas Dilger
PS43 03-30 Andreas Dilger PS44 04-04 Andreas Dilger PS45 04-04 Andreas Dilger PS46 04-05 Andreas Dilger PS47 04-05 Andreas Dilger
owner Jian Yu · uploader Andreas Dilger · PS47 uploaded 942d ago · NEW · open in Gerrit ↗
commit message
LU-17327 tests: add test case for online MDT/OST addition

Add conf-sanity test_46b for adding MDTs and OSTs online
to a live Lustre filesystem that is under load.

Alternate adding MDTs and OSTs until the config limit is reached,
while copying directory trees into two different mountpoints.
There should be no errors hit by rsync, and the new MDTs and OSTs
should (eventually) be used by the copied directories.

Test-Parameters: trivial
Test-Parameters: testlist=conf-sanity env=ONLY=46b,ONLY_REPEAT=5 mdtcount=8 mdscount=4
Test-Parameters: testlist=conf-sanity env=ONLY=46b,ONLY_REPEAT=20 mdtcount=4 mdscount=2
Change-Id: Ib471c76ffffb0205ce2eee5d1e43867566eb2f41
Signed-off-by: Jian Yu <yujian@whamcloud.com>
53578 master J !B ✗T –R ✗
LU-17391 rust: simple OBD API bindings
reviewing Timothy Day · blocked on the owner: build failure; Timothy Day voted -1
CR -1 stalled 456d L +350 −1
456d
blocked on the owner: build failure; Timothy Day voted -1
awaiting review (CI not green yet)
janitor run: build failed — no tests ran — janitor results
build #101095 FAILURE
reviews: Timothy Day -1 2024-01-03 06:05
no vote yet: Andreas Dilger
owner Timothy Day · uploader Timothy Day · PS1 uploaded 1036d ago · NEW · open in Gerrit ↗
commit message
LU-17391 rust: simple OBD API bindings

Implement simple rust bindings for OBD API
along with a simple OBD device demonstrating
them.

This was tested on Ubuntu 23.04 with the
officially distributed rust bindings.

https://rust-for-linux.com/
https://discourse.ubuntu.com/t/ubuntu-kernel-is-getting-rusty-in-lunar/34977

Test-Parameters: forbuildonly
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I32ab4d085f19dc2347738ef6d3b8194f4e1c09c4
11171 master J ✗2B ✓T ✗2R -1/2−
LU-4801 ldlm: use mutex for resource locks for flock resources
reviewing Oleg Drokin · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
needs rebase 2 unique failures stalled 457d S +22 −7
457d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-sec@zfs:test_8seen in 19 other reviews
sanity-sec@zfs:test_21seen in 2 other reviews
failed enforced testplatformdetail
review-dne-part-1 CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanityn. session
review-dne-part-4 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-pfl. session
build #9207 SUCCESS
owner Oleg Drokin · uploader Oleg Drokin · PS4 uploaded 2576d ago · NEW · open in Gerrit ↗
commit message
LU-4801 ldlm: use mutex for resource locks for flock resources

Since flocks have a lot of heavy processing under resource lock,
use  a mutex for the lock to allow other users some CPU.

Change-Id: I253aad02f4199fc6489f7ff197a812b7ecdd0619
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
37119 master J !B ✗T –R -2/2−
LU-13108 lustre: Improve ptlrpc_async_args union
reviewing Arshad Hussain · blocked on the owner: build failure
stalled 463d S +20 −2
463d
blocked on the owner: build failure
awaiting review (CI not green yet)
build #70785 FAILURE
reviews: Petros Koutoupis -1 2020-01-23 15:02 · Andreas Dilger -1 2020-01-04 17:31
no vote yet: Shaun Tancheff, Neil Brown, Aurelien Degremont, Ben Evans
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 2495d ago · NEW · open in Gerrit ↗
commit message
LU-13108 lustre: Improve ptlrpc_async_args union

This patch improves union ptlrpc_async_args
by replacing magic number used in member by
a more meaningful #define.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.super@gmail.com>
Change-Id: Ib7f7e3111e6ae8607f05ba8ef0a4970c921164eb
53487 master J –B ✗T ✗3R 0/2
LU-17373 tests: Improve do_nodes() to use no_dsh for local nodes
reviewing Arshad Hussain · blocked on the owner: build failure; enforced tests failed
stalled 463d M +58 −6
463d
blocked on the owner: build failure; enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
custom-1001 RHEL 8.8/x86_64 ran 4 tests. 2 tests failed: conf-sanity, sanity. session
review-ldiskfs-dne RHEL 8.8/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-dne-arm RHEL 8.8/aarch64, RHEL 8.8/x86_64 ran 5 tests. 1 tests failed: sanity. session
build #101163 FAILURE · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets: PS1 12-18 PS2 01-04 PS3 01-04 PS4 01-04
owner Arshad Hussain · uploader Arshad Hussain · PS4 uploaded 1035d ago · NEW · open in Gerrit ↗
commit message
LU-17373 tests: Improve do_nodes() to use no_dsh for local nodes

On a client/server setup and starting cluster using
llmount.sh. do_nodes() is called with both client and
server. Under do_nodes() both local nodes and remote
nodes make ssh calls. This patch improves do_nodes()
to use 'no_dsh'(local calls, no ssh) calls when making
calls to local node. The call to remote node continues
as usual.

Test-Parameters: trivial testlist=sanity,conf-sanity
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I2e45547d5bfcda6ffc17a3b990b9bf75f5d3f6d8
55959 master J –B ✓T ✗1R 0/2
LU-18110 doc: lfs setstripe manpage refers to filename
reviewing Oleg Drokin · blocked on the owner: enforced tests failed
stalled 463d 1 unresolved XS +1 −1
463d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #106679 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-07 PS2 08-07
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2024-08-07 22:16 Andreas Dilger lfs-setstripe.1:23 — Well, there are a million possible contents for a YAML file, but I was thinking if there is a specific ".lyl" Lustre YAML Layout file exten
Andreas Dilger PS2 · 2024-08-07 22:03
My intention was to pick some new suffix that showed the file was a Lustre file layout and YAML.

It could be ".lfl", but this should be lower-case and bold, instead of uppercase.
Oleg Drokin PS2 · 2024-08-07 22:11
so you think this one is good to leave as is? I guess YAML_TEMPLATE_FILE already sort of hints the intended format is YAML?
Andreas Dilger PS2 · 2024-08-07 22:16
Well, there are a million possible contents for a YAML file,  but I was thinking if there is a specific ".lyl" Lustre YAML Layout file extension that it might be easier to reference these in other tools/docs/etc.
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 818d ago · NEW · open in Gerrit ↗
commit message
LU-18110 doc: lfs setstripe manpage refers to filename

I checked online and .LYL file extension is not really a thing,
I think .YML is what is meant here?

Test-Parameters: trivial
Change-Id: Ic8e62a926370e29ae13ad3960e95110b773adb0e
Signed-off-by: Oleg Drokin <green@whamcloud.com>
56442 master J ✗3B ✓T ✗3R +1/2
LU-18246 zfs: fix for colocated client deadlock
reviewing Timothy Day · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
3 unique failures stalled 463d S +22 −0
463d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
replay-single@zfs:test_65aseen in 31 other reviews
sanity-hsm@zfs:test_251seen in 2 other reviews
sanity-hsm@zfs:test_254bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-3 RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-5 RHEL 9.3/x86_64 ran 6 tests. 1 tests failed: recovery-small. session
review-ldiskfs RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
6 optional test failure(s) — informational
build #107809 SUCCESS · tests all Maloo sessions
reviews: Mark Roper +1 2024-09-20 16:47
no vote yet: Alex Zhuravlev, Jeya ganesh babu, Brian Behlendorf
owner Timothy Day · uploader Timothy Day · PS1 uploaded 774d ago · NEW · open in Gerrit ↗
commit message
LU-18246 zfs: fix for colocated client deadlock

Some HSM solutions for Lustre use a client on the MDT to
create directories and files. In case of small sized instances
and during memory pressure, the allocations from ZFS could trigger
a deadlock during an inline memory free by calling Lustre mdc
APIs. The threads got stuck waiting for RPCs. To avoid this,
use spl_fstrans_mark and spl_fstrans_unmark to disable inline
memory reclaim. This is based on suggestion from the openZFS
community - https://github.com/openzfs/zfs/issues/15786.

Signed-off-by: Jeya ganesh babu Jegatheesan <jeyaga@amazon.com>
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: If42b9c32eea026386b0ddb5b9c65d5c9f1406652
41747 master J ✗5B ✓T ✗4R 0/2
LU-14041 lnet: display CPT timing from lnetctl
reviewing Cyril Bordage · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
5 unique failures stalled 1607d L +333 −1
1607d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@zfs:test_204NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_205NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_206NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_207NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_209NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-zfs-part-4 CentOS 8.5/x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-ldiskfs CentOS 8.5/x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-arm CentOS 8.5/aarch64, CentOS 8.5/x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu CentOS 8.5/x86_64, Ubuntu 20.04/x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
3 optional test failure(s) — informational
build #87836 SUCCESS · tests all Maloo sessions
no vote yet: Frank Sehr, Serguei Smirnov, Chris Horn, Amir Shehata
patchsets: PS9 09-16 PS10 09-16 PS11 06-10 PS12 06-10
owner Cyril Bordage · uploader Cyril Bordage · PS12 uploaded 1607d ago · NEW · open in Gerrit ↗
commit message
LU-14041 lnet: display CPT timing from lnetctl

added command:
lnetctl set percpt_time_stats_enable [0|1]
to enable capturing per cpt time statistics
and
lnetctl percpt_time_stats show
to dump per cpt timing stats

Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I30699b204efca7920d6fdca690ea7024a9e9adb0
38041 master J ✗4B ✓T ✗11R 0/2
LU-13384 hsm: create new copytool interface
reviewing Nikitas Angelinas · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
4 unique failures stalled 1635d L +692 −4
1635d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-hsm@ldiskfs+DNE:test_260bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@ldiskfs+DNE:test_260cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_260bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-hsm@zfs:test_260cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
custom-101 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: sanity-hsm. session
review-dne-part-1 RHEL 7.8/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-part-2 CentOS 7.0/x86_64 ran 11 tests. 2 tests failed: sanity-pcc, sanity-hsm. session
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-selinux CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 7.8/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 11 tests. 2 tests failed: sanity-pcc, sanity-hsm. session
review-dne-zfs-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-quota. session
review-ldiskfs CentOS 7.0/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-arm CentOS 8.0/aarch64, RHEL 7.8/x86_64 ran 5 tests. 1 tests failed: sanity. session
3 optional test failure(s) — informational
build #14940 SUCCESS
no vote yet: Qian Yingjin, Aurelien Degremont, Sergey Cheremencev, nathan r, Andreas Dilger, Ben Evans, Quentin Bouget
owner Nikitas Angelinas · uploader Nikitas Angelinas · PS3 uploaded 2337d ago · NEW · open in Gerrit ↗
commit message
LU-13384 hsm: create new copytool interface

The current copytool interface has a combination of opaque
and visible data, which increases, rather than hides
complexity. This seeks to make a parallel interface
for start, end and progress which is simpler.

The new interface uses the files that are being
operated on as the targets for the IOCTL, rather
than the root directory.

lhsmtool_posix: New mode which takes an input file of work.
This new file is specified with the -F option.  Each line
is a new action for the copytool to perform, and the FIDs to
use.

These are handled by ct_restore_v2, ct_archive_v2 and
ct_migrate_v2 which use the new llapi interface to operate.

A new line in a work file looks like:
ARCHIVE [0x200000403:0xd:0x0] [0x200000403:0xd:0x0]
MIGRATE [0x200000403:0xd:0x0] [0x200000407:0xf:0x0]
RESTORE [0x200000403:0xd:0x0] [0x200000403:0xd:0x0]

Signed-off-by: Ben Evans <jevans@cray.com>
Cray-bug-id: LUS-6843
Test-Parameters: env=COORDINATOR=external testlist=sanity-hsm
Change-Id: I4e22aad88f137a5d28c6565b74231750ee50e939
43581 master J ✗82B ✓T ✗6R 0/2
LU-14674 test: change PERM_CMD to "lctl set_param -P"
reviewing Li Xi · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
82 unique failures stalled 1789d XS +1 −1
1789d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_43aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity2@ldiskfs+DNE:test_44seen in 2 other reviews
conf-sanity2@ldiskfs+DNE:test_50iseen in 2 other reviews
conf-sanity2@zfs:test_43aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity2@zfs:test_43bseen in 2 other reviews
conf-sanity2@zfs:test_44seen in 2 other reviews
sanity-quota@ldiskfs+DNE:test_0NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_1hNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_3aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_3bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_3cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_5NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_6NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_7eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_8NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_10NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_11NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_12aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_12bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_13NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_17NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_18NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_19NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_21NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_22NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_23NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_24NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_30NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_41NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_56NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_60NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_67NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_68NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_69NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_71aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_71bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@ldiskfs+DNE:test_72NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_0NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_1gNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_3aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_3bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_3cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_5NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_6NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_7aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_7bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_7cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_7dNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_8NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_10NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_11NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_13NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_17NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_18NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_19NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_21NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_22NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_24NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_30NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_41NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_56NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_60NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_68NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_69NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs:test_72NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-dne-part-3 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 CentOS 8.3/x86_64 ran 10 tests. 1 tests failed: sanity-quota. session
review-dne-selinux-ssk CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-3 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 CentOS 8.3/x86_64 ran 10 tests. 1 tests failed: sanity-quota. session
review-zfs CentOS 8.3/x86_64 ran 8 tests. 1 tests failed: sanity-quota. session
build #20501 SUCCESS
no vote yet: Wang Shilong, Andreas Dilger
owner Li Xi · uploader Li Xi · PS1 uploaded 2007d ago · NEW · open in Gerrit ↗
commit message
LU-14674 test: change PERM_CMD to "lctl set_param -P"

"lctl set_param -P" was meant as a transition from conf_param.

Signed-off-by: Li Xi <lixi@ddn.com>
Change-Id: Iaa291cbef1b9ad0b022322b3f6f43fc72105a6f4
41944 master J ✓B ✓T –R 0/2
LU-10973 lnet: fix path issues in scripts running lutf
reviewing Serguei Smirnov · awaiting review (CI not green yet)
stalled 1873d XL +719 −384
1873d
build #81637 SUCCESS
no vote yet: Amir Shehata
owner Serguei Smirnov · uploader Amir Shehata · PS46 uploaded 1952d ago · NEW · open in Gerrit ↗
commit message
LU-10973 lnet: fix path issues in scripts running lutf

This is a test patch that attempts to fix the lutf start up
scripts to be able to use paths that work properly when run
in the lustre build environment as well as after being
installed.

Test-Parameters: @lnet
Test-Parameters: fortestonly
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: Ia3c2bf7bc904a7a35e25e11edbdf37a6e7280dd7
34067 master J ✗6B ✓T ✗11R 0/2
LU-11817 lnet: display time stats from lnetctl
reviewing Amir Shehata · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
6 unique failures stalled 2084d L +390 −7
2084d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
awaiting review (CI not green yet)
janitor flagged test failures unique to this patch
unique failing testhistory
sanity-lnet@zfs:test_204NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_205NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_206NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_207NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_209NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs+DNE:test_12bseen in 10 other reviews
failed enforced testplatformdetail
review-dne-part-1 crashed CentOS 8.3/x86_64 ran 12 tests. 3 tests failed: recovery-small, sanityn, sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-2 crashed CentOS 8.3/x86_64 ran 20 tests. 4 tests failed: large-scale, mds-survey, sanity-scrub, ost-pools. %% THIS TEST SESSION CRASHED session
review-dne-part-4 crashed CentOS 8.3/x86_64 ran 12 tests. 1 tests failed: replay-single. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux crashed CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk crashed CentOS 8.3/x86_64 ran 10 tests. 2 tests failed: recovery-small, sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-ssk CentOS 8.3/x86_64 ran 5 tests. 3 tests failed: sanity-sec, recovery-small, sanity. session
review-dne-zfs-part-1 crashed CentOS 8.3/x86_64 ran 10 tests. 2 tests failed: sanityn, sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-2 crashed CentOS 8.3/x86_64 ran 16 tests. 2 tests failed: mds-survey, ost-pools. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed CentOS 8.3/x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm CentOS 8.3/aarch64, CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu failed 2× crashed CentOS 8.3/x86_64, Ubuntu 20.04/x86_64 ran 8 tests. 2 tests failed: sanity-lnet, sanity. %% THIS TEST SESSION CRASHED %% session
build #19161 SUCCESS
no vote yet: Cyril Bordage
owner Amir Shehata · uploader Cyril Bordage · PS6 uploaded 2085d ago · NEW · open in Gerrit ↗
commit message
LU-11817 lnet: display time stats from lnetctl

added command:
lnetct set time_stats_enable [0|1]
to enable capturing time statistics
and
lnetctl time_stats show
to dump timing stats

Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: Id7a542fbcc9fc4533b33f63dab764f91469aa0ac
36526 master J –B ✓T –R -2/2−
LU-12890 hsm: perform mirror sync through HSM
reviewing Ben Evans · awaiting review (CI not green yet)
stalled 2340d L +503 −189
2340d
build #9467 SUCCESS
reviews: Qian Yingjin -1 2020-06-08 01:55
no vote yet: Nikitas Angelinas, Aurelien Degremont, nathan r, Andreas Dilger, Quentin Bouget
owner Ben Evans · uploader Ben Evans · PS3 uploaded 2567d ago · NEW · open in Gerrit ↗
commit message
LU-12890 hsm: perform mirror sync through HSM

Perform lfs mirror sync using HSM data mover

Move lfs_mirror_resync_file into liblustreapi, change API
to take an open file handle, rather than a path. Call from
both lfs and lhsmtool_posix.

Create test in sanity-hsm

Signed-off-by: Ben Evans <bevans@cray.com>
Test-Parameters: testlist=sanity-hsm sanity-flr
Cray-bug-id: LUS-6392
Change-Id: I60cd4e72249aa1add4689bc60aeb71782095f917
34810 master J –B ✓T –R 0/2
LU-10026: Compress data on client with lz4
reviewing Anna Fuchs · awaiting review (CI not green yet)
stalled 2466d L +714 −68
2466d
build #11636 SUCCESS
no vote yet: Neil Brown, Patrick Farrell, Sebastien Buisson, Andreas Dilger
owner Anna Fuchs · uploader Anna Fuchs · PS6 uploaded 2468d ago · NEW · open in Gerrit ↗
commit message
LU-10026: Compress data on client with lz4

Send compressed over network.
The option L_CSERVER determines whether to decompress
the chunks on the server. Otherwise (L_CCLIENT) data will
be passed compressed to ZFS, stored compressed by ZFS, and
decompressed by ZFS when read.

Change-Id: I083ec5dd7a61f37727f253897a850dacde55bd90
Test-Parameters: forbuildonly
Signed-off-by: Anna Fuchs <anna.fuchs@informatik.uni-hamburg.de>
34651 master J –B ✓T –R 0/2
LU-10026: Prepare structures for compression
reviewing Anna Fuchs · awaiting review (CI not green yet)
stalled 2471d M +130 −0
2471d
build #11531 SUCCESS
no vote yet: Patrick Farrell, Neil Brown, Andreas Dilger, Sebastien Buisson
owner Anna Fuchs · uploader Anna Fuchs · PS4 uploaded 2471d ago · NEW · open in Gerrit ↗
commit message
LU-10026: Prepare structures for compression

- chunk descriptor will be sent over network
- contains "metadata" for every chunk

Change-Id: I6d90f25e1b61166192df8790fd65e0bc23077bf8
Test-Parameters: forbuildonly fstype=zfs
Signed-off-by: Anna Fuchs <anna.fuchs@informatik.uni-hamburg.de>
34831 master J !B ✗T –R 0/2
LU-10026: Handle compression by server
reviewing Anna Fuchs · blocked on the owner: build failure
stalled 2482d L +712 −110
2482d
blocked on the owner: build failure
awaiting review (CI not green yet)
build #11214 FAILURE
no vote yet: Patrick Farrell, Sebastien Buisson, Andreas Dilger, Neil Brown
owner Anna Fuchs · uploader Anna Fuchs · PS2 uploaded 2482d ago · NEW · open in Gerrit ↗
commit message
LU-10026: Handle compression by server

Either decompress data by server (previously compressed by client) and
store uncompressed or pass through compressed to ZFS. Passing through requires
patched ZFS version; for testing purposes commented out. Read unaffected.

Change-Id: I594d0cd42f0a99557518c87da5fd8f3344173f69
Test-Parameters: tests=sanity
Signed-off-by: Anna Fuchs <anna.fuchs@informatik.uni-hamburg.de>
31637 master J –B ✓T ✓R +1/2
LU-8329 wiretest: Add ioctl struct definitions
reviewing Nathaniel Clark · awaiting review (CI not green yet)
stalled 2777d XL +1095 −0
2777d
build #4275 SUCCESS
reviews: Andreas Dilger +1 2019-03-28 19:35
no vote yet: Arshad Hussain
owner Nathaniel Clark · uploader Nathaniel Clark · PS6 uploaded 2777d ago · NEW · open in Gerrit ↗
commit message
LU-8329 wiretest: Add ioctl struct definitions

In addition to ioctl calls form LU-8330, this
checks the structures passed into the ioctls.

Test-Parameters: trivial
Change-Id: Id7fc2fa2d8b0d48bf111c238d644cf6398979248
Signed-off-by: Nathaniel Clark <nclark@whamcloud.com>
18682 master J –B ✓T ✗0R +1/2
LU-6877 osc: cast cl_max_pages_per_rpc to 64bit.
reviewing Yang Sheng · blocked on the owner: enforced tests failed
stalled 3751d S +10 −6
3751d
blocked on the owner: enforced tests failed
awaiting review (CI not green yet)
reviews: Bob Glossman +1 2016-07-27 13:07
no vote yet: Oleg Drokin
owner Yang Sheng · uploader Yang Sheng · PS7 uploaded 3752d ago · NEW · open in Gerrit ↗
commit message
LU-6877 osc: cast cl_max_pages_per_rpc to 64bit.

There is a potential overflow as cl_max_pages_per_rpc
is a 32bit type. So cast it to 64bit before shift.

Signed-off-by: Yang Sheng <yang.sheng@intel.com>
Change-Id: Id252d507e270f051a9d643f180aa7fcbcf752a97
▶

Voted on current patchset

(87)
67519 master J –B ✓T ✓R +4/2
LU-18687 build: make lustre_compat headers transparent
reviewing Timothy Day · you voted +1 on current PS
pw_bigfix M +85 −66
7h
build #135042 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-11-01 13:49 · Arshad Hussain +1 2026-11-02 08:53 · Chris Horn +1 2026-11-02 16:15 · Andreas Dilger +1 2026-11-04 07:09
no vote yet: Shaun Tancheff
patchsets:
+2 earlier PS1 07-24 PS2 07-24
PS3 07-24 PS4 10-30 patrick bot PS5 10-30 patrick bot PS6 10-31 patrick bot PS7 11-01 patrick bot
your previous vote: -1 on PS3 (2026-07-24 18:22) — now at PS7
tags: pw_bigfix
owner Timothy Day · uploader patrick bot · PS7 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: make lustre_compat headers transparent

Put include/lustre_compat ahead of the kernel headers from the
top-level Kbuild, which in-kernel builds do not use, and filter it
out again for ldiskfs, which is kernel code. Have each compat header
named after a kernel header pull in the real one using include_next,
so including the native header also brings in the compat additions.
Kernel headers now reach these wrappers too, so they must not drag
in heavy headers or need types that are not yet complete, and
lustre_compat must define COMPAT_BUILD before its first include.
The external o2iblnd build forces config.h the same way, so it
comes before the OFED compat header and the generated .mod.c.

Existing <lustre_compat/...> includes keep working; the following
patches move users over a directory at a time.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5-5
Change-Id: If39a50a1fd663875d51c73cd7313fccf965620e2
65094 master J –B ✓T ✓R +1/2
LU-19895 clio: enable multi-order folios for BIO writes
reviewing Shaun Tancheff · you voted +1 on current PS
pw_own CI@PS57 XL +2782 −1200
9h
build #135213 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-11-03 14:05
no vote yet: patrick bot, Qian Yingjin, Andreas Dilger, Patrick Farrell, Timothy Day
patchsets:
+53 earlier PS1 04-04 PS2 04-05 PS3 04-06 PS4 04-06 PS5 04-07 PS6 04-08 PS7 04-11 PS8 04-13 PS9 04-24 PS10 05-07 PS11 05-09 PS12 05-11 PS13 05-12 PS14 05-12 PS15 05-12 PS16 05-15 PS17 05-17 PS18 05-17 PS19 05-21 PS20 05-22 PS21 05-26 PS22 05-26 PS23 05-27 PS24 05-27 PS25 06-19 PS26 06-19 PS27 08-06 PS28 08-17 PS29 08-21 PS30 08-28 PS31 09-04 PS32 09-04 PS33 09-05 PS34 09-09 PS35 09-09 PS36 09-11 PS37 09-11 PS38 09-12 PS39 10-15 Patrick Farrell PS40 10-16 patrick bot PS41 10-18 patrick bot PS42 10-19 patrick bot PS43 10-19 patrick bot PS44 10-20 patrick bot PS45 10-21 James Simmons PS46 10-23 patrick bot PS47 10-26 patrick bot PS48 10-27 patrick bot PS49 10-27 James Simmons PS50 10-27 patrick bot PS51 10-28 patrick bot PS52 10-28 patrick bot PS53 10-29 patrick bot
PS54 10-31 patrick bot PS55 11-01 patrick bot PS56 11-01 patrick bot PS57 11-02 patrick bot PS58 11-03 Andreas Dilger
your previous vote: +1 on PS53 (2026-10-30 17:09) — now at PS58
tags: pw_own
build/test results are from PS57 — PS58…PS58 changed only the commit message (votes copied, CI not re-run)
owner Shaun Tancheff · uploader Andreas Dilger · PS58 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-19895 clio: enable multi-order folios for BIO writes

Enable large folios for buffered writes on Linux 6.12 and
later. Track folios and base-page counts through the client
cache and RPCs. Direct I/O still uses one PAGE_SIZE chunk per
cl_page.

The llite.*.large_folios tunable, on by default, enables
allocation. llite.*.folio_order_max limits newly instantiated
inodes to at most 1 MiB, or 20 - PAGE_SHIFT. Expose
llite.*.folio_order_min and the client dirty_pages count.

Huge page mmap faults read ahead in folios up to the maximum
order whatever the layout, so their DLM lock covers the
largest folio that can hold the faulting page. A folio that
crosses a stripe or component, does not fit one RPC, or is on
a file that may not use large folios is dropped and read again
in base pages, as is one a read finds partly outside the DLM
locks it checked; readahead skips such a folio. An append,
which is not split per stripe, sizes its folios to the stripe
chunk they start in. An mmap write to a cached folio that no
longer fits one RPC drops it and refaults. Files whose layout
has a parity component keep base pages until EC recovery
handles folios, and EC recovery drops a large folio a fault
left there.

Preserve partial folios when punching holes, and drop them
if the server does not punch. Keep a tail punch's leading
valid range in cp_off/cp_len instead of the punched range
itself. Protect mmap writes against
filesystem freeze and lock and commit the whole folio.
Readahead advances by folio size and counts base pages,
including for random reads. Restore encrypted offsets when
RPC preparation fails.

Grow RPC asynchronous metadata to hold the folio descriptors.
Make sanity/277 use 4 KiB writes and a failure-injection delay
that fires once, so its cache accounting check observes the
intended state.
Add sanity/857 for the tunables and buffered and mmap I/O.

Reset the queued count if direct I/O or buffered page queuing
fails.
Skip an empty RPC's folio-less placeholder when undoing
encryption bounce pages on a failed request pack, since it
has no folio to check.

Dirty a cached folio whole when it is first queued, since a
later write or mmap store into a queued folio does not queue
it again. The last folio of an extent is trimmed to the file
size, and a truncate inside a dirty folio keeps its range. A
buffered write whose lock or RPC size does not cover the
whole folio is written synchronously, and a short copy into
a folio that is not uptodate is retried, so the folio never
holds unread bytes. A partial write to a clean large folio
drops it and writes base pages, so clean data is not sent
again, as does one to a folio that is not uptodate and
reaches outside the write's lock.

DoM open drops an unread large folio from the cache before
filling it from the inline data.

Decrypt skips each empty 4 KiB unit and reports a hole only
when the whole folio is one.

Dump each page of a folio on a checksum mismatch, and unmap
the page with the pointer that was mapped, not one advanced
by a short kernel_write().

Count the osc_extent_expand() size against the server's
maximum by the expanded range, so a large folio near that
maximum does not start a needless new extent.

A cached folio that spans grant chunks must start on one in
its stripe object, and grant is reserved for each chunk a
queued range spans, so grant still bounds what is cached.

Test-Parameters: optional clientdistro=el10.0
Test-Parameters: clientdistro=el10.1
Test-Parameters: clientdistro=el10.1 serverversion=2.17 testlist=sanity
HPE-bug-id: LUS-13263
Fixes: 87d17d0a16ab ("LU-13814 osc: add osc_dio_submit")
Fixes: 93ef6e7863b4 ("LU-10239 osc: limit chunk number of write submit")
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Assisted-by: Codex:gpt-6.1-sol
Assisted-by: ClaudeCode:claude-sonnet-5
Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-sonnet-5-5
Signed-off-by: Patrick Farrell <patrick@thelustrecollective.com>
Change-Id: I5c83d9555a2563c764ef6ec12d227b4890db3f5e
66514 master J –B ✓T ✓R +2/2
LU-9639 ldlm: Add kernel doc style for LDLM (9)
reviewing Arshad Hussain · you voted +1 on current PS
dwg M +67 −31
12h
build #135204 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-11-02 18:51 · Timothy Day +1 2026-11-02 17:48
no vote yet: Oleg Drokin
patchsets: PS1 06-07 PS2 08-17 PS3 08-25 PS4 11-02
your previous vote: +1 on PS1 (2026-07-30 19:00) — now at PS4
owner Arshad Hussain · uploader Arshad Hussain · PS4 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (9)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ia9120a9b1c1f1cd24bdaed2da762f460ba66eb01
66951 master J –B ✓T ✓R +2/2
LU-20434 build: strncpy() to strscpy() non-obvious cases
reviewing Shaun Tancheff · you voted +1 on current PS
pw_shepherd 1 unresolved S +13 −11
12h
build #134785 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-29 18:51 · Timothy Day +1 2026-10-29 18:46
no vote yet: Andreas Dilger
patchsets: PS1 06-29 PS2 08-18 PS3 08-22 PS4 09-05 PS5 10-29 Timothy Day
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-10-31 10:50 Gerrit AI review for Lustre COMMIT_MSG:22 — (minor) Zeroing name_buf at its declaration also closes an older leak that this paragraph doesn't mention. In LCFG_NODEMAP_LOOKUP_SHA, nodem
Gerrit AI review for Lustre PS5 · 2026-10-31 10:50
(minor) Zeroing name_buf at its declaration also closes an older leak that this paragraph doesn't mention. In LCFG_NODEMAP_LOOKUP_SHA, nodemap_lookup_sha() uses plain strscpy(), which writes only strlen(nm_name) + 1 bytes. server_iocontrol_nodemap() then copies all sizeof(name_buf) bytes out with copy_to_user(), so for any nodemap name shorter than 16 characters the remaining stack bytes have gone to userspace since the ioctl was added.

The IS_ERR() early return in nodemap_test_nid() (a 0@lo NID with no other local NID) has leaked the whole buffer the same way since before this series, because strncpy() never ran on that path.

Both need CAP_SYS_ADMIN, so the impact is small. Still, if the patch is refreshed, it would help to mention LOOKUP_SHA as well, and possibly add:

Fixes: 19fb018c58c9 ("LU-19079 nodemap: ioctl to get nodemap name from sha")
tags: pw_shepherd
owner Shaun Tancheff · uploader Timothy Day · PS5 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-20434 build: strncpy() to strscpy() non-obvious cases

Some cases of strncpy() want to overwrite some bytes
of the destination and do not want to truncate the destination.

mdt_path_current() and mgs_replace_mdtname() use memcpy() to
overwrite segments.

mdd_xattrs_migrate_prep() can use strscpy().

nodemap_test_nid() should use strscpy_pad() as it is always passed
the sizeof() the buffer and the zero padding is needed. The buffer
is copied to userspace in full by server_iocontrol_nodemap(), so
zero it at declaration as well to cover the early return when no
nodemap is found.

Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I8b70127fb5e4f870ff856bb2344f402eb2bd5f68
69827 master J –B ✓T ✓R +4/2
LU-20995 compat: call kallsyms functions via static_call
reviewing Jian Yu · you voted +1 on current PS
pw_shepherd master-next 2 unresolved M +105 −54
16h
build #134711 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-31 13:20 · Xiao Yang +1 2026-10-29 01:22 · Nikitas Angelinas +1 2026-11-03 20:16 · Timothy Day +1 2026-11-02 15:16
no vote yet: Sohei Koyama
patchsets:
+1 earlier PS1 10-19
PS2 10-21 PS3 10-22 PS4 10-24 PS5 10-25 PS6 10-29
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-11-03 20:16 Nikitas Angelinas COMMIT_MSG:59 — Some "serverdistro=el10.*" configurations could also be specified, to run some tests using compat_security_file_alloc()/compat_security_file
Nikitas Angelinas PS6 · 2026-11-03 20:16
Some "serverdistro=el10.*" configurations could also be specified, to run some tests using compat_security_file_alloc()/compat_security_file_free() in osd-ldiskfs, but it's probably not necessary, imho
reply PS6 2026-11-02 15:16 Timothy Day osd_handler.c:656 — There's a series to remove this dependency that I ought to push forward.
Timothy Day PS6 · 2026-11-02 15:16
There's a series to remove this dependency that I ought to push forward.
tags: pw_shepherd
owner Jian Yu · uploader Jian Yu · PS6 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-20995 compat: call kallsyms functions via static_call

On x86 kernels with CONFIG_X86_KERNEL_IBT running on an IBT-enabled
CPU, loading libcfs BUGs with "Missing ENDBR" when Lustre calls
kernel functions through pointers obtained from kallsyms.

The kernel seals the ENDBR of every function whose address is never
taken: objtool lists it in .ibt_endbr_seal and apply_seal_endbr()
poisons it at boot. kallsyms_lookup_name() is one of those
functions, as are alloc/free/apply_workqueue_attrs() and
security_file_alloc/free(), so none of them can be called through
a pointer from a module, whatever address is used.

A direct call or jmp does not need an ENDBR. On x86 kernels with
CONFIG_HAVE_STATIC_CALL, which every IBT kernel has, define a
static_call() in libcfs for kallsyms_lookup_name() and for each
function that lustre_symbols_init() looks up, and point it at the
kallsyms address with static_call_update(). The call sites are then
patched into direct calls to the kernel function, which also avoids
the indirect branch mitigations on kernels without IBT, such as
RHEL 9 and SLES 15 SP4/SP5. Other kernels and architectures keep
calling through a function pointer, behind the same
CFS_DEFINE_SYMBOL(), cfs_symbol_call() and cfs_symbol_set() helpers.

find_kallsyms_lookup_name() takes kallsyms_lookup_name() from a
kprobe, whose address is not always the symbol start: with IBT it
is after the ENDBR64 (+0x4), and on ppc64le (ELFv2) it is the local
entry point (global+8), or with KPROBES_ON_FTRACE the ftrace call
site, so calling it skipped the r2/TOC setup or part of the
prologue. Rewind the address to the start of the symbol using
sprint_symbol(). On other architectures the kprobe address is
already the symbol start.

In osd-wbcfs, look up flush_delayed_fput() before
class_register_type() and fail osd_init() if the lookup fails.
Previously a failed lookup left cfs_flush_delayed_fput NULL while
the module still loaded, so osd_umount()/osd_flush_fput() would
later call a NULL pointer. flush_delayed_fput() is exported since
v5.4, before IBT support was added in v5.18, so on IBT kernels it is
called directly and its ENDBR is never sealed.

The sanity runs below only exercise the IBT path if the test nodes
boot an IBT-enabled kernel on IBT-capable hardware; otherwise they
only verify that nothing regresses without IBT enforcement.

Test-Parameters: trivial
Test-Parameters: testlist=sanity clientdistro=el10.2
Test-Parameters: testlist=sanity clientdistro=el10.1
Test-Parameters: testlist=sanity clientdistro=el9.8
Test-Parameters: testlist=sanity clientdistro=el8.10
Test-Parameters: testlist=sanity clientdistro=sles15sp7
Test-Parameters: testlist=sanity clientdistro=ubuntu2404
Test-Parameters: testlist=sanity clientdistro=ubuntu2604

Fixes: b18bfc7c7935 ("LU-18687 compat: improve cfs_kallsyms_lookup_name()")
Fixes: 25813cf8ba53 ("LU-18813 osd-wbcfs: MemFS-based OSD with writeback support")
Signed-off-by: Jian Yu <yujian@whamcloud.com>
Assisted-by: Claude:claude-opus-5-5
Change-Id: I4fd5dae7454c9e9b0865c95c8369af15d6632516
69136 master J –B ✓T ✓R +1/2−
LU-14144 utils: remove "lctl modules" command
reviewing Andreas Dilger · you voted +1 on current PS
2 unresolved M +4 −103
1d
build #134540 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-27 09:47 · Jian Yu +1 2026-10-27 09:47 · Timothy Day -1 2026-11-02 15:46
patchsets: PS1 09-23 PS2 09-24 PS3 09-24 PS4 10-14 PS5 10-27
your previous vote: +1 on PS3 (2026-10-06 15:54) — now at PS5
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-11-02 15:46 Timothy Day conf-sanity.sh:886 — Good point. We should use modprobe -r lustre, since it will try to remove lustre and the parent modules. And perhaps something like modprobe
Oleg Drokin PS5 · 2026-11-01 01:00
this introduces a gap:
before a whole bunch of modules would be attempted to be removed and now it's just lustre.
On the surface it's the same but in practice if we allow e.g. ptlrpc.ko removed that's kinda bad (it'll likely be seen as a crash since rmmod still fails for other modules I imagine.

Now how to get a list of all lustre-related modules - I am not so sure.
Timothy Day PS5 · 2026-11-02 15:46
Good point. We should use modprobe -r lustre, since it will try to remove lustre and the parent modules. And perhaps something like modprobe --show-depends lustre | xargs modprobe -r to try to remove each parent module individually.

But modprobe should have everything we need. No reason to have custom infrastructure regardless.
reply PS5 2026-11-01 01:00 Oleg Drokin debug.c:816 — I wonder if this could be autogenerated instead if we wanted it back for whateevr reason? (e.g. that list for rmmod)
Oleg Drokin PS5 · 2026-11-01 01:00
I wonder if this could be autogenerated instead if we wanted it back for whateevr reason? (e.g. that list for rmmod)
owner Andreas Dilger · uploader Andreas Dilger · PS5 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-14144 utils: remove "lctl modules" command

"lctl modules" printed gdb add-symbol-file commands from a list of
module names and source paths that has not been updated in years,
so it is missing most server modules and names stale .o files.
The kernel's gdb "lx-symbols" script, crash "mod -S", and drgn all
load module symbols properly.

Remove the command rather than keep another list of module names.
Remove the unused "ogdb" symbol dumps from test-framework.sh and
run-llog.sh.  Fix conf-sanity test_25, which passed the bogus .o
paths to rmmod and so never tried to remove any modules.

Test-Parameters: trivial
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Assisted-by: ClaudeCode:claude-opus-5.5 ltvm,llm_code_and_review_tools
Change-Id: I918b9ab2ab3d0c7fc38f575989860dadd13ebbe5
58298 master J –B ✓T ✓R +1/2
LU-18774 lnet: SIGSEGV in lnetctl yaml parser
reviewing Frank Sehr · you voted +1 on current PS
2 unresolved S +29 −7
2d
build #134903 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-11-02 14:14
no vote yet: Cyril Bordage, Manish Regmi, Serguei Smirnov, Chris Horn, Andreas Dilger, Timothy Day
patchsets: PS1 03-04 PS2 08-01 PS3 09-16 Manish Regmi PS4 10-30 Manish Regmi
your previous vote: -1 on PS3 (2026-10-19 15:56) — now at PS4
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-09-17 23:38 Gerrit AI review for Lustre COMMIT_MSG:16 — (style) This fixes a user-visible crash, so a Fixes: tag would help backport tracking. The unchecked `strchr()` return goes back to:
Gerrit AI review for Lustre PS3 · 2026-09-17 23:38
(style) This fixes a user-visible crash, so a Fixes: tag would help backport tracking. The unchecked `strchr()` return goes back to:

    Fixes: 3c39dac19aaf ("LU-9680 utils: add netlink infrastructure")

which added `yaml_quotation_handling()` with `tmp = strchr(line, '\"') - 1; tmp[0] = ' ';` and no NULL check.
reply PS4 2026-10-31 17:41 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) The `tmp = buf` reset changes more than the unmatched case. Before, when the double quotes were balanced, the single-quote scan star
Gerrit AI review for Lustre PS4 · 2026-10-31 17:41
(minor) The `tmp = buf` reset changes more than the unmatched case. Before, when the double quotes were balanced, the single-quote scan started at the last closing `"`, so any `'` earlier in the buffer reached the kernel unchanged:

    in : 0: x'y\n  1: "z"
    old: 0: x'y\n  1:  z
    new: 0: x y\n  1:  z

The new behaviour looks right. If the patch is refreshed, maybe say that yaml_quotation_handling() now always scans the whole buffer for single quotes, not only after an unmatched double quote.
owner Frank Sehr · uploader Manish Regmi · PS4 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-18774 lnet: SIGSEGV in lnetctl yaml parser

Avoid dereferencing a NULL pointer when YAML output contains an
unmatched single or double quotation mark. Continue scanning for
single quotation marks after an unmatched double quotation mark.

Add a sanity-lnet regression test for both cases.

Test-Parameters: trivial testlist=sanity-lnet env=ONLY=411
Fixes: 3c39dac19aaf ("LU-9680 utils: add netlink infrastructure")
Assisted-by: Claude:claude-opus-5.5
Signed-off-by: Frank Sehr <fsehr@whamcloud.com>
Signed-off-by: Manish Regmi <mregmi@ddn.com>
Change-Id: I2633ee0bb5461eec25044f0ca622cfaf18e2e5a1
69442 master J –B ✓T ✓R +2/2
LU-20861 build: support ->create() without excl argument
reviewing Chell · you voted +1 on current PS
master-next 1 unresolved M +50 −9
2d
build #134784 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-29 18:52 · Chell +1 2026-10-29 19:07 · Timothy Day +1 2026-10-29 18:46
no vote yet: Shaun Tancheff
patchsets: PS1 10-05 PS2 10-06 PS3 10-29 Timothy Day
your previous vote: +1 on PS2 (2026-10-07 15:25) — now at PS3
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-10-13 22:11 Chell namei.c:2053 — Acknowledged
Gerrit AI review for Lustre PS2 · 2026-10-07 07:29
(nit) This isn't a bug, and the label is older than this patch, but since the format string is rewritten here anyway: `mode` is printed as "flags=%u" in decimal. If the patch is refreshed, consider "mode=%o" to match the ll_mknod() debug message just above.
Chell PS2 · 2026-10-13 22:11
Acknowledged
owner Chell · uploader Timothy Day · PS3 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-20861 build: support ->create() without excl argument

Linux commit v7.2-rc1-9-gb2f1e6301efa ("Remove excl arg to ->create
inode_operation") dropped the bool excl argument from
inode_operations.create(), so ll_create_nd() and memfs_create_nd() no
longer match the ops table type on v7.3.

Add a configure check for the four-argument form. Define
ll_create_nd() and memfs_create_nd() with that signature and adapt
their declarations for older kernels through lustre_compat/linux/fs.h,
including kernels without the namespace argument.

Remove excl from the ll_create_nd() debug message; neither callback
uses it for create semantics.

Test-Parameters: trivial
Assisted-by: ClaudeCode:Opus-5.5
Signed-off-by: Chell Laszlo <pumpkinbiscuit@proton.me>
Change-Id: Ib362f146cd737acc6ab2734ce237f4a7fce0b813
67518 master J –B ✓T ✓R +3/2
LU-18687 build: normalize C flags in kernel Makefiles
reviewing Timothy Day · you voted +1 on current PS
pw_smallfix master-next S +14 −7
2d
build #134719 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-11-01 13:49 · Arshad Hussain +1 2026-11-02 08:57 · Andreas Dilger +1 2026-10-30 00:05
no vote yet: Shaun Tancheff
patchsets: PS1 07-24 PS2 07-24 PS3 10-28 patrick bot PS4 10-29 patrick bot
tags: pw_smallfix
owner Timothy Day · uploader patrick bot · PS4 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: normalize C flags in kernel Makefiles

Restrict subsystem include paths and put generated configuration
before kernel headers.  Keep Lustre headers available to LNet's
remaining compatibility users.

Defer the compatibility header overlay until the wrappers support
transparent inclusion, so they do not hide native kernel headers.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Assisted-by: Codex:gpt-6.1-sol
Change-Id: I8b35b99767f7ea41cc3c590bf35089fb81a1bf2c
67497 master J !B ✓T ✓R +3/2
LU-6301 llite: clear rq_replay in ll_open_cleanup
reviewing Oleg Drokin · you voted +1 on current PS
master-next 7 unresolved M +85 −7
2d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #131085 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-31 13:14 · Andreas Dilger +1 2026-09-21 14:50 · Alex Zhuravlev +1 2026-10-30 05:47
no vote yet: Lai Siyao, Timothy Day
patchsets: PS1 07-23 PS2 07-23 PS3 07-23 PS4 07-26 PS5 09-04
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-07-27 20:21 Gerrit AI review for Lustre COMMIT_MSG:22 — (minor) ll_splice_alias() in this tree still calls d_add(), so it cannot return an ERR_PTR and the ll_lookup_it_finish() error path describe
Gerrit AI review for Lustre PS4 · 2026-07-27 20:21
(minor) ll_splice_alias() in this tree still calls d_add(), so it cannot return an ERR_PTR and the ll_lookup_it_finish() error path described here is not reachable via that route yet. The leak itself is still reachable (ll_prep_inode() failure, llcrypt_prepare_readdir() failure, md_get_fid_from_lsm() failure), so maybe reword this as a future/companion-patch motivation rather than the current reproducer?
reply PS4 2026-07-27 20:21 Gerrit AI review for Lustre COMMIT_MSG:37 — (minor) Two hunks aren't covered by the description.
Gerrit AI review for Lustre PS4 · 2026-07-27 20:21
(minor) Two hunks aren't covered by the description.

The text reads as if ll_atomic_open()'s out_release already called ll_open_cleanup() and is only being simplified, but in the parent out_release was just ll_intent_release(it). This patch adds a brand new cleanup call there, which sends close RPCs on paths that previously sent none (including the finish_no_open() paths, where atomic_open returns 1 and the VFS re-opens). That is a behavior change worth spelling out.

The new "!pill->rc_req || pill->rc_req->rq_commit_cb" guard in ll_open_cleanup() isn't mentioned at all, and the closing sentence says the callers no longer reach into rq_replay/rq_commit_cb -- they never did; it is the function that now depends on rq_commit_cb.
reply PS4 2026-07-27 20:21 Gerrit AI review for Lustre llite_lib.c:3783 — (minor) This guard could use a comment. rq_commit_cb is standing in for two things that aren't obvious from the test: an och now owns the ha
Gerrit AI review for Lustre PS4 · 2026-07-27 20:21
(minor) This guard could use a comment. rq_commit_cb is standing in for two things that aren't obvious from the test: an och now owns the handle (mdc_set_open_replay_data() sets rq_commit_cb and mod->mod_och together), and rq_early_free_repbuf was set at the same time, so rq_repmsg may already have been freed by the ptlrpc_req_put() in ll_file_open() and req_capsule_server_get() below would have nothing to read.

The !pill->rc_req half looks unreachable: req_capsule_init() and req_capsule_subreq_init() both store a non-NULL request, and nothing else could have produced a server reply to read here.
reply PS4 2026-07-27 20:21 Gerrit AI review for Lustre llite_lib.c:3802 — (defect) Clearing rq_replay after md_close() may be too late to have any effect.
Gerrit AI review for Lustre PS4 · 2026-07-27 20:21
(defect) Clearing rq_replay after md_close() may be too late to have any effect.

md_close() is synchronous, and after_reply() for the close runs on the same import: it advances imp_peer_committed_transno and calls ptlrpc_free_committed(). If the open's transno has committed by then, that pass moves the open request to imp_committed_list while rq_replay is still 1:

    if (req->rq_replay) {
            list_move_tail(&req->rq_replay_list, &imp->imp_committed_list);
            continue;
    }

Once it is on imp_committed_list, clearing rq_replay does nothing: ptlrpc_free_committed() only walks that list when skip_committed_list is false, i.e. when the import generation changed or on the first scan. So the request is retained until reconnect -- the exact behavior this patch is trying to avoid, just with a smaller window.

mdc_close() clears rq_replay before sending the close for this reason. Would doing the same here (and/or calling ptlrpc_request_committed() afterwards, as mdc_free_open() does) make the fix deterministic?
reply PS5 2026-09-21 14:50 Andreas Dilger llite_lib.c:3852 — Should be tracked to put into a separate patch if this one does not need to be refreshed.
Gerrit AI review for Lustre PS5 · 2026-09-06 11:22
(minor) Not a bug, but this is only equivalent to mdc_free_open() for a create. That one computes the force argument:

    if (mod->mod_is_create == 0 &&
        imp_connect_disp_stripe(mod->mod_open_req->rq_import))
            committed = 1;
    ptlrpc_request_committed(mod->mod_open_req, committed);

With force 0, an abandoned open whose transno has not committed yet stays on imp_replay_list, and ptlrpc_replay_next() walks that list without looking at rq_replay -- so an MDT failure before the commit still replays the open and recreates the handle the close just released, with mdc_replay_open() logging "cannot properly replay without open data" because rq_cb_data is NULL.

Since mod_is_create is just DISP_OPEN_CREATE || DISP_OPEN_STRIPE, the same condition is available from the intent here. Worth matching mdc_free_open() if the patch is refreshed?
Andreas Dilger PS5 · 2026-09-21 14:50
Should be tracked to put into a separate patch if this one does not need to be refreshed.
reply PS4 2026-07-27 20:21 Gerrit AI review for Lustre namei.c:1560 — (minor) The comment doesn't quite match the code: both finish_no_open() branches fall through to out_release with rc = 1, which is the succe
Gerrit AI review for Lustre PS4 · 2026-07-27 20:21
(minor) The comment doesn't quite match the code: both finish_no_open() branches fall through to out_release with rc = 1, which is the success return telling the VFS to open the dentry itself, not an error. Releasing the MDT handle there looks right, but "all successful opens jump to out_free" isn't accurate.
reply PS4 2026-07-27 20:21 Gerrit AI review for Lustre namei.c:1562 — (defect) Is it_request still referenced here?
Gerrit AI review for Lustre PS4 · 2026-07-27 20:21
(defect) Is it_request still referenced here?

The commit message says DISP_ENQ_OPEN_REF must survive so ll_intent_release() drops the reference mdc_finish_intent_lock() took. But on the path that reaches out_release through ll_finish_open(), ll_file_open() has already dropped it:

    out_nofiledata:
        if (it && it_disposition(it, DISP_ENQ_OPEN_REF)) {
                ptlrpc_req_put(it->it_request);
                it_clear_disposition(it, DISP_ENQ_OPEN_REF);
        }

ll_file_open_encrypt() failure -> ll_release_openhandle() does the same. it->it_request is not cleared, and DISP_OPEN_OPEN is left set by both, so the guard here passes on a pointer the intent no longer owns.

ll_lookup_it() has also already done its own ptlrpc_req_put(req) by then, so the only remaining reference is the replay-list one. ptlrpc_free_committed() drops that as soon as the import generation moves (req->rq_import_generation < imp_generation -> ptlrpc_free_request()), i.e. on any reconnect/eviction/failover racing this open. And on a read-only export there is no replay-list reference at all: mdt_empty_transno() returns early for mdt_rdonly(), so rq_transno is 0, mdc_finish_enqueue() clears rq_replay, and after_reply() never retains the request -- the put in ll_file_open() is then the last one and the request is freed before we get here.

Same condition also breaks the rq_commit_cb guard: it is only installed when the open is replayable, so with rq_replay == 0 an och (or ll_release_openhandle()) owns the handle and this still sends a close for it.

Would also requiring it_disposition(it, DISP_ENQ_OPEN_REF) fix both? That bit tracks exactly "the intent still holds a reference and nobody has consumed the open handle", and it is still set on the paths this hunk is meant to catch (ll_lookup_it() errors, pcc_inode_create_fini() failure).
owner Oleg Drokin · uploader Oleg Drokin · PS5 uploaded 60d ago · NEW · open in Gerrit ↗
commit message
LU-6301 llite: clear rq_replay in ll_open_cleanup

ll_open_cleanup() closes the MDT-side handle of an open the client
abandoned after the MDT had granted it, but leaves the open request
itself replayable. Nothing ever clears rq_replay for such a request:
it has no och and therefore no mdc_commit_open() commit callback, so
once the transaction commits ptlrpc_free_committed() moves it to
imp_committed_list, where it stays -- pinning a reply buffer sized to
max_mds_easize, hundreds of KB with wide/PFL/DoM layouts -- until the
next reconnect. A workload that takes the open-error path often enough
grows that list without bound and can OOM the client.

Clear rq_replay before sending the close, exactly as mdc_close() does
for a normal close, and drop the request from the replay list with
ptlrpc_request_committed() afterwards, as mdc_free_open() does. Clearing
it after md_close() would be too late: after_reply() for the close runs
ptlrpc_free_committed() on the same import, and if the open has committed
by then the request is moved to imp_committed_list with rq_replay still
set -- and that list is only rescanned when the import generation changes.
Both happen even if op_data cannot be allocated and no close goes out,
since that is the low-memory case this is meant to help.

Make ll_open_cleanup() self-guarding while here. It takes the
lookup_intent instead of a req_capsule and does nothing unless
DISP_OPEN_OPEN is set, i.e. the MDT granted an open and the reply holds a
handle to release. Which reference on that reply it may use then depends
on how the open ended. With DISP_ENQ_OPEN_REF set the intent still owns
the reference mdc_finish_intent_lock() took, so it->it_request is safe.
Without it, and with the open itself successful, ll_file_open() or
ll_release_openhandle() has taken the handle over and cleared the bit; an
och owns the handle (and with it rq_early_free_repbuf) and the request
may already be freed -- on a non-replayable open, such as one against a
read-only export, mdc_finish_enqueue() clears rq_replay, nothing retains
the request, and their ptlrpc_req_put() was the last reference. Without
it and with the open failed, the bit was never set at all, because
mdc_finish_intent_lock() only sets it when it_open_error(DISP_OPEN_OPEN)
is zero; the MDT can install the mfd in mdt_finish_open() and then fail
the request in mdt_refetch_lovea(), and that handle still has to be
released. Nothing retains the reply there either -- mdt_reint_open()
zeroes the transno on error -- so the caller's own reference is the only
one, and callers that have one pass it in. ll_lookup_it_finish() and
ll_prep_inode() do; ll_atomic_open()'s out_release passes NULL, since
ll_lookup_it() has already dropped it by then. DISP_OPEN_OPEN is cleared
once the close has been issued, so a second cleanup of the same abandoned
open is a no-op; DISP_ENQ_OPEN_REF must survive for ll_intent_release()
to drop the reference.

ll_atomic_open() gains a cleanup call on out_release, which previously
only released the intent. That label is reached both by the error exits
and by the two finish_no_open() branches, which return 1 and leave the
VFS to open the dentry itself; either way the handle granted for this
intent is abandoned, and until now it leaked until umount or eviction.
It passes no request of its own, since ll_lookup_it() has already
dropped its reference by then, so it covers the intents that still carry
DISP_ENQ_OPEN_REF and not an open the MDT granted and then failed --
that one arrives here through ll_file_open()'s out_och_free with the bit
already clear, and freeing it would need ll_lookup_it() to hand the
reply reference back. As at the other two call sites, the intent lock is
dropped first, since the close waits for a mod RPC slot and holding the
lock across that wait can get the client evicted (LU-13101).

The leak is reachable today via ll_prep_inode() and
llcrypt_prepare_readdir() failures. It becomes
easy to hit with "LU-9868 llite: use d_splice_alias for directories",
which lets ll_splice_alias() fail with -ELOOP or -ESTALE where the
current d_add() cannot: a racing rename/create workload then drives
ll_lookup_it_finish() into this error path thousands of times per run.

Fixes: d2b203692e24 ("LU-6301 llite: cleanup open handle for client open failure")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Iea44872f5507d829c1baa791ed179ee0f13f09c1
67385 master J –B ✓T ✓R +3/2
LU-20232 build: dkms-deb should only build dkms packages
reviewing Timothy Day · you voted +1 on current PS
master-next 3 unresolved S +19 −24
2d
build #134168 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-29 13:23 · Xiao Yang +1 2026-10-22 07:08 · Minh +1 2026-10-28 20:16
no vote yet: Shaun Tancheff, Patrick Farrell
patchsets: PS1 07-20 PS2 08-25 Minh PS3 10-07 Minh PS4 10-21
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-10-23 01:21 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but if the patch is refreshed: the make target is `dkms-debs`, not `dkms-deb`. The target also still builds `lustr
Gerrit AI review for Lustre PS4 · 2026-10-23 01:21
(style) This isn't a bug, but if the patch is refreshed: the make target is `dkms-debs`, not `dkms-deb`. The target also still builds `lustre-source`, the module-assistant source package, which isn't a DKMS package. Something imperative like "build: build only arch-indep packages for dkms-debs" would describe the change more accurately.
reply PS4 2026-10-23 01:21 Gerrit AI review for Lustre COMMIT_MSG:27 — (suggestion) Which testing exercises this? `testgroup=full-dkms` with the default distro runs on RHEL and installs from `make dkms-rpm`, so
Gerrit AI review for Lustre PS4 · 2026-10-23 01:21
(suggestion) Which testing exercises this? `testgroup=full-dkms` with the default distro runs on RHEL and installs from `make dkms-rpm`, so it never runs debian/rules or config/Makefile.dkms-deb. Is there an Ubuntu client distro option for full-dkms that could be added here? If not, it would help to note in the commit message that `make dkms-debs` was built and the resulting lustre-client-modules-dkms package was installed by hand.
reply PS4 2026-10-23 01:21 Gerrit AI review for Lustre Makefile.dkms-deb:22 — (minor) KERNEL_OBJ and KERNEL_SRC are only read by the configure-stamp rule in debian/rules (`--with-linux=`/`--with-linux-obj=`), and that
Gerrit AI review for Lustre PS4 · 2026-10-23 01:21
(minor) KERNEL_OBJ and KERNEL_SRC are only read by the configure-stamp rule in debian/rules (`--with-linux=`/`--with-linux-obj=`), and that rule no longer runs for this target. The commit message dropped the systemd and int_o2ib settings for the same reason. If the patch is refreshed, could these two exports and the "Kernel Source/Object" echoes go too? As written, the output suggests the build kernel still matters for dkms-debs.
owner Timothy Day · uploader Timothy Day · PS4 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-20232 build: dkms-deb should only build dkms packages

Make the lustre-client-modules-dkms package Architecture: all,
since the DKMS package ships source and builds modules on the
target host rather than shipping prebuilt binaries.

Build only the arch-independent packages (source + DKMS) for
the dkms-debs target by passing -g to dpkg-buildpackage, and
trim the mv list to the packages that are actually produced.

Neither package needs a configured or built tree: both ship the
source as-is, and the UAPI headers the DKMS package installs are
not generated. Copy them with dh_install instead of running a
full "make install" into a temporary DESTDIR, which compiled the
whole tree under fakeroot just to extract a few headers. With
that, build-indep is empty, the source and DKMS binary rules no
longer depend on configure-stamp, and the systemd and int_o2ib
build profiles only consumed by configure are dropped from the
dkms-debs target.

Test-Parameters: trivial testgroup=full-dkms
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I287da7cff8e743b84e7e5d7f1344bdcee325db1c
66647 master J !B ✓T ✓R +2/2
LU-9639 ldlm: Add kernel doc style for LDLM (3)
reviewing Arshad Hussain · you voted +1 on current PS
dwg master-next 3 unresolved L +206 −46
2d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #130208 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-29 18:54 · Timothy Day +1 2026-10-29 18:52
no vote yet: Oleg Drokin
patchsets: PS1 06-14 PS2 08-24 Oleg Drokin PS3 08-25
your previous vote: +1 on PS1 (2026-07-30 19:02) — now at PS3
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-08-26 02:13 Gerrit AI review for Lustre COMMIT_MSG:15 — The body describes this as a kernel-doc conversion plus two corrected claims, but the diff also changes three lines in ldlm_setup() from GOT
Gerrit AI review for Lustre PS3 · 2026-08-26 02:13
The body describes this as a kernel-doc conversion plus two corrected claims, but the diff also changes three lines in ldlm_setup() from GOTO(out, -ENOMEM) to GOTO(out, rc = -ENOMEM). That is a behaviour change, not a comment change, and nothing in the message accounts for it.

It is worth spelling out, because it is a real fix: GOTO() only logs its second argument, so with rc still 0 from the declaration the out: path ran ldlm_cleanup() (which frees ldlm_state and sets it NULL) and then returned 0. ldlm_get_ref() read that as success and left ldlm_refcount at 1, so the next ldlm_state deref (for example __ldlm_bl_to_thread() reading ldlm_state->ldlm_bl_pool) was on a NULL pointer.

Could the body say what the three lines fix, or should the fix land as its own change?
reply PS3 2026-08-26 02:13 Gerrit AI review for Lustre COMMIT_MSG:16 — Since the patch now fixes ldlm_setup() returning 0 on the kobject/kset failure paths, should it carry a Fixes: tag so the maintenance branch
Gerrit AI review for Lustre PS3 · 2026-08-26 02:13
Since the patch now fixes ldlm_setup() returning 0 on the kobject/kset failure paths, should it carry a Fixes: tag so the maintenance branches pick it up?

    Fixes: 1196bd199e7c ("LU-8066 ldlm: move /proc/fs/lustre/ldlm to sysfs")

That commit added the three GOTO(out, -ENOMEM) sites along with the kobject/kset setup.
reply PS3 2026-08-26 02:13 Gerrit AI review for Lustre ldlm_lockd.c:3546 — This and the two below are the only non-comment lines in the patch. The change itself is right - without the assignment rc stays 0 from the
Gerrit AI review for Lustre PS3 · 2026-08-26 02:13
This and the two below are the only non-comment lines in the patch. The change itself is right - without the assignment rc stays 0 from the declaration and ldlm_setup() reports success after ldlm_cleanup() has already torn everything down - but it belongs with a commit-message entry and a Fixes: tag rather than riding along with the kernel-doc conversion.
owner Arshad Hussain · uploader Arshad Hussain · PS3 uploaded 71d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (3)

Convert the descriptive function comments in ldlm_lockd.c to
kernel-doc style, and drop '/**' from the two static-variable
comments, which are not kernel-doc. Two long-standing claims are
corrected while converting: the waiting-lock helpers work under
waiting_locks_spinlock, not the namespace lock, and
ldlm_server_glimpse_ast() neither waits for the reply nor updates
the LVB itself.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I8a1c827a7fd7f0638fd450ba4ffdf6a78e53fd70
66515 master J ✗1B ✓T ✓R +2/2
LU-9639 ldlm: Add kernel doc style for LDLM (8)
reviewing Arshad Hussain · you voted +1 on current PS
dwg master-next M +55 −16
2d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity2@zfs:test_56aseen in 45 other reviews
1 optional test failure(s) — informational
build #126089 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-29 18:52 · Timothy Day +1 2026-10-29 18:49
owner Arshad Hussain · uploader Arshad Hussain · PS1 uploaded 149d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (8)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ie72810f8dfacafcc70f898c59ddf7493a202b791
66209 master J –B ✓T ✓R +1/2−
LU-20310 lod: fix remaining checkpatch.pl warnings
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase M +157 −77
3d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
build #134613 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-29 18:53 · Arshad Hussain +1 2026-10-28 08:49
no vote yet: Andreas Dilger
patchsets:
+1 earlier PS1 05-27
PS2 07-14 PS3 07-14 PS4 10-13 PS5 10-28 Arshad Hussain PS6 10-28 Arshad Hussain
your previous vote: +1 on PS3 (2026-08-06 19:50) — now at PS6
owner Timothy Day · uploader Arshad Hussain · PS6 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20310 lod: fix remaining checkpatch.pl warnings

... via checkpatch.pl --fix-inplace.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I05eb56bf377e947e654de8424e5c0f47609975ec
69650 master J –B ✓T ✓R +0/2−
LU-17916 sec: fix in-kernel fscrypt macros and blocksize
reviewing Sebastien Buisson · you voted -1 on current PS
CI@PS6 M +107 −6
4d
build #134349 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-28 16:39 · Andreas Dilger +1 2026-10-27 10:24
no vote yet: Artem Blagodarenko, Timothy Day
patchsets:
+2 earlier PS1 10-13 PS2 10-13
PS3 10-14 PS4 10-19 PS5 10-20 PS6 10-23 PS7 10-27
build/test results are from PS6 — PS7…PS7 changed only the commit message (votes copied, CI not re-run)
owner Sebastien Buisson · uploader Sebastien Buisson · PS7 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-17916 sec: fix in-kernel fscrypt macros and blocksize

When Lustre is built with in-kernel fscrypt, LL_CRYPTO_BLOCK_SIZE
is defined as FS_CRYPTO_BLOCK_SIZE, which kernel 5.19 split into
FSCRYPT_CONTENTS_ALIGNMENT and an internal definition. It is the
AES block size, so define it as 16, as embedded llcrypt does.

Since the switch to struct folio, llcrypt_decrypt_pagecache_blocks()
takes a folio and a page offset in it, but the in-kernel fscrypt
mapping was still passing 3 arguments to
fscrypt_decrypt_pagecache_blocks(). That function took a page
before kernel 6.3, and was removed in kernel 7.3. Implement
llcrypt_decrypt_pagecache_blocks() with
fscrypt_decrypt_block_inplace(), available in all these kernels,
block by block, as fscrypt_decrypt_pagecache_blocks() does.

Also, llcrypt_encrypt_pagecache_blocks() takes and returns a folio,
and llcrypt_finalize_bounce_page() takes a folio pointer and a page
offset in it. With in-kernel fscrypt, implement both as wrappers
converting between folio and page.

The in-kernel fscrypt build still fails with kernels from 5.10,
which removed fscrypt_inherit_context().

Fixes: 51de594ed75a ("LU-17916 osc: switch to struct folio")
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Assisted-by: Claude:claude-opus-5-5 ltvm
Change-Id: I035cf2348e13489d1e97edb7b844268cc1ab5b94
69833 master J –B ✓T ✓R +0/2−
LU-20903 obdclass: fix stats key table overflow
reviewing patrick bot · you voted -1 on current PS
pw_own M +47 −11
5d
build #134242 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-23 14:02 · Andreas Dilger +1 2026-10-27 10:39
no vote yet: Arshad Hussain, Patrick Farrell, Timothy Day
patchsets: PS1 10-20 PS2 10-21 PS3 10-22
tags: pw_own
owner patrick bot · uploader patrick bot · PS3 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-20903 obdclass: fix stats key table overflow

A Netlink stats request, which non-root lctl get_param uses
for exports stats, builds a key table that is two entries
larger than the buffer allocated for it. The table is
sized for LUSTRE_STATS_ATTR_MAX + ls_num - 1 keys, but
indices up to LUSTRE_STATS_ATTR_MAX + ls_num are written,
so 32 bytes are written past the end of the allocation.
Since lkl_maxattr is also one too large, the reply carried
a key for a dataset attribute that is never sent.

Size the table for all of its slots and set lkl_maxattr to
the last dataset attribute actually used. Also copy the
fixed keys one by one, since a struct assignment does not
copy the flexible array member and compilers differ in
whether they copy the keys anyway.

Add sanity 104e to run exports stats queries as a non-root
user against the MDS and OSS. It names each export, since
the Netlink source filter cannot glob over the dots of an
IPv4 NID.

Fixes: 5803284ac3a5 ("LU-11850 obd: use netlink to get lustre stats")
Assisted-by: ClaudeCode:claude-sonnet-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Patrick Farrell <patrick@thelustrecollective.com>
Change-Id: I0094d5b00d478777daeff1469968bc321103483b
69371 master J !B ✓T ✓R +1/2−
LU-20847 lnetctl: peer show drops unknown peer msg
reviewing Cyril Bordage · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase 3 unresolved S +17 −0
5d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #132693 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-29 14:51 · Xinxia Qu +1 2026-10-29 14:37 · Chris Horn +1 2026-10-18 15:30 · Timothy Day +1 2026-10-20 18:53
no vote yet: Manish Regmi
threads: 2 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS1 2026-10-18 15:30 Chris Horn COMMIT_MSG:9 — +1
Gerrit AI review for Lustre PS1 · 2026-10-05 06:02
(minor) If the patch is refreshed: the body describes the symptom only. Could it say how the fix works, i.e. yaml_lnet_peer_display() now returns 0 on a netlink reader error so yaml_lnet_peer() reports the kernel extack message? Also, the same non-list path handles `lnetctl peer add`, `peer del` and `peer set`, so kernel errors from those commands were also being dropped and are now printed. It would help to mention that too, since it is a user-visible change beyond `peer show`.
Chris Horn PS1 · 2026-10-18 15:30
+1
reply PS1 2026-10-05 06:02 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) This looks like a regression from the LU-18083 change, which added `rc = -EINVAL` at out_err: in yaml_lnet_peer_display(). Before th
Gerrit AI review for Lustre PS1 · 2026-10-05 06:02
(minor) This looks like a regression from the LU-18083 change, which added `rc = -EINVAL` at out_err: in yaml_lnet_peer_display(). Before that, a failed yaml_parser_load() in the non-list branch returned 0, so yaml_lnet_peer() fetched the reader error and printed it through yaml_lnet_print_error(). After it, the -EINVAL skips that print. Should this carry:

Fixes: 9d78f39798 ("LU-18083 utils: handle more than one peer NI per peer")
owner Cyril Bordage · uploader Cyril Bordage · PS1 uploaded 33d ago · NEW · open in Gerrit ↗
commit message
LU-20847 lnetctl: peer show drops unknown peer msg

"lnetctl peer show" of an unknown peer was dropping kernel error
report.

Test-parameters: trivial
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I0da574282f9e77c40b11ac33c82b8c4d71f5a8dd
68338 master J –B ✓T ✗14R -2/2−
LU-19404 lnet: retry netlink dump on ENOBUFS
reviewing Minh · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 10 unresolved M +97 −5
6d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
you voted -1 on current PS
failed enforced testplatformdetail
review-dne-ipv6 RHEL 9.8 / x86_64 ran 4 tests. 1 tests failed: sanity-lnet. session
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-dne-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-zfs-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.8 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 10.1 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.7 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 6 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
build #134019 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-19 16:13
no vote yet: Alexey Lyashkov, Serguei Smirnov, Andreas Dilger, Timothy Day
patchsets: PS1 08-25 PS2 08-25 PS3 10-16 PS4 10-19
your previous vote: -1 on PS2 (2026-08-25 15:42) — now at PS4
threads: 8 need your reply · 1 waiting on others · 1 own notes · 0 bot
reply PS3 2026-10-18 13:40 Gerrit AI review for Lustre COMMIT_MSG:7 — (minor) Is LU-19404 the right ticket? It describes sanity-lnet test_50 failing in `lnetctl import` of `routing: enable` with errno -12 on an
Gerrit AI review for Lustre PS3 · 2026-10-18 13:40
(minor) Is LU-19404 the right ticket? It describes sanity-lnet test_50 failing in `lnetctl import` of `routing: enable` with errno -12 on an aarch64 64K-page client. test_50 now lowers the router buffer counts because the default pool needs about 1 GiB. That points to a real ENOMEM from router buffer allocation, not a dump ENOBUFS.

This patch only adds retries to the `LNET_CMD_NETS` dump path, which an `import` doesn't use. Should this patch get its own LU ticket?
reply PS3 2026-10-16 20:58 Andreas Dilger COMMIT_MSG:20 — do the large allocations not fall back to `OBD_ALLOC_LARGE()` (or `kvmalloc()` internally)?
Andreas Dilger PS3 · 2026-10-16 20:58
do the large allocations not fall back to `OBD_ALLOC_LARGE()` (or `kvmalloc()` internally)?

James, I think this is another case where we _can't_ just keep increasing the size of the buffers allocated to hold everything in one read, and have to accept that the netlink data will be returned in smaller chunks in some cases.
reply PS3 2026-10-18 13:40 Gerrit AI review for Lustre COMMIT_MSG:37 — (minor) Does fff650726b2b introduce this problem? It adds the `--nid` option and NI address handling for `net add`/`net del`. It doesn't tou
Gerrit AI review for Lustre PS3 · 2026-10-18 13:40
(minor) Does fff650726b2b introduce this problem? It adds the `--nid` option and NI address handling for `net add`/`net del`. It doesn't touch `cb->min_dump_alloc` or the reply error mapping.

The costly-order dump allocation comes from 8f64231185, which set `cb->min_dump_alloc = U16_MAX` for every net dump. b94f56769f (LU-20221) then made the size scale with the configured NIs. Something like this may fit better:

    Fixes: 8f64231185 ("LU-9680 utils: fix nested attribute handling in liblnetconfig")

That also affects the "Since LU-20221 ..." paragraph. Before LU-20221 every node asked for a ~64KB skb, which is order 4 or higher. So LU-20221 made the allocation smaller for small configs and larger only for big ones. It didn't create the costly-order allocation.
reply PS4 2026-10-20 19:01 Gerrit AI review for Lustre api-ni.c:6173 — (defect) Does this error ever reach lnetctl? Returning -ENOBUFS from the dumpit callback is not the same as an alloc_skb() failure. netlink_
Gerrit AI review for Lustre PS4 · 2026-10-20 19:01
(defect) Does this error ever reach lnetctl? Returning -ENOBUFS from the dumpit callback is not the same as an alloc_skb() failure. netlink_dump() puts the callback's return value into the NLMSG_DONE payload (dump_done_errno). It sets NLM_F_ACK_TLVS on that DONE only when netlink_ack_tlv_len() is non-zero, which needs an extack message, cookie, bad_attr, policy or miss_type. None of those are set here.

On the user side, libnl hands NLMSG_DONE to NL_CB_FINISH, so yaml_netlink_msg_complete() calls yaml_netlink_parse_msg_error(). That function only takes the error if

    nlh->nlmsg_type == NLMSG_ERROR || nlh->nlmsg_flags & NLM_F_ACK_TLVS

Neither is true for this DONE, so the -ENOBUFS is dropped. The dump then looks complete and empty. yaml_parser_load() returns an empty document, yaml_emitter_dump() prints nothing, and yaml_lnet_config_ni() returns 0. yaml_lnet_dump_retry() is never called.

If that is right, test_306 fails in both halves. With fail_loc=0x8000e005, `net show -v` exits 0 with empty output, so the "net type:" check fails. With fail_loc=0xe005 it also exits 0, so "net show succeeded with every dump failing" fires.

One fix is to have yaml_netlink_parse_msg_error() also accept an NLMSG_DONE with a negative error. That would also stop other dump errors that have no extack text from being dropped silently. Another is to inject the failure where the real one happens, before any chunk is built. Adding NL_SET_ERR_MSG() here would make the error visible, but the extack text would replace "No buffer space available", so the test's string check would need to change too. The comment above also describes a different reporting path from the one this injection takes.
note PS3 2026-10-19 16:13 James Simmons liblnetconfig_netlink.c:1089 — I disagree with the error handling change which has improved just recently. The current code return how Netlink sees it and errno so you can
James Simmons PS3 · 2026-10-19 16:13
I disagree with the error handling change which has improved just recently. The current code return how Netlink sees it and errno so you can use strerrno() as well. You seem to just want only strerro in this case. Why?
reply PS3 2026-10-18 13:40 Gerrit AI review for Lustre lnetctl.c:2670 — (minor) Should `msg` be reset to NULL here as well? Suppose the first attempt fails with ENOBUFS and a retry then loads the reply, but `yaml
Gerrit AI review for Lustre PS3 · 2026-10-18 13:40
(minor) Should `msg` be reset to NULL here as well? Suppose the first attempt fails with ENOBUFS and a retry then loads the reply, but `yaml_emitter_dump()` fails. The `rc == 0` path then prints the previous attempt's "No buffer space available" and returns -EINVAL. That branch never assigns `msg`.
reply PS3 2026-10-18 13:40 Gerrit AI review for Lustre sanity-lnet.sh:6289 — (suggestion) With only `INTERFACES[0]` configured, `lnet_net_show_start()` asks for about 2 * (NI_MSG_MIN_SIZE + NI_MSG_VALUES_SIZE), roughl
Gerrit AI review for Lustre PS3 · 2026-10-18 13:40
(suggestion) With only `INTERFACES[0]` configured, `lnet_net_show_start()` asks for about 2 * (NI_MSG_MIN_SIZE + NI_MSG_VALUES_SIZE), roughly 20KB, for 0@lo plus this NI. That is an order-3 allocation, which is not above PAGE_ALLOC_COSTLY_ORDER. GFP_KERNEL keeps retrying for it instead of failing, and on 64K-page nodes it is order 0. Changing discovery doesn't change the NI count either.

So can this test ever hit ENOBUFS, with or without the fix? A deterministic trigger would be more useful. For example, a CFS_FAIL check in `lnet_net_show_dump()` that returns -ENOBUFS would come back to user space in NLMSG_DONE and exercise the retry. Another option is to configure many NIs the way test_113 does.
reply PS3 2026-10-16 20:58 Andreas Dilger sanity-lnet.sh:6293 — (style) use `end=$((SECONDS + 30))` and `while (($SECONDS < $end))` to avoid an extra shell command each time
Andreas Dilger PS3 · 2026-10-16 20:58
(style) use `end=$((SECONDS + 30))` and `while (($SECONDS < $end))` to avoid an extra shell command each time
reply PS3 2026-10-28 22:44 Chris Horn sanity-lnet.sh:6327 — FYI, I have a fix for this stack_trap issue - https://review.whamcloud.com/c/fs/lustre-release/+/70137
Andreas Dilger PS3 · 2026-10-16 20:58
Hmm, is this true?  I don't think I've ever seen `stack_trap` being triggered from every subtest at the cleanup phase of the test script, or it would generate a ton of errors...  I wonder if Claude hallucinated this because it was running the test script shell fragment directly instead of as part of the whole test script?

If that **was** true, then we should fix `stack_trap` and not work around it inside each test script...
Chris Horn PS3 · 2026-10-17 14:55
I think it is true. stack_trap is not used in any sanity-lnet.sh test suite. IIRC, it was only a problem in janitor testing.
Chris Horn PS3 · 2026-10-28 22:44
FYI, I have a fix for this stack_trap issue - https://review.whamcloud.com/c/fs/lustre-release/+/70137
owner Minh · uploader Minh · PS4 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-19404 lnet: retry netlink dump on ENOBUFS

lnetctl net show -v and other DLC netlink dumps can fail
transiently with exit 234, empty output and a cYAML error of
"Out of memory" on a host with plenty of free memory. A rerun
succeeds.

Each dump chunk is built in an skb of at least cb->min_dump_alloc
bytes. lnet_net_show_start() set this to U16_MAX, an order-4
alloc_skb() on every node. LU-20221 sizes it from the configured
NIs instead, about 6.5KB per NI plus 3.5KB per net, so a node with
three or more NIs still needs order 4 and a large multi-rail
config needs far more. Above PAGE_ALLOC_COSTLY_ORDER these
allocations fail under memory fragmentation regardless of free
memory, and the kernel reports ENOBUFS: as an NLMSG_ERROR if the
first chunk fails, or as a socket error on recvmsg() if a later
one does. Neither can be resumed on that socket, because the
kernel only refills a dump from recvmsg() after a successful
dequeue, so only a new request recovers.

Retry the whole request on a fresh socket, bounded with
exponential backoff, when a dump fails with ENOBUFS or ENOMEM. The
retry is shared by yaml_lnet_config_ni() and yaml_lnet_route(),
the two dumps whose kernel side raises cb->min_dump_alloc. libnl
maps ENOBUFS to NLE_NOMEM, whose text is "Out of memory", so
report ENOBUFS as "No buffer space available" on both paths, and
return the real errno from yaml_lnet_config_ni() instead of
-EINVAL so the exit status, errno and message agree.

Add CFS_FAIL_NET_SHOW_DUMP to fail lnet_net_show_dump() with
-ENOBUFS, and sanity-lnet test_306 to check that lnetctl net show
retries a single failure and reports a persistent one.

Fixes: 8f64231185a9 ("LU-9680 utils: fix nested attribute handling in liblnetconfig")
TLC-bug-id: TLU-226
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Assisted-by: Claude:claude-opus-5
Change-Id: I6906afe6cca3f80b556152a94ed627d6b75631e9
54225 master J –B ✓T ✓R +0/2−
LU-17594 ptlrpc: remove ptlrpc_connection hash table
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase 6 unresolved L +273 −443
6d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
build #133581 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-10-15 19:20
no vote yet: Serguei Smirnov, Shaun Tancheff, Chris Horn, Andreas Dilger, Neil Brown, Mikhail Pershin
patchsets:
+12 earlier PS1 02-29 PS2 02-29 PS3 03-01 PS4 05-24 PS5 05-24 PS6 06-20 PS7 07-24 James Simmons PS8 12-20 PS9 01-24 James Simmons PS10 02-14 James Simmons PS11 03-16 PS12 09-03 James Simmons
PS13 09-10 James Simmons PS14 02-14 James Simmons PS15 02-23 James Simmons PS16 03-10 James Simmons PS17 10-13
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS17 2026-10-15 16:30 Gerrit AI review for Lustre COMMIT_MSG:14 — (style) The body describes the hash removal, but not three other changes in the diff:
Gerrit AI review for Lustre PS17 · 2026-10-15 16:30
(style) The body describes the hash removal, but not three other changes in the diff:

- Lifetime: a connection is now freed on the last ptlrpc_connection_put(). Before, it stayed cached until ptlrpc_connection_fini(). This is the risky part of the change, and it is why imp_lock is now taken in ptl_send_rpc(), ptlrpc_register_bulk() and rev_import_reconnect().
- ptlrpc_send_reply() no longer does the get/put of the connection.
- All of the PM-QoS code (kick_cpu_latency(), cpu_latency_work(), the per-CPU array setup and teardown, and the tunables, which become static) moves into lproc_ptlrpc.c.

Could the body explain these, or could the PM-QoS move go into its own patch?
reply PS17 2026-10-15 16:30 Gerrit AI review for Lustre ldlm_lib.c:1636 — (defect) This expands on the earlier comment about target_handle_connect() swapping export connections. Locking the swap in rev_import_recon
Gerrit AI review for Lustre PS17 · 2026-10-15 16:30
(defect) This expands on the earlier comment about target_handle_connect() swapping export connections. Locking the swap in rev_import_reconnect() covers the writer side, but most readers of these pointers still take neither exp_lock nor imp_lock.

Each ptlrpc_connection_get() now returns a private object. So when a client reconnects from a different NID, the old connection has only two references: exp_connection and revimp->imp_connection. This put drops the first one, and the put of `old_conn` in rev_import_reconnect() drops the second and calls OBD_FREE_PTR().

Meanwhile, other threads can still be using the old pointer:

- ptlrpcd: ldlm_cb_interpret() -> ldlm_handle_ast_error() reads `&req->rq_import->imp_connection->c_peer` on the reverse import, then later calls libcfs_nidstr(&peer->nid). AST failures are likely while the client is reconnecting.
- MDT service thread, on another in-flight request for the same export: ucred_set_nid() reads `info->mti_exp->exp_connection` twice with no lock.
- obd_nid_hash RCU lookups: nid_keycmp() and nid_keyhash() dereference exp->exp_connection->c_peer.nid.

Before this patch these reads were safe, because the object stayed in conn_hash until module unload. Now they look like use-after-free. Should the old connection be kept alive until those readers are done (for example, freed via RCU), or should the readers take a reference or the lock?
reply PS17 2026-10-15 16:30 Gerrit AI review for Lustre lproc_ptlrpc.c:1550 — (minor) This is pre-existing in the moved code, not introduced here. If the OBD_ALLOC_PTR() fails, this path returns with `latency_qos->lock
Gerrit AI review for Lustre PS17 · 2026-10-15 16:30
(minor) This is pre-existing in the moved code, not introduced here. If the OBD_ALLOC_PTR() fails, this path returns with `latency_qos->lock` still held. The next kick_cpu_latency() or cpu_latency_work() call for that CPU would then block forever. This could be fixed in a separate patch.
reply PS16 2026-03-20 18:55 Chris Horn niobuf.c:649 — I suspect this might not be safe either. ptlrpc_connection_addref() is just an unchecked increment. Same thing is done under rev_import_reco
Chris Horn PS16 · 2026-03-20 18:55
I suspect this might not be safe either. ptlrpc_connection_addref() is just an unchecked increment. Same thing is done under rev_import_reconnect(). Export connections can be swapped and old ones dropped in target_handle_connect() (ldlm_lib.c:1604-1615. Since connections are now freed immediately when ref reaches zero, I think this becomes another potential use-after-free in both the reply handling and revert-import reconnect paths.
reply PS16 2026-03-20 18:47 Chris Horn niobuf.c:806 — Do we need a reference here since connection is dereferenced below (line 915)? I'm concerned this could race with the connection being repla
Chris Horn PS16 · 2026-03-20 18:47
Do we need a reference here since connection is dereferenced below (line 915)? I'm concerned this could race with the connection being replaced in import_select_connection(). If I'm right then is potentially use-after-free.
reply PS17 2026-10-15 16:30 Gerrit AI review for Lustre niobuf.c:357 — (suggestion) This isn't a bug, but ptl_send_rpc() already holds a reference on `connection` when it calls this. Taking imp_lock here a secon
Gerrit AI review for Lustre PS17 · 2026-10-15 16:30
(suggestion) This isn't a bug, but ptl_send_rpc() already holds a reference on `connection` when it calls this. Taking imp_lock here a second time adds a lock round-trip to every bulk RPC. It can also, in principle, pick up a different peer than the one the request is sent to. Could the caller pass `&connection->c_peer` (or the connection itself) into ptlrpc_register_bulk() instead?
owner Timothy Day · uploader Timothy Day · PS17 uploaded 21d ago · NEW · open in Gerrit ↗
commit message
LU-17594 ptlrpc: remove ptlrpc_connection hash table

With the removal of c_remote_uuid and c_self, it's
clear that the hash table in connection.c is simply
mapping a lnet_processid to itself. We can remove
the hash table entirely.

With this change, ptlrpc_connection becomes a ref
counted lnet_processid. In the future, we may be able
to remove ptlrpc_connection entirely.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I9665fb321e961be308bd18327fca0efe2b57c01b
69658 master J –B ✓T ✓R -1/2−
LU-17916 osc: encrypt by copy with in-kernel fscrypt
reviewing Sebastien Buisson · you voted -1 on current PS
CI@PS6 L +158 −94
7d
build #134554 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-28 13:57
no vote yet: Andreas Dilger
patchsets:
+2 earlier PS1 10-13 PS2 10-14
PS3 10-19 PS4 10-20 PS5 10-23 PS6 10-27 PS7 10-28
build/test results are from PS6 — PS7…PS7 changed only the commit message (votes copied, CI not re-run)
owner Sebastien Buisson · uploader Sebastien Buisson · PS7 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-17916 osc: encrypt by copy with in-kernel fscrypt

With in-kernel fscrypt, osc_encrypt_pagecache_blocks() is mapped to
fscrypt_encrypt_pagecache_blocks(). That function cannot encrypt a
direct IO page: it takes the inode and file index from a locked page
cache folio, whereas a direct IO folio is part of the user buffer,
and it is not locked for encryption.

In-kernel fscrypt does not export a function to encrypt out of
place at a given inode and file index. So copy the clear text into a
bounce folio from the OSC pool, and encrypt it in place there with
fscrypt_encrypt_block_inplace(), for all pages. This costs a copy
of each page, which embedded llcrypt avoids by encrypting into the
bounce folio directly. Get bounce folios from the pool with
in-kernel fscrypt too, and save the source folio in the private
data of the bounce folio, to get it back in
osc_finalize_bounce_page().
Lustre no longer uses fscrypt bounce pages, so it opts out of the
fscrypt mempool.

Calling fscrypt_encrypt_pagecache_blocks() for page cache folios
would save the copy, but would cost more than it saves:
- it allocates its own bounce page from the fscrypt mempool, page
  by page. The mempool reserves 32 pages by default, shared by all
  filesystems, whereas an RPC is typically 1024 pages, and up to
  16384. Under memory pressure, each allocation goes to direct
  reclaim, from the thread that prepares an RPC to write dirty pages
  back, or waits for a page to return to the mempool. But bounce pages
  only return when RPCs complete, and an RPC being prepared keeps the
  ones it already got, so RPCs prepared concurrently can exhaust the
  reserve and end up waiting for each other. Moreover, an RPC cannot
  be sent before all its pages are encrypted.
- it needs the folio to be locked while it runs, so
  osc_brw_prep_request() would have to call folio_trylock(), and
  still copy when another thread holds the lock.
On the other hand, the copy is small compared to the encryption.
On a simple test system, copying 4KiB takes 30 to 80ns, and encrypting
300 to 500ns.

The wrappers of fscrypt_encrypt_pagecache_blocks() and
fscrypt_finalize_bounce_page() are no longer used, so remove them
along with LC_FSCRYPT_ENCRYPT_PAGECACHE_BLOCKS_FOLIO.

Without client encryption support, osc_encrypt_pagecache_blocks()
used to map to the stub of llcrypt_encrypt_pagecache_blocks(), so make
it a stub that returns -EOPNOTSUPP.

Add LC_FSCRYPT_ENCRYPT_BLOCK_INPLACE_NO_GFP, as kernel 6.17 removed
the gfp_t argument of fscrypt_encrypt_block_inplace().

Lastly, identifying a bounce folio requires testing there is no
mapping and the source folio is in the private data, in addition to
PG_checked as this value is also PG_swapcache.

Fixes: f3fe144b8572 ("LU-15003 sec: use enc pool for bounce pages")
Fixes: 51de594ed75a ("LU-17916 osc: switch to struct folio")
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Assisted-by: Claude:claude-opus-5-5 ltvm
Change-Id: Ib1d1ac8e17a3ba65a7b4d4c3e65bd6d5ff6b2b38
68022 master J –B ✓T ✗13R -2/2−
LU-20587 lnet: fix NULL pointer deref in lnet_peer_ni_show_dump
reviewing Andrew Perepechko · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase 14 unresolved L +423 −117
13d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
you voted -1 on current PS
failed enforced testplatformdetail
review-dne-ipv6 RHEL 9.8 / x86_64 ran 4 tests. 1 tests failed: sanity-lnet. session
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
review-dne-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.8 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 10.1 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.7 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 6 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
build #134047 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-20 21:09
no vote yet: Alexey Lyashkov, Alexander Zarochentsev
patchsets:
+8 earlier PS1 08-14 PS2 08-14 PS3 08-15 PS4 08-16 PS5 08-17 PS6 08-18 PS7 08-18 PS8 08-24
PS9 08-24 PS10 08-24 PS11 10-19 PS12 10-19 PS13 10-19
your previous vote: -1 on PS7 (2026-08-18 20:12) — now at PS13
threads: 11 need your reply · 3 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-15 10:32 Gerrit AI review for Lustre COMMIT_MSG:13 — (defect) This fixes a crash, so it should carry a Fixes: tag. The unchecked nla_nest_start()/nla_put_*() calls in lnet_peer_ni_show_dump() a
Gerrit AI review for Lustre PS2 · 2026-08-15 10:32
(defect) This fixes a crash, so it should carry a Fixes: tag. The unchecked nla_nest_start()/nla_put_*() calls in lnet_peer_ni_show_dump() arrived with the original Netlink conversion:

    Fixes: f0be00678cc8 ("LU-9680 lnet: collect data about peer_ni by using Netlink")
reply PS2 2026-08-15 10:32 Gerrit AI review for Lustre COMMIT_MSG:14 — (style) This isn't a bug, but Change-Id: normally sits after Signed-off-by:. Having it first usually means the Lustre commit hooks aren't in
Gerrit AI review for Lustre PS2 · 2026-08-15 10:32
(style) This isn't a bug, but Change-Id: normally sits after Signed-off-by:. Having it first usually means the Lustre commit hooks aren't installed.
reply PS13 2026-10-21 02:11 Gerrit AI review for Lustre COMMIT_MSG:31 — (style) This paragraph reads like a changelog against earlier patchsets ("Only mark ... once", "Tighten test_630 to expect exactly one heade
Gerrit AI review for Lustre PS13 · 2026-10-21 02:11
(style) This paragraph reads like a changelog against earlier patchsets ("Only mark ... once", "Tighten test_630 to expect exactly one header"). The commit message should describe the change against master. If it is refreshed, consider folding these points into the paragraphs above, e.g. state once that the 'peer' header and key table are emitted once per dump, and list what test_630 checks.
reply PS2 2026-08-15 10:32 Gerrit AI review for Lustre api-ni.c:8149 — (defect) lnet_udsp_info_send() is left on the unchecked path. It ignores nla_nest_start() returning NULL and then runs
Gerrit AI review for Lustre PS2 · 2026-08-15 10:32
(defect) lnet_udsp_info_send() is left on the unchecked path. It ignores nla_nest_start() returning NULL and then runs

    nla_nest_end(msg, udsp_attr);
    nla_nest_end(msg, udsp_info);

at the end of the function, which writes through the NULL start pointer. It also returns 0 on a full skb, so rc here cannot distinguish that from success.

`lnetctl peer show -v 4` sets gnlh->version to 4 and reaches this, so the oops named in the subject still looks reachable from lnet_peer_ni_show_dump().
reply PS3 2026-08-15 22:33 Gerrit AI review for Lustre api-ni.c:8190 — (minor) The -ENOMEM branch here still leaves a half-built message in the skb.
Gerrit AI review for Lustre PS3 · 2026-08-15 22:33
(minor) The -ENOMEM branch here still leaves a half-built message in the skb.

By this point genlmsg_put() has run and PRIMARY_NID / the nest headers / the peer NI string have been appended, so skb->tail is past the nlmsg_len that genlmsg_put() wrote. Going straight to unlock_api_mutex without genlmsg_cancel() leaves that short header followed by orphan attribute bytes; netlink then appends NLMSG_DONE after them, and a NLMSG_NEXT walk from the short header lands in the middle of the leftovers.

The new EMSGSIZE branch above cancels, so it would be consistent for this one to cancel too before returning.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre api-ni.c:8173 — (defect) lgpl_hdr_sent is set as soon as the attribute is appended, but the message it lives in can still be rolled back.
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(defect) lgpl_hdr_sent is set as soon as the attribute is appended, but the message it lives in can still be rolled back.

Every `goto msg_full` below reaches `genlmsg_cancel(msg, hdr)`, which trims the skb back past LNET_PEER_NI_ATTR_HDR. The flag stays true, so when this peer is retried against the fresh skb the attribute is not emitted again - and no later entry emits it either.

The first entry is the one most exposed. lnet_peer_ni_show_start() never sets cb->min_dump_alloc (lnet_net_show_start() sets U16_MAX), so the first skb is NLMSG_GOODSIZE, and the ~65 keys in all[] have already consumed most of it before the loop starts. A version-4 peer with two or three peer NIs then overflows partway through this entry.

On the tools side that attribute is exactly what stops the header repeating - liblnetconfig_netlink.c clears keys[1].lkp_value ("peer") only via

    if (attr && parent->lkp_value) {
        free(parent->lkp_value);
        parent->lkp_value = nla_strdup(attr);
    }

so if it never arrives, `strlen(keys[1].lkp_value)` stays non-zero and "peer:" is printed once per netlink message instead of once per dump.

Would setting the flag after genlmsg_end() succeeds, or clearing it in msg_full when this iteration set it, keep it tied to what actually reached user space?
reply PS12 2026-10-19 19:36 Misc Code Checks Robot (Gatekeeper helper) api-ni.c:6505 — warn: lnet_net_show_dump():inconsistent indenting
Misc Code Checks Robot (Gatekeeper helper) PS12 · 2026-10-19 19:36
warn: lnet_net_show_dump():inconsistent indenting
reply PS12 2026-10-19 19:36 Misc Code Checks Robot (Gatekeeper helper) api-ni.c:6521 — warn: lnet_net_show_dump():inconsistent indenting
Misc Code Checks Robot (Gatekeeper helper) PS12 · 2026-10-19 19:36
warn: lnet_net_show_dump():inconsistent indenting
reply PS13 2026-10-21 02:11 Gerrit AI review for Lustre api-ni.c:6348 — (defect) Can this new -EMSGSIZE return make `lnetctl net show -v 4` loop forever?
Gerrit AI review for Lustre PS13 · 2026-10-21 02:11
(defect) Can this new -EMSGSIZE return make `lnetctl net show -v 4` loop forever?

lnet_net_show_dump() can't resume. The key table is already in the skb (genlmsg_end()), so genlmsg_cancel(msg, hdr) leaves skb->len > 0. netlink_dump() then turns the error into "more to dump":

    if (nlk->dump_done_errno == -EMSGSIZE && skb->len)
        nlk->dump_done_errno = skb->len;

and calls ->dumpit() again. GOTO(net_unlock) skips `nlist->lngl_idx = idx`, so the next call starts from the same index. It resends the key table and the same NIs and overflows at the same place. lnetctl keeps receiving duplicate data and growing its YAML buffer.

The lnet_udsp_info_send() path below now passes -EMSGSIZE through the same way; it used to be reported as -ENOMEM. The existing `!hdr` path has the same issue, but that predates this patch.

The rest of this function still uses nla_nest_start() unchecked (send/recv/drop/health/tunables), so a full skb can still crash here. Should lnet_net_show_dump() either get the same msg_full/resume handling as the peer dump, or return an error that isn't -EMSGSIZE until it does?
reply PS13 2026-10-21 02:11 Gerrit AI review for Lustre api-ni.c:8237 — (minor) The list this checks against is lgpl_list, the peer NID list built in lnet_peer_ni_show_start(), not the key list (the key table fro
Gerrit AI review for Lustre PS13 · 2026-10-21 02:11
(minor) The list this checks against is lgpl_list, the peer NID list built in lnet_peer_ni_show_start(), not the key list (the key table from lnet_genl_send_scalar_list()). The window also isn't new: ln_api_mutex is already dropped between ->start() and the first ->dumpit(). If the patch is refreshed, consider rewording, e.g. "present when lnet_peer_ni_show_start() built lgpl_list".
reply PS13 2026-10-21 02:11 Gerrit AI review for Lustre api-ni.c:8338 — (style) This isn't a bug, but copying an atomic_t by plain struct assignment skips atomic_read(). It is an unannotated racy read of a counte
Gerrit AI review for Lustre PS13 · 2026-10-21 02:11
(style) This isn't a bug, but copying an atomic_t by plain struct assignment skips atomic_read(). It is an unannotated racy read of a counter that other threads update, and KCSAN would flag it. The atomic_read(&remote_dropped) on the local copy then reads nothing shared. If the goal is only shorter lines, consider:

    u32 remote_dropped = atomic_read(&lpni->lpni_hstats.hlt_remote_dropped);

The same applies to remote_timeout, remote_error and network_timeout.
owner Andrew Perepechko · uploader Andrew Perepechko · PS13 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-20587 lnet: fix NULL pointer deref in lnet_peer_ni_show_dump

lnet_peer_ni_show_dump() left several nla_nest_start()/nla_put_*()
return values unchecked, so a full reply skb caused a NULL pointer
dereference instead of being handled. Check every call and roll back/
retry on a fresh skb instead of crashing. Apply the same treatment to
lnet_udsp_info_send()/lnet_nl_put_latency(), and let the dump skip a
peer that got deleted mid-dump instead of aborting the whole listing.

On the userspace side, fix the YAML output buffer in
liblnetconfig_netlink.c, which the same verbose 'peer show' dumps can
overflow. yaml_netlink_msg_parse() only reserves a small amount of
headroom between messages, but a single message can expand into
several KiB of YAML. Add yaml_netlink_input_grow() to realloc the
buffer on demand (rebasing the buffer/read pointers and resyncing
*size to the real free space) and call it in yaml_parse_value_list()
before writing each key, sizing the request for the indent, the key
name, the scalar value and separators, so a message can never write
past data->end and corrupt the heap. Also fix the free-space
accounting after emitting a line to decrement *size by the bytes
written instead of incrementing it.

Add sanity-lnet test_630 to exercise a multi-skb peer dump.

Only mark the once-per-dump 'peer' header as sent once the message
carrying it is finalized: a msg_full rollback cancels the attribute
along with the partial entry, so the flag must not suppress it on the
retry. On the tools side, report a failed realloc in
yaml_parse_value_list() like yaml_netlink_msg_parse() does instead of
printing a truncated YAML document and exiting 0, and fix the
free-space accounting when the buffer pointer moves back. Tighten
test_630 to expect exactly one header, check the primary-nid count,
and clean up peers and output on failure.

Fixes: f0be00678cc8 ("LU-9680 lnet: collect data about peer_ni by using Netlink")
HPE-bug-id: LUS-13452
Signed-off-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Change-Id: I24688de6f0a001943f2de6241b60bce567e29176
60112 master J ✗16B ✓T ✗15R -2/2−
LU-19167 lnet: add corrupt fault injection
reviewing Manish Regmi · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
needs rebase 16 unique failures 9 unresolved L +935 −11
13d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
you voted -1 on current PS
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_450seen in 6 other reviews
sanity-lnet@ldiskfs+DNE:test_475seen in 2 other reviews
sanity-lnet@ldiskfs+DNE:test_476NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@ldiskfs+DNE:test_500seen in 8 other reviews
sanity-lnet@ldiskfs+DNE:test_501seen in 7 other reviews
sanity-lnet@ldiskfs+DNE:test_502seen in 7 other reviews
sanity-lnet@ldiskfs+DNE:test_525seen in 2 other reviews
sanity-lnet@ldiskfs+DNE:test_617seen in 7 other reviews
sanity-lnet@zfs:test_450seen in 7 other reviews
sanity-lnet@zfs:test_475seen in 2 other reviews
sanity-lnet@zfs:test_476NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-lnet@zfs:test_500seen in 9 other reviews
sanity-lnet@zfs:test_501seen in 8 other reviews
sanity-lnet@zfs:test_502seen in 8 other reviews
sanity-lnet@zfs:test_525seen in 2 other reviews
sanity-lnet@zfs:test_617seen in 8 other reviews
failed enforced testplatformdetail
custom-1001 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-dne-ipv6 RHEL 9.8 / x86_64 ran 4 tests. 1 tests failed: sanity-lnet. session
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-dne-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-4 RHEL 9.8 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-zfs-subtest-change RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.8 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 10.1 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.7 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 6 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
build #132531 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-10-13 15:05
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger, Oleg Drokin
patchsets:
+9 earlier PS1 07-09 PS2 07-09 PS3 07-10 PS4 07-13 Andreas Dilger PS5 09-10 PS6 09-19 PS7 08-05 PS8 08-05 PS9 08-05
PS10 08-06 PS11 08-06 PS12 08-07 PS13 09-02 PS14 09-29
your previous vote: -1 on PS6 (2026-05-24 14:27) — now at PS14
threads: 7 need your reply · 1 waiting on others · 1 own notes · 0 bot
reply PS14 2026-10-05 11:17 Gerrit AI review for Lustre COMMIT_MSG:15 — (style) This isn't a bug, but the house style is to quote command names in backticks (`lnetctl fault corrupt add`, `del`, `show`, `reset`).
Gerrit AI review for Lustre PS14 · 2026-10-05 11:17
(style) This isn't a bug, but the house style is to quote command names in backticks (`lnetctl fault corrupt add`, `del`, `show`, `reset`). If the message is touched again, the new entry points (lnet_corrupt_rule_add(), lnet_corrupt_rule_match_and_corrupt() called from lnet_finalize()) could also be named so they can be found with git log.
reply PS5 2025-09-19 21:45 Manish Regmi patchset comment — I added lnetctl commands together with Netlink support and also removed ipv4 specific logic to make it ipv6 friendly. I have not removed the
James Simmons PS5 · 2025-09-10 19:17
I few issues.

1) Don't add new fault injection to lctl. Instead add it to lnetctl

2) No new ioctls. You need to update lnet_fault_cmd() and friends in api.c instead.
   The Netlink interface is IPv6 freindly.

Can you tell me what the YAML net fault looks like? I can help you with this.
Manish Regmi PS5 · 2025-09-19 21:45
I added lnetctl commands together with Netlink support and also removed ipv4 specific logic to make it ipv6 friendly. I have not removed the ioctl and lctl commands yet as it can be used as fallback.
reply PS13 2026-09-29 16:17 Manish Regmi lnetctl.8:524 — Added Thanks
Gerrit AI review for Lustre PS13 · 2026-09-03 12:23
(style) This isn't a bug, but the fonts in the new synopsis are inconsistent: `-r` and `-i` are bold while `-s`, `-d`, `-z`, `-f`, `-n`, `-m`, `-p` and `-o` are plain, and the placeholders are lowercase italic. man-pages(7) style (and the rest of Documentation/man8) is bold for the option including its dashes and italic uppercase for the value, e.g. `\fB\-s\fR \fISRC\fR`.
Andreas Dilger PS13 · 2026-09-22 09:40
This would have been flagged by `checkpatch-man.pl` before push if you have the Git commit hooks installed:
```
cd .git/hooks
ln -sf ../../contrib/git-hooks/*commit-msg .
cd -
```
Manish Regmi PS13 · 2026-09-29 16:17
Added Thanks
reply PS13 2026-09-03 12:23 Gerrit AI review for Lustre lnetctl.8:540 — (minor) This reads as if a portal selector simply has no effect on REPLY, but it actually removes REPLY from the rule. lnet_fault_attr_valid
Gerrit AI review for Lustre PS13 · 2026-09-03 12:23
(minor) This reads as if a portal selector simply has no effect on REPLY, but it actually removes REPLY from the rule. lnet_fault_attr_validate() narrows fa_msg_mask to GET|PUT as soon as fa_ptl_mask is non-zero, and lnet_corrupt_rule_add() then masks with PUT|REPLY, so PUT is all that is left.

So `-p 52` with no `-m` gives a PUT-only rule even though the previous sentence says both are selected by default, and `-m REPLY -p 52` is rejected outright - lnetctl just prints "failed to add corrupt rule: Invalid argument" with no hint about which option caused it.

Could the text say that specifying a portal restricts the rule to PUT?
reply PS13 2026-09-03 12:23 Gerrit AI review for Lustre lnetctl.8:556 — (minor) Lustre man pages are expected to carry an EXAMPLES entry for each major way of using a sub-command, and lnetctl.8 already has that p
Gerrit AI review for Lustre PS13 · 2026-09-03 12:23
(minor) Lustre man pages are expected to carry an EXAMPLES entry for each major way of using a sub-command, and lnetctl.8 already has that pattern at the end of the page for udsp. Could a short example be added here for the two scheduling modes, e.g. a rate rule

    lnetctl fault corrupt add -s 10.0.0.1@tcp -d 10.0.0.2@tcp -r 100 -z 8 -f 4096 -m PUT -p 52

and an interval rule? The offset/offset_range/size interaction is hard to infer from the prose alone.
note PS5 2025-09-10 19:17 James Simmons net_fault.c:1595 — No ioctl!!!! This is not IPv6 friendly. You need to update lnet_fault_cmd() in api.c instead.
James Simmons PS5 · 2025-09-10 19:17
No ioctl!!!! This is not IPv6 friendly. You need to update lnet_fault_cmd() in api.c instead.
reply PS14 2026-10-05 11:17 Gerrit AI review for Lustre net_fault.c:1554 — (defect) Does REPLY corruption ever fire on o2iblnd, kfilnd, gnilnd or efalnd for a GET whose reply is moved by RDMA?
Gerrit AI review for Lustre PS14 · 2026-10-05 11:17
(defect) Does REPLY corruption ever fire on o2iblnd, kfilnd, gnilnd or efalnd for a GET whose reply is moved by RDMA?

Those LNDs build the REPLY with lnet_create_reply_msg(), not lnet_parse_reply(). That message comes from kmem_cache_zalloc() and only gets msg_hdr.src_nid and payload_length set:

- msg_hdr.type stays 0 (LNET_MSG_ACK)
- msg_kiov stays NULL, because lnet_setpayloadbuffer() is never called
- msg_rxni stays NULL

lnet_finalize() still passes the outer check (msg_rx_committed, msg_md and LNET_EVENT_REPLY are all set). This early return then drops the message on all three conditions.

The result is that `-m REPLY` only works for socklnd and for small IMMEDIATE replies. On o2ib, a GET larger than IBLND_MSG_SIZE is never corrupted, and with `-f 4096` no o2ib REPLY is eligible at all. The man page and commit message don't mention this limit.

The `reply write REPLY` case in sanity-lnet test_411 expects errors, so it should fail when NETTYPE is o2ib.

One possible fix: key off msg_ev.type instead of msg_hdr.type. For the optimized reply, take the buffer from msg_md->md_kiov/md_niov and the length from msg_ev.mlength (set by lnet_set_reply_msg_len()), and treat a missing local NID as "any".
reply PS13 2026-09-03 12:23 Gerrit AI review for Lustre Makefile.am:44 — (minor) corrupt-fault.sh is added to noinst_SCRIPTS but not to lustre/tests/test-groups/regression, so once `Test-Parameters: testlist=corru
Gerrit AI review for Lustre PS13 · 2026-09-03 12:23
(minor) corrupt-fault.sh is added to noinst_SCRIPTS but not to lustre/tests/test-groups/regression, so once `Test-Parameters: testlist=corrupt-fault` has run for this change the new suite will not be picked up by any of the standard sessions again.

Since the subtests are LNet-selftest based, would it be simpler to add them to sanity-lnet.sh, which is already in the regression group, or to add corrupt-fault to that list?
owner Manish Regmi · uploader Manish Regmi · PS14 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-19167 lnet: add corrupt fault injection

Add a receive-side LNet fault rule that corrupts bytes in completed
PUT and REPLY payloads before upper-layer completion. Rules can match
source, destination, local NID, portal, and message type. They support
rate- or interval-based scheduling and select the corruption offset,
range, and size.

Manage corrupt rules with lnetctl fault corrupt add, del, show, and
reset over generic netlink. Document the commands in lnetctl(8), and
add coverage to the regular sanity-lnet test suite.

Assisted-by: Codex:5.6-Sol
Test-Parameters: testlist=sanity-lnet env=ONLY=411
Signed-off-by: Manish Regmi <mregmi@ddn.com>
Change-Id: Ib4972807a48c185043f335d030d266ed3cad7e1e
58613 master J –B ✓T ✓R -2/2−
LU-18876 build: copy-builtin
reviewing Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase copy-builtin 37 unresolved L +760 −54
20d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
build #131625 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-09-15 23:12
no vote yet: Shaun Tancheff, Neil Brown, Sebastien Buisson, Andreas Dilger
patchsets:
+9 earlier PS1 03-31 PS2 03-31 PS3 04-01 PS4 04-02 PS5 08-29 PS6 12-12 PS7 05-05 PS8 05-12 PS9 05-31
PS10 06-08 James Simmons PS11 07-07 PS12 07-07 PS13 07-10 PS14 09-11
your previous vote: -1 on PS12 (2026-07-07 18:44) — now at PS14
threads: 10 need your reply · 16 waiting on others · 11 own notes · 0 bot
reply PS13 2026-07-28 12:57 Gerrit AI review for Lustre COMMIT_MSG:15 — (style) The body only describes the new script, but roughly half the diff is a build-system conversion that isn't mentioned: every `obj-m` b
Gerrit AI review for Lustre PS13 · 2026-07-28 12:57
(style) The body only describes the new script, but roughly half the diff is a build-system conversion that isn't mentioned: every `obj-m` becoming `obj-$(CONFIG_*)`, the new Kconfig files, the `CONFIG_LNET_O2IBLND` -> `CONFIG_LNET_XPRT_IB` rename, the new `LUSTRE_OOT_BUILD` gate around the `lustre_compat` objects in lnet/libcfs/Makefile, and the `zfs_incdir`/`spl_incdir` restructure in lustre/osd-zfs/Makefile.

Those all change the out-of-tree build, so it would help to say what changed and why. The `CBI_WITH_O2IB`/`CBI_WITH_GNI`/`CBI_WITH_KFI`/`CBI_WITH_EFA`/`CBI_WITH_LDISKFS`/`CBI_WITH_ZFS` knobs the script introduces are also worth naming here, since they are the only way to get anything beyond ksocklnd/wbcfs.
reply PS13 2026-07-13 18:28 Timothy Day patchset comment — Ping Andreas, James, Shaun
Timothy Day PS13 · 2026-07-13 18:28
Ping Andreas, James, Shaun
note PS12 2026-07-07 18:44 James Simmons Makefile.exports.in:95 — To keep with history of upstream CONFIG_LNET_XRPT_IB ?
James Simmons PS12 · 2026-07-07 18:44
To keep with history of upstream CONFIG_LNET_XRPT_IB ?
reply PS13 2026-07-28 12:57 Gerrit AI review for Lustre Makefile.exports.in:97 — (defect) This line makes the in-kernel LND get built in configurations where it previously wasn't, and I think it breaks `make modules`.
Gerrit AI review for Lustre PS13 · 2026-07-28 12:57
(defect) This line makes the in-kernel LND get built in configurations where it previously wasn't, and I think it breaks `make modules`.

`lnet/klnds/Makefile` uses the same symbol for the in-kernel tree:

    obj-$(CONFIG_LNET_XPRT_IB) += in-kernel-o2iblnd/

Previously that was `CONFIG_LNET_O2IBLND`, exported only under `@BUILT_IN_KO2IBLND_TRUE@`. Now `EXTERNAL_KO2IBLND=yes, BUILT_IN_KO2IBLND=no` also sets it, and that combination is reachable — config/lustre-lnet.m4 forces `BUILT_IN_KO2IBLND="no"` when MOFED is found without `--enable-multiple-lnds`, and again when the kernel has no usable in-kernel rdma headers.

In that configuration `lnet/klnds/in-kernel-o2iblnd/` holds only a Makefile; its sources are generated by `make sources -C lnet/klnds/in-kernel-o2iblnd`, which the top-level Makefile drives from `SOURCE_SUBDIRS := $(LUSTRE_BUILT_IN_KO2IBLND_NT) ...` — empty here. So `__modules` descends into a directory whose `ko2iblnd-objs` have no .c files and no kbuild rule to make them.

Would it work to keep a separate symbol for the in-kernel tree (only under `@BUILT_IN_KO2IBLND_TRUE@`) and use `CONFIG_LNET_XPRT_IB` just for `lnet/klnds/o2iblnd/`?
reply PS13 2026-07-28 12:57 Gerrit AI review for Lustre copy-builtin:89 — (minor) `CBI_WITH_O2IB`, `CBI_WITH_GNI`, `CBI_WITH_KFI`, `CBI_WITH_EFA`, `CBI_WITH_LDISKFS` and `CBI_WITH_ZFS` are the script's whole config
Gerrit AI review for Lustre PS13 · 2026-07-28 12:57
(minor) `CBI_WITH_O2IB`, `CBI_WITH_GNI`, `CBI_WITH_KFI`, `CBI_WITH_EFA`, `CBI_WITH_LDISKFS` and `CBI_WITH_ZFS` are the script's whole configuration interface, but they appear only in code comments — `cbi_usage()` doesn't list them and neither does the commit message. Could they be documented in the usage text?
reply PS13 2026-07-28 12:57 Gerrit AI review for Lustre copy-builtin:261 — (minor) `KPATH` is assigned here and again in `cbi_clean()`, but nothing reads it. Leftover?
Gerrit AI review for Lustre PS13 · 2026-07-28 12:57
(minor) `KPATH` is assigned here and again in `cbi_clean()`, but nothing reads it. Leftover?
reply PS13 2026-07-28 12:57 Gerrit AI review for Lustre copy-builtin:301 — (minor) A bare `exit` here means a wrong argument count or a bad path exits 0, so a caller or CI job can't tell success from a usage error.
Gerrit AI review for Lustre PS13 · 2026-07-28 12:57
(minor) A bare `exit` here means a wrong argument count or a bad path exits 0, so a caller or CI job can't tell success from a usage error. `exit 1` on the error paths would help.

Routing the text through `less -F` also makes `copy-builtin help` need a pager and stops it being pipeable; a plain `cat`/heredoc to stderr is probably enough for a five-line message. The text also doesn't show that `clean` takes the tree argument.
note PS14 2026-09-15 23:12 James Simmons copy-builtin:131 — Looks like we can copy over zfs and ldiskfs. Well at least ZFS can run. I doubt ldiskfs will work :-(
James Simmons PS14 · 2026-09-15 23:12
Looks like we can copy over zfs and ldiskfs. Well at least ZFS can run. I doubt ldiskfs will work :-(
note PS14 2026-09-15 23:12 James Simmons copy-builtin:175 — Yuck. We shouldn't need to copy compat stuff to the kernel tree.
James Simmons PS14 · 2026-09-15 23:12
Yuck. We shouldn't need to copy compat stuff to the kernel tree.
reply PS14 2026-09-12 12:47 Gerrit AI review for Lustre copy-builtin:184 — (minor) Nothing generates or consumes `undef.h`: configure only declares `AC_CONFIG_HEADERS([config.h])`, and the only two references to `un
Gerrit AI review for Lustre PS14 · 2026-09-12 12:47
(minor) Nothing generates or consumes `undef.h`: configure only declares `AC_CONFIG_HEADERS([config.h])`, and the only two references to `undef.h` in the tree are this line and the matching `rm -f` in `clean_linux()`. The `|| true` hides that it never copies anything. Leftover from an earlier layout?
reply PS14 2026-09-12 12:47 Gerrit AI review for Lustre copy-builtin:252 — (defect) These three lines fix up the shims that use `#include_next`, but two of them are missed.
Gerrit AI review for Lustre PS14 · 2026-09-12 12:47
(defect) These three lines fix up the shims that use `#include_next`, but two of them are missed.

`headers_clone()` drops `include/lustre_compat` into `$KERNEL_DIR/include`, so a shim is found in the very same -I directory as the kernel header it wants to chain to. `#include_next` then has nothing left to search:

    include/lustre_compat/linux/module.h:  #include_next <linux/module.h>
    include/lustre_compat/linux/bio.h:     #include_next <linux/bio.h>

`lnet/libcfs/module.c` includes `<lustre_compat/linux/module.h>` unconditionally, and libcfs is always copied, so `net/lnet/libcfs/module.c` should fail with "fatal error: linux/module.h: No such file or directory". `<lustre_compat/linux/bio.h>` is the same situation in `lustre/osd-ldiskfs/osd_io.c` for `CBI_WITH_LDISKFS`.

Adding `module` and `bio` to this list would make them match slab/workqueue/kallsyms. Are those two just an oversight?
reply PS14 2026-09-12 12:47 Gerrit AI review for Lustre copy-builtin:255 — (minor) Every other `$KERNEL_DIR` use in the script is quoted, but this command substitution is not, so a kernel path containing whitespace
Gerrit AI review for Lustre PS14 · 2026-09-12 12:47
(minor) Every other `$KERNEL_DIR` use in the script is quoted, but this command substitution is not, so a kernel path containing whitespace splits into bogus `find` arguments. It also means an empty result would turn into `find` with no path operand, i.e. `find .`, and `sed -i` would rewrite the Lustre source tree in place. Collecting the dirs into an array and passing `"${dirs[@]}"` would avoid both.
owner Timothy Day · uploader Timothy Day · PS14 uploaded 53d ago · NEW · open in Gerrit ↗
commit message
LU-18876 build: copy-builtin

It's useful, for the upstreaming effort, distribution packagers,
and general development, to be able to build the Lustre kernel
modules natively as part of the Linux build. Some projects
(such as openZFS) have a script to automatically port their
kernel modules to the Linux tree. Lustre should have the same.

This patch implements such a script.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I8fdbddd0d522f848541ae80f4873f8af1c957dc4
66818 master J –B ✓T ✓R +2/2
LU-20418 build: Move libcfs early checks to ksym checks
reviewing Shaun Tancheff · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; Verified -1 by Oleg Drokin
needs rebaseVerified -1 1 unresolved M +42 −59
22d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; Verified -1 by Oleg Drokin
you voted +1 on current PS
build #126958 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 00:27 · Andreas Dilger +1 2026-06-26 18:36 · Timothy Day +1 2026-06-27 01:06
no vote yet: Oleg Drokin
patchsets: PS1 06-23 PS2 06-25
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-10 21:04 Oleg Drokin patchset comment — when I have this in master-next on top of master, the build fails with
Oleg Drokin PS2 · 2026-07-10 21:04
when I have this in master-next on top of master, the build fails with

/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h: In function ‘bdev_integrity_enabled’:
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1815:36: error: implicit declaration of function ‘bdev_get_integrity’ [-Werror=implicit-function-declaration]
 1815 |         struct blk_integrity *bi = bdev_get_integrity(bdev);
      |                                    ^~~~~~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1815:36: warning: initialization of ‘struct blk_integrity *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1795:36: error: ‘BLK_INTEGRITY_NOVERIFY’ undeclared (first use in this function); did you mean ‘HAVE_BLK_INTEGRITY_NOVERIFY’?
 1795 | #define INTEGRITY_READ(flag)    (!(BLK_INTEGRITY_NOVERIFY & (flag)))
      |                                    ^~~~~~~~~~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1821:24: note: in expansion of macro ‘INTEGRITY_READ’
 1821 |         if (rw == 0 && INTEGRITY_READ(bi->flags))
      |                        ^~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1795:36: note: each undeclared identifier is reported only once for each function it appears in
 1795 | #define INTEGRITY_READ(flag)    (!(BLK_INTEGRITY_NOVERIFY & (flag)))
      |                                    ^~~~~~~~~~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1821:24: note: in expansion of macro ‘INTEGRITY_READ’
 1821 |         if (rw == 0 && INTEGRITY_READ(bi->flags))
      |                        ^~~~~~~~~~~~~~
  LD [M]  /home/green/git/lustre-release/ldiskfs/ldiskfs.o
libtool: link: rm -fr  .libs/liblustreapi.a .libs/liblustreapi.la .libs/liblustreapi.lai
libtool: link: (cd .libs/liblustreapi.lax/libcfs.a && ar x "/home/green/git/lustre-release/lustre/utils/../../lib/libcfs/.libs/libcfs.a")
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1796:36: error: ‘BLK_INTEGRITY_NOGENERATE’ undeclared (first use in this function)
 1796 | #define INTEGRITY_WRITE(flag)   (!(BLK_INTEGRITY_NOGENERATE & (flag)))
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/osd-ldiskfs/osd_internal.h:1824:24: note: in expansion of macro ‘INTEGRITY_WRITE’
 1824 |         if (rw == 1 && INTEGRITY_WRITE(bi->flags))
      |                        ^~~~~~~~~~~~~~~
owner Shaun Tancheff · uploader Shaun Tancheff · PS2 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move libcfs early checks to ksym checks

Move checks for:
  HAVE_LINUX_BIO_INTEGRITY_HEADER
  HAVE_LINUX_BLK_INTEGRITY_HEADER
  HAVE_MMAP_LOCK

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ic7bab998a5ed235e4870791598f3435f0593171c
66124 master J !B ✓T ✓R +1/2−
LU-9653 utils: Add kernel doc style for utils (21)
reviewing Arshad Hussain · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase dwg 2 unresolved S +17 −8
22d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #130102 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-22 20:59 · Arshad Hussain +1 2026-08-25 07:01 · Timothy Day +1 2026-09-22 20:35
no vote yet: Oleg Drokin
patchsets: PS1 05-25 PS2 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-08-06 19:35) — now at PS2
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-12 16:01 Gerrit AI review for Lustre liblustreapi_ioctl.c:136 — (defect) llapi_ioctl() doesn't return a negative errno on error, so this contract looks inaccurate.
Gerrit AI review for Lustre PS1 · 2026-08-12 16:01
(defect) llapi_ioctl() doesn't return a negative errno on error, so this contract looks inaccurate.

llapi_ioctl_dev() goes through l_ioctl(), which converts (lib/libcfs/l_ioctl.c):

    rc = ioctl(fd, opc, buf);
    return rc < 0 ? -errno : rc;

llapi_ioctl() calls ioctl(2) directly and returns its value unchanged, so a failure is -1 with errno set, not -errno. The three in-tree callers all compensate:

    rc = llapi_ioctl(fd, OBD_IOC_GETDTNAME, lov_name);
    if (rc)
            rc = -errno;

The one exception is the fd < 0 short-circuit, which does return -EBADF. Since this is a public entry point (lustre/include/lustre/lustreapi.h), should the block spell out the mixed contract, e.g. %-EBADF if fd is negative, otherwise the ioctl(2) result with errno set on failure?
reply PS2 2026-08-25 07:01 Arshad Hussain liblustreapi_ioctl.c:137 — Documantation list down the the generatl return. To make it even, it will be updated.
Gerrit AI review for Lustre PS2 · 2026-08-24 17:09
(minor) this isn't a bug, but llapi_ioctl() is public API and it also has a man page, Documentation/man3/llapi_ioctl.3, which still says under RETURN VALUES:

    <0  a negative value on failure and sets errno.

That no longer lines up with the contract being pinned down here: the fd < 0 path returns -EBADF and leaves errno untouched, and the ioctl(2) failure path returns -1, not -errno. Should the man page be updated in the same patch so the two descriptions agree?
Arshad Hussain PS2 · 2026-08-25 07:01
Documantation list down the the generatl return. To make it even, it will be updated.
owner Arshad Hussain · uploader Oleg Drokin · PS2 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-9653 utils: Add kernel doc style for utils (21)

This patch converts the existing functional comments in
liblustreapi_ioctl.c to kernel doc style comments.

llapi_ioctl() returns the ioctl(2) result with errno set
rather than a negative errno, except for a negative fd,
so document that mixed contract in the kernel doc comment.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: If3120b1c705496c63a907d2aad422a939a9d38d9
63234 master J !B ✓T ✓R -2/2−
LU-9642 osc: Add kernel doc style for OSC (2)
reviewing Arshad Hussain · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase dwg 1 unresolved M +111 −23
22d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
janitor run: 8 failing config(s), none unique to this patch — janitor results
build #125502 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-06-22 18:27
no vote yet: Anjus George, Andreas Dilger
patchsets:
+1 earlier PS1 01-05
PS2 01-08 PS3 01-12 PS4 01-15 PS5 04-02 PS6 05-25
your previous vote: +1 on PS4 (2026-02-03 19:33) — now at PS6
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-02-04 04:48 Arshad Hussain osc_page.c:53 — Anjus, yes. Ideally, all function with EXPORT_SYMBOLS(...) should have kernel-doc describing the function. Which is mostly taken care off. S
Anjus George PS4 · 2026-02-03 22:06
@ashehata@whamcloud.com Wouldn't these functions and a few functions below this also be needing the comment blocks?
Arshad Hussain PS4 · 2026-02-04 04:48
Anjus, yes. Ideally, all function with EXPORT_SYMBOLS(...) should have kernel-doc describing the function. Which is mostly taken care off. Some may be missed, like this which you have pointed out. 

Also, for OSC, IMO, you should tag Andreas/Patrick/Bobi.
owner Arshad Hussain · uploader Arshad Hussain · PS6 uploaded 163d ago · NEW · open in Gerrit ↗
commit message
LU-9642 osc: Add kernel doc style for OSC (2)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I2b0d155c0777b70a2044dba5f65608764a88b48e
66902 master J ✗1B ✓T ✓R +0/2−
LU-18687 build: Move LL_BDI_CAP_FLAGS compat backing-dev.h
reviewing Shaun Tancheff · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase 5 unresolved M +33 −18
36d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-quota@ldiskfs+DNE:test_1bseen in 17 other reviews
build #127030 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-08-05 14:17 · Andreas Dilger +1 2026-06-28 10:03 · Timothy Day +1 2026-07-30 19:02
threads: 1 need your reply · 0 waiting on others · 4 own notes · 0 bot
reply PS1 2026-07-30 19:02 Timothy Day backing-dev.h:12 — include_next perhaps?
Timothy Day PS1 · 2026-07-30 19:02
include_next perhaps?
note PS1 2026-08-05 14:17 James Simmons backing-dev.h:16 — According to git commit ed7b6b4f6e915cb0bc52d0000bcc63168867b6ac upstream we don't need this if we are using SB_I_CGROUPWB. I just looked an
James Simmons PS1 · 2026-08-05 14:17
According to git commit ed7b6b4f6e915cb0bc52d0000bcc63168867b6ac upstream we don't need this if we are using SB_I_CGROUPWB. I just looked and SB_I_CGROUPWB has been around since 4.1 so we don't need the ifdef anymore for SB_I_CGROUPWB as well in fs.h. Looks like this can be dropped.
note PS1 2026-08-05 14:17 James Simmons backing-dev.h:21 — We could test this and place this in config.h instead.
James Simmons PS1 · 2026-08-05 14:17
We could test this and place this in config.h instead.
note PS1 2026-08-05 14:17 James Simmons backing-dev.h:26 — Note this was removed with git commit 2841808f35eebfd07150333f3af3007cb2904a09 upstream. This is only needed for wb_stat_mod() handling whic
James Simmons PS1 · 2026-08-05 14:17
Note this was removed with git commit 2841808f35eebfd07150333f3af3007cb2904a09 upstream. This is only needed for wb_stat_mod() handling which is not used by lustre and also was removed upstream. If we do want to wb stats there is a newer way to do it but I don't know it off the top of my head. We can remove the wb_stats handling as well.
note PS1 2026-08-05 14:17 James Simmons backing-dev.h:30 — This is break when porting to upstream.
James Simmons PS1 · 2026-08-05 14:17
This is break when porting to upstream.
owner Shaun Tancheff · uploader Shaun Tancheff · PS1 uploaded 130d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: Move LL_BDI_CAP_FLAGS compat backing-dev.h

Move LL_BDI_CAP_FLAGS and the removed flags to backing-dev.h

LL_BDI_CAP_FLAGS can be removed for upstream linux.

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I5ef5befb629d48bf67757a24f4a441dbe9dea1a6
57776 master J ✗2B ✓T ✓R +1/2−
LU-10026 lustre: add lz4 and lz4hc kernel modules
reviewing Artem Blagodarenko · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase csdc 5 unresolved XL +4422 −2
47d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-lfsck@zfs:test_18cseen in 25 other reviews
sanity-scrub@ldiskfs+DNE:test_9seen in 5 other reviews
build #125233 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-05-29 01:12 · Marc Vef +1 2026-05-19 09:37 · Andreas Dilger +1 2026-05-19 20:23 · Timothy Day -1 2026-06-05 20:49
no vote yet: Sebastien Buisson, Oleg Drokin
patchsets:
+27 earlier PS1 01-15 PS2 01-15 PS3 01-15 PS4 01-16 PS5 01-16 PS6 01-16 PS7 01-17 PS8 01-17 PS9 01-20 PS10 01-21 PS11 01-22 PS12 04-08 Timothy Day PS13 04-08 Timothy Day PS14 04-09 Timothy Day PS15 04-09 Timothy Day PS16 04-09 Timothy Day PS17 04-10 Timothy Day PS18 05-12 Timothy Day PS19 05-21 Timothy Day PS20 05-05 Marc Vef PS21 05-05 Marc Vef PS22 05-05 Marc Vef PS23 05-05 Marc Vef PS24 05-05 Marc Vef PS25 05-07 Marc Vef PS26 05-07 Marc Vef PS27 05-07 Marc Vef
PS28 05-11 Marc Vef PS29 05-11 Marc Vef PS30 05-11 Marc Vef PS31 05-13 Marc Vef PS32 05-18 Marc Vef
your previous vote: -1 on PS19 (2025-06-17 13:20) — now at PS32
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS32 2026-05-29 17:08 Timothy Day COMMIT_MSG:36 — This is false.
Timothy Day PS32 · 2026-05-29 17:08
This is false.
reply PS32 2026-05-29 17:08 Timothy Day COMMIT_MSG:60 — These modules do not compile on newer kernels (6.18, at least). I think it should be possible to build without these.
Timothy Day PS32 · 2026-05-29 17:08
These modules do not compile on newer kernels (6.18, at least). I think it should be possible to build without these.
reply PS32 2026-05-29 21:34 Oleg Drokin kcompr.c:86 — just as the smatch implies this should really be IS_ERR, I don't think filp_open can return NULL?
Oleg Drokin PS32 · 2026-05-29 21:34
just as the smatch implies this should really be IS_ERR, I don't think filp_open can return NULL?
reply PS32 2026-05-29 09:14 Marc Vef lz4_decompress.c:155 — Oleg, I looked into this. For all three comments of yours, this is still exactly the same in the kernel today: https://github.com/torvalds/l
Oleg Drokin PS32 · 2026-05-29 04:41
smatch highlighted it in the past and it was still not addressed, but this looks like an inconsistency and should be && even though I guess all parts evaluate to 0 or 1
Marc Vef PS32 · 2026-05-29 09:14
Oleg, I looked into this. For all three comments of yours, this is still exactly the same in the kernel today: https://github.com/torvalds/linux/blob/master/lib/lz4/lz4_decompress.c 

However, this discussion did come up on the kernel mailing list as well where the maintainer explained why & is used over && since smatch also flagged it there. There is a comment (line 147-148) on this here because of it.

Basically, this is for performance reasons where it is noticeably beneficial in hot code segments. There are actually several points (very briefly, I linked the detailed discussion below):
1. `&&` indroduces a serial dependency but it is better for style. `&` can be executed in parallel
2. Too many densely packed branches impact the micro-op cache
3. A denser pack of branches impacts branch prediction

In summary, they argue that it is _generally_ better to use `&` over `&&` (iff conditions permit it) but it only matters in very hot code segments, which this is.

Much more detailed source: https://lore.kernel.org/all/D4762145-BBC5-4574-BF68-8C1A3AF41D98@fb.com/
reply PS32 2026-05-29 09:14 Marc Vef lz4_decompress.c:204 — hmm, I'm not an expert in this code here, but this looks to be correct.
Oleg Drokin PS32 · 2026-05-29 04:41
is this likely really just for the first part of this statement, or for the whole while condition (and the parenthesis is then misplaced)
Marc Vef PS32 · 2026-05-29 09:14
hmm, I'm not an expert in this code here, but this looks to be correct. 

IIUC, likely() here is only used for the safety/bounds check which looks to be an over-read guard when there is fewer of 15 bytes (`RUN_MASK` as the safety margin?) of input left. I guess, a valid input is generally considered the common case and thus `likely`. `s == 255` is deciding whether we iterate further. That part is variable and should not be included in the `likely` statement.
tags: csdc
owner Artem Blagodarenko · uploader Marc Vef · PS32 uploaded 170d ago · NEW · open in Gerrit ↗
commit message
LU-10026 lustre: add lz4 and lz4hc kernel modules

lz4 and lz4hc kernel modules implement compression according to the
lz4 and lz4hc algorithms respectively, through the kernel Crypto API.
lz4 module provides 2 cipher drivers under the generic name 'lz4':
* lz4-lustre-generic of type compression
* lz4-lustre-scomp of type scomp
lz4hc module provides 2 cipher drivers under the generic name 'lz4hc':
* lz4hc-lustre-generic of type compression
* lz4hc-lustre-scomp of type scomp

lz4 and lz4hc kernel module sources are copied from linux v6.1-rc5,
and renamed to llz4.c and llz4hc.c respectively to avoid name
collisions. Use of vmalloc has been changed to kvmalloc since it is
faster in most cases. They implement the Crypto API interface, and
rely on the lz4/lz4hc kernel library for compression implementation.
They have been modified to grok a compression acceleration/level, as
read from the top 4 bits of the crypto_tfm flags, and pass it to the
underlying library.
The lz4/lz4hc library sources are also copied from linux v6.1-rc5 and
built statically, so lz4_compress, lz4_decompress and lz4hc_compress
sources have been "de-modulified", and EXPORT_SYMBOLs removed. Headers
have also been copied from linux v6.1-rc5 for consistency, and source
files modified to include the copied headers instead of the system
headers.

All aforementioned sources are located in the lustre_compat/crypto/lz4
directory.

The lz4/lz4hc modules are built only if the kernel does not provide
them. This is verified by checking if the CONFIG_CRYPTO_LZ4 and
CONFIG_CRYPTO_LZ4HC kernel config options are defined.

This patch provides unit testing of several compression modules, such
as lz4, lz4hc, lzo and gzip. This is done via a new test kernel module
kcompr.ko, and new sanity test_84. File lustre/tests/kernel/kcompr.c
contains examples of how to call the compression/decompression
routines.

EX-7998 lustre: Fix build with crypto_tfm_ctx on kernel 6.2

In recent kernels, commit e634ac4
"crypto: api - Add crypto_tfm_ctx_dma"
moved crypto_tfm_ctx into algapi.h. So this file must be included
from lustre_crypto.h.
Was-Change-Id: If10f721355da3e58ca541c17615e978334e8d718

EX-7683 utils: always try to use our own lz4/lz4hc

lz4/lz4hc provided by the kernel do not grok a compression level.
The built-in lz4/lz4hc do, so always build them as dedicated kernel
modules llz4.ko and llz4hc.ko, with the same .cra_name but with a
slightly higher .cra_priority = 110, so that they are preferred over
the in-kernel modules if any.

And try to manually load the llz4/llz4hc kernel modules when a file
requires compression with the corresponding alg. This is a "one-shot"
try that allows us to prefer our modules that has level support, but
continues to at least compress/decompress files even if our own
modules are not available.
Was-Change-Id: I0bdf267f998e21df81e460250a653aed34e3215d

EX-bug-id: EX-6275
Test-Parameters: testlist=sanity env=ONLY=84
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Signed-off-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Signed-off-by: Marc Vef <mvef@whamcloud.com>
Change-Id: I74ce95ff18194c6052d291588d7e8c79596a7f23
56435 master J !B ✗T –R -2/2−
LU-18231 odb: add a TODO to remove the spinlock for odb_flags
reviewing Ronnie Sahlberg · blocked on the owner: build failure
XS +3 −1
61d
blocked on the owner: build failure
you voted -1 on current PS
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #108057 FAILURE
reviews: James Simmons -1 2026-09-03 18:50 · Timothy Day -1 2026-08-12 02:08
patchsets: PS1 09-20 PS2 09-20 PS3 09-20 PS4 10-01
owner Ronnie Sahlberg · uploader Ronnie Sahlberg · PS4 uploaded 764d ago · NEW · open in Gerrit ↗
commit message
LU-18231 odb: add a TODO to remove the spinlock for odb_flags

Now that all modifications of the odb_flag bits are done
using atomic set/clear/test functions we may not need the
protection of the spinlock in every situation.
That is out of scope for this patch series but is something
that we can consider in the future.

Add a TODO that we can remove some of the uses of this spinlock
in a future series.

Test-Parameters: trivial
Signed-off-by: Ronnie Sahlberg <rsahlberg@whamcloud.com>
Change-Id: I30d880b46247374092d9c592554651c35ecda93d
68247 master J !B ✓T ✓R +0/2−
LU-17000 lmv: use a plain goto for the create retry path
reviewing Oleg Drokin · you voted +1 on current PS
XS +2 −2
62d
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #130091 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-24 16:05 · Andreas Dilger -1 2026-09-02 17:19
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-17000 lmv: use a plain goto for the create retry path

lmv_locate_tgt_create() has no rc and new_tgt: unconditionally
reassigns tgt, so GOTO(new_tgt, -EAGAIN) only made the D_TRACE log
claim the function was leaving with -EAGAIN when it was not.  Use a
plain goto, as the retry paths elsewhere in this file already do.

Test-Parameters: trivial
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I1581178a9842c5e7b433babb4963bfcffcebfb9b
66512 master J !B ✓T ✓R +1/2
LU-9639 ldlm: Add kernel doc style for LDLM (6)
reviewing Arshad Hussain · you voted +1 on current PS
dwg M +33 −17
70d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #130080 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-25 17:35 · Arshad Hussain +1 2026-08-25 08:53
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 06-07 PS2 08-16 PS3 08-18 PS4 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-07-30 18:59) — now at PS4
owner Arshad Hussain · uploader Oleg Drokin · PS4 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (6)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Also correct the ldlm_process_flock_lock() description: it runs
under the resource lock rather than the namespace lock, its conflict
scan is over the locks already granted on the resource, and its
return value is an iterator verdict.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Ie20f2650887718a571ba639bd1420a7a76f87d3d
63717 master J ✓B ✓T ✓R +1/2
LU-19844 osd-zfs: Add kernel doc style for osd-zfs (5)
reviewing Arshad Hussain · you voted +1 on current PS
dwg 1 unresolved M +42 −33
71d
build #130074 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-24 19:37 · Arshad Hussain +1 2026-08-25 10:08
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 02-01 PS2 02-02 PS3 08-24 Oleg Drokin
your previous vote: +1 on PS2 (2026-08-06 19:41) — now at PS3
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-12 15:46 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) The message says the patch "removes '/**' for comments which is not meant to be a kernel-doc comment", but this patch has no such hu
Gerrit AI review for Lustre PS2 · 2026-08-12 15:46
(minor) The message says the patch "removes '/**' for comments which is not meant to be a kernel-doc comment", but this patch has no such hunk — all four blocks are '/**' comments being converted into real kernel-doc. That sentence looks carried over from patch (1) of the series. Could it be dropped here so the body matches the diff?
owner Arshad Hussain · uploader Oleg Drokin · PS3 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-19844 osd-zfs: Add kernel doc style for osd-zfs (5)

This patch converts existing functional comments in osd_io.c and
osd_xattr.c to kernel doc style comments. osd_bufs_get_read()
returns the number of local niobufs filled, not 0, so document
that per the dbo_bufs_get() contract in dt_object.h.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: If8aea2457659c688b2dfcd4cc8d3d0a808ad3918
66511 master J !B ✓T ✓R +1/2
LU-9639 ldlm: Add kernel doc style for LDLM (5)
reviewing Arshad Hussain · you voted +1 on current PS
dwg 9 unresolved M +58 −27
71d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #130069 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-24 17:41 · Arshad Hussain +1 2026-08-25 08:53
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 06-07 PS2 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-07-30 19:00) — now at PS2
threads: 9 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_extent.c:185 — (typo) "lcok" -> "lock".
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
(typo) "lcok" -> "lock".
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_extent.c:186 — (minor) Same `[out]` question as @contended_locks. ldlm_extent_internal_policy_granted() only ever shrinks this extent — `new_ex->end = min(
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
(minor) Same `[out]` question as @contended_locks. ldlm_extent_internal_policy_granted() only ever shrinks this extent — `new_ex->end = min(new_ex->end, START(lck) - 1)` and the `new_ex->start == req_start && new_ex->end == req_end` early break both read the incoming value. The caller ldlm_extent_policy() has to seed it with `{ 0, OBD_OBJECT_EOF }` first. Worth documenting it as in/out with that precondition rather than as a pure output.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_extent.c:456 — (minor) Two things read oddly here. `[out]` suggests the callee only writes it, but ldlm_extent_compat_queue() does `*contended_locks += che
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
(minor) Two things read oddly here. `[out]` suggests the callee only writes it, but ldlm_extent_compat_queue() does `*contended_locks += check_contention` and then reads it back in `ldlm_check_contention(req, *contended_locks)`. The caller relies on that: ldlm_process_extent_lock() zeroes the variable once and passes the same one to the granted-queue call and then the waiting-queue call, so the second call accumulates onto the first. Marking it in/out would describe the contract better.

Also, "locks that are waiting" doesn't quite match — on the granted-queue path the count comes from ldlm_extent_compat_cb(), which bumps it for conflicting *granted* locks. Something like "running count of conflicting locks used for contention detection" is closer.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_extent.c:828 — (typo) "lcok" -> "lock" here too.
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
(typo) "lcok" -> "lock" here too.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_extent.c:838 — (defect) This block has no `Return:` section, but the function returns LDLM_ITER_CONTINUE, LDLM_ITER_STOP, or a negative rc via the `out:` l
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
(defect) This block has no `Return:` section, but the function returns LDLM_ITER_CONTINUE, LDLM_ITER_STOP, or a negative rc via the `out:` label. Running scripts/kernel-doc over the patched file still reports:

    No description found for return value of 'ldlm_process_extent_lock'

It is the only kernel-doc warning left in the file after this patch, so adding a `Return:` list here would make the file clean.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_extent.c:1018 — (minor) The commit message says the patch removes `/**` from comments that aren't meant to be kernel-doc, but this one and the matching one
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
(minor) The commit message says the patch removes `/**` from comments that aren't meant to be kernel-doc, but this one and the matching one on ldlm_extent_unlink_lock() are still `/**`. kernel-doc silently ignores them, so they end up looking like documentation that never gets parsed. Convert them or drop to `/*`?
reply PS2 2026-08-24 11:06 Gerrit AI review for Lustre ldlm_extent.c:487 — Two things about this line, neither a bug.
Gerrit AI review for Lustre PS2 · 2026-08-24 11:06
Two things about this line, neither a bug.

-EAGAIN isn't really tied to group locks - it is driven by LDLM_FL_BLOCK_NOWAIT / LDLM_FL_SPECULATIVE, and the plain-extent paths reach it too (`if (!work_list || (*flags & LDLM_FL_SPECULATIVE))` on the granted tree, and the `spec_contention` goto in the waiting-queue walk). "such as" makes it survive, but naming the flags would be more useful.

More importantly, every negative return goes through `destroylock:`, which unlinks @req from the resource and calls ldlm_lock_destroy_nolock(). Since a Return: list is being added anyway, worth saying that @req is destroyed on that path so a reader knows not to touch it.
reply PS2 2026-08-24 11:06 Gerrit AI review for Lustre ldlm_extent.c:774 — This description is inherited from the old \param text, but since the line is being rewritten anyway: struct ldlm_prolong_args has no timeou
Gerrit AI review for Lustre PS2 · 2026-08-24 11:06
This description is inherited from the old \param text, but since the line is being rewritten anyway: struct ldlm_prolong_args has no timeout field (the timeout comes from ptlrpc_export_prolong_timeout(arg->lpa_req, false)), and lpa_extent is never read here - only ldlm_resource_prolong() uses it, to bound the extent_search().

What this function actually touches is lpa_export, lpa_req, lpa_locks_cnt and lpa_blocks_cnt.
reply PS2 2026-08-24 11:06 Gerrit AI review for Lustre ldlm_extent.c:868 — "conflicting lock queue" only covers half of what this list carries here. `grant_work` aliases `work_list` whenever `intention != LDLM_PROCE
Gerrit AI review for Lustre PS2 · 2026-08-24 11:06
"conflicting lock queue" only covers half of what this list carries here. `grant_work` aliases `work_list` whenever `intention != LDLM_PROCESS_ENQUEUE`, and `ldlm_grant_lock(lock, grant_work)` then puts a completion-AST work item for `lock` itself onto it.

In the LDLM_PROCESS_RESCAN branch both compat_queue calls pass NULL, so the only thing that ever lands on `work_list` there is `lock`'s own CP AST - never a conflicting lock. ldlm_reprocess_queue() relies on exactly that when it splices to the CP_AST list vs. the BL_AST list.

Something like "list collecting AST work items: blocking ASTs for conflicting locks, plus the completion AST for @lock when @intention is not LDLM_PROCESS_ENQUEUE" would describe it. The same phrase on ldlm_extent_compat_queue() is fine - it really is only conflicting locks there.
owner Arshad Hussain · uploader Oleg Drokin · PS2 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (5)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment.
ldlm_extent.c is now clean under contrib/scripts/kernel-doc
-none -Wreturn -Wall.

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Id9b20c82c81665c986d2b2def1fa37620353c187
68248 master J ✗1B ✓T ✓R +2/2
LU-17000 ldlm: clear the sysfs pointers in ldlm_cleanup()
reviewing Oleg Drokin · you voted +1 on current PS
XS +7 −2
71d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@ldiskfs+DNE:test_64hseen in 17 other reviews
build #130093 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-24 16:03 · Andreas Dilger +1 2026-08-24 07:39
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-17000 ldlm: clear the sysfs pointers in ldlm_cleanup()

ldlm_cleanup() unregisters ldlm_ns_kset, ldlm_svc_kset and ldlm_kobj
but leaves the globals set, so a second ldlm_setup() that fails
before reassigning them unregisters already freed objects.  Clear
them, as ldlm_debugfs_cleanup() right below already does for its own
dentries.

Test-Parameters: trivial
Fixes: 1196bd199e7c ("LU-8066 ldlm: move /proc/fs/lustre/ldlm to sysfs")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I00043f47d6bfa562ec90fd4c387bc823cdfc726d
65830 master J ✓B ✓T ✗1R +2/2
LU-20246 tests: handle small test nodes with ncpt < 2
reviewing Shaun Tancheff · blocked on the owner: enforced tests failed
XS +4 −2
81d
blocked on the owner: enforced tests failed
you voted +1 on current PS
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 1 tests failed: sanity. session
build #129032 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-10 12:59 · Chris Horn +1 2026-08-14 20:47
no vote yet: Cyril Bordage, Andreas Dilger, Oleg Drokin, Timothy Day
patchsets:
+1 earlier PS1 05-12
PS2 05-12 PS3 05-12 PS4 06-28 PS5 08-05 PS6 08-10
your previous vote: +1 on PS5 (2026-08-06 19:09) — now at PS6
owner Shaun Tancheff · uploader Shaun Tancheff · PS6 uploaded 86d ago · NEW · open in Gerrit ↗
commit message
LU-20246 tests: handle small test nodes with ncpt < 2

sanity-lnet/170 should not fail with -ERANGE when node is configured
with less than 2 cpu partitions.

Test-Parameters: trivial testlist=sanity-lnet
Fixes: 18bc6c4a54 ("LU-20000 lnetctl: bad CPTs/tunables during import")
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I2abf7ad256c05403b149935927ceaccbc600a1b7
66838 master J –B ✓T ✓R +3/2
LU-20418 build: Move core pre-v5.19 checks to ksym checks
reviewing Shaun Tancheff · you voted +1 on current PS
stalled 101d L +272 −503
101d
build #126972 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 00:27 · Andreas Dilger +1 2026-06-28 09:45 · Timothy Day +1 2026-07-03 15:10
patchsets: PS1 06-24 PS2 06-26
owner Shaun Tancheff · uploader Shaun Tancheff · PS2 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v5.19 checks to ksym checks

Move checks for:
  HAVE_SET_POSIX_ACL_USER_NS
  FOLIO_MEMCG_LOCK_EXPORTED
  HAVE_FOLIO_MEMCG_LOCK_STATIC
  HAVE_KIOCB_COMPLETE_2ARGS
  HAVE_ACCOUNT_PAGE_DIRTIED
  HAVE_ACCOUNT_PAGE_DIRTIED_EXPORT
  HAVE_FOLIO_MEMCG_LOCK
  HAVE_COPY_PAGE_FROM_ITER_ATOMIC
  HAVE_FOLIO_BATCH
  HAVE_SECURITY_DENTRY_INIT_WITH_XATTR_NAME_ARG
  HAVE_DELETE_FROM_PAGE_CACHE
  HAVE_INVALIDATE_FOLIO
  HAVE_BIO_SET_DEV
  HAVE_FAULT_IN_IOV_ITER_READABLE
  HAVE___FILEMAP_GET_FOLIO
  HAVE_BI_BDEV
  HAVE_DIRTY_FOLIO
  HAVE_ALLOC_INODE_SB
  HAVE_USER_NAMESPACE_ARG
  HAVE_GET_ACL_RCU_ARG
  HAVE_FILEATTR_GET

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I5aaac5bffe98f3409407c773d9529b1e797858a2
66830 master J –B ✓T ✓R +3/2
LU-20418 build: Move libcfs pre-v5.10 checks to ksym checks
reviewing Shaun Tancheff · blocked on the owner: Verified -1 by Oleg Drokin
Verified -1 stalled 116d 2 unresolved L +236 −399
116d
blocked on the owner: Verified -1 by Oleg Drokin
you voted +1 on current PS
build #126960 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 00:27 · Andreas Dilger +1 2026-06-26 18:39 · Timothy Day +1 2026-06-27 01:07
no vote yet: Oleg Drokin
patchsets: PS1 06-24 PS2 06-25
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-10 21:17 Timothy Day patchset comment — It's difficult to test these patches sufficiently beforehand, because Janitor refuses to build them:
Oleg Drokin PS2 · 2026-07-10 21:02
when I have this in master net, the build fails with:
make[1]: Entering directory '/home/green/bk/linux-5.14.0-570.58.1.el9_6'
  CC [M]  /home/green/git/lustre-release/lustre/obdclass/llog.o
In file included from /home/green/git/lustre-release/lustre/include/lprocfs_status.h:29,
                 from /home/green/git/lustre-release/lustre/include/obd_support.h:27,
                 from /home/green/git/lustre-release/lustre/include/obd_class.h:20,
                 from /home/green/git/lustre-release/lustre/include/lustre_log.h:34,
                 from /home/green/git/lustre-release/lustre/obdclass/llog.c:29:
/home/green/git/lustre-release/include/lustre_compat/linux/sysfs.h:14: warning: "ATTRIBUTE_GROUPS" redefined
   14 | #define ATTRIBUTE_GROUPS(_name) static struct attribute *_name##_groups = _name##_attrs
      | 
In file included from ./include/linux/kobject.h:20,
                 from /home/green/git/lustre-release/lustre/include/obd_class.h:19,
                 from /home/green/git/lustre-release/lustre/include/lustre_log.h:34,
                 from /home/green/git/lustre-release/lustre/obdclass/llog.c:29:
./include/linux/sysfs.h:159: note: this is the location of the previous definition
  159 | #define ATTRIBUTE_GROUPS(_name)                                 \
      | 
In file included from /home/green/git/lustre-release/include/linux/libcfs/libcfs_private.h:24,
                 from /home/green/git/lustre-release/lustre/include/obd_support.h:24,
                 from /home/green/git/lustre-release/lustre/include/obd_class.h:20,
                 from /home/green/git/lustre-release/lustre/include/lustre_log.h:34,
                 from /home/green/git/lustre-release/lustre/obdclass/llog.c:29:
/home/green/git/lustre-release/lustre/obdclass/llog.c: In function ‘llog_init_handle’:
/home/green/git/lustre-release/include/lustre_compat/linux/vmalloc.h:11:39: error: too many arguments to function ‘__vmalloc’
   11 | #define __compat_vmalloc(size, flags) __vmalloc(size, flags, PAGE_KERNEL)
      |                                       ^~~~~~~~~
/home/green/git/lustre-release/lustre/include/obd_support.h:889:17: note: in expansion of macro ‘__compat_vmalloc’
  889 |                 __compat_vmalloc(size, GFP_NOFS | __GFP_ZERO) :               \
      |                 ^~~~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/include/obd_support.h:902:10: note: in expansion of macro ‘__OBD_VMALLOC_VERBOSE’
  902 |          __OBD_VMALLOC_VERBOSE(ptr, NULL, 0, size)
      |          ^~~~~~~~~~~~~~~~~~~~~
/home/green/git/lustre-release/lustre/include/obd_support.h:915:17: note: in expansion of macro ‘OBD_VMALLOC’
  915 |                 OBD_VMALLOC(ptr, size);                                       \
      |                 ^~~~~~~~~~~
/home/green/git/lustre-release/lustre/obdclass/llog.c:420:9: note: in expansion of macro ‘OBD_ALLOC_LARGE’
  420 |         OBD_ALLOC_LARGE(llh, chunk_size);
      |         ^~~~~~~~~~~~~~~
In file included from ./include/asm-generic/io.h:994,
                 from ./arch/x86/include/asm/io.h:349,
                 from ./include/linux/scatterlist.h:9,
                 from ./include/linux/kfifo.h:42,
                 from ./include/linux/tty_port.h:5,
                 from ./include/linux/tty.h:12,
                 from /home/green/git/lustre-release/include/linux/libcfs/libcfs_debug.h:19,
                 from /home/green/git/lustre-release/lustre/include/obd_support.h:23,
                 from /home/green/git/lustre-release/lustre/include/obd_class.h:20,
                 from /home/green/git/lustre-release/lustre/include/lustre_log.h:34,
                 from /home/green/git/lustre-release/lustre/obdclass/llog.c:29:
./include/linux/vmalloc.h:148:14: note: declared here
  148 | extern void *__vmalloc(unsigned long size, gfp_t gfp_mask) __alloc_size(1);
      |              ^~~~~~~~~
In file included from /home/green/git/lustre-release/include/linux/libcfs/libcfs_private.h:24,
                 from /home/gree
Timothy Day PS2 · 2026-07-10 21:17
It's difficult to test these patches sufficiently beforehand, because Janitor refuses to build them:

```
Lustre Gerrit Janitor

Cannot detect any functional changes in this patch
```
reply PS2 2026-07-10 22:25 Gerrit AI review for Lustre HAVE_IP6_SET_PREF.ksym:11 — (defect) The second argument is `bool val`, but the kernel prototype is `int val`:
Gerrit AI review for Lustre PS2 · 2026-07-10 22:25
(defect) The second argument is `bool val`, but the kernel prototype is `int val`:

    static inline int ip6_sock_set_addr_preferences(struct sock *sk, int val)

The escaped regex therefore matches no kernel, so HAVE_IP6_SET_PREF is never defined. The old LIBCFS_IP6_SET_PREF test called `ip6_sock_set_addr_preferences(NULL, 0)` and was arg-type-agnostic, so it detected the function. On a kernel that still has `kernel_setsockopt` and also provides this inline (vendor backport / 5.8 merge window), the fallback in include/lustre_compat/net/tcp.h now compiles too, giving a redefinition of `ip6_sock_set_addr_preferences`. The sibling HAVE_IP_SET_TOS check uses `int val` correctly; this should be `int val`.
owner Shaun Tancheff · uploader Shaun Tancheff · PS2 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move libcfs pre-v5.10 checks to ksym checks

Move checks for:
  HAVE_CACHE_DETAIL_WRITERS
  HAVE_GENL_DUMPIT_INFO_FAMILY
  HAVE_IP6_SET_PREF
  HAVE_IP_SET_TOS
  HAVE_KALLSYMS_LOOKUP_NAME
  HAVE_KERNEL_SETSOCKOPT
  HAVE_KEY_NEED_UNLINK
  HAVE_KOBJ_TYPE_DEFAULT_GROUPS
  HAVE_NR_UNSTABLE_NFS
  HAVE_NR_UNSTABLE_NFS_DEPRECATED
  HAVE_PROC_OPS
  HAVE_SEC_RELEASE_SECCTX_1ARG
  HAVE_TCP_SOCK_SET_KEEPCNT
  HAVE_TCP_SOCK_SET_KEEPINTVL
  HAVE_TCP_SOCK_SET_QUICKACK
  HAVE_USER_UID_KEYRING
  HAVE_VMALLOC_2ARGS

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Id530a1c47b6e178e024bd8010b4b6661d34ff3b9
66819 master J !B ✓T ✓R +3/2
LU-20418 build: Move core early checks to ksym checks
reviewing Shaun Tancheff · you voted +1 on current PS
stalled 123d M +84 −140
123d
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #126995 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 14:04 · Andreas Dilger +1 2026-06-28 09:47 · Timothy Day +1 2026-07-03 15:22
patchsets: PS1 06-23 PS2 06-26 PS3 06-26
owner Shaun Tancheff · uploader Shaun Tancheff · PS3 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core early checks to ksym checks

Move early checks for:
  HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN_WITH_FLAGS
  HAVE_INVALIDATE_LOCK
  HAVE_LOCKS_LOCK_FILE_WAIT
  HAVE_STRUCT_LSM_CONTEXT
  HAVE_WB_STAT_MOD

Move check for:
  HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN

Drop the early pass now that all early checks are ksym

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I1f997b8597949b12e0e170887486ce0811f89b68
66874 master J –B ✓T ✓R +3/2
LU-20418 build: Move core pre-v7.1 checks to ksym checks
reviewing Shaun Tancheff · you voted +1 on current PS
stalled 123d L +204 −350
123d
build #126994 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 00:29 · Andreas Dilger +1 2026-06-28 09:46 · Timothy Day +1 2026-07-03 15:12
patchsets: PS1 06-26 PS2 06-26
owner Shaun Tancheff · uploader Shaun Tancheff · PS2 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v7.1 checks to ksym checks

Move checks for:
  HAVE_INODE_JUST_DROP
  HAVE_MEMDESC_FLAGS_T
  PAGE_FLAGS
  HAVE_DENTRY__D_NAME
  HAVE_FILE__F_PATH
  HAVE_VFS_MKDIR_DELEGATE
  HAVE_INODE_STATE_READ
  HAVE_VFS_CREATE_DELEGATE
  HAVE_ILOOKUP5_NOWAIT_ISNEW
  HAVE_FILEMAP_ALLOC_FOLIO_NUMA
  HAVE_KILL_LITTER_SUPER
  HAVE_D_MAKE_PERSISTENT
  HAVE_POSIX_ACL_TO_XATTR_ALLOC_BUFFER

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ic0d14173c3c3ddaac4aeb096fab82d0e1f2386cd
66846 master J –B ✓T ✓R +3/2
LU-20418 build: Move core pre-v6.12 checks to ksym checks
reviewing Shaun Tancheff · you voted +1 on current PS
stalled 123d L +220 −382
123d
build #126993 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 00:27 · Andreas Dilger +1 2026-06-28 09:45 · Timothy Day +1 2026-07-03 15:12
patchsets: PS1 06-24 PS2 06-26 PS3 06-26
owner Shaun Tancheff · uploader Shaun Tancheff · PS3 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v6.12 checks to ksym checks

Move checks for:
  HAVE_FLUSH___WORKQUEUE
  HAVE_INODE_GET_CTIME
  HAVE_COPY_FOLIO_FROM_ITER_ATOMIC
  HAVE_MMAP_WRITE_TRYLOCK
  HAVE_GENERIC_FILEATTR_HAS_MASK_ARG
  HAVE_GROUP_INFO_USAGE_AS_REFCOUNT
  HAVE_NSPROXY_COUNT_AS_REFCOUNT
  HAVE_INODE_GET_MTIME_SEC
  HAVE_SHRINKER_ALLOC
  HAVE_DENTRY_D_CHILDREN
  HAVE_GENERIC_ERROR_REMOVE_FOLIO
  HAVE_STRUCT_FILE_LOCK_CORE
  HAVE_CSUM_TYPE_BLK_INTEGRITY
  HAVE_FOLIO_MEMCG_LOCK_STATIC

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I4fae08aefc51beb260035af8ba568c8f6e2a4afb
66845 master J –B ✓T ✓R +3/2
LU-20418 build: Move core pre-v6.6 checks to ksym checks
reviewing Shaun Tancheff · you voted +1 on current PS
stalled 123d L +321 −562
123d
build #126991 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-06-28 00:27 · Andreas Dilger +1 2026-06-28 09:45 · Timothy Day +1 2026-07-03 15:11
patchsets: PS1 06-24 PS2 06-26 PS3 06-26
owner Shaun Tancheff · uploader Shaun Tancheff · PS3 uploaded 131d ago · NEW · open in Gerrit ↗
commit message
LU-20418 build: Move core pre-v6.6 checks to ksym checks

Move checks for:
  HAVE_ACL_WITH_DENTRY
  HAVE_BIO_ADD_FOLIO
  HAVE_CLASS_CREATE_WITH_MODULE
  HAVE_ENUM_ITER_PIPE
  HAVE_FILEMAP_SPLICE_READ
  HAVE_FILLDIR_USE_CTX_RETURN_BOOL
  HAVE_FOLIO_BATCH_REINIT
  HAVE_FOLIO_MAPCOUNT
  HAVE_GET_RANDOM_U32_AND_U64
  HAVE_GET_RANDOM_U32_BELOW
  HAVE_GET_USER_PAGES_WITHOUT_VMA
  HAVE_IOP_GET_INODE_ACL
  HAVE_IOV_ITER_IOVEC
  HAVE_MNT_IDMAP_ARG_GETATTR
  HAVE_MNT_IDMAP_ARG_GET_ACL
  HAVE_PAGEVEC
  HAVE_POSIX_ACL_TYPE
  HAVE_SG_SET_FOLIO
  HAVE_U64_CAPABILITY
  HAVE___IOV_MEMBER

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I63059934626f123bcf4cb588a55adb2763719797
65122 master J !B ✓T ✓R -2/2−
LU-20085 llite: client vfs rename hang
reviewing Alexander Zarochentsev · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 135d 5 unresolved S +45 −0
135d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #123634 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-04-10 00:55
no vote yet: Andrew Perepechko, Andreas Dilger
patchsets: PS1 04-06 PS2 04-07 PS3 04-09
your previous vote: -1 on PS2 (2026-04-07 18:32) — now at PS3
threads: 3 need your reply · 2 waiting on others · 0 own notes · 0 bot
reply PS1 2026-04-07 15:29 Andreas Dilger namei.c:616 — (style) should be named `ll_d_ancestor()` so that it is more clear where it came from
Andreas Dilger PS1 · 2026-04-07 15:29
(style) should be named `ll_d_ancestor()` so that it is more clear where it came from

(minor) should have a configure check for d_ancestor() export in case that is changed in upstream kernels.
reply PS1 2026-04-09 16:25 Oleg Drokin namei.c:643 — note it's client console, but the usefullness is still questionable.
Andreas Dilger PS1 · 2026-04-07 15:29
(defect) This is OK for testing, but it isn't helpful to print this on the server console every time that someone passes the wrong arguments to `mv`. This should *at the very most* be CWARN(), but probably be a CDEBUG() since it could happen during normal operation and there isn't anything "wrong" with the filesystem that the admin needs to fix.
Oleg Drokin PS1 · 2026-04-09 16:25
note it's client console, but the usefullness is still questionable.
reply PS1 2026-04-07 22:06 Alexander Zarochentsev namei.c:644 — sorry. wrong reply :-) Andreas, your comment is right.
Andreas Dilger PS1 · 2026-04-07 15:29
(defect) this is accessing "new" and "inode" after `dput(new)` and `iput(inode)` above. This should be printed first
Alexander Zarochentsev PS1 · 2026-04-07 17:25
ah yes. thanks!
Alexander Zarochentsev PS1 · 2026-04-07 21:53
seems not, new dentry (which is actually the "old" dentry found by the alias search, but the naming comes from d_splice_alias) has an extra ref from the search,
Alexander Zarochentsev PS1 · 2026-04-07 22:06
sorry. wrong reply :-) Andreas, your comment is right.
owner Alexander Zarochentsev · uploader Alexander Zarochentsev · PS3 uploaded 208d ago · NEW · open in Gerrit ↗
commit message
LU-20085 llite: client vfs rename hang

ll_splice_alias doesn't try to reuse an existing dir alias
if its name is not equal to the new one.
It leads to a deadlock during rename when VFS tries to lock
inodes to both names/dentries, the same inode getting locked twice.

The code makes an exception for accessing Lustre ROOT inode
by .lustre/fid/<ROOT_FID>, but doesn't allow the same for
.lustre and .lustre/fid, these objects became not accessible
by their FIDs using .lustre/fid/, the corresponding test case
gets disabled.

HPE-bug-id: LUS-13174
Signed-off-by: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
Change-Id: I280c016208ecdc529d7735abb36dba3dc3d15df9
63054 master J !B ✓T ✓R +2/2
LU-9646 lov: Add kernel doc style for LOV (3)
reviewing Arshad Hussain · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase dwg stalled 149d M +95 −75
149d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #125602 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-05-27 07:57 · Anjus George +1 2026-05-29 21:04 · Jian Yu +1 2026-05-27 07:57
no vote yet: Andreas Dilger
patchsets: PS1 12-14 PS2 05-27
your previous vote: +1 on PS1 (2026-05-25 12:47) — now at PS2
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 161d ago · NEW · open in Gerrit ↗
commit message
LU-9646 lov: Add kernel doc style for LOV (3)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Iab02ad42250207a279d07ff3dd1ea92648537699
63577 master J ✗1B ✓T ✓R +1/2−
LU-9650 mdc: Add kernel doc style for MDC (2)
reviewing Arshad Hussain · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase dwg stalled 158d M +52 −30
158d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-hsm@zfs:test_254bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #125497 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-05-27 14:17 · Anjus George +1 2026-05-29 21:01
no vote yet: Andreas Dilger
patchsets: PS1 01-26 PS2 01-26 PS3 01-26 PS4 05-25
owner Arshad Hussain · uploader Arshad Hussain · PS4 uploaded 163d ago · NEW · open in Gerrit ↗
commit message
LU-9650 mdc: Add kernel doc style for MDC (2)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I72c5f143d93aff45916352b15c5cdfaa5e445119
62659 b2_15 B ✓T ✓R +4/1
LU-16051 o2iblnd: detect link state to set fatal error on ni
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 159d M +192 −34
159d
build #118872 SUCCESS · tests all Maloo sessions
reviews: Cyril Bordage +1 2025-12-12 09:56 · James Simmons +1 2026-05-28 18:45 · Serguei Smirnov +1 2026-05-28 16:59 · Chris Horn +1 2026-05-22 19:28
no vote yet: Frank Sehr
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 347d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16051 o2iblnd: detect link state to set fatal error on ni

To avoid selecting lnet ni which corresponds to a downed link
for sending, add a mechanism for detecting ip-layer link events
in o2iblnd. On ip link up/down events, find corresponding
ni and toggle ni_fatal_error_on flag. This complements the
existing mechanism for ib-layer link event handling.

Lustre-change: https://review.whamcloud.com/48644
Lustre-commit: 30d73908087d5b2f0b18cce95826c4825c030ad4

Test-Parameters: trivial
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Change-Id: I4720cd0a7bc577a522c7d40b54f821a4c12b670f
Reviewed-by: Frank Sehr <fsehr@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Cyril Bordage <cbordage@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
62953 b2_15 J ✗3B ✓T ✓R +4/1
LU-18644 socklnd: make link state detection namespace-aware
reviewing Sonia Sharma · you voted +1 on current PS
stalled 159d S +9 −2
159d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-quota@zfs+DNE:test_1eNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs+DNE:test_1fNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-quota@zfs+DNE:test_1iNEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
build #120187 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-05-28 18:41 · Adam Peace +1 2026-05-26 14:38 · Chris Horn +1 2026-05-22 18:31 · Timothy Day +1 2026-05-24 05:07
no vote yet: Frank Sehr, Serguei Smirnov, Oleg Drokin
patchsets: PS1 12-08 PS2 01-08 PS3 01-08
owner Sonia Sharma · uploader Sonia Sharma · PS3 uploaded 300d ago · NEW · backport · open in Gerrit ↗
commit message
LU-18644 socklnd: make link state detection namespace-aware

Check the network namespace of the device in the event against
the namespace associated with the ni and ignore events from
non-matching namespaces

Lustre-change: https://review.whamcloud.com/57808
Lustre-commit: b4748cb4684f5b2594d127b29f3876f07bd077ee

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Frank Sehr <fsehr@whamcloud.com>
Reviewed-by: Adam Peace <adam.peace@microsoft.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Signed-off-by: Sonia Sharma <sonia.sh.sharma@oracle.com>
Change-Id: I9698950497721a3eb3b0e161e59c2db778091138
39654 master J –B ✓T ✓R -2/2−
LU-13903 build: Always include OpenSFS UAPI headers
reviewing Neil Brown · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 160d XS +2 −2
160d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
build #16077 SUCCESS
reviews: James Simmons -1 2020-08-12 13:14
owner Neil Brown · uploader Neil Brown · PS1 uploaded 2275d ago · NEW · open in Gerrit ↗
commit message
LU-13903 build: Always include OpenSFS UAPI headers

Various utils code including util/parser.c and util/nidstrings.c
include files from the lnet,lustre/uapi directory, but that
is not included in CPPFLAGS when configured with --disable-modules.

There is no need to isolate the assignment to that case - we can
safely add these directories unconditionally.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I9974ad78ccabe84b1a0054c41bbc017503be231c
65171 master J !B ✓T ✗28R +0/2−
LU-20101 osp: release procfs entries early
reviewing Alex Zhuravlev · blocked on the owner: enforced tests failed
stalled 164d XS +1 −0
164d
blocked on the owner: enforced tests failed
you voted +1 on current PS
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 8.10 / x86_64 ran 21 tests. 6 tests failed: sanity-pfl, sanity-lnet, sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-part-2 RHEL 9.7 / x86_64 ran 21 tests. 6 tests failed: sanity-pfl, sanity-lnet, sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-part-3 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-3 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 8.10 / x86_64 ran 17 tests. 5 tests failed: sanity-quota, sanity-hsm, sanity-flr, mmp, insanity. session
review-dne-part-4 RHEL 9.7 / x86_64 ran 17 tests. 5 tests failed: sanity-quota, sanity-hsm, sanity-flr, mmp, insanity. session
review-dne-part-5 RHEL 8.10 / x86_64 ran 7 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-part-5 RHEL 9.7 / x86_64 ran 7 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-part-6 RHEL 8.10 / x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-part-6 RHEL 9.7 / x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-part-7 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-scrub, sanity-pcc, large-scale. session
review-dne-part-7 RHEL 9.7 / x86_64 ran 9 tests. 3 tests failed: sanity-scrub, sanity-pcc, large-scale. session
review-dne-part-8 RHEL 8.10 / x86_64 ran 6 tests. 2 tests failed: replay-dual, replay-vbr. session
review-dne-part-8 RHEL 9.7 / x86_64 ran 6 tests. 2 tests failed: replay-dual, replay-vbr. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-2 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-selinux, sanity-sec, recovery-small. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 21 tests. 6 tests failed: sanity-pfl, sanity-lnet, sanity-sec, sanity-lfsck, runtests, replay-dual. session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 17 tests. 5 tests failed: sanity-quota, sanity-hsm, sanity-flr, mmp, insanity. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 7 tests. 2 tests failed: sanityn, recovery-small. session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 6 tests. 2 tests failed: ost-pools, replay-single. session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 9 tests. 3 tests failed: sanity-scrub, sanity-pcc, large-scale. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.7 / x86_64 ran 7 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 10 tests. 3 tests failed: sanity-sec, sanity-lnet, sanity. session
review-zfs RHEL 8.10 / x86_64 ran 16 tests. 5 tests failed: sanity-lsnapshot, insanity, replay-single, sanity-flr, sanity-quota. session
31 optional test failure(s) — informational
build #124642 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-05-06 13:37 · Andreas Dilger -1 2026-05-20 06:47
no vote yet: Mikhail Pershin
patchsets: PS1 04-08 PS2 04-09 PS3 04-13 PS4 05-06
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS4 uploaded 182d ago · NEW · open in Gerrit ↗
commit message
LU-20101 osp: release procfs entries early

to prevent concurrent access to the internal structures being
freed in parallel umount process.

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I9bc9e2d782fd6d4b1a0f64b0d28d8b7558de3d49
63339 master J ✓B ✓T ✓R +3/2
LU-9636 ofd: Add kernel doc style for OFD (5)
reviewing Arshad Hussain · you voted +1 on current PS
dwg stalled 174d L +149 −145
174d
build #120605 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-05-14 02:08 · Anjus George +1 2026-02-21 17:29 · Andreas Dilger +1 2026-02-18 18:05
patchsets: PS1 01-12 PS2 01-16
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 292d ago · NEW · open in Gerrit ↗
commit message
LU-9636 ofd: Add kernel doc style for OFD (5)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I98ef715f8d0cd37842540ff586c5b481458ddfad
63340 master J ✗1B ✓T ✓R +3/2
LU-9636 ofd: Add kernel doc style for OFD (6)
reviewing Arshad Hussain · you voted +1 on current PS
dwg stalled 174d M +88 −98
174d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
recovery-small@zfs:test_155NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #120603 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-02-21 23:53 · Anjus George +1 2026-02-21 17:27 · Andreas Dilger +1 2026-02-18 18:04
patchsets: PS1 01-12 PS2 01-16
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 292d ago · NEW · open in Gerrit ↗
commit message
LU-9636 ofd: Add kernel doc style for OFD (6)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ie82da73be03be0a64a108060267ccb234e7038e6
63329 master J !B ✓T ✓R +3/2
LU-9644 target: Add kernel doc style for target (3)
reviewing Arshad Hussain · you voted +1 on current PS
dwg stalled 174d M +52 −45
174d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #120608 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-02-25 16:01 · Anjus George +1 2026-02-21 17:28 · Andreas Dilger +1 2026-02-18 18:18
patchsets: PS1 01-12 PS2 01-16
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 292d ago · NEW · open in Gerrit ↗
commit message
LU-9644 target: Add kernel doc style for target (3)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I11f7f09aacafec5045e08976df6f152bbd7c3b96
63334 master J ✓B ✓T ✓R +3/2
LU-9644 target: Add kernel doc style for target (7)
reviewing Arshad Hussain · you voted +1 on current PS
dwg stalled 174d L +142 −157
174d
build #120609 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-02-20 15:17 · Anjus George +1 2026-02-21 17:19 · Andreas Dilger +1 2026-02-18 18:04
patchsets: PS1 01-12 PS2 01-16
owner Arshad Hussain · uploader Arshad Hussain · PS2 uploaded 292d ago · NEW · open in Gerrit ↗
commit message
LU-9644 target: Add kernel doc style for target (7)

This patch converts existing functional comments
to kernel doc style comments and removes '/**' for
comments which is not meant to be a kernel-doc comment

Test-Parameters: trivial
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I8261aa798029c5b422878b29ba62aa4b1350eb1b
65344 b2_15 J !B ✓T ✓R +3/1
LU-14171 ldlm: fix wrong lock in __ldlm_del_waiting_lock
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 181d XS +1 −1
181d
janitor run: 7 failing config(s), none unique to this patch — janitor results
build #123993 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-04-16 22:50 · Yang Sheng +1 2026-05-07 08:34 · Sohei Koyama +1 2026-05-07 08:05
no vote yet: Andreas Dilger
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 203d ago · NEW · backport · open in Gerrit ↗
commit message
LU-14171 ldlm: fix wrong lock in __ldlm_del_waiting_lock

In __ldlm_del_waiting_lock(), when the head of the
waiting_locks_list is removed and the timer is recalculated
for the next lock, the delta computation incorrectly uses
the removed lock's timestamp instead of the next lock's.

The condition correctly checks next->l_callback_timestamp,
but the delta assignment uses lock->l_callback_timestamp
(the lock being removed). Since the removed lock's callback
has already arrived, its timestamp is at or before the
current time, making delta zero or negative. This causes
the timer to fire immediately, expiring the next lock
prematurely and leading to unnecessary client evictions.

Fix by using next->l_callback_timestamp in the delta
calculation, consistent with waiting_locks_callback().

Lustre-change: https://review.whamcloud.com/63845
Lustre-commit: 614580008484b1169ee8da627bef11571c2cc3df

Fixes: e150810faa5b ("LU-12931 timers: correctly offset mod_timer.")
Test-Parameters: trivial
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: Idcecc1d882ccbdd458fc69f24b7684578bd7a776
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Andreas Dilger <adilger@thelustrecollective.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
64223 master J !B ✓T ✓R +1/2−
LU-19922 mdc: free procfs entries early
reviewing Alex Zhuravlev · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 218d XS +1 −1
218d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
janitor run: 9 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #123091 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-03-30 06:04 · Andreas Dilger +1 2026-03-30 20:41
no vote yet: Mikhail Pershin
patchsets: PS1 02-25 PS2 03-30
your previous vote: +1 on PS1 (2026-03-18 17:28) — now at PS2
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS2 uploaded 219d ago · NEW · open in Gerrit ↗
commit message
LU-19922 mdc: free procfs entries early

so that they are release before anydata procfs can access like stats.

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I3b63b2a4a77c6b356127ab96eebb7e0441215d26
64950 master J ✗2B ✓T ✗7R -1/2−
LU-19918 lnet: fix lnetctl import segfault with NID ranges
reviewing Stephane Thiell · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
2 unique failures stalled 218d M +169 −1
218d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
you voted -1 on current PS
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_255seen in 1 other review
sanity-lnet@zfs:test_255seen in 1 other review
failed enforced testplatformdetail
review-dne-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
10 optional test failure(s) — informational
build #122976 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-03-28 01:22
no vote yet: Kilian Cavalotti
owner Stephane Thiell · uploader Stephane Thiell · PS1 uploaded 221d ago · NEW · open in Gerrit ↗
commit message
LU-19918 lnet: fix lnetctl import segfault with NID ranges

Handle route blocks in jt_import with a dedicated handler instead of
passing raw YAML events to the kernel via netlink. The kernel's
lnet_route_cmd() cannot parse NID range expressions (e.g.
10.52.0.[131-134]@o2ib4) in the gateway field, causing a segfault.

The new handle_route_sequence() parses route YAML entries and calls
yaml_lnet_route() for each one, which properly expands NID ranges via
lustre_lnet_parse_nid_range() before sending individual NIDs to the
kernel. This matches the behavior of the CLI path (lnetctl route add)
which already worked correctly with NID ranges.

This is a regression from 2.15 introduced when commit 56af81e1aa
(LU-10391) moved route handling in jt_import from the old ioctl API to
the netlink path without NID range expansion.

sanity-lnet test_255b exercises importing a route config with NID
range syntax in the gateway field.

Fixes: 56af81e1aa ("LU-10391 lnet: update Netlink commands functionality")
Signed-off-by: Kilian Cavalotti <kilian@stanford.edu>
Signed-off-by: Stephane Thiell <sthiell@stanford.edu>
Change-Id: I4a4c1b955487474acf10d01bc117850aea9119b4
56524 b2_15 B ✓T ✓R +4/1
LU-18260 o2iblnd: fix race between REJ vs kiblnd_connd
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 246d S +24 −20
246d
build #107994 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-12-22 15:49 · Serguei Smirnov +1 2026-03-03 01:01 · Chris Horn +1 2025-10-07 15:56 · Andreas Dilger +1 2025-10-01 08:19
no vote yet: Frank Sehr
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 767d ago · NEW · backport · open in Gerrit ↗
commit message
LU-18260 o2iblnd: fix race between REJ vs kiblnd_connd

This patch fixes a possible race between CM_EVENT_REJECTED and
kiblnd_connd().

kiblnd_connd() set connection state to IBLND_CONN_DISCONNECTED
before removing the QP. So if CM_EVENT_REJECTED is received in this
time windows, it will cause the following crash:

Workqueue: ib_cm cm_work_handler [ib_cm]
all Trace:
<TASK>
dump_stack_lvl+0x34/0x48
panic+0x100/0x2d2
lbug_with_loc.cold+0x18/0x18 [libcfs]
kiblnd_cm_callback+0x108d/0x10b0 [ko2iblnd]
cma_cm_event_handler+0x1e/0xb0 [rdma_cm]
cma_ib_handler+0x8d/0x2e0 [rdma_cm]
cm_process_work+0x22/0x190 [ib_cm]
cm_rej_handler+0xdf/0x260 [ib_cm]
cm_work_handler+0x47f/0x4d0 [ib_cm]
process_one_work+0x1e8/0x390
worker_thread+0x53/0x3d0
kthread+0x124/0x150
ret_from_fork+0x1f/0x30
</TASK>

Lustre-change: https://review.whamcloud.com/56518
Lustre-commit: TBD (4c92a401be1e0a66f747a4bb68036f5f65753088)

Test-Parameters: trivial testlist=sanity-lnet
Fixes: 0b8c18d ("LU-17480 o2iblnd: add a timeout for rdma_connect")
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: I2d04433eb51e1a6862b788a89e127d8abb24b8a9
55909 b2_15 J ✗1B ✓T ✓R +5/1
LU-17400 uapi: Fix incorrect snamelen return value
reviewing Etienne AUJAMES · you voted +1 on current PS
LTS15 stalled 319d S +40 −2
319d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@zfs:test_272aseen in 5 other reviews
1 optional test failure(s) — informational
build #106506 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2024-08-02 12:38 · Arshad Hussain +1 2024-08-02 03:45 · Josh Samuelson +1 2025-12-19 20:11 · xinliang +1 2024-08-05 06:13 · Timothy Day +1 2024-08-02 03:10
no vote yet: Guillaume Courrier, Andreas Dilger
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 824d ago · NEW · backport · open in Gerrit ↗
commit message
LU-17400 uapi: Fix incorrect snamelen return value

The sname char array is limited by the struct
changelog_rec.cr_namelen value and has no '\0' character allocated
to it, so strlen() will overrun the char array till it finds the next
'\0' char.

This issue can be seen on the client side when "lfs changelog"
is run and 08RENME record types are present.

Pointer arithmetic was used between sname and name to avoid the
GCC 11 warnings mentioned in 6331eadbd6.

Added Andreas's safety/range check code to changelog_rec_sname.

Lustre-change: https://review.whamcloud.com/53624
Lustre-commit: b8f4a96b5ebd5cd35747b0a061277d02d46e7a4c

Fixes: 6331eadbd6 ("LU-15420 uapi: avoid gcc-11 -Werror=stringop-overread")
Signed-off-by: Josh Samuelson <josh@1up.unl.edu>
Change-Id: Ie0817dfdd1d02e06b9399e66f1affaadb9e156c4
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: xinliang <xinliang.liu@linaro.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
60266 b2_15 J !B ✓T ✓R +3/1
LU-16837 llite: handle unknown layout component
reviewing Andreas Dilger · you voted +1 on current PS
LTS15 stalled 320d M +171 −22
320d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #119906 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-12-18 21:53 · Zhenyu Xu +1 2025-12-18 21:53 · Vitaliy Kuznetsov +1 2025-12-18 21:53
patchsets: PS1 07-21 PS2 08-28 PS3 11-04 PS4 12-18
your previous vote: +1 on PS1 (2025-07-23 01:07) — now at PS4
owner Andreas Dilger · uploader Andreas Dilger · PS4 uploaded 320d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16837 llite: handle unknown layout component

If lustre client encounters unknown layout component pattern in
a mirror file, this patch makes client mark this mirror as invalid
and skip it.

Lustre-change: https://review.whamcloud.com/51060
Lustre-commit: 14ed4a6f8f231fe94392906f991a32f07e7d7883

LU-16837 lov: NULL dereference in lov_delete_composite

commit 14ed4a6f8f retroduced the issue fixed by commit
5da049d9ef ("LU-14389 lov: avoid NULL dereference in cleanup), this
patch makes the fix cover the new case added by 14ed4a6f8f.

Lustre-change: https://review.whamcloud.com/52826
Lustre-commit: 250c6195fbe748d7c8f4c55888ed749de4cb95ce
Was-Change-Id: I4a2b72e21139b60519ed523b4851723c91f523c1

Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: Ie5f44212ab96bdc706cc5a9e11f330234fc01069
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Vitaliy Kuznetsov <vkuznetsov@ddn.com>
60180 b2_15 J !B ✗T –R +3/1
LU-14301 client: use EOPNOTSUPP instead of ENOTSUPP
reviewing Gian-Carlo DeFazio · blocked on the owner: build failure
stalled 343d S +12 −12
343d
blocked on the owner: build failure
you voted +1 on current PS
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #118975 FAILURE
reviews: James Simmons +1 2025-11-26 01:37 · Alexander Zarochentsev +1 2025-11-26 01:37 · Andreas Dilger +1 2025-11-26 01:37
no vote yet: Neil Brown
patchsets: PS1 07-14 PS2 11-26
your previous vote: +1 on PS1 (2025-11-25 20:09) — now at PS2
owner Gian-Carlo DeFazio · uploader Gian-Carlo DeFazio · PS2 uploaded 343d ago · NEW · backport · open in Gerrit ↗
commit message
LU-14301 client: use EOPNOTSUPP instead of ENOTSUPP

Don't return NFS-specific error code ENOTSUPP back to userspace,
instead use EOPNOTSUPP.  ENOTSUPP does not print a useful error
message from strerror() if it is hit by an application.

Lustre-change: https://review.whamcloud.com/51511
Lustre-commit: ffd2fc1e17822c013d7790cc8247361c567792af

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Signed-off-by: Gian-Carlo DeFazio <defazio1@llnl.gov>
Change-Id: Iabd07b31069737e8ee7ca2382fd8cff6143ebbe5
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: jsimmons <jsimmons@infradead.org>
57767 b2_15 J ✗8B ✓T ✓R +2/1
LU-16973 ptlrpc: flush delayed file desc if idle
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 373d S +44 −0
373d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity4@zfs:test_122bseen in 5 other reviews
recovery-small@ldiskfs+DNE:test_24bseen in 2 other reviews
sanity3@ldiskfs+DNE:test_812aseen in 1 other review
sanity3@ldiskfs+DNE:test_812bseen in 1 other review
sanity3@ldiskfs+DNE:test_812cseen in 1 other review
sanity3@ldiskfs+DNE:test_816seen in 1 other review
sanity3@ldiskfs+DNE:test_818seen in 1 other review
sanity2@zfs:test_133dseen in 4 other reviews
1 optional test failure(s) — informational
build #117872 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-10-24 12:55 · Alex Zhuravlev +1 2025-10-24 12:55
no vote yet: Andrew Perepechko, Alexander Boyko, Andreas Dilger, Neil Brown
patchsets: PS1 01-15 PS2 10-16 PS3 10-24
your previous vote: +1 on PS1 (2025-01-15 19:30) — now at PS3
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS3 uploaded 376d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16973 ptlrpc: flush delayed file desc if idle

The use of alloc_file_pseudo() allocates a real file descriptor,
so fput() will use a deferred cleanup for the descriptor, either
when the thread "finishes the syscall" (which never happens for
kernel threads), or a unmount time.  This accumulates too many
file descriptors (millions) on a busy system.

Instead of waiting to cleanup these file descriptors at unmount
time, call flush_delayed_fput() to clean them up when a ptlrpcd
thread becomes idle before it goes to sleep.

For kernels 3.6 and later when flush_delayed_fput() was first added,
and before kernel 5.4 when it was EXPORT_SYMBOL'd, grab a pointer
to the function with kallsyms_lookup_name() so it can be called.

Delete LN_CONFIG_STRSCPY_EXISTS reference that generates configure
warnings, since this check was renamed and moved to libcfs.

Lustre-change: https://review.whamcloud.com/51805
Lustre-commit: 2feb4a7bb01c5e98763a62fb0bd64edf933c95de

Fixes: b0f150eba ("LU-13783 osd-ldiskfs: use alloc_file_pseudo to create fake files")
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I24a08f9568d7d636a69672c5c3132ab25b292407
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Alexander Boyko <alexander.boyko@hpe.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
41140 master J !B ✓T ✓R +0/2−
LU-14295 o2iblnd: update default peer_credits value
reviewing Amir Shehata · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 441d XS +2 −2
441d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted +1 on current PS
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #104192 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2024-04-15 22:44
no vote yet: Serguei Smirnov, Chris Horn
owner Amir Shehata · uploader Serguei Smirnov · PS4 uploaded 932d ago · NEW · open in Gerrit ↗
commit message
LU-14295 o2iblnd: update default peer_credits value

Update the peer_credits/peer_credits_hiw/concurrent_sends default
values to 32/16/64 respectively, as these are the optimal values
performance wise.

The default peer_credits is used for socklnd as well. Therefore this
patch will update the default socklnd peer_credits to 32 as well,
which is desirable.

Test-Parameters: trivial testlist=sanity-lnet

Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I0e7b7064b42b30629930af63706577117fc99a45
59519 master J ✗3B ✓T ✓R ✗
LU-19080 shrinker: make ll_shrinker_create() compilable
reviewing Vladimir Saveliev · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; Vladimir Saveliev voted -1
needs rebaseCR -1 stalled 448d XS +2 −2
448d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; Vladimir Saveliev voted -1
you voted -1 on current PS
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_56aseen in 26 other reviews
conf-sanity2@ldiskfs+DNE:test_57aseen in 26 other reviews
conf-sanity2@ldiskfs+DNE:test_57bseen in 26 other reviews
2 optional test failure(s) — informational
build #113874 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2025-06-03 15:03 · Vladimir Saveliev -1 2025-06-02 16:40
owner Vladimir Saveliev · uploader Vladimir Saveliev · PS1 uploaded 520d ago · NEW · open in Gerrit ↗
commit message
LU-19080 shrinker: make ll_shrinker_create() compilable

ll_shrinker_create() does not compile with not defined
HAVE_SHRINKER_ALLOC, e. g. for 5.14.0-503.40.1.el9.x86_64.

Signed-off-by: Vladimir Saveliev <vladimir.saveliev@hpe.com>
Change-Id: I386ef2954a0c211d4bc179a169710fd2cb1bd216
55951 master J !B ✗T –R -1/2−
LU-14408 llite: add a Lustre inode cache shrinker
reviewing Etienne AUJAMES · blocked on the owner: build failure
stalled 456d 1 unresolved L +474 −28
456d
blocked on the owner: build failure
you voted -1 on current PS
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #107151 FAILURE
reviews: James Simmons -1 2024-08-27 13:44
no vote yet: Qian Yingjin, Neil Brown, Lai Siyao
patchsets:
+2 earlier PS1 08-07 PS2 08-07
PS3 08-07 PS4 08-09 PS5 08-23 PS6 08-23 PS7 08-27
your previous vote: -1 on PS4 (2024-08-18 14:02) — now at PS7
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2024-08-09 15:35 Etienne AUJAMES llite_internal.h:907 — Linux already use single list to store all the inodes sb->s_inodes (protected by a single lock). But I think that the last patch implementat
Andreas Dilger PS2 · 2024-08-07 19:30
Having a single list and spinlock could have noticeable contention on a many-core system, often 256+ cores today.

This could have an array of LRUs (e.g. based on hash/modulo of inode number) with an array of spinlocks, like "struct blockgroup_lock", which is sized large enough to minimize contention, but not so large that it is one lock per core.
Etienne AUJAMES PS2 · 2024-08-09 15:35
Linux already use single list to store all the inodes sb->s_inodes (protected by a single lock). But I think that the last patch implementation prevent most of the application overheads.
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS7 uploaded 799d ago · NEW · open in Gerrit ↗
commit message
LU-14408 llite: add a Lustre inode cache shrinker

This provides a way to shrink the unused inode cache (inodes not
covered by LDLM locks) for a Lustre superblock.

The following command will drop all the unused inodes for <fsname>:
  # lctl set_param llite.<fsname>-*.inode_cache=clear

The following command will disable the unused inode cache:
  # lctl set_param llite.<super>.inode_cache=0
  # lctl get_param -n llite.<super>.inode_cache
  max_cached_mb: 0
  max_cached_cnt: 0
  unused_inode_mb: 0
  unused_inode_cnt: 0

The following command will enable the inode cache without limit:
enabled: 1
  # lctl set_param llite.<super>.inode_cache=1
or
  # lctl set_param llite.<super>.inode_cache=unlimited
  # lctl get_param llite.<super>.inode_cache
  max_cached_mb: unlimited
  max_cached_cnt: unlimited
  unused_inode_mb: 0
  unused_inode_cnt: 100

The following command will limit the unused inode cache to 5MiB:
  # lctl set_param llite.<super>.inode_cache=5M
  # lctl get_param -n llite.<super>.inode_cache
  max_cached_mb: 5
  max_cached_cnt: 3450
  unused_inode_mb: 0
  unused_inode_cnt: 100

Add regression tests: sanity 433b, 433c and 433d.

Test-Parameters: clientdistro=ubuntu2204 testlist=sanity env=ONLY=433
Test-Parameters: clientdistro=el9.4 testlist=sanity env=ONLY=433
Test-Parameters: clientdistro=el8.10 testlist=sanity env=ONLY=433
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: I93554e8bc32b55d234fc255abdfee8743a0e3dc0
13342 master J –B ✓T ✓R -1/2−
LU-5570 lnet: check router aliveness timestamp
reviewing Liang Zhen · you voted -1 on current PS
stalled 456d M +122 −84
456d
reviews: James Simmons -1 2015-01-30 21:13
no vote yet: Doug Oucharek, Amir Shehata, Andreas Dilger, Isaac Huang
owner Liang Zhen · uploader Liang Zhen · PS4 uploaded 4314d ago · NEW · open in Gerrit ↗
commit message
LU-5570 lnet: check router aliveness timestamp

In current LNet, peer aliveness timestamp is only recorded for peers
on routers, this patch changes this and also record aliveness of
routers on regular nodes, so lnet can check aliveness timestamp of
routers before sending message, avoid to choose router which has old
aliveness timestamp and could be potentially dead or congested.

Please check this patch for history of it:
http://review.whamcloud.com/11748

Signed-off-by: Liang Zhen <liang.zhen@intel.com>
Change-Id: I57874d6305d5d18faeff7452fc9ae95f04c43fdd
31031 master J –B ✓T ✗3R -2/2−
LU-10003 tests: replace lctl with lnetctl for lnet
reviewing Amir Shehata · blocked on the owner: enforced tests failed
stalled 456d M +35 −18
456d
blocked on the owner: enforced tests failed
you voted -1 on current PS
failed enforced testplatformdetail
review-dne-part-3 CentOS 7.0/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-2 crashed CentOS 7.0/x86_64 ran 12 tests. 1 tests failed: sanity-hsm. %% THIS TEST SESSION CRASHED %% session
review-zfs CentOS 7.0/x86_64 ran 8 tests. 1 tests failed: conf-sanity. session
3 optional test failure(s) — informational
build #1845 SUCCESS
reviews: James Simmons -1 2018-11-14 18:32 · Alexey Lyashkov -1 2019-04-20 15:36
no vote yet: James Nunez, Andreas Dilger, Sonia Sharma
owner Amir Shehata · uploader James Nunez · PS5 uploaded 2912d ago · NEW · open in Gerrit ↗
commit message
LU-10003 tests: replace lctl with lnetctl for lnet

Replace lctl [net|list_nids|ping] with the appropriate lnetctl
commands

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Change-Id: I51f324df42eaa6a1ac7d59374db67a373e3ee6e5
31313 master J –B ✓T ✓R +2/2
LU-10669 lnet: do not assert in lnet_msg_detach_md()
reviewing Amir Shehata · you voted +1 on current PS
stalled 456d S +19 −0
456d
reviews: James Simmons +1 2018-02-18 19:57 · Olaf Weber +1 2018-02-16 20:05 · Oleg Drokin -1 2018-02-27 18:17 · Sonia Sharma +1 2018-02-16 18:36
no vote yet: Alex Lyashkov, Andreas Dilger, Doug Oucharek
owner Amir Shehata · uploader Amir Shehata · PS1 uploaded 3184d ago · NEW · open in Gerrit ↗
commit message
LU-10669 lnet: do not assert in lnet_msg_detach_md()

There appears to be a scenario where lnet_msg_detach_md() can be
called twice on the same msg/md pair. Print out more information
about the message and the md instead of asserting.

Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Change-Id: I54813d1db89f55a20833fbbe5d3248014375cb93
33901 master J –B ✓T ✗2R -1/2−
LU-11735 lnd: clean up fmr/FastReg condition
reviewing Amir Shehata · blocked on the owner: enforced tests failed
stalled 456d M +55 −26
456d
blocked on the owner: enforced tests failed
you voted -1 on current PS
failed enforced testplatformdetail
review-dne-part-2 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-scrub. session
review-dne-zfs-part-2 CentOS 7.0/x86_64 ran 10 tests. 1 tests failed: sanity-sec. session
2 optional test failure(s) — informational
build #60834 SUCCESS
reviews: James Simmons -1 2018-12-21 14:50
owner Amir Shehata · uploader Amir Shehata · PS1 uploaded 2876d ago · NEW · open in Gerrit ↗
commit message
LU-11735 lnd: clean up fmr/FastReg condition

First patch to do some minor cleanup around selecting which
memory registration to use. Previously we used a bool, now we use
an enum in case there are different types of memory registration
to support in the future.

Signed-off-by: Amir Shehata <ashehata@whamcloud.com>
Change-Id: I0979c87dbd14f77cba4f2c45d8e54508bcc1f090
36521 master J !B ✓T ✗1R +1/2
LU-12885 mdc: remove flags argument from pack functions
reviewing Andreas Dilger · blocked on the owner: enforced tests failed
stalled 456d M +42 −47
456d
blocked on the owner: enforced tests failed
you voted +1 on current PS
failed enforced testplatformdetail
review-dne-part-4 CentOS 8.3/x86_64 ran 10 tests. 1 tests failed: sanity-quota. session
build #19358 SUCCESS
reviews: James Simmons +1 2021-02-28 14:05
no vote yet: Arshad Hussain, Neil Brown
owner Andreas Dilger · uploader Andreas Dilger · PS5 uploaded 2075d ago · NEW · open in Gerrit ↗
commit message
LU-12885 mdc: remove flags argument from pack functions

Remove the flags argument from mdc_pack_body() and mdc_getattr_pack()
functions.  All of the callers explicitly pass 0 to the functions,
except mdc_xattr_common() which gets 0 directly from mdc_getxattr(),
while mdc_setxattr() passes opcode = MDS_REINT and does not call
mdc_pack_body() in this case.

Rename the xattr_flags to make it clear what kind of flags they are.

Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I5d0ab202f1405e2aa4269020d8d274e69a3ebbe5
46112 master J –B ✓T ✗3R -1/2−
EXA-4252 debian: remove mpi dependency in debs
reviewing Louis Douriez · blocked on the owner: enforced tests failed
stalled 456d S +6 −6
456d
blocked on the owner: enforced tests failed
you voted -1 on current PS
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 CentOS 8.3/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 CentOS 8.3/x86_64 ran 7 tests. 1 tests failed: replay-dual. session
build #85599 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2022-01-14 14:06
owner Louis Douriez · uploader Louis Douriez · PS1 uploaded 1755d ago · NEW · open in Gerrit ↗
commit message
EXA-4252 debian: remove mpi dependency in debs

Remove mpi-default-bin and mpi-default-dev dependencies for all
debian packages except lustre-tests

Change-Id: I28145d47598d0bf449351f40215236adbb3565e9
Signed-off-by: ldouriez <ldouriez@ddn.com>
46377 master J ✗1B ✓T ✗1R -1/2−
LU-15501 obdclass: cli access in obd_set_max_rpcs_in_flight racy
reviewing Oleg Drokin · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
1 unique failure stalled 456d S +26 −3
456d
blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
you voted -1 on current PS
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
replay-dual@zfs:test_26seen in 1 other review
failed enforced testplatformdetail
review-dne-part-3 CentOS 8.3/x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
1 optional test failure(s) — informational
build #85946 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2023-06-19 20:12
no vote yet: Andreas Dilger
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 1740d ago · NEW · open in Gerrit ↗
commit message
LU-15501 obdclass: cli access in obd_set_max_rpcs_in_flight racy

also in obd_set_max_mod_rpcs_in_flight.
Parallel osc teardown can set cli->import to NULL causing
a NULL pointer dereference.

Protect access with cli_sem

Change-Id: Ia128ff5895be2ec037f09e07d0395889b9861148
Signed-off-by: Oleg Drokin <green@whamcloud.com>
48068 master J –B ✓T ✓R -1/2−
LU-16053 build: osd-zfs use parallel configure macros
reviewing Brian Behlendorf · you voted -1 on current PS
stalled 456d L +550 −355
456d
build #96796 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2023-08-21 19:32
no vote yet: Arshad Hussain, Shaun Tancheff, Andreas Dilger, Petros Koutoupis, Jian Yu
patchsets:
+2 earlier PS1 07-28 PS2 07-28
PS3 07-28 PS4 04-03 Shaun Tancheff PS5 05-01 Shaun Tancheff PS6 08-03 Shaun Tancheff PS7 08-10 Shaun Tancheff
your previous vote: -1 on PS5 (2023-05-10 13:39) — now at PS7
owner Brian Behlendorf · uploader Shaun Tancheff · PS7 uploaded 1182d ago · NEW · open in Gerrit ↗
commit message
LU-16053 build: osd-zfs use parallel configure macros

The infrastructure to parallelize the kernel configure checks was
added in LU-13485 but has only been lightly used.  Update the
OpenZFS configure checks to make use of the new macros.  This
reduces the time for these checks to a few seconds.

As part of this change the ZFS configure output has also been
standardized across all checks.

Tested with OpenZFS 2.0.7 and 2.1.5 releases on RHEL 8.6.

Test-Parameters: trivial
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I5be09dce191c1d69bfa8434a716e0d9e75c53344
49281 master J ✗1B ✓T ✓R +1/2−
LU-13642 lnet: Allow static IP specification
reviewing Frank Sehr · you voted -1 on current PS
stalled 456d 1 unresolved L +266 −20
456d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@zfs+DNE:test_230nseen in 26 other reviews
build #92772 SUCCESS · tests all Maloo sessions
reviews: Cyril Bordage +1 2023-03-16 09:28 · James Simmons -1 2023-03-16 12:57 · Serguei Smirnov +1 2023-03-02 22:29
no vote yet: Amir Shehata, Andreas Dilger, Neil Brown
patchsets:
+5 earlier PS1 11-30 PS2 11-30 PS3 12-06 PS4 02-03 PS5 02-04
PS6 02-06 PS7 02-06 PS8 02-17 PS9 02-21 PS10 03-01
your previous vote: -1 on PS7 (2023-02-07 01:14) — now at PS10
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS7 2023-02-17 17:09 Frank Sehr lib-lnet.h:503 — Sounds good. Thanks
Neil Brown PS7 · 2023-02-07 01:42
I think you should be passing in a 'struct sockaddr', not a 'struct lnet_nid'.

That would remove James' complaint about passing LNET_NET_ANY.
Frank Sehr PS7 · 2023-02-17 17:09
Sounds good. Thanks
owner Frank Sehr · uploader Frank Sehr · PS10 uploaded 1343d ago · NEW · open in Gerrit ↗
commit message
LU-13642 lnet: Allow static IP specification

Allows selecting an interface by specifying an IP address(NID)
in the lustre.conf (lnet.conf) file or as parameter in the module
start.
example: networks=tcp1(1.2.3.4)

The change does not have any effect on current configurations.
Changes for IPV6 are included, but not activated and tested.
Further IPV6 changes are not integrated.

For further reference please read

IP specification in LNet
https://wiki.whamcloud.com/display/LNet/IP+specification+in+LNet

Test-Parameters: trivial
Signed-off-by: Frank Sehr <fsehr@whamcloud.com>
Change-Id: I8c6eed84d621abcc87507f90b84f3f8892739907
51165 master J !B ✓T ✗4R +2/2
LU-14639 build: Remove disable-lru-resize config
reviewing Patrick Farrell · blocked on the owner: enforced tests failed
stalled 456d 1 unresolved M +2 −126
456d
blocked on the owner: enforced tests failed
you voted +1 on current PS
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-2 RHEL 8.7/x86_64 ran 5 tests. 1 tests failed: sanity-sec. session
review-dne-zfs-part-1 RHEL 8.7/x86_64 ran 6 tests. 1 tests failed: sanity. session
review-dne-zfs-part-5 crashed RHEL 8.7/x86_64 ran 6 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-zfs crashed RHEL 8.7/x86_64 ran 10 tests. 2 tests failed: replay-single, sanity-quota. %% THIS TEST SESSION CRASHED %% session
1 optional test failure(s) — informational
build #95222 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-05-31 19:43 · Sebastien Buisson +1 2023-05-31 15:36
no vote yet: Shuichi Ihara, Andreas Dilger, Oleg Drokin
patchsets: PS1 05-30 PS2 05-31
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2023-05-31 15:30 Patrick Farrell lustre-core.m4:207 — Huh, I wonder how this got lost in pushing the patch up... Weird.
Sebastien Buisson PS1 · 2023-05-31 08:54
So you are not removing this config check? ;-)
Patrick Farrell PS1 · 2023-05-31 15:30
Huh, I wonder how this got lost in pushing the patch up...  Weird.
owner Patrick Farrell · uploader Patrick Farrell · PS2 uploaded 1252d ago · NEW · open in Gerrit ↗
commit message
LU-14639 build: Remove disable-lru-resize config

The lru-resize feature is disabled at runtime by setting
lru_resize to 0.  If it is compiled out or disabled at
mount time, then it can never be enabled without
recompiling or remounting.

Disabling it like this doesn't offer any advantages, and
and all customers disabling it are setting lru_size
manually already.

Let's remove the extra ways to disable lru-resize to
avoid confusion and possible bugs.

This patch also removes checks in the tests which verify
the client and server have lru-resize support.  Servers
have had lru-resize support for several years, and with
this patch, it becomes impossible to build clients without
it either.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I801b9eb8cf280e37bc81b3adade7973e295d151f
51908 master J –B ✓T –R +0/2−
LU-17022 obdclass: rename obd_dev_lock to obd_devs_lock
reviewing Neil Brown · you voted -1 on current PS
stalled 456d M +88 −89
456d
build #96741 SUCCESS
reviews: James Simmons -1 2024-02-25 23:26 · Andreas Dilger +1 2023-08-09 16:12
no vote yet: Timothy Day
owner Neil Brown · uploader Neil Brown · PS1 uploaded 1183d ago · NEW · open in Gerrit ↗
commit message
LU-17022 obdclass: rename obd_dev_lock to obd_devs_lock

obd_dev_lock locks all devs, not just one.  And the same is the same
of that of a lock in struct obd_device - which can be confusing.

So rename to obd_devs_lock.

Test-Parameters: forbuildonly
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I562b5535ed9b4528705f9e030375577ea5fa0fcb
33911 master J –B ✓T ✓R +0/2−
LU-11824 build: Optionally package LNDs in their own RPM
reviewing Sebastien Piechurski · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase stalled 456d S +40 −2
456d
blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
you voted -1 on current PS
build #15306 SUCCESS
reviews: Alexey Lyashkov +1 2020-07-24 11:26 · James Simmons -1 2020-07-24 13:07 · Nathaniel Clark +1 2020-07-24 11:42
no vote yet: Minh Diep, Nikitas Angelinas, Bruno Travouillon, Andreas Dilger, Li Xi
owner Sebastien Piechurski · uploader Sebastien Piechurski · PS13 uploaded 2322d ago · NEW · open in Gerrit ↗
commit message
LU-11824 build: Optionally package LNDs in their own RPM

For Lustre vendors, it is desirable to maintain a single set of
packages for a given build that will be used for all kind of hardware.
However, some LNDs can bring external dependencies which are not
wanted on some node. For example, the o2ib LND built against Mellanox
OFED will bring dependencies on the Mellanox OFED kernel modules, thus
requiring with the current packaging to install Mellanox OFED even on
the nodes which will only use Ethernet (and not even have IB hardware
installed).

This patch adds a configure and RPM build time option to package
chosen LNDs in their own RPM, binding the dependencies to only the
specific LND package.
The --with-separate_lnds=o2ib option at configure time (followed by
make rpms) or --define 'separate_lnds o2ib' at rpmbuild time will
remove the ko2iblnd kernel module from the kmod-lustre package and
create an additional kmod-lustre-lnd-o2ib package with the o2ib LND.

Several LNDs can be listed at once (separated spaces), in which
case each listed LND will be packaged in its own RPM.

When the option is not specified, the current behavior remains
(packaging all built LNDs in the same kmod-lustre RPM).

Signed-off-by: Sebastien Piechurski <sebastien.piechurski@atos.net>
Change-Id: I169edb40ebbcfc8c4bcb75e1a56a28bf437f5c9b
Test-Parameters: trivial
56382 master J ✓B ✓T ✓R -1/2−
LU-18227 ldiskfs: refresh Ubuntu 22.04 5.15
reviewing Shaun Tancheff · you voted -1 on current PS
stalled 463d XL +1784 −8
463d
build #112318 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2025-04-09 14:07
no vote yet: Jian Yu, Timothy Day
patchsets: PS1 09-17 PS2 09-17 PS3 04-08
owner Shaun Tancheff · uploader Shaun Tancheff · PS3 uploaded 575d ago · NEW · open in Gerrit ↗
commit message
LU-18227 ldiskfs: refresh Ubuntu 22.04 5.15

Refresh Ubuntu 5.15 ldiskfs kernel, tested with 5.15.0-122-generic
Update ext4-data-in-dirent.patch and ext4-prealloc.patch and
create a new series for 22.04

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: I5b8f3ebbaf31c07322a818c151c9f9e939bdf0b0
47613 b2_15 B ✓T ✓R +4/1
LU-15509 lnet: Ping buffer ref leak in lnet_peer_data_present
reviewing Olaf Faaland · you voted +1 on current PS
stalled 659d XS +7 −2
659d
build #87961 SUCCESS · tests all Maloo sessions
reviews: Cyril Bordage +1 2022-06-15 23:08 · James Simmons +1 2022-06-15 22:16 · Gian-Carlo DeFazio +1 2022-06-15 22:16 · Chris Horn +1 2022-06-15 22:16
no vote yet: Serguei Smirnov, Andreas Dilger, Oleg Drokin
patchsets: PS1 06-13 PS2 06-15 Chris Horn
your previous vote: +1 on PS1 (2022-06-14 19:04) — now at PS2
owner Olaf Faaland · uploader Chris Horn · PS2 uploaded 1602d ago · NEW · backport · open in Gerrit ↗
commit message
LU-15509 lnet: Ping buffer ref leak in lnet_peer_data_present

lnet_peer_merge_data() and lnet_peer_set_primary_data() are
responsible for dropping the reference on the ping buffer that is
taken by lnet_peer_push_event() and lnet_discovery_event_reply().
However, there are some error paths in lnet_peer_data_present()
where we do not call either lnet_peer_merge_data() or
lnet_peer_set_primary_data(). In these cases, we need to drop
the reference on the ping buffer otherwise it will leak.

Lustre-change: https://review.whamcloud.com/46431
Lustre-commit: 4de9793654ec1b2f08d93f74f7391c4245ab8769

Fixes: 0f1aaad4c1b ("LU-9480 lnet: implement Peer Discovery")
HPE-bug-id: LUS-10715
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
Change-Id: I36ba0017caa9d6ce139f94090912496f14eda626
Reviewed-by: Andriy Skulysh <andriy.skulysh@hpe.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Cyril Bordage <cbordage@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
55199 b2_15 J ✗1B –T –R +1/1
LU-9839 clio: lov active ios accounting fix
reviewing Andreas Dilger · blocked on the owner: janitor: test failures unique to this patch
1 unique failure LTS15 stalled 715d S +16 −8
715d
blocked on the owner: janitor: test failures unique to this patch
you voted +1 on current PS
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanityn@ldiskfs+DNE:test_80bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
reviews: James Simmons +1 2024-11-05 17:42
no vote yet: Alexander Zarochentsev, Patrick Farrell
patchsets: PS1 05-25 PS2 06-15 PS3 11-05
your previous vote: +1 on PS1 (2024-05-25 22:26) — now at PS3
owner Andreas Dilger · uploader Andreas Dilger · PS3 uploaded 728d ago · NEW · backport · open in Gerrit ↗
commit message
LU-9839 clio: lov active ios accounting fix

ASSERT(atomic_read(&lov->lo_active_ios)==0) is triggered due to a
bug in active_ios accounting. For some cl_io_init(,CIT_MISC,,)
calls increment the lov_active_ios counter is not protected by the
layout lock. So the checks for active_ios != 0 are racy and not
preventing another thread from starting new cl_io and incrementing
the active_ios counter after any check but before the assertion.

The lov_active_ios counter increment should be done under the
same condition as taking the layout type lock.
The ci_type=CIT_MISC and ci_ignore_layout=1 should not be used
in ll_dom_finish_open() as the I/O doesn't come
"from the osc layer" and may race with a layout change.

Lustre-change: https://review.whamcloud.com/51638
Lustre-commit: 5bc1dd825b700677b002a43463a463c3ccb665ec

HPE-bug-id: LUS-11628
Signed-off-by: Alexander Zarochentsev <alexander.zarochentsev@hpe.com>
Change-Id: I35fda85b968b847a87e73dd36bbb1648c744d62c
Reviewed-by: Mikhail Pershin <mpershin@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Vitaly Fertman <vitaly.fertman@hpe.com>
53655 b2_15 J ✗2B ✓T ✓R +1/1
LU-15722 osd-ldiskfs: fix write stuck for 64K PAGE_SIZE
reviewing xinliang · you voted +1 on current PS
LTS15 stalled 807d M +36 −15
807d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-flr@ldiskfs+DNE:test_203seen in 1 other review
sanity-flr@ldiskfs+DNE:test_204eseen in 1 other review
build #105501 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2024-08-19 14:04
no vote yet: Alexey Lyashkov
patchsets: PS1 01-12 PS2 05-29 Andreas Dilger PS3 06-14 Andreas Dilger
owner xinliang · uploader Andreas Dilger · PS3 uploaded 872d ago · NEW · backport · open in Gerrit ↗
commit message
LU-15722 osd-ldiskfs: fix write stuck for 64K PAGE_SIZE

This fixes below IO write stuck issue:
-----
[606895.151765] LustreError:
334886:0:(ofd_io.c:1389:ofd_commitrw_write()) lustre-OST0000: restart IO
write too many times: 10000
[606895.207345] LustreError:
334886:0:(ofd_io.c:1389:ofd_commitrw_write()) Skipped 8 previous similar
messages
-------

Which goes into an infinite loop:
ofd_commitrw_write()->osd_write_commit()->osd_ldiskfs_map_inode_pages()
    ->ldiskfs_map_blocks()->ofd_commitrw_write()

The cause is that:
For 64K PAGE_SIZE blocks allocation/mapping. m_lblk should be the
first un-allocated block if m_lblk points at an already allocated
block when create = 1, ldiskfs_map_blocks() will just return with
already allocated blocks and without allocating any new requested
blocks for the extent.

This stuck issue won't happen on 4K PAGE_SIZE. Because for
PAGE_SIZE = blocksize case, if m_lblk points at an already
allocated block it will point at an un-allocated block in next
restart transaction, because the already mapped block/page will
be filtered out in next restart transaction via flag
OBD_BRW_DONE in osd_declare_write_commit().

Lustre-commit: 48ccf2db8495344e1d0c39f8bed0969279e29db4
Lustre-change: https://review.whamcloud.com/47004

Change-Id: Iadba0be8875a15a2e2f158ec9571f5ece5637ae0
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>

LU-15722 osd-ldiskfs: fix write stuck for 64K PAGE_SIZE

This reverts a previous commit for large PAGE_SIZE to fix a stuck IO
issue in another way.

One more ldiskfs_map_blocks() can't fix the write stuck for PAGE_SIZE
> BLOCK_SIZE. It still gets stuck in some tests like sanity-dom fsx.
Because each time ldiskfs_map_blocks() lookup it only return a
continuous range physical blocks. If a page has multiple continuous
range blocks, then it needs multiple ldiskfs_map_blocks() lookups to
find out all the already mapped blocks.

The fixed idea here is to record the already written blocks of the
start page and skip them at the next write retry.

This also fix and cleanup osd_mark_page_io_done() when start_blocks
is non-zero.

Lustre-commit: 176ea3a4599ede8b1a0c91506dcd34bc162f2959
Lustre-change: https://review.whamcloud.com/47563

Fixes: 176ea3a4599e ("LU-15722 osd-ldiskfs: fix IO write gets stuck for	64K PAGE_SIZE")
Change-Id: I9c14d5d0aa23e81837dacb01d050c091e6a79148
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
55811 b2_15 J ✗1B ✓T ✓R +1/1
LU-17308 mgs: move pool_cmd check to the kernel
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 807d XL +642 −688
807d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-scrub@ldiskfs+DNE:test_12NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
1 optional test failure(s) — informational
build #106269 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2024-08-19 14:04
no vote yet: Guillaume Courrier, Andreas Dilger
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 837d ago · NEW · backport · open in Gerrit ↗
commit message
LU-17308 mgs: move pool_cmd check to the kernel

Several checks for pool_cmd need to be done before touching the MGS
configuration.

e.g: the following case should be denied before adding a destroy
record in the MGS configurations:
 - The pool does not exist
 - The pool is not empty (OSTs still in the pool)

This work is done in userspace (check_pool_cmd) by checking the client
lov parameters for pools. But nothing guarantees those parameters to
be in sync. So, only the MGS configuration should be trusted for that.

This patch move those checks in the kernel. There are several reasons
for this:
 - It guarantees the pool configurations consistency even if an
   external tool is used.
 - For standalone MGS, it limits the overhead of reading the
   configuration several times.

This patch add a "-n|--nowait" option for pool_cmd to skip waiting
for pool updates on the clients. This is useful when doing a lot of
pool_cmd in a raw. And this avoids cancelling clients CONFIG lock
each times (because of mgc_requeue_timeout_min).

e.g:
  lctl pool_destroy -n lustre.old
  lctl pool_new -n lustre.test
  lctl pool_add -n lustre.test OST0001
  ...
  lctl pool_add lustre.test OST0010

check_pool_cmd_result() is modified to compute the client wait delay
with mgc_requeue_timeout_min.

Add a regression test "ost-pools 2f".

Lustre-change: https://review.whamcloud.com/53202
Lustre-commit: ce824977a212d243e15cf07e52a91984841f9b17

Test-Parameters: testlist=ost-pools
Test-Parameters: testlist=ost-pools
Test-Parameters: testlist=ost-pools env=ONLY=2f,ONLY_REPEAT=50
Test-Parameters: testlist=ost-pools env=ONLY=2f,ONLY_REPEAT=50
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: Ifbc49b5667bf17253716052a7480114936c65149
Reviewed-by: Guillaume Courrier <guillaume.courrier@cea.fr>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
51900 master J !B ✗T –R -1/2−
LU-17022 obdclass: convert recovery flags to bit ops
reviewing Neil Brown · blocked on the owner: build failure
stalled 1074d 1 unresolved M +95 −94
1074d
blocked on the owner: build failure
you voted -1 on current PS
janitor run: build failed — no tests ran — janitor results
build #100478 FAILURE
reviews: James Simmons -1 2023-11-26 14:47
patchsets: PS1 08-09 PS2 11-24 PS3 11-24
threads: 0 need your reply · 0 waiting on others · 1 own notes · 0 bot
note PS3 2023-11-26 14:47 James Simmons ldlm_lockd.c:966 — I think you meant.
James Simmons PS3 · 2023-11-26 14:47
I think you meant.

if (test_bit(OBDF_RECOVERING, lock->l_export->exp_obd->obd_flags))
owner Neil Brown · uploader Neil Brown · PS3 uploaded 1076d ago · NEW · open in Gerrit ↗
commit message
LU-17022 obdclass: convert recovery flags to bit ops

	obd_recovering:1,	/* there are recoverable clients */
	obd_abort_recovery:1,	/* abort client and MDT recovery */
	obd_abort_mdt_recovery:1, /* abort recovery between MDTs */
are now
	OBDF_RECOVERING,	/* there are recoverable clients */
	OBDF_ABORT_RECOVERY,	/* abort client and MDT recovery */
	OBDF_ABORT_MDT_RECOVERY,/* abort recovery between MDTs */

This allows us to remove some locking.

In a couple of places the lock also covers code where
obd_recovery_timeout or obd_recovery_start are updated.  As these
fields are also updated or accessed without any locking, the coverage
here must be accidental rather than intentional, and can be removed.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I66ec78683162dc4c9d3e26606fd7cc5f977901dc
51848 b2_15 J ✗1B ✓T ✓R +1/1
LU-16893 libcfs: Remove force_sig usage from lfsck
reviewing xinliang · you voted +1 on current PS
stalled 1085d M +16 −43
1085d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-hsm@ldiskfs+DNE:test_255NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.8/x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-dne-arm RHEL 8.7/aarch64, RHEL 8.8/x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #100210 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-11-14 19:20
no vote yet: Shaun Tancheff, Neil Brown, Andreas Dilger, Oleg Drokin, Jian Yu
patchsets: PS1 08-02 PS2 09-07
owner xinliang · uploader xinliang · PS2 uploaded 1154d ago · NEW · backport · open in Gerrit ↗
commit message
LU-16893 libcfs: Remove force_sig usage from lfsck

The lfsck pool of kernel threads uses force_sig() to signal
the worker threads to stop. A signal is used here as the
lfsck workers may be waiting in various, and possibly
nested, states.

As force_sig() has been removed let us simply enable SIGINT
to be passed to the worker threads using send_sig().

Lustre-change: https://review.whamcloud.com/51470
Lustre-commit: b876e22466a83dacfbbbeb90d841dc917a793666

Test-parameters: trivial testlist=sanity-lfsck,lfsck-performance
HPE-bug-id: LUS-11670
Fixes: db9f9543ec ("LU-12634 libcfs: force_sig() removed task parameter")
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ibf6a67f43687960b3eff9cb9a7c7dc8b1be1da63
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Neil Brown <neilb@suse.de>
Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
51616 b2_15 J ✗15B ✓T ✓R +2/1
LU-13343 gss: no sec flavor on loopback connection
reviewing Xing Huang · you voted +1 on current PS
stalled 1208d 1 unresolved M +42 −34
1208d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-pfl@zfs:test_20cseen in 6 other reviews
sanity-pfl@zfs:test_20dseen in 6 other reviews
sanity-pfl@zfs:test_20eseen in 6 other reviews
sanity-pfl@zfs:test_21aseen in 6 other reviews
sanity-pfl@zfs:test_21bseen in 6 other reviews
sanity-pfl@zfs:test_22aseen in 6 other reviews
sanity-pfl@zfs:test_22bseen in 6 other reviews
sanity-pfl@zfs:test_22cseen in 6 other reviews
sanity-pfl@zfs:test_23aseen in 6 other reviews
sanity-pfl@zfs:test_23bseen in 6 other reviews
sanity-pfl@zfs:test_23cseen in 6 other reviews
sanity-pfl@zfs:test_23dseen in 6 other reviews
sanity-pfl@zfs:test_23eseen in 6 other reviews
sanity-pfl@zfs:test_23fseen in 6 other reviews
sanity-pfl@zfs:test_25seen in 6 other reviews
build #96204 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-07-14 17:54 · Sebastien Buisson +1 2023-07-11 15:32
no vote yet: Aurelien Degremont, Andreas Dilger
patchsets: PS1 07-10 PS2 07-11 Sebastien Buisson
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2023-07-11 15:29 Sebastien Buisson test-framework.sh:1193 — (defect) this env var is unknown
Sebastien Buisson PS1 · 2023-07-11 15:29
(defect) this env var is unknown
owner Xing Huang · uploader Sebastien Buisson · PS2 uploaded 1211d ago · NEW · backport · open in Gerrit ↗
commit message
LU-13343 gss: no sec flavor on loopback connection

When using a local client, i.e. a client mounted on a server node,
there is no benefit from a security standpoint to enforce an SSK or
KRB flavor, since the data does not go over the network.
So force the 'null' security flavor for connections on 0@lo,
independently of the currently defined srpc flavor.

Lustre-change: https://review.whamcloud.com/46704
Lustre-commit: e3e91ea95fd96a5eafc598e3812390b4cbac05c3

Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: If25d69bb1e67735cb0544ca954e49175f7471248
Reviewed-by: Aurelien Degremont <adegremont@nvidia.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
51366 b2_15 J !B ✓T ✓R +1/1
LU-8585 llapi: use open_by_handle_at in llapi_open_by_fid
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 1214d L +630 −366
1214d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #96076 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-07-09 12:56
no vote yet: Emoly Liu, Andreas Dilger, Quentin Bouget, Jian Yu
patchsets: PS1 06-19 PS2 07-05
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS2 uploaded 1218d ago · NEW · backport · open in Gerrit ↗
commit message
LU-8585 llapi: use open_by_handle_at in llapi_open_by_fid

Reimplement llapi_open_by_fid() to use llapi_fid_to_handle() and
open_by_handle_at(2) rather than using ioctl().  This works for
opens on subdirectory mountpoints, unlike ".lustre/fid/<fid>".

This patch also adds llapi_open_by_fid_at() which is similar to
llapi_open_by_fid() except that it takes an open directory file
descriptor or AT_CWD rather than a path as its first argument.

[AD:
- Move get_root_*() functions over to a new liblustreapi_root.c
  file in expectation of further enhancements to that code.
- Cache an open file handle on the root directory so repeated
  calls to llapi_open_by_fid() and llapi_fid2path() do not need
  to search for and open the same root directory path many times.
- Add man pages for newly-added functions.

  This reduces the system calls for llapi_fid_test significantly:

      original     patched
         14511        4315   total opens
         64807       34067   total syscalls
]

There may still be a need to have a fallback from open_by_handle_at()
to using ".lustre/fid/<FID>" to open the fid (if available), but
that can be added if this initial patch does not test well.  The
open_by_handle_at() method avoids reopening the "fid/" directory
each time (though this fd could also be cached), but it has the
drawback that it reconnects dentries to the root directory each time.

Lustre-change: https://review.whamcloud.com/36603
Lustre-commit: bdf7788d19985bb7abf2385add15f1d67f3d01e4

Signed-off-by: Quentin Bouget <quentin.bouget@cea.fr>
Change-Id: I8a4904c996389da2b0894cd9fac639a398607535
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Jian Yu <yujian@whamcloud.com>
Reviewed-by: Emoly Liu <emoly@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
51359 b2_15 J !B ✓T ✓R +2/1
LU-15759 libcfs: debugfs file_operation should have an owner
reviewing Etienne AUJAMES · you voted +1 on current PS
stalled 1224d M +47 −9
1224d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #95714 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-06-29 13:42 · Neil Brown +1 2023-06-26 01:51
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS1 uploaded 1234d ago · NEW · backport · open in Gerrit ↗
commit message
LU-15759 libcfs: debugfs file_operation should have an owner

If debugfs a file is open when unloading the libcfs/lnet module, it
produces a kernel Oops (debugfs file_operations callbacks no longer
exist).

Crash generated with routerstat (/sys/kernel/debug/lnet/stats):
[ 1449.750396] IP: [<ffffffffab24e093>] SyS_lseek+0x83/0x100
[ 1449.750412] PGD 9fa14067 PUD 9fa16067 PMD d4e5d067 PTE 0
[ 1449.750428] Oops: 0000 [#1] SMP
[ 1449.750883]  [<ffffffffab7aaf92>] system_call_fastpath+0x25/0x2a
[ 1449.750897]  [<ffffffffab7aaed5>] ?
system_call_after_swapgs+0xa2/0x13a

This patch adds an owner to debugfs file_operation for libcfs and
lnet_router entries (/sys/kernel/debug/lnet/*).

The following behavior is expected:
$ modprobe lustre
$ routerstat 10 > /dev/null &
$ lustre_rmmod
rmmod: ERROR: Module lnet is in use
Can't read statfile (ENODEV)
[1]+  Exit 1                  routerstat 10 > /dev/null
$ lustre_rmmod

Note that the allocated 'struct file_operations' cannot be freed until
the module_exit() function is called, as files could still be open
until then.

Lustre-change: https://review.whamcloud.com/47335
Lustre-commit: b2dfb4457f0f1e56f3df448cf67ac97e728f4417

Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: Ia0920313e0c2a4b6cdc875fed08221e174a12a73
Reviewed-by: Etienne AUJAMES <eaujames@ddn.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
47382 b2_14 B ✓T ✓R +3/1
LU-15093 libcfs: Check if param_set_uint_minmax is provided
reviewing Jian Yu · you voted +1 on current PS
stalled 1555d S +22 −0
1555d
build #87499 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2022-08-01 18:46 · Gian-Carlo DeFazio +1 2022-05-18 19:24 · Chris Horn +1 2022-05-18 14:42
owner Jian Yu · uploader Jian Yu · PS1 uploaded 1631d ago · NEW · backport · open in Gerrit ↗
commit message
LU-15093 libcfs: Check if param_set_uint_minmax is provided

Linux kernel v5.15 commit 2a14c9ae15a38148484a128b84bff7e9ffd90d68
moved param_set_uint_minmax to common code.

Lustre-change: https://review.whamcloud.com/45214
Lustre-commit: 3337e9fe920b260e34ff62c0840279ea6bff34ca

HPE-bug-id: LUS-10469
Test-Parameters: trivial
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: Ifd1d72ae531f0f6c7cd96cc28fbc07c8a8b70886
47328 b2_14 B ✓T ✓R +2/2
LU-15583 build: Update ZFS version to 2.1.2
reviewing Jian Yu · you voted +1 on current PS
stalled 1617d XS +2 −2
1617d
build #87515 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2022-05-31 13:02 · Nathaniel Clark +1 2022-05-31 16:52
patchsets: PS1 05-13 PS2 05-18
owner Jian Yu · uploader Jian Yu · PS2 uploaded 1630d ago · NEW · open in Gerrit ↗
commit message
LU-15583 build: Update ZFS version to 2.1.2

Update ZFS version to 2.1.2. The changes are listed in:
https://github.com/openzfs/zfs/releases/tag/zfs-2.1.2

Change-Id: If7c81a4b1fe13e29eea1c277b896223f5c06b31a
Signed-off-by: Jian Yu <yujian@whamcloud.com>

CC'd — on your radar, review not requested

(30)
57550 master J –B ✓T …R 0/2
LU-16565 ldlm: [3] Remove ldlm is,set,clear macros
cc Timothy Day ·
ldlm_flags_remove pw_shepherd M +75 −75
16h
build #135338 SUCCESS · tests all Maloo sessions · test queue
patchsets: PS1 12-20 PS2 11-03 patrick bot
tags: pw_shepherd
owner Timothy Day · uploader patrick bot · PS2 uploaded 17h ago · NEW · open in Gerrit ↗
commit message
LU-16565 ldlm: [3] Remove ldlm is,set,clear macros

Replaces ldlm_{is,set,clear} macros with the direct flag
names.

The patch has been generated with the coccinelle script in
contrib/cocci/ldlm_flags.cocci.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ib4000fb9e0c36160d41c398393be6136b48dc6ce
50104 master J ✗4B ✓T …R +2/2
LU-10391 mdt: extend downcall to handle large nids
cc Neil Brown · blocked on the owner: janitor: test failures unique to this patch
4 unique failures IPv6 M +119 −41
1d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-hsm@ldiskfs+DNE:test_600seen in 3 other reviews
sanity-hsm@ldiskfs+DNE:test_604seen in 3 other reviews
sanity-hsm@zfs:test_600seen in 3 other reviews
sanity-hsm@zfs:test_604seen in 3 other reviews
3 optional test failure(s) — informational
build #94490 SUCCESS · tests all Maloo sessions · test queue
reviews: Frank Sehr +1 2023-10-16 19:48 · Shaun Tancheff +1 2024-08-27 06:51
no vote yet: Sebastien Buisson, Andreas Dilger
patchsets:
+2 earlier PS1 02-21 PS2 02-22
PS3 02-22 PS4 02-26 PS5 02-26 PS6 05-01 PS7 05-02
owner Neil Brown · uploader Neil Brown · PS7 uploaded 1282d ago · NEW · open in Gerrit ↗
commit message
LU-10391 mdt: extend downcall to handle large nids

A new version of the downcall structure is created - with a new magic
number - which can hold large nids.

If all the nids used are nid4, then we use the original structure for
max backward compatibility.  Kernel accepts both formats.

Test-Parameters: fortestonly testlist=sanity serverversion=2.15
Test-Parameters: testlist=conf-sanity serverversion=2.15
Test-Parameters: testlist=sanity clientversion=2.15
Test-Parameters: testlist=conf-sanity clientversion=2.15
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I60cf1b5917a59692322871b454213bbcd282a3dd
70052 master J –B ✓T ✗3R -2/2−
LU-21045 obdclass: allow disabling server jobstats
cc Venkata Ravi Theja Reddy Venuthurla · blocked on the owner: enforced tests failed
3 unresolved L +283 −3
2d
failed enforced testplatformdetail
review-dne-part-4 RHEL 9.7 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-zfs-part-1 RHEL 9.8 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-hsm. session
build #134493 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-10-27 07:21 · Timothy Day -1 2026-10-27 14:18
no vote yet: Praveen
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-11-02 02:42 Andreas Dilger patchset comment — Note that `jobid_var=disable` is a strong signal that the storage admin doesn't want the server to collect stats on the server. That is diff
Timothy Day PS1 · 2026-10-27 14:18
Why can't we adjust the behavior of jobid_var=disable to avoid allocations/lookups/etc? This new knob seems unneeded.
James Simmons PS1 · 2026-10-27 14:35
Agree
Venkata Ravi Theja Reddy Venuthurla PS1 · 2026-10-27 21:08
So, the MGS distributed jobid_var=disable alone does not guarantee that the jobids will not be sent from clients, since client administrators can override it locally on the client. In this scenario, on the server side we still perform the stats collection work.

----------

If you mean making the server’s side jobid_var=disable flag to gate incoming jobstats accounting, yes this will help us. But there are few issues

1. It defaults to disable, but servers currently still collect statistics for JobIDs received from clients that enable reporting locally. Adding a server-side check would stop accounting in those configurations after an upgrade unless administrators also enable jobid_var on the servers. 
2. jobid_var applies to the entire node (MDS/OSS), so it cannot independently control collection for different targets hosted there. 

So, here separate job_stats_enable flag, enabled by default, preserves existing accounting behavior while allowing server operators to disable collection independently per MDT/OST.

Let me know your thoughts ?
Timothy Day PS1 · 2026-10-28 14:23
For 1, we don't want to encourage clients overriding servers. If the MGS advertises jobid_var=disable, I think it's fine to not collect job stats.

For 2, I don't think anyone has a use case for per-target job stats enablement at all. Even if they did, MDS/OSS co-location is fairly niche.

So I still lean towards using jobid_var. I think it would be confusing for users/admins to have to disable job stats in multiple place. Most users/admins probably presume that jobid_var=disable already disables job stats collections; the client's ability to override seems like an unintended edge case.
Praveen PS1 · 2026-10-30 15:39
Agree with @timday@thelustrecollective.com, we should just make a change that checks the mgs view of jobid_var and honors that accross targets.
Andreas Dilger PS1 · 2026-11-02 02:42
Note that `jobid_var=disable` is a strong signal that the storage admin doesn't want the server to collect stats on the server. That is different from the default of the storage admin not having *set* `jobid_var` at all, and it is set directly on the clients by some other mechanism (e.g. LU-21060).

@timday@thelustrecollective.com, I wouldn't call MDS/OSS co-location as "niche", that is how a majority of DDN EXA appliances are shipped.
reply PS1 2026-10-27 17:40 Gerrit AI review for Lustre mdt.job_stats_enable.4:57 — (minor) Is "the existing expiry ... still apply" accurate while disabled? Expiry is lazy: lprocfs_job_cleanup(stats, false) is only called f
Gerrit AI review for Lustre PS1 · 2026-10-27 17:40
(minor) Is "the existing expiry ... still apply" accurate while disabled? Expiry is lazy: lprocfs_job_cleanup(stats, false) is only called from lprocfs_job_stats_log() (now skipped by OJS_DISABLED), lprocfs_jobstats_seq_release() and job_cleanup_interval_store().

So after `job_stats_enable=0`, entries that already exist stay allocated past job_cleanup_interval until someone reads `job_stats` or writes `job_cleanup_interval`. An operator disabling jobstats to save server memory would not get it back on its own.

If the patch is refreshed, consider either calling lprocfs_job_cleanup(stats, false) when the bit is set in job_stats_enable_store(), which would be easiest if the show/store lived next to job_cleanup_interval_show() in lprocfs_jobstats.c since lprocfs_job_cleanup() is static, or saying in the man page that stale entries are only reclaimed when `job_stats` is read or cleared.
reply PS1 2026-10-27 21:08 Venkata Ravi Theja Reddy Venuthurla MAINTAINERS:517 — Acknowledged
Andreas Dilger PS1 · 2026-10-27 07:14
This is unnecessary, and would cause a lot of churn in this file to list every man page.
Venkata Ravi Theja Reddy Venuthurla PS1 · 2026-10-27 21:08
Acknowledged
owner Venkata Ravi Theja Reddy Venuthurla · uploader Venkata Ravi Theja Reddy Venuthurla · PS1 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-21045 obdclass: allow disabling server jobstats

Cloud operators administer Lustre servers independently of clients.
Clients can keep sending distinct JobIDs and consume server memory
and accounting time even when the operator does not need jobstats.

Add a per-target job_stats_enable control for MDTs and OSTs.  Skip
jobstats lookups, allocations and counter updates while disabled,
using the existing atomic flags.  Leave existing statistics and
expiry intact, and allow collection to resume without client changes.
Document the control and cover new and existing JobIDs in sanity/205p.

Signed-off-by: Venkata Ravi Theja Reddy Venuthurla <venkata.ravi.theja.reddy.venu@oracle.com>
Assisted-by: Codex:gpt-6.1-sol lreview
Change-Id: I66f90a95589d694b59759896e193e1c43301af10
67570 master J –B ✓T ✓R +0/2−
LU-20443 llite: fix statahead race conditions
cc Etienne AUJAMES · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase 4 unresolved XL +584 −549
6d
8 optional test failure(s) — informational
build #134459 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-10-27 18:17
no vote yet: Qian Yingjin, Alex Zhuravlev, Oleg Drokin
patchsets:
+14 earlier PS1 07-27 PS2 07-28 PS3 07-28 PS4 07-28 PS5 07-29 PS6 07-29 PS7 07-30 PS8 08-06 PS9 08-07 PS10 08-10 PS11 08-10 PS12 08-11 PS13 08-12 PS14 08-14
PS15 08-21 PS16 08-26 PS17 09-09 PS18 09-11 PS19 10-26
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS16 2026-08-27 16:31 Gerrit AI review for Lustre statahead.c:2411 — (minor) Can this case be reached? sa_revalidate_sai() is only called from start_statahead_thread(), and both call sites sit below
Gerrit AI review for Lustre PS16 · 2026-08-27 16:31
(minor) Can this case be reached? sa_revalidate_sai() is only called from start_statahead_thread(), and both call sites sit below

    if (unlikely(!(pattern & (LSA_PATTERN_FNAME | LSA_PATTERN_LIST))))
            GOTO(out_stop, rc = -EOPNOTSUPP);

so a pattern of exactly LSA_PATTERN_ADVISE never gets here, and ADVISE combined with FNAME/LIST lands in default: anyway. The comment then points a reader at ll_ioctl_ahead() for a check that this function is never asked to make. Dropping the case (or the comment) would avoid suggesting ADVISE is handled here.
reply PS16 2026-09-11 13:07 Etienne AUJAMES statahead.c:2655 — Yes I think this is what we wanted. Shared FNAME feature does not works as designed (LU-20583/LU-20582).
Gerrit AI review for Lustre PS16 · 2026-08-27 16:31
This changes hit/miss accounting for the patterns that used to have no @sai here.

Before, ll_revalidate_statahead() took @sai from lli_sai, which was deliberately NULL for shared FNAME (both sa_pattern_fname_detect() and ll_shared_statahead_check() cleared it) and for ADVISE. ll_sai_get() now returns the calling process's own sai in all three cases.

The visible effect is in sa_put(): on a statahead cache miss (entry == NULL) it now takes the

    else if (sai) { sai->sai_miss++; sai->sai_consecutive_miss++; }

branch for a shared-FNAME sai, where previously nothing was counted. ll_statahead_by_fname() tests sa_low_hit(sai) on every iteration, so a shared-dir mdtest run whose hit ratio dips under 80% (sai_hit > 32 && sai_hit < 4 * sai_miss) now stops its statahead thread with -EFAULT and bumps ll_sa_wrong, which it could not do before.

That may well be the accounting you want, but it isn't mentioned in the commit message. Was the shared-FNAME/ADVISE side of this intentional?
Etienne AUJAMES PS16 · 2026-09-11 13:07
Yes I think this is what we wanted. Shared FNAME feature does not works as designed (LU-20583/LU-20582).

The following patches try to fix the feature:
- 68754: LU-20583 llite: move statahead generation to lli_sax_intall | https://review.whamcloud.com/c/fs/lustre-release/+/68754
- 67980: LU-20582 llite: fix statahead SFNAME pattern detection | https://review.whamcloud.com/c/fs/lustre-release/+/67980
reply PS17 2026-10-26 11:07 Etienne AUJAMES statahead.c:2581 — > Walking through the sai list is O(N) and time-consuming for a large number of FNAME pattern
Gerrit AI review for Lustre PS17 · 2026-09-11 07:10
The return value changed from "a statahead context exists for this directory" to "this process owns a sai", which also makes every stat() walk ctx->sax_sai_list.

ll_start_statahead() calls this on each stat() that passes dentry_may_statahead(), and ll_revalidate_statahead() now does a second ll_sai_get() where it used to read lli_sai directly. For the shared-FNAME (mdtest shared dir) pattern the list holds one sai per rank on the client, so that is two O(nranks) walks plus four extra lli_sa_lock round trips per stat(), on the lock the statahead threads themselves contend for.

Was the per-process semantics needed here, or would keeping !!lli_sax (with ll_shared_statahead_check() continuing to handle the per-rank case) give the same behaviour more cheaply?
Etienne AUJAMES PS17 · 2026-09-11 13:07
This is needed for shared pattern: we don't care if another statahead thread is running on the directory, we want to checked if an statahead thread is started for our process (otherwise we miss some stat calls: seen in 67980: LU-20582 llite: fix statahead SFNAME pattern detection | https://review.whamcloud.com/c/fs/lustre-release/+/67980)

The performance issue matter only for shared pattern with a lot of running thread for the dir. By default the maximum number of statahead threads is 10 and https://review.whamcloud.com/c/fs/lustre-release/+/67980 adds a statahead thread limit per directory.
Qian Yingjin PS17 · 2026-10-12 08:42
Walking through the sai list is O(N) and time-consuming for a large number of FNAME pattern stat() workload such as mdtest share dir stat() mode (LL_SA_RUNNING_DEF = 16, max statahead thread can reach 256).
Etienne AUJAMES PS17 · 2026-10-26 11:07
> Walking through the sai list is O(N) and time-consuming for a large number of FNAME pattern

What are you suggesting? The current implementation is O(N) for multi-threaded statahead.
That why, I adds a threshold by inode in https://review.whamcloud.com/c/fs/lustre-release/+/67980 (`llite.*.statahead_shared_max`).

For example, I think we can limit the number of parallel statahead thread to the number of CPUs. This feature was primarily done for MPI jobs, MPI jobs used CPU affinity so we could allocate per CPU slot (O(1)). For threads, that don't use CPU affinity we can fallback to linear lookup.
Then we could start the statahead thread on the same numa node for optimized cache access.
reply PS18 2026-10-26 17:07 Etienne AUJAMES statahead.c:1341 — The old implementation does not wake up on lli_sa_enabled change. Now, this variable is only used to avoid starting new statahead threads. I
Gerrit AI review for Lustre PS18 · 2026-09-12 11:35
(minor) This clears lli_sa_enabled for the whole directory but only moves this sai to SA_THR_STOPPING. Before the patch every scan loop also tested lli->lli_sa_enabled, so the sibling threads on the same dir picked the signal up on their next iteration; now they only look at sai_task_state and keep going.

For the shared FNAME pattern (two PIDs stat()ing digit-suffixed names, enable_statahead_fname defaults to 1) that gives one sai per rank on ctx->sax_sai_list. When rank A's thread times out here:

    lli_sa_enabled = 0
      -> dentry_may_statahead() returns false for every process
      -> ll_revalidate_statahead() is never called again
      -> no sa_get()/sa_put(), so no consumption and no wakeups

Rank B's thread keeps calling sa_statahead() until its own window fills, then sits in schedule_timeout(ll_sa_timeout) for another 30s before it stops - issuing up to sai_max prefetch RPCs whose results nothing can consume, and holding dget(sai_dentry) plus the ctx igrab(dir) for that long.

Would calling ll_sa_thread_stopall_locked() here (or reusing ll_sa_reset_locked(), which already pairs the two) restore the broadcast that dropping the lli_sa_enabled poll removed?
Etienne AUJAMES PS18 · 2026-10-26 17:07
The old implementation does not wake up on lli_sa_enabled change. Now, this variable is only used to avoid starting new statahead threads. If a consumer is still active, we don't stop the thread.
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS19 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-20443 llite: fix statahead race conditions

Replace smp barrier-based synchronization on sai_task and unsafe
access to lli_sa_enabled with an atomic state machine (sai_task_state
with SA_THR_STOPPED/RUNNING/STOPPING states).

Introduce centralized thread state management helpers:
- ll_sa_thread_should_stop(): check if thread should stop
- ll_sa_thread_stop(): transition thread to STOPPING state
- ll_sa_thread_stopall_locked(): stop all threads for a directory
- ll_sa_thread_wait_stop(): wait for thread to reach STOPPING state
- ll_sa_thread_wait_consumer(): wait for stat process to consume
  entries

Clean up reference counting:
- ll_sai_put() now automatically releases sax reference
- Remove lli_sai field, using lli_sax->sax_sai_list for all cases
- Add ll_sai_get_self() to obtain a ref on the sai of the current
  process
- Add ll_sax_install() for atomic context installation

Fix race conditions:
- Between start_statahead_thread() and ll_deauthorize_statahead()
- Add atomic bit check LFD_SA_STARTED to prevent duplicate statahead
  hints (for ADVISE patterns).
- Stale state prevention via ll_sa_reset_locked()
- Use-after-free in revalidate_statahead_dentry() when sa_get()
  returns -EINVAL

The @sai struct is revalidated via sa_revalidate_sai() before thread
start to ensure the parent directory hasn't been closed or reopened by
another thread.

Replace lfd bitfields with lfd_flags for atomic bit operations:
 - lfd_lock_no_expand -> bit LFD_LOCK_NO_EXPAND
 - lfd_hsm_agent_registered -> bit LFD_HSM_AGENT_REGISTERED

Fixes: b977caa2dc7d ("LU-15660 statahead: statahead thread doesn't stop")
Test-Parameters: optional testlist=racer
Test-Parameters: optional testlist=racer
Test-Parameters: testlist=sanity env=ONLY=123
Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
Change-Id: I3e4ffc991795029057326982513b7a270f1238ad
66816 master J ✗1B ✓T ✗1R -1/2−
LU-20422 obdclass: allow cfs_hash locks to specify subclass
cc Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
needs rebase 1 unique failure 1 unresolved M +85 −12
6d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity1@ldiskfs+DNE:test_56odseen in 1 other review
failed enforced testplatformdetail
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 7 tests. 1 tests failed: sanity. session
build #126882 SUCCESS · tests all Maloo sessions
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-03 14:53 Timothy Day patchset comment — Yes. This patch fixes a different type of issue.
James Simmons PS1 · 2026-08-02 23:26
Is this needed anymore now that 67351 landed?
Timothy Day PS1 · 2026-08-03 14:53
Yes. This patch fixes a different type of issue.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 133d ago · NEW · open in Gerrit ↗
commit message
LU-20422 obdclass: allow cfs_hash locks to specify subclass

This way, we can silence recursive locking warnings from lockdep.

WARNING: possible recursive locking detected
...
mdt00_001/383 is trying to acquire lock:
ffff88823c483018 (&new_bkts[i]->hsb_lock.rw){++++}-{3:3}, at: cfs_hash_del+0xd0/0x2d0

but task is already holding lock:
ffff88823c339e18 (&new_bkts[i]->hsb_lock.rw){++++}-{3:3}, at: cfs_hash_del+0x97/0x2d0
...
 dump_stack_lvl+0x54/0x70
 print_deadlock_bug+0x27c/0x290
 __lock_acquire+0x11b4/0x2830
 ? __lock_acquire+0x5d3/0x2830
 ? cfs_hash_del+0xd0/0x2d0
 lock_acquire+0xd5/0x290
 ? cfs_hash_del+0xd0/0x2d0
 ? cfs_hash_bd_from_key+0x2b/0xc0
 _raw_write_lock+0x33/0x40
 ? cfs_hash_del+0xd0/0x2d0
 cfs_hash_del+0xd0/0x2d0
 ldlm_lock_destroy_internal+0x19e/0x2f0
 ldlm_lock_destroy+0x83/0x110
 ldlm_lock_enqueue+0x161/0x950
 ? _raw_write_unlock+0x2d/0x50
 ? cfs_hash_add+0x247/0x2b0
 ldlm_handle_enqueue+0x9c0/0x1410
 tgt_enqueue+0xbd/0x260
 tgt_request_handle+0x1297/0x1990
 ? obd_export_timed_fini+0xa2/0xb0
 ptlrpc_main+0x2b7d/0x3ac0
 ? lockdep_hardirqs_on+0x7a/0x110
 ? __pfx_ptlrpc_main+0x10/0x10
 kthread+0x11b/0x140
 ? __pfx_kthread+0x10/0x10
 ret_from_fork+0x1a5/0x370
 ? __pfx_kthread+0x10/0x10
 ret_from_fork_asm+0x1a/0x30

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ice4b6a9f1ec6782ff7544909d807362b2c03f83b
66069 master J !B ✓T ✓R +1/2
LU-18461 llapi: replace pattern with bitmask
cc Alexey Lyashkov ·
38 unresolved L +187 −80
8d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #132561 SUCCESS · tests all Maloo sessions
reviews: Alexander Boyko +1 2026-10-27 08:12
no vote yet: Andrew Perepechko, Andreas Dilger, Artem Blagodarenko, Patrick Farrell
patchsets:
+4 earlier PS1 05-21 PS2 05-25 PS3 05-26 PS4 06-02
PS5 08-20 PS6 08-25 PS7 09-14 PS8 09-23 PS9 09-29
threads: 37 need your reply · 0 waiting on others · 1 own notes · 0 bot
reply PS4 2026-07-06 08:47 Oleg Drokin COMMIT_MSG:10 — what's zerooffset? we have zero hits in the entirety of the codebase and commit messages.
Oleg Drokin PS4 · 2026-07-06 08:47
what's zerooffset? we have zero hits in the entirety of the codebase and commit messages.
reply PS5 2026-08-21 00:57 Gerrit AI review for Lustre COMMIT_MSG:12 — (minor) A few hunks aren't covered by the description.
Gerrit AI review for Lustre PS5 · 2026-08-21 00:57
(minor) A few hunks aren't covered by the description.

The rewrite of lov_pattern_supported(), lov_pattern_available() and lov_pattern_supported_normal_comp() is not just a mechanical bitmask conversion - it widens what each accepts (see the lustre_user.h comment). That is server-side layout validation, so it deserves a sentence.

The lov_ea.c dump_lsm() change adds a new field to a debug print and isn't mentioned at all - was that meant to be part of this patch?

Also, the subject tag is `llapi:`, but roughly half the diff is in the uapi header and lustre/lov/, which the servers compile too.

The "zerooffset" question raised on the previous revision is still open; there's no zerooffset handling in this diff (or anywhere in the tree).
reply PS8 2026-09-24 08:21 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) The "zerooffset" question from the previous revision is still open - there is no zerooffset handling in this diff, and the token doe
Gerrit AI review for Lustre PS8 · 2026-09-24 08:21
(minor) The "zerooffset" question from the previous revision is still open - there is no zerooffset handling in this diff, and the token does not appear anywhere in the tree. Could this be reworded to whatever it is actually referring to?

Also "handing" -> "handling", and "Fix usage a LOV_PATTERN_PARITY" -> "Fix use of LOV_PATTERN_PARITY".
reply PS8 2026-09-24 08:21 Gerrit AI review for Lustre COMMIT_MSG:14 — (minor) The message says this fixes LOV_PATTERN_PARITY handling in llapi, which means llapi_layout_get_by_xattr() and llapi_pattern_to_lov()
Gerrit AI review for Lustre PS8 · 2026-09-24 08:21
(minor) The message says this fixes LOV_PATTERN_PARITY handling in llapi, which means llapi_layout_get_by_xattr() and llapi_pattern_to_lov() were silently dropping the parity bit for EC layouts. Would a Fixes: tag be appropriate for that part?

    Fixes: 22e9e7e8b264 ("LU-12187 llapi: EC layout creation support")
reply PS9 2026-10-05 09:16 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) Carrying forward the unresolved PS4 question about "zerooffset". The text is unchanged in this revision, and nothing in the diff (or
Gerrit AI review for Lustre PS9 · 2026-10-05 09:16
(minor) Carrying forward the unresolved PS4 question about "zerooffset". The text is unchanged in this revision, and nothing in the diff (or anywhere in the tree) handles a zero offset. Could this say what it actually refers to?
reply PS4 2026-07-06 08:47 Oleg Drokin patchset comment — Did we ever get a confirmation this is not going to affect application api / old/new library linked apps problems?
Oleg Drokin PS4 · 2026-07-06 08:47
Did we ever get a confirmation this is not going to affect application api / old/new library linked apps problems?
reply PS5 2026-08-21 00:57 Gerrit AI review for Lustre lustreapi.h:1045 — (defect) Changing LLAPI_LAYOUT_RAID0 from 0 to 0x40 and requiring the RAID0 bit alongside LLAPI_LAYOUT_OVERSTRIPING breaks applications comp
Gerrit AI review for Lustre PS5 · 2026-08-21 00:57
(defect) Changing LLAPI_LAYOUT_RAID0 from 0 to 0x40 and requiring the RAID0 bit alongside LLAPI_LAYOUT_OVERSTRIPING breaks applications compiled against the older header, which is the concern raised on earlier revisions and still not addressed. Two concrete failures against the new liblustreapi:

    /* old header: LLAPI_LAYOUT_OVERSTRIPING == 0x4 */
    llapi_layout_pattern_set(l, LLAPI_LAYOUT_OVERSTRIPING);

llapi_layout_supported(0x4) is false because the RAID0 bit is clear, so this now returns -1/EOPNOTSUPP where it used to succeed. The test32() change in llapi_layout_test.c is exactly that break.

    /* old header: LLAPI_LAYOUT_RAID0 == 0 */
    llapi_layout_pattern_get(l, &p);
    if (p == LLAPI_LAYOUT_RAID0) ...

p is now 0x40, and an overstriped component returns 0x44 instead of 0x4, so the comparison silently stops matching. liblustreapi is a versioned shared library and this is a source and binary incompatible change with no soname bump or compat path.

The suggestion from the earlier review - keep LLAPI_LAYOUT_RAID0 at 0 and introduce a separate settable bit - would avoid both, as would accepting a bare LLAPI_LAYOUT_OVERSTRIPING in llapi_layout_pattern_set().
reply PS5 2026-08-21 00:57 Gerrit AI review for Lustre lustreapi.h:1326 — (minor) A couple of things on the two new exported functions.
Gerrit AI review for Lustre PS5 · 2026-08-21 00:57
(minor) A couple of things on the two new exported functions.

Neither has a doc comment, unlike the rest of this header, and there is no Documentation/man3 page for either. llapi_layout_pattern_set.3 / llapi_layout_pattern_get.3 also still say "the only supported RAID pattern is RAID0" and document LLAPI_LAYOUT_RAID0 as a plain value, which no longer matches the bitmask semantics.

The names read as operating on `struct llapi_layout`, like the rest of the llapi_layout_* family, but both take a bare pattern bitmask. Something like llapi_layout_pattern_supported() and llapi_layout_string_to_pattern() would be less surprising.

The declaration calls the out parameter `layout` while the definition calls it `pattern`; `pattern` is the accurate one. The rest of the pattern API uses uint64_t rather than unsigned long long.
reply PS8 2026-09-24 08:21 Gerrit AI review for Lustre lustreapi.h:1070 — (defect) This is the compatibility concern raised on PS1 and asked again on PS4, and the code is unchanged since. Two concrete breaks agains
Gerrit AI review for Lustre PS8 · 2026-09-24 08:21
(defect) This is the compatibility concern raised on PS1 and asked again on PS4, and the code is unchanged since. Two concrete breaks against an application built with the older header:

    /* old header: LLAPI_LAYOUT_RAID0 == 0 */
    llapi_layout_pattern_set(l, LLAPI_LAYOUT_RAID0);

llapi_layout_supported(0) is false (0 is neither LLAPI_LAYOUT_MDT nor does it carry the RAID0 bit), and 0 is not LLAPI_LAYOUT_DEFAULT either, so this now fails with EOPNOTSUPP.

    /* old header: LLAPI_LAYOUT_OVERSTRIPING == 0x4 */
    llapi_layout_pattern_set(l, LLAPI_LAYOUT_OVERSTRIPING);

same EOPNOTSUPP, because the RAID0 bit is now required alongside it - the test32() change is exactly that break. In the other direction llapi_layout_pattern_get() now returns 0x40/0x44 where the old header's constants are 0/0x4, so an `== LLAPI_LAYOUT_RAID0` test in an existing binary stops matching. liblustreapi is a versioned shared library and -version-info is unchanged, so old and new binaries and libraries mix freely.

The suggestion from PS1 was to keep LLAPI_LAYOUT_RAID0 at 0 and add a separate settable bit; could that be revisited, or the old encodings accepted for compatibility?

Unrelated to the above: 0x0000040ULL has one hex digit fewer than the constants below it.
reply PS8 2026-09-24 08:21 Gerrit AI review for Lustre lustreapi.h:1079 — (minor) LLAPI_LAYOUT_RAID0_VALID does not include LLAPI_LAYOUT_RAID0, while the identically-named LOV_PATTERN_RAID0_VALID in lustre_user.h d
Gerrit AI review for Lustre PS8 · 2026-09-24 08:21
(minor) LLAPI_LAYOUT_RAID0_VALID does not include LLAPI_LAYOUT_RAID0, while the identically-named LOV_PATTERN_RAID0_VALID in lustre_user.h does include LOV_PATTERN_RAID0. That is why llapi_layout_supported() has to write

    layout &= ~(LLAPI_LAYOUT_RAID0 | LLAPI_LAYOUT_RAID0_VALID);

while lov_pattern_supported() only needs ~LOV_PATTERN_RAID0_VALID. Two macros with parallel names and different contents is easy to get wrong later - could the llapi one include the RAID0 bit too?
reply PS9 2026-10-05 09:16 Gerrit AI review for Lustre lustreapi.h:1091 — (defect) Carrying forward the compatibility concern raised on PS1 and asked again on PS4. It is still unresolved, and the encoding is unchan
Gerrit AI review for Lustre PS9 · 2026-10-05 09:16
(defect) Carrying forward the compatibility concern raised on PS1 and asked again on PS4. It is still unresolved, and the encoding is unchanged in this revision.

liblustreapi keeps -version-info 1:0:0, so binaries built against the old header (LLAPI_LAYOUT_RAID0 == 0, LLAPI_LAYOUT_OVERSTRIPING == 0x4) will load this library. Those values now fail with EOPNOTSUPP in llapi_layout_pattern_set(). The in-tree test32() needed a source change to keep passing, which shows the breakage.

Would accepting the old encodings (0, and a bare 0x4 meaning RAID0|OVERSTRIPING) in llapi_layout_pattern_set()/llapi_pattern_to_lov() be enough to close this? The PS1 alternative would be a separate settable bit, with LLAPI_LAYOUT_RAID0 kept at 0.
note PS4 2026-06-09 13:36 James Simmons lustre_user.h:32 — This should be giving a checkpatch error.
James Simmons PS4 · 2026-06-09 13:36
This should be giving a checkpatch error.
owner Alexey Lyashkov · uploader Alexey Lyashkov · PS9 uploaded 35d ago · NEW · open in Gerrit ↗
commit message
LU-18461 llapi: replace pattern with bitmask

use a bitmask as llapi_pattern, to simplify
overstripe / zerooffset handing.
Fix usage a LOV_PATTERN_PARITY on the userspace (llapi)
code.


Signed-off-by: Alexey Lyashkov <alexey.lyashkov@hpe.com>
Change-Id: I29a6943af1f58ed3834076d3bb3d618dd6b83983
51895 master J –B ✓T ✗4R 0/2
LU-16763 obdclass: crash Lustre with OBD devices
cc Timothy Day · blocked on the owner: enforced tests failed
4 unresolved S +29 −0
9d
failed enforced testplatformdetail
review-dne-subtest-change crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-subtest-change crashed RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-dne crashed RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-dne-arm crashed RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
build #133577 SUCCESS · tests all Maloo sessions
no vote yet: Alexey Lyashkov, Andreas Dilger, Alex Zhuravlev
patchsets: PS1 08-08 PS2 11-07 PS3 11-07 PS4 04-29 PS5 10-13
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-10-15 10:37 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) Carrying forward a point from patch set 3 that still applies: the subject still says "crash Lustre" with an "obdclass:" tag. The pat
Gerrit AI review for Lustre PS5 · 2026-10-15 10:37
(style) Carrying forward a point from patch set 3 that still applies: the subject still says "crash Lustre" with an "obdclass:" tag. The patch only touches sanity.sh, so "tests:" fits better, and something like "stress concurrent OBD device attach/detach" stays accurate once the crash is fixed. The body also still doesn't describe the crash.

From reading the code, two races could go in that description:

1. Duplicate names: class_attach_name() calls class_register_device() and only sets OBDF_ATTACHED after the obd_devs lock is dropped. During that window, class_name2dev_nolock() hits the same-named but not-yet-ATTACHED device, does `break` and returns -1. A second concurrent `attach obd_test obd_name` then registers a duplicate "obd_name".

2. Use-after-free: class_process_config() gets the obd from class_name2obd() without taking a reference. class_detach() only refuses when OBDF_SET_UP is set, so another worker's `detach` can drop the "obd_device_list" and "newdev" refs while class_setup() is still inside obd_setup(). That frees the device under the setup thread.

A stack trace from the crash would show which of these 55d actually hits.
reply PS5 2026-10-15 10:37 Gerrit AI review for Lustre sanity.sh:7427 — (defect) With verbose=2, obd_test_device_init() runs its lookup checks during setup:
Gerrit AI review for Lustre PS5 · 2026-10-15 10:37
(defect) With verbose=2, obd_test_device_init() runs its lookup checks during setup:

    obd_minor_found = class_name2obd(obd->obd_name)->obd_minor;
    obd_minor_found = class_uuid2obd(&obd->obd_uuid)->obd_minor;

That was fine for a single device in 55a. Here, though, another worker can run `--device obd_name detach` while this device is still inside class_setup()->obd_setup(). class_detach() only checks OBDF_SET_UP, so it clears OBDF_ATTACHED, and class_name2obd() then returns NULL. Doesn't that oops inside obd_test itself, hiding the obdclass race this test is aiming for?

Even without a NULL result, all 100 workers use the same name and uuid. So class_name2dev() and class_uuid2obd() can legitimately return another worker's minor and print "FAIL", which the dmesg grep below then reports as a unit test failure. Would loading without verbose=2 here be better?
reply PS5 2026-10-15 10:37 Gerrit AI review for Lustre sanity.sh:7429 — (style) Carrying forward a point from patch set 3: `echo {1..100}` (or a `for` loop with `&` and `wait`) avoids forking `seq`. Also, `-n 1`
Gerrit AI review for Lustre PS5 · 2026-10-15 10:37
(style) Carrying forward a point from patch set 3: `echo {1..100}` (or a `for` loop with `&` and `wait`) avoids forking `seq`. Also, `-n 1` and `-I {}` are mutually exclusive in GNU xargs, which prints a warning and ignores `-n`, and `{}` is never used in the command.
reply PS5 2026-10-15 10:37 Gerrit AI review for Lustre sanity.sh:7432 — (minor) Leftover devices are only printed ("EXPECT NONE"), never checked, and the xargs exit status is ignored. So the only things that can
Gerrit AI review for Lustre PS5 · 2026-10-15 10:37
(minor) Leftover devices are only printed ("EXPECT NONE"), never checked, and the xargs exit status is ignored. So the only things that can fail the test are a crash, the dmesg grep, or rmmod later refusing to unload because a leaked device still holds the module. Could this check `$LCTL dl | grep -c obd_name` and call error with a clear message instead? That would also avoid reading debugfs directly, which assumes it is mounted at /sys/kernel/debug; 55a uses `$LCTL dl`.
owner Timothy Day · uploader Timothy Day · PS5 uploaded 21d ago · NEW · open in Gerrit ↗
commit message
LU-16763 obdclass: crash Lustre with OBD devices

Spawn a bunch of threads trying to register and unregister
the same OBD device. Lustre does not like this.

Test-Parameters: trivial testlist=sanity env=ONLY=55d
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I58e59b13c37e7935c0b24d19c8637cd6462e4282
68263 master J !B ✓T ✓R +0/2−
LU-20628 lnet: size selftest bulk to cover the offset
cc Oleg Drokin · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked
needs rebase 2 unresolved M +50 −18
13d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #130105 SUCCESS · tests all Maloo sessions
reviews: Jinshan Xiong +1 2026-08-24 17:54
no vote yet: Chris Horn, Robert Read
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-24 21:30 Gerrit AI review for Lustre brw_test.c:89 — (defect) `len` still isn't required to be a multiple of BRW_MSIZE here, while `off` is checked just above. brw_fill_page() asserts on both,
Gerrit AI review for Lustre PS1 · 2026-08-24 21:30
(defect) `len` still isn't required to be a multiple of BRW_MSIZE here, while `off` is checked just above. brw_fill_page() asserts on both, and that LASSERT sits before the pattern early-return, so it fires for every check= mode:

    LASSERT(off % BRW_MSIZE == 0 && len % BRW_MSIZE == 0);

lst_get_bulk_param() only rejects `size=` <= 0 or > LNET_MTU, and lstcon_bulkrpc_v1_prep() copies blk_size straight into blk_len, so `lst add_test ... brw read size=100` reaches brw_client_prep_rpc()->brw_fill_bulk()->brw_fill_page() with len=100 and LBUGs the client node. The same brw_len goes on the wire, so brw_server_handle()->brw_fill_bulk() LBUGs the responder node too.

LU-20628 is filed as "crashes the test node for unvalidated size= and off= parameters" - is the size= half meant to be a separate patch, or should `len % BRW_MSIZE != 0` be rejected in this same block?
reply PS1 2026-08-24 21:30 Gerrit AI review for Lustre lnet-selftest.sh:129 — (suggestion) check=full is the right choice here, but it may be worth noting why the other checked modes aren't covered.
Gerrit AI review for Lustre PS1 · 2026-08-24 21:30
(suggestion) check=full is the right choice here, but it may be worth noting why the other checked modes aren't covered.

With a non-zero off the client descriptor is fragmented as (page0, off, PAGE_SIZE-off), (page1, 0, ...), while brw_server_handle() always does srpc_init_bulk(bulk, 0, brw_len), so the responder fragments from zero. brw_fill_page()/brw_check_page() write and verify the magic at each *fragment's* first and last __u64, so for LST_BRW_CHECK_SIMPLE the two sides disagree about where those words are and a read reports "Bulk data is corrupted" for a perfectly good transfer.

Not introduced here - it dates back to the original off= support - but it was masked by the crash this patch fixes, so `lst add_test ... brw read check=simple off=8` becomes a spurious failure rather than an LBUG. Worth a follow-up ticket?
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-20628 lnet: size selftest bulk to cover the offset

srpc_alloc_bulk() sized the page vector from the length alone, so a
brw test whose off= pushed the data across one more page walked past
the end of the allocation in srpc_init_bulk(), and a zero length
asserted.  The offset is again an argument, and brw_client_init()
rejects an out of range page count rather than leaving it to an
assertion.

brw_client_prep_rpc() derived a second page count from an unmasked
blk_offset, which disagreed with the descriptor for any off= of a
page or more; take it from bk_niov instead.

lnet-selftest.sh had never passed off=, so the smoke batch now runs
two checked cases with an offset.

Test-Parameters: trivial testlist=lnet-selftest
Fixes: e502638050a6 ("LU-16011 lnet: use preallocate bulk for server")
Fixes: efcef00cb304 ("LU-5718 lnet: add offset for selftest brw")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I440a0774c990b2b71861118b31be47aae857af8f
63382 master J –B ✓T ✓R 0/2
LU-18813 osd-wbcfs: remove calls to alloc_file_pseudo()
cc Timothy Day ·
11 unresolved M +37 −68
14d
build #134044 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger
patchsets: PS1 01-13 PS2 01-13 PS3 04-07 James Simmons PS4 07-04 PS5 10-19
threads: 11 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-01-16 13:32 Andreas Dilger COMMIT_MSG:9 — I would put this reference as a `Fixes:` line, which is more consistent with other patches, and the omission of osd-wbcfs from that patch co
Andreas Dilger PS2 · 2026-01-16 13:32
I would put this reference as a `Fixes:` line, which is more consistent with other patches, and the omission of osd-wbcfs from that patch could be considered a bug.
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre COMMIT_MSG:20 — (style) Two hunks aren't accounted for by the description.
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(style) Two hunks aren't accounted for by the description.

osd_read()/osd_write() now set `inode->i_flags |= S_PRIVATE | S_NOSEC`, which permanently disables LSM/IMA on the object. That's a behaviour change worth a sentence, especially since the ldiskfs change did it in osd_iget2()/osd_mkfile()/osd_inode_setattr() rather than in the IO path.

The `wbcfs_flush_descriptors_cnt` tunable also disappears; worth naming it so the removal is findable later.

Also, this doesn't actually mirror LU-19388's structure: that one added `struct file oti_file` to osd_thread_info and a shared osd_get_filp_for_inode() helper, while this open-codes the file twice on the stack. If that divergence is deliberate (osd-wbcfs has no osd_thread_info), saying so would help.
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre COMMIT_MSG:23 — (style) Raised on patchset 2 and still open: this reference reads better as a Fixes: line, since leaving osd-wbcfs out of the original chang
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(style) Raised on patchset 2 and still open: this reference reads better as a Fixes: line, since leaving osd-wbcfs out of the original change is arguably the bug being fixed.

    Fixes: bdb39e8390c4 ("LU-19388 osd: remove calls to alloc_file_pseudo()")
reply PS5 2026-10-20 20:02 Gerrit AI review for Lustre COMMIT_MSG:18 — (minor) This sentence has a double negative: it says iterate_dir() crashes unless the security hooks "are not called", which is the opposite
Gerrit AI review for Lustre PS5 · 2026-10-20 20:02
(minor) This sentence has a double negative: it says iterate_dir() crashes unless the security hooks "are not called", which is the opposite of what's meant. It's also about iterate_dir(), which this patch doesn't touch; osd-wbcfs reaches the hooks through kernel_read()/kernel_write() -> rw_verify_area() -> security_file_permission(). Something like "kernel_read()/kernel_write() on a hand-built struct file will crash unless security_file_alloc() was called to set up f_security" would describe this change.
reply PS5 2026-10-20 20:02 Gerrit AI review for Lustre COMMIT_MSG:21 — (style) The request from patch set 2 to turn the LU-19388 reference into a Fixes: line still isn't addressed in this revision. osd-wbcfs (25
Gerrit AI review for Lustre PS5 · 2026-10-20 20:02
(style) The request from patch set 2 to turn the LU-19388 reference into a Fixes: line still isn't addressed in this revision. osd-wbcfs (25813cf8ba, May 2025) was already in the tree when LU-19388 landed (Dec 2025) and was left out of it, so the delayed-fput load issue stayed in osd-wbcfs:

    Fixes: bdb39e8390c4 ("LU-19388 osd: remove calls to alloc_file_pseudo()")
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre osd_handler.c:36 — (style) Removing osd_flush_fput() left a double blank line here.
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(style) Removing osd_flush_fput() left a double blank line here.
reply PS5 2026-10-20 20:02 Gerrit AI review for Lustre osd_handler.c:11 — (minor) This include was only needed for cfs_kallsyms_lookup_name("flush_delayed_fput"), which this patch removes. Nothing else in osd-wbcfs
Gerrit AI review for Lustre PS5 · 2026-10-20 20:02
(minor) This include was only needed for cfs_kallsyms_lookup_name("flush_delayed_fput"), which this patch removes. Nothing else in osd-wbcfs uses kallsyms now, so the include can go. Also, osd-ldiskfs and osd-wbcfs were the only users of HAVE_FLUSH_DELAYED_FPUT, so LC_HAVE_FLUSH_DELAYED_FPUT in config/lustre-core.m4 is now dead too. That could be dropped here or in a follow-up.
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre osd_internal.h:110 — (style) Double blank line left behind by the osd_alloc_file_pseudo() removal.
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(style) Double blank line left behind by the osd_alloc_file_pseudo() removal.
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre osd_io.c:173 — (suggestion) This puts roughly 400 bytes (struct file plus struct dentry) on the stack in a path that already runs deep under ptlrpc, and it
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(suggestion) This puts roughly 400 bytes (struct file plus struct dentry) on the stack in a path that already runs deep under ptlrpc, and it's duplicated in osd_write(). LU-19388 avoided that by parking `struct file oti_file` in osd_thread_info and sharing osd_get_filp_for_inode(). osd-wbcfs has no osd_thread_info yet, but a small shared helper would at least keep the two copies from drifting.
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre osd_io.c:187 — (minor) This is an unlocked read-modify-write on `i_flags`. osd_attr_set() takes `obj->oo_guard` for writing around osd_inode_setattr(), whi
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(minor) This is an unlocked read-modify-write on `i_flags`. osd_attr_set() takes `obj->oo_guard` for writing around osd_inode_setattr(), which assigns the whole word:

    inode->i_flags = ll_ext_to_inode_flags(attr->la_flags) | S_NOCMTIME;

A concurrent osd_read()/osd_write() can read the old word and store it back, dropping whatever flags that setattr just changed. Following the ldiskfs change and ORing S_PRIVATE into osd_inode_setattr() plus the inode-creation path would avoid both the race and re-doing this on every IO.
reply PS4 2026-07-28 13:42 Gerrit AI review for Lustre osd_io.c:195 — (defect) Can this oops? `dentry` is a zeroed stack object, so `d_sb` is NULL, and f_mode here has neither FMODE_NONOTIFY nor FMODE_PATH. On
Gerrit AI review for Lustre PS4 · 2026-07-28 13:42
(defect) Can this oops? `dentry` is a zeroed stack object, so `d_sb` is NULL, and f_mode here has neither FMODE_NONOTIFY nor FMODE_PATH. On 6.10 through 6.16:

    kernel_read() -> rw_verify_area(READ, ...)
      -> fsnotify_file_area_perm(file, MAY_READ, ...)   /* passes, MAY_READ */
      -> fsnotify_file(file, FS_ACCESS_PERM)

and fsnotify_file() does

    if (file->f_mode & (FMODE_NONOTIFY | FMODE_PATH))
            return 0;
    path = &file->f_path;
    if (mask & ALL_FSNOTIFY_PERM_EVENTS &&
        !fsnotify_sb_has_priority_watchers(path->dentry->d_sb, ...))

FS_ACCESS_PERM is in ALL_FSNOTIFY_PERM_EVENTS, so `path->dentry->d_sb` is read and fsnotify_sb_info() dereferences it. 6.12 is an in-tree build target (lustre/kernel_patches/targets/6.12-rhel10.0.target), and CONFIG_FANOTIFY_ACCESS_PERMISSIONS is on in the enterprise configs. The path is reached from llog_osd_read_header()/seq_store_read() -> dt_read() -> osd_read().

alloc_file_pseudo() used to hide this: d_alloc_pseudo() set d_sb from the mount and made the dentry its own parent, so IS_ROOT() held. Setting `dentry.d_sb = inode->i_sb;` and `dentry.d_parent = &dentry;` restores both. Adding FMODE_NONOTIFY, as osd_get_filp_for_inode() does in osd-ldiskfs, would short-circuit fsnotify entirely.

The write side at the bottom of the file has the same uninitialised dentry; MAY_WRITE returns early from fsnotify today, so only the read path trips it, but the two should probably be fixed together.
owner Timothy Day · uploader Timothy Day · PS5 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-18813 osd-wbcfs: remove calls to alloc_file_pseudo()

Duplicate the work of "LU-19388 osd: remove calls to alloc_file_pseudo()"
but for osd-wbcfs.

fput() which we need to call after alloc_file_pseudo() doesn't release
file struct right away and postponed jobs to release it may create
a massive load to system interrupting regular Lustre processing.

The reason for using alloc_file_pseudo() was due to the removal
of kallsyms_lookup_name(). The function iterate_dir() will crash
unless security_file_alloc() and security_file_free() are not
called. Now that Lustre uses kprobes to export functions we
can unwind the work of LU-13783.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I378babbd6ec42c0f5ba6f3b6f74ccabb458dde01
65465 master J !B ✓T ✓R 0/2
LU-20184 nrs: extend TBF rate to support bandwidth (BPS) mode
cc Qian Yingjin ·
L +538 −16
27d
janitor run: 11 failing config(s), none unique to this patch — janitor results
no vote yet: Chris Horn, Andreas Dilger
patchsets:
+9 earlier PS1 04-22 PS2 04-22 PS3 04-22 PS4 05-01 PS5 05-09 PS6 05-14 PS7 09-02 Chris Horn PS8 09-05 Chris Horn PS9 09-06 Chris Horn
PS10 09-06 Chris Horn PS11 09-07 Chris Horn PS12 09-11 Chris Horn PS13 09-12 Chris Horn PS14 09-18 Chris Horn
owner Qian Yingjin · uploader Chris Horn · PS14 uploaded 46d ago · NEW · open in Gerrit ↗
commit message
LU-20184 nrs: extend TBF rate to support bandwidth (BPS) mode

The TBF policy limits a rule in RPCs per second. With mixed I/O sizes,
the RPC count does not show the cost. 100 writes of 4 MiB cost much
more than 100 writes of 4 KiB.

Add a bandwidth (BPS) mode. The "bps=" rule key sets a byte rate for
read and write RPCs, in MiB/s by default. The "iops=" key sets an RPC
rate, and a rule can set both. The rule dump adds a "bps=" field.
"realtime=" with "bps=" returns -EOPNOTSUPP. A rate of 0, or of
LPROCFS_NRS_RATE_MAX or more, returns -ERANGE, not -EINVAL.

    nrs_tbf_rule="start r1 projid={100} iops=1000 bps=5MB/s"

Read limit 5 MiB/s, write limit 15 MiB/s, result in MB/s:

    blksz   4KiB    64KiB   128KiB  256KiB  1MiB
    write   5.7     14.6    14.8    15.3    15.7
    read    4.6     5.0     5.1     5.2     5.3

Add sanityn/test_77u{a,b,c,d}.

Test-Parameters: trivial testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: I359e23faedd2a09d3249c1a36038396d9780293a
62461 master J !B ✓T ✓R -1/2−
LU-19584 lraft: import Raft code
cc Hongchao Zhang ·
1 unresolved XL +3412 −0
35d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #121787 SUCCESS · tests all Maloo sessions
reviews: Timothy Day -1 2026-09-29 15:27
no vote yet: Lai Siyao, Andreas Dilger
patchsets:
+2 earlier PS1 11-10 PS2 11-13
PS3 02-05 PS4 02-06 PS5 02-09 PS6 02-10 PS7 02-18
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2025-11-20 16:55 Timothy Day raft.h:4 — This file doesn't exist. We should point to the correct file.
Timothy Day PS2 · 2025-11-20 16:55
This file doesn't exist. We should point to the correct file.
owner Hongchao Zhang · uploader Hongchao Zhang · PS7 uploaded 258d ago · NEW · open in Gerrit ↗
commit message
LU-19584 lraft: import Raft code

Import Raft implementation from https://github.com/willemt/raft
(v0.7.0-57-ge428eeb) to Lustre, which will be used to implement
fault-tolerant service.

Test-Parameters: trivial
Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: I1de9861f7fab9afcde5a63c932ef9651618aafc1
67823 master J !B ✓T ✓R +0/2−
LU-20559 target: keep client bitmap updates out of assertions
cc Oleg Drokin ·
1 unresolved S +10 −7
40d
janitor run: 6 failing config(s), none unique to this patch — janitor results
2 optional test failure(s) — informational
build #128987 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-08-13 17:39 · Timothy Day -1 2026-09-24 15:49
patchsets: PS1 08-07 PS2 08-08 PS3 08-09
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-08 10:45 Gerrit AI review for Lustre COMMIT_MSG:30 — (suggestion) this isn't a bug, but LU-20559 is filed against the obd2obt() obt_magic assertion when destroying exports of a failed mount, an
Gerrit AI review for Lustre PS1 · 2026-08-08 10:45
(suggestion) this isn't a bug, but LU-20559 is filed against the obd2obt() obt_magic assertion when destroying exports of a failed mount, and this paragraph says the change needs neither that crash nor the rest of the series. It also has its own Fixes: commit and an unrelated failure mode. Would a separate ticket be a better home, so the backport scope of the two doesn't get conflated?
owner Oleg Drokin · uploader Oleg Drokin · PS3 uploaded 86d ago · NEW · open in Gerrit ↗
commit message
LU-20559 target: keep client bitmap updates out of assertions

tgt_client_add() and tgt_client_free() update lut_client_bitmap from
inside the condition of a LASSERTF().  With --disable-libcfs-assert
LASSERTF() expands to ((void)sizeof!!(cond)), so neither the set nor
the clear is evaluated at all and the bitmap stops tracking anything.

The clear side leaks: the slot stays set for the life of the target
while tgt_client_new() hands out a fresh index for each new client.

The set side corrupts.  tgt_clients_data_init() calls tgt_client_add()
once per occupied last_rcvd slot at mount, so with the set gone every
recovered client's bit stays clear.  tgt_client_new() then takes
find_first_zero_bit() == 0 and gives that index to a new client while
a recovering export still owns it: both get the same ted_lr_idx and
ted_lr_off and write over each other's lsd_client_data.

Do the bitmap operation first and assert on its result.  The clear
side also tests lut_client_bitmap rather than asserting on it, because
the dereference below it would otherwise happen in exactly the builds
where the assertion is gone, on a pointer this series shows can be
NULL.

This is independent of the rest of the series and of the crash it
fixes - it needs neither, and neither needs it.

Fixes: a32c87805ffb ("LU-18155 misc: use LASSERT/F instead of if () LBUG()")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Ie8b233b19cd385cab92058acaafbc603bf35165e
67873 master J !B ✓T ✓R +1/2
LU-20559 misc: fix the --disable-libcfs-assert build
cc Oleg Drokin ·
3 unresolved S +10 −4
40d
janitor run: 6 failing config(s), none unique to this patch — janitor results
build #128990 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-08-21 20:04
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-10 09:01 Gerrit AI review for Lustre COMMIT_MSG:33 — (minor) Both breakages are long-standing, so Fixes: tags would help the maintenance branches decide whether they need this. The %lld mismatc
Gerrit AI review for Lustre PS1 · 2026-08-10 09:01
(minor) Both breakages are long-standing, so Fixes: tags would help the maintenance branches decide whether they need this. The %lld mismatch came in with the atomic64 conversion, and the LDLM_WARN gap with the commit that added the only call site:

    Fixes: 9397f8cf866a ("LU-14016 libcfs: use atomic64_t for libcfs_kmem")
    Fixes: 238a309ea608 ("LU-3285 mds: combine DoM bit with other IBITS")
reply PS1 2026-08-10 09:01 Gerrit AI review for Lustre libcfs_private.h:112 — (minor) With the declaration unconditional here, the second `extern atomic64_t libcfs_kmem;` in lustre/include/obd_support.h becomes redunda
Gerrit AI review for Lustre PS1 · 2026-08-10 09:01
(minor) With the declaration unconditional here, the second `extern atomic64_t libcfs_kmem;` in lustre/include/obd_support.h becomes redundant - that header already includes this one. Worth dropping in the same patch?
reply PS1 2026-08-10 09:01 Gerrit AI review for Lustre lustre_dlm.h:1485 — (defect) The stub list is complete now, but _ldlm_lock_debug()'s prototype a few lines up is still inside the #ifdef, while ldlm_lock.c defi
Gerrit AI review for Lustre PS1 · 2026-08-10 09:01
(defect) The stub list is complete now, but _ldlm_lock_debug()'s prototype a few lines up is still inside the #ifdef, while ldlm_lock.c defines and exports the function unconditionally. Since v6.7 the kernel adds -Wmissing-prototypes in the default warning set (scripts/Makefile.extrawarn), and configure adds -Wall -Werror on x86_64 by default (config/lustre-toolchain.m4), so --disable-libcfs-assert still stops here:

    ldlm_lock.c:2780: error: no previous prototype for '_ldlm_lock_debug'

Moving the declaration above the #ifdef gives it the same treatment libcfs_kmem gets in this patch. el8/el9 kernels predate that warning becoming default, which is likely why the build looked clean.

lustre/quota/lquota_internal.h has the identical pattern for lquota_lqe_debug0(), defined unconditionally in lquota_entry.c.
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 86d ago · NEW · open in Gerrit ↗
commit message
LU-20559 misc: fix the --disable-libcfs-assert build

The tree does not compile with --disable-libcfs-assert. Two things
break once LIBCFS_DEBUG is undefined:

libcfs_kmem_read() becomes (0), an int, while the branch above it
yields long long and every caller prints it with %lld. With
-Werror=format that is 73 errors across lnet and libcfs.

The extern for libcfs_kmem sits inside the same #ifdef, but the sysctl
table in lnet/libcfs/module.c refers to libcfs_kmem.counter whether or
not the counters are maintained, so it fails to compile with the
variable undeclared. It is defined unconditionally in debug.c.

Give the disabled branch a long long, and declare libcfs_kmem outside
the conditional.

Two more surface in ldlm once that is out of the way: the
!LIBCFS_DEBUG branch defines LDLM_DEBUG_LIMIT, LDLM_DEBUG and
LDLM_ERROR but not LDLM_WARN, which ldlm_inodebits.c calls, and
ldlm_handle_ast_error()'s peer is then referenced only from macros
that compile to nothing.

This matters beyond the build: the assertion fixes elsewhere in this
series only change behaviour in this configuration, and none of them
could be tested until it compiled.

Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I7b2e884999ee39b37f31cbc135ead1713a07f83e
68019 master J ✗4B ✗T –R -1/2−
LU-20591 target: iterate objects on OST and MDT
cc Jinshan Xiong · blocked on the owner: janitor: test failures unique to this patch; build failure
4 unique failures 13 unresolved XL +2173 −7
64d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-scrub@ldiskfs+DNE:test_23NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-scrub@ldiskfs+DNE:test_24NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-scrub@ldiskfs+DNE:test_25NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-scrub@ldiskfs+DNE:test_26NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #129393 FAILURE
threads: 13 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-30 22:17 Jinshan Xiong COMMIT_MSG — (style) In 'LU-20591 target: iterate objects on OST and MDT' the Change-Id: comes before the Signed-off-by:, which usually means the Lustre
Jinshan Xiong PS1 · 2026-08-30 22:17
(style) In 'LU-20591 target: iterate objects on OST and MDT' the Change-Id: comes before the Signed-off-by:, which usually means the Lustre commit-msg hook is not installed. The other two commits in the series have the conventional order.

The series is also authored under two different addresses, jinshan.xiong@gmail.com on the first and third commits and jinshanx@google.com on the second, while every Signed-off-by is the google.com one.
reply PS1 2026-08-30 22:17 Jinshan Xiong llapi_obj_iterate.3:60 — (typo) Four timestamps, not three: the item carries lsii_atime, lsii_btime, lsii_ctime and lsii_mtime, and the struct listing further down s
Jinshan Xiong PS1 · 2026-08-30 22:17
(typo) Four timestamps, not three: the item carries lsii_atime, lsii_btime, lsii_ctime and lsii_mtime, and the struct listing further down shows all four.
reply PS1 2026-08-30 22:17 Jinshan Xiong llapi_obj_iterate.3:166 — (minor) LU_SCRUB_ITER_RES_EOF is undocumented here, even though it is the only way a caller can tell a walk that reached the end of the devi
Jinshan Xiong PS1 · 2026-08-30 22:17
(minor) LU_SCRUB_ITER_RES_EOF is undocumented here, even though it is the only way a caller can tell a walk that reached the end of the device from one that stopped early or was turned away with -EBUSY. Worth listing alongside LU_SCRUB_ITER_RES_SKIPPED.
reply PS1 2026-08-30 22:17 Jinshan Xiong llapi_obj_iterate.3:235 — (minor) For a man page added in the same patch as the function, this should carry the most recent parent tag (2.17.57) rather than a git des
Jinshan Xiong PS1 · 2026-08-30 22:17
(minor) For a man page added in the same patch as the function, this should carry the most recent parent tag (2.17.57) rather than a git describe of an unlanded commit. The exact hash can be filled in once it lands.
reply PS1 2026-08-30 22:17 Jinshan Xiong lctl.8:227 — (minor) This adds ~175 lines describing one sub-command inside lctl.8. The convention for lctl sub-commands is a page of its own, lctl-itera
Jinshan Xiong PS1 · 2026-08-30 22:17
(minor) This adds ~175 lines describing one sub-command inside lctl.8. The convention for lctl sub-commands is a page of its own, lctl-iterate-objects.8, cross-referenced from here, so that 'man lctl-iterate-objects' works and lctl.8 stays an index.
reply PS1 2026-08-30 22:17 Jinshan Xiong ofd_obd.c:1248 — (style) This isn't a bug, but there is already fid_seq_is_mdt0() for this comparison, and fid_seq_is_mdt() folds it together with the fid_se
Jinshan Xiong PS1 · 2026-08-30 22:17
(style) This isn't a bug, but there is already fid_seq_is_mdt0() for this comparison, and fid_seq_is_mdt() folds it together with the fid_seq_is_norm() line below.
reply PS1 2026-08-14 17:21 Misc Code Checks Robot (Gatekeeper helper) ofd_obd.c:1303 — error: ofd_scrub_iter_rec():'fo' dereferencing possible ERR_PTR()
Misc Code Checks Robot (Gatekeeper helper) PS1 · 2026-08-14 17:21
error: ofd_scrub_iter_rec():'fo' dereferencing possible ERR_PTR()
reply PS1 2026-08-30 22:17 Jinshan Xiong osd_scrub.c:2536 — (defect) Turning osd_scrub_start() away with -EBUSY changes what a client sees when an OI inconsistency is hit during a walk.
Jinshan Xiong PS1 · 2026-08-30 22:17
(defect) Turning osd_scrub_start() away with -EBUSY changes what a client sees when an OI inconsistency is hit during a walk.

osd_fid_lookup() does:

    rc1 = osd_scrub_start(env, dev, flags);
    if (rc1 && rc1 != -EALREADY)
        GOTO(out, result = -EREMCHG);

so an RPC that would previously have triggered the scrub and returned the retryable -EINPROGRESS now fails hard with -EREMCHG. The osd-zfs side has the same shape in osd_index.c, where rc is overwritten by the osd_scrub_start() return and -EBUSY becomes the lookup result.

The iterator only lives for one ioctl, but a full 'lctl iterate_objects' run holds it back to back for most of the walk, so the window is not small in practice. Should the -EBUSY be confined to an explicitly requested scrub start and the RPC-triggered path fall back to -EINPROGRESS?
reply PS1 2026-08-30 22:17 Jinshan Xiong osd_scrub.c:3005 — (defect) Is this assertion still guaranteed on the DOIF_NOSCRUB path?
Jinshan Xiong PS1 · 2026-08-30 22:17
(defect) Is this assertion still guaranteed on the DOIF_NOSCRUB path?

Before this patch osd_otable_it_init() always went through scrub_start(), and scrub_thread_prep() clears os_partial_scan before it sets os_running, so load() could rely on it being 0. With noscrub, scrub_start() is skipped entirely and nothing clears the flag.

os_partial_scan is only reset in scrub_thread_prep() and osd_scrub_join(); scrub_thread_post() leaves it set, and the partial-scan loop in osd_inode_iteration() exits with it still 1 on SCRUB_NEXT_EXIT, SCRUB_NEXT_CRASH and SCRUB_NEXT_FATAL. A partial scan that ended that way leaves os_partial_scan == 1 with os_running == 0 for the life of the mount, which is exactly the state the noscrub iterator is allowed to start in, and it LBUGs here.
reply PS1 2026-08-30 22:17 Jinshan Xiong osd_scrub.c:1579 — (minor) The noscrub arm of this looks dead: osd_otable_it_load() sets ooi_pos = hash + 1 unconditionally, and scrub_iterate_objects() always
Jinshan Xiong PS1 · 2026-08-30 22:17
(minor) The noscrub arm of this looks dead: osd_otable_it_load() sets ooi_pos = hash + 1 unconditionally, and scrub_iterate_objects() always calls load(). Was the intent to cover a caller that skips load()?
reply PS1 2026-08-30 22:17 Jinshan Xiong sanity-scrub.sh:1540 — (style) New subtests normally take a large round number with gaps (test_100, test_200) so that patches landing in parallel do not collide on
Jinshan Xiong PS1 · 2026-08-30 22:17
(style) New subtests normally take a large round number with gaps (test_100, test_200) so that patches landing in parallel do not collide on the same numbers. 23 through 30 immediately after test_22 is likely to conflict.

Also, test_23 creates 2048 files and test_28 creates 2560, and neither removes them; test_24, test_29 and test_30 already rm -rf $tdir, so the same stack_trap here would keep the filesystem from growing across the suite.
reply PS1 2026-08-30 22:17 Jinshan Xiong sanity-scrub.sh:1555 — (defect) None of test_23 through test_31 gate on the server version, so an interop run against a server without OBD_IOC_SCRUB_ITER fails her
Jinshan Xiong PS1 · 2026-08-30 22:17
(defect) None of test_23 through test_31 gate on the server version, so an interop run against a server without OBD_IOC_SCRUB_ITER fails here instead of skipping. Something like

    (( $OST1_VERSION >= $(version_code 2.17.58) )) ||
        skip "need OST >= 2.17.58 for lctl iterate_objects"

at the top of each test body, with the MDT variant where the test drives mds1.
owner Jinshan Xiong · uploader Jinshan Xiong · PS1 uploaded 81d ago · NEW · open in Gerrit ↗
commit message
LU-20591 target: iterate objects on OST and MDT

Add the OBD_IOC_SCRUB_ITER ioctl so that user space can enumerate the
objects that a target holds. Both OFD and MDT implement it on top of
the OSD object table iterator, which already knows how to walk a
device and to resume from a cookie.

That iterator was so far only used by OI scrub and LFSCK, and starting
it also started the scrub thread. Add a DOIF_NOSCRUB flag that skips
that: this is a read only walk and it must not repair anything. An
iterator that did not start the scrub must not stop it either, so
osd_otable_it_fini() now leaves the scrub alone in that case, where it
would otherwise silently abort a scrub that was already running. A
NOSCRUB iteration and an OI scrub further refuse to run at the same
time and return -EBUSY, because the two would throttle each other
through the preload window.

A single call examines at most SCRUB_ITER_MAX_SCAN entries. Without
such a budget a device holding only a handful of user objects would be
walked from end to end inside one ioctl, keeping the iterator, and
therefore OI scrub and LFSCK, busy for an unbounded time. A call can
consequently come back with no object at all before the device has
been fully walked, so the end of the walk is reported explicitly with
LU_SCRUB_ITER_RES_EOF rather than inferred from an empty batch.

The iterator is built and torn down inside each call, which is what
lets a scrub start between two batches instead of waiting out a whole
walk. The walk resumes from the cookie it was left at, so
llapi_obj_iterate() hands that cookie back to its caller: a walk that
was stopped, interrupted or turned away with -EBUSY can carry on from
where it stopped rather than from the beginning of the device. The
cookie only moves once a batch has been handed to the callback, so
resuming repeats at most one batch and never skips an object.

Recreating the iterator costs about 15us per call, and the preload
window it fills is 64 entries, so a batch below that reads entries it
then throws away. Measured over 20033 objects on one OST, a walk takes
0.03s at a batch of 64 or more and 0.34s at a batch of 1.

An object that cannot be read is left out of the result, which a
caller cannot tell from an object that was never there, so such a walk
comes back marked with LU_SCRUB_ITER_RES_SKIPPED.

Per object metadata is optional and is selected with the
LU_SCRUB_ITER_REQ_* flags, so a caller that only wants FIDs does not
pay for reading anything else, and what the target managed to collect
comes back in LU_SCRUB_ITER_FL_*. There is one flag per extra read
rather than one per field, because the size, the blocks, the four
timestamps and the ownership of an object all come out of a single
read of it, while its parent FID costs a read of its extended
attributes. A flag the target does not know is refused rather than
ignored, since metadata that comes back quietly missing cannot be
told from metadata the object does not have. The parent FID of an MDT
object lives in its linkEA, which is far too expensive to read for
every object of a device, so LU_SCRUB_ITER_REQ_PARENT is rejected with
-EOPNOTSUPP there.

An item keeps room in reserve for the attributes a later version may
report, and the caller says how large an item it expects: the size of
an item is how both sides divide up the buffer, so two sides that
disagree about it would read the result as something else entirely.

Only the objects that user space can see are reported: the OST leaves
out its local metadata files such as LAST_ID, the quota files and the
llogs, and the MDT reports the regular files that have a normal FID
only. An IGIF FID is not enough there: the OSD builds one out of the
inode number and generation for the local files it has no FID of its
own for, CONFIGS/mountdata for one, and nothing tells such a FID
apart from the FID of a file inherited from a 1.8 filesystem. The
walk itself is shared between the two targets in
scrub_iterate_objects(), with a per target callback that filters an
entry and fills in its metadata.

Add llapi_obj_iterate() and 'lctl iterate_objects' on top of the
ioctl, and document both under Documentation/. How many objects a
single call fetches is left to the caller of the library function,
which is what test_28 varies; test_23 to test_27 in sanity-scrub.sh
cover the rest, test_29 that a walk can be resumed where it stopped
and test_30 that one survives the objects under it being unlinked.

Test-Parameters: testlist=sanity-scrub
Change-Id: I47dceaf73031221c662c5cdd2b21d1bd667c87eb
Signed-off-by: Jinshan Xiong <jinshanx@google.com>
68265 master J !B ✓T ✓R +2/2
LU-20628 lnet: do not assert on an odd selftest bulk size
cc Oleg Drokin ·
S +38 −7
65d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #130107 SUCCESS · tests all Maloo sessions
reviews: Jinshan Xiong +1 2026-08-24 17:52 · Chris Horn +1 2026-08-30 21:26
no vote yet: Robert Read
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-20628 lnet: do not assert on an odd selftest bulk size

brw_fill_page() asserted the length was a multiple of __u64 above
the early return for the patterns that write nothing, so any brw
test with a size= that is not a multiple of 8 LBUGged the test
node before a request went out, the default check=none included.
Assert only where the pattern is written, and reject an odd size
for the checked patterns in brw_client_init() and, since brw_len
also arrives over the wire, in brw_server_handle().

lst now refuses check=full and check=simple with an odd size= that
it used to pass down to the kernel, and the two dead end == NULL
guards that sat in front of that test are gone.  lnet-selftest.sh
runs three more brw cases with an odd size=.

Test-Parameters: trivial testlist=lnet-selftest
Fixes: efcef00cb304 ("LU-5718 lnet: add offset for selftest brw")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I76128c3d9e3bfce8fcde25bc1403c8b66160c9c0
68264 master J !B ✓T ✓R +2/2
LU-20342 lnet: no selftest bulk after a refused request
cc Oleg Drokin ·
1 unresolved XS +8 −1
65d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #130106 SUCCESS · tests all Maloo sessions
reviews: Jinshan Xiong +1 2026-08-24 17:49 · Chris Horn +1 2026-08-30 21:26
no vote yet: Robert Read
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-24 21:20 Gerrit AI review for Lustre rpc.c:1074 — (minor) This makes a refused BRW request reach srpc_server_rpc_done() with srpc_bulk still set, and brw_server_handle() has already installe
Gerrit AI review for Lustre PS1 · 2026-08-24 21:20
(minor) This makes a refused BRW request reach srpc_server_rpc_done() with srpc_bulk still set, and brw_server_handle() has already installed brw_server_rpc_done() before its early returns. Since srpc_status is 0 on this path, the callback takes the success branch:

    CDEBUG(D_NET, "Transferred %d pages bulk data %s %s\n",
           blk->bk_niov, blk->bk_sink ? "from" : "to", ...);

srpc_init_bulk() was never called for this request, so bk_niov/bk_sink still hold whatever the previous RPC on this recycled srpc_server_rpc left there, and the log claims a transfer that never happened. Debug-only, but it is misleading in exactly the interop case this patch is about. Worth having brw_server_rpc_done() bail out when the reply status is non zero?
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 72d ago · NEW · open in Gerrit ↗
commit message
LU-20342 lnet: no selftest bulk after a refused request

Since the BRW service began preallocating its bulk descriptor, a
handler that refused a request left rpc->srpc_bulk set, so
srpc_handle_rpc() asserted, and would otherwise have run a bulk
transfer for a request it had just refused.  Send the reply
straight away instead; the client already unlinks its own bulk
when the reply status is non zero.  The version mismatch branch
above had the same problem with no assertion to catch it.

A brw check=discard test against a server too old to know that
flag panics that server today.

Test-Parameters: trivial testlist=lnet-selftest
Fixes: e502638050a6 ("LU-16011 lnet: use preallocate bulk for server")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Id57db19ea45d2899d641a815cc85700a22c8f91d
65861 master J !B ✓T ✗19R 0/2
LU-20253 llite: remove d_compare() for overlayfs support
cc Timothy Day · blocked on the owner: enforced tests failed
13 unresolved M +14 −53
89d
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-3 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-part-4 RHEL 9.7 / x86_64 ran 9 tests. 1 tests failed: sanity-dom. session
review-dne-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-dom. session
review-dne-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 2 tests failed: sanity-sec, sanity-lfsck. session
review-dne-zfs-part-3 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-3 RHEL 10.1 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-4 RHEL 9.7 / x86_64 ran 9 tests. 1 tests failed: sanity-dom. session
review-dne-zfs-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-dom. session
review-dne-zfs-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-ldiskfs RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 6 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity. session
build #128826 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets: PS1 05-13 PS2 07-30 PS3 07-30 PS4 08-06
threads: 13 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-05-14 17:05 Timothy Day COMMIT_MSG:12 — I ported simul to our tree: https://review.whamcloud.com/c/fs/lustre-release/+/65894. I can take a look at the racer issues as well.
Andreas Dilger PS1 · 2026-05-14 03:31
To be honest, I wouldn't call `ll_dcompare()` "very similar" to `d_same_name()`.  Yes, they both start the same (compare name length and name string), but there several other checks in there that play a significant role with handling races between clients modifying the file in parallel.

Along with the in-tree "racer" code that is throwing garbage at the VFS, the "simul" test (https://github.com/llnl/simul) is stress-testing concurrent operations on the same directory and could be used to test this change.  

Unfortunately, "racer" is flakey right now and not passing consistently, but it might still be worthwhile to run before/after tests to see if the _nature_ of the failures change (e.g. crash vs. hang).  Of course, fixing "racer" would also be good.

The "simul" test _should_ always be passing, but I see it is being skipped for a large number of sessions.  I filed LU-20259 about that, but in the meantime you should be able to run a session with something like:

    Test-Parameters: testlist=parallel-scale env=ONLY=simul,simul_REP=100,simul_THREADS=8 clientdistro=ubuntu2404
Timothy Day PS1 · 2026-05-14 17:05
I ported simul to our tree: https://review.whamcloud.com/c/fs/lustre-release/+/65894. I can take a look at the racer issues as well.
reply PS3 2026-07-31 10:38 Gerrit AI review for Lustre COMMIT_MSG:12 — This was raised on patchset 1 and the text is unchanged, so repeating it with a bit more detail: the part of ll_dcompare() that has no count
Gerrit AI review for Lustre PS3 · 2026-07-31 10:38
This was raised on patchset 1 and the text is unchanged, so repeating it with a bit more detail: the part of ll_dcompare() that has no counterpart in d_same_name() is exactly the part this patch has to re-implement - the d_lustre_invalid()/d_mountpoint()/d_in_lookup() handling. And it is not re-implemented equivalently: a name that failed d_compare() left the stale dentry alone and let ll_splice_alias()->ll_find_alias() reuse it, while a 0 from d_revalidate() makes the VFS d_invalidate() it first.

Could the body describe that change of failure mode rather than calling it a move of "the special revalidation logic"?
reply PS3 2026-07-31 10:38 Gerrit AI review for Lustre COMMIT_MSG:15 — The Test-Parameters line suggested on patchset 1 for the concurrent-access stress coverage still isn't here:
Gerrit AI review for Lustre PS3 · 2026-07-31 10:38
The Test-Parameters line suggested on patchset 1 for the concurrent-access stress coverage still isn't here:

    Test-Parameters: testlist=parallel-scale env=ONLY=simul,simul_REP=100,simul_THREADS=8 clientdistro=ubuntu2404
reply PS4 2026-08-07 08:24 Gerrit AI review for Lustre COMMIT_MSG:12 — This was raised on patchset 1 and the wording is unchanged, so passing on some evidence for it.
Gerrit AI review for Lustre PS4 · 2026-08-07 08:24
This was raised on patchset 1 and the wording is unchanged, so passing on some evidence for it.

ll_dcompare() was not only reachable from ->d_revalidate() paths. d_same_name() consults parent->d_op->d_compare(), so every d_lookup() went through it - including the ones llite makes itself, which never call ->d_revalidate():

    ll_migrate()            file.c:5897
    LL_IOC_PCC_STATE        dir.c:2857
    sa_statahead()          statahead.c:1059

So "very similar to the default" understates it: the invalid-dentry filtering was a property of d_lookup() for the whole module, and the replacement only covers the VFS revalidate path. Could the body describe which behaviour is preserved and which is dropped?
reply PS1 2026-05-13 16:34 Timothy Day patchset comment — Do you have a reference to his previous work I can look at?
James Simmons PS1 · 2026-05-13 16:32
Interesting. Neil some time back tried this but never got it to work.
Timothy Day PS1 · 2026-05-13 16:34
Do you have a reference to his previous work I can look at?
reply PS1 2026-05-14 17:05 Timothy Day patchset comment — The later patches (RENAME_*) don't have any dependency on this patch. So they could land independently of this one. s_encoding is an interes
James Simmons PS1 · 2026-05-13 18:46
https://review.whamcloud.com/24175. It was revert right after landing. Broke conf-sanity 32.
Andreas Dilger PS1 · 2026-05-14 04:06
Strangely, I had written a comment referencing this patch as well after I was spelunking in this code (`git log --patch lustre/llite/namei.c | grep -A30 -E "^commit|ll_dcompare"`), but I seem to have lost it when I saved my comments.  Definitely this is a tricky area of code.

My suggestion in that other lengthy comment was to set `sb->s_encoding`, as this will bypass the `DCACHE_OP_COMPARE` check in `ovl_weird_dentry()`.  It doesn't look hard to set a legitimate UTF-8 encoding value:
```
#if IS_ENABLED(CONFIG_UNICODE)
        sb->s_encoding = utf8_load(UNICODE_AGE(12, 1, 0));
#endif
```

AFAICS setting `s_encoding` doesn't seem to have any other effect in the VFS if the case-insensitive `generic_ci_dentry_ops` are not installed on the file and `S_CASEFOLD` is not set on the directory.  Consider this "preparing for case-insensitivity".

While this may (or may not) be a long-term solution, it is relatively harmless and should allow the later overlayfs patches to make progress while this one (likely) will take longer to get right.
Timothy Day PS1 · 2026-05-14 17:05
The later patches (RENAME_*) don't have any dependency on this patch. So they could land independently of this one. s_encoding is an interesting idea. But I'd prefer to work on improving the testing until were comfortable removing d_compare. Neil's previous patch seemed to mostly pass testing, so that gives me some hope that the work required isn't huge.
reply PS3 2026-07-31 10:38 Gerrit AI review for Lustre dcache.c:231 — The comment says the check can "only definitively reject here when there is no inode", and that returning 0 for a positive invalid dentry is
Gerrit AI review for Lustre PS3 · 2026-07-31 10:38
The comment says the check can "only definitively reject here when there is no inode", and that returning 0 for a positive invalid dentry is what breaks the overlayfs case - but the condition below has no d_inode test, so it fires for positive dentries too. ovl_revalidate_real() will turn that 0 into -ESTALE exactly as described.

Was the `!dentry->d_inode` term meant to stay in the condition, or is the comment left over from an earlier version?

Worth noting the two readings are not equivalent for non-overlayfs use either: with the inode test, a positive dentry whose LOOKUP lock was revoked reports valid, so a name renamed/replaced on another client keeps resolving to the old inode until the operation itself fails.
reply PS3 2026-07-31 10:38 Gerrit AI review for Lustre dcache.c:240 — Returning 0 here makes the VFS call d_invalidate() on the dentry (lookup_fast(), lookup_dcache(), __lookup_slow() all do `if (!status) d_inv
Gerrit AI review for Lustre PS3 · 2026-07-31 10:38
Returning 0 here makes the VFS call d_invalidate() on the dentry (lookup_fast(), lookup_dcache(), __lookup_slow() all do `if (!status) d_invalidate(dentry)`). For a positive dentry, d_invalidate() unhashes it, calls shrink_dcache_parent(), then loops on d_walk(..., find_submount) calling detach_mounts() on every mounted descendant.

d_lustre_invalidate() is not a "this name is gone" signal - ll_lock_cancel_bits() calls ll_prune_aliases() on any MDS_INODELOCK_LOOKUP|PERM cancellation, including a plain LRU cancel. So:

    mount --bind /tmp /mnt/lustre/dir/sub
    lctl set_param ldlm.namespaces.*mdc*.lru_size=clear
    ls /mnt/lustre/dir

looks like it would silently unmount the bind mount. The `!d_mountpoint(dentry)` term only covers the dentry itself, not mounts below it. Under ll_dcompare() none of this happened: the invalid dentry was simply skipped and ll_find_alias() re-used the same object, with its children and mounts intact.

The same path also drops the whole cached subtree on each such lookup, and unhashing conflicts with the deliberate choice in ll_getattr_dentry() not to d_drop() an invalidated dentry so that getcwd() keeps working.
reply PS3 2026-07-31 10:38 Gerrit AI review for Lustre dcache.c:241 — Is `!d_in_lookup(dentry)` reachable? That term was needed in ll_dcompare() because d_alloc_parallel() compares against the in-lookup hash vi
Gerrit AI review for Lustre PS3 · 2026-07-31 10:38
Is `!d_in_lookup(dentry)` reachable? That term was needed in ll_dcompare() because d_alloc_parallel() compares against the in-lookup hash via d_same_name(), but ->d_revalidate() is never called on an in-lookup dentry: __lookup_slow() and lookup_open() both test d_in_lookup() before calling it, and __d_lookup{,_rcu}() cannot return one since __d_add()/__d_splice_alias() clear DCACHE_PAR_LOOKUP before rehashing.

Not a bug, but as written it reads as though the parallel-lookup exclusion is still being enforced here.
reply PS4 2026-08-07 08:24 Gerrit AI review for Lustre dcache.c:241 — Is the d_mountpoint() term reachable? DCACHE_MOUNTED is only set by d_set_mounted() on a mounted-on dentry, which is always positive, so `!d
Gerrit AI review for Lustre PS4 · 2026-08-07 08:24
Is the d_mountpoint() term reachable? DCACHE_MOUNTED is only set by d_set_mounted() on a mounted-on dentry, which is always positive, so `!dentry->d_inode` already implies `!d_mountpoint(dentry)`.

Not a bug, but it reads as though the mountpoint case from ll_dcompare() is still being honoured here when it can never be evaluated.
reply PS4 2026-08-06 15:15 Misc Code Checks Robot (Gatekeeper helper) dcache.c:264 — error: ll_revalidate_dentry():we previously assumed 'dentry->d_inode' could be null (see line 240)
Misc Code Checks Robot (Gatekeeper helper) PS4 · 2026-08-06 15:15
error: ll_revalidate_dentry():we previously assumed 'dentry->d_inode' could be null (see line 240)
reply PS4 2026-08-07 08:24 Gerrit AI review for Lustre dcache.c:299 — Dropping .d_compare also changes what plain d_lookup() returns, and llite has three internal callers that use the result directly without ->
Gerrit AI review for Lustre PS4 · 2026-08-07 08:24
Dropping .d_compare also changes what plain d_lookup() returns, and llite has three internal callers that use the result directly without ->d_revalidate().

ll_migrate() (file.c:5897) is the concrete one:

    dchild = d_lookup(file_dentry(file), &qstr);
    if (dchild) {
        if (dchild->d_inode)
            child_inode = igrab(dchild->d_inode);
        dput(dchild);
    }
    if (!child_inode) {
        rc = ll_get_fid_by_name(parent, name, namelen, NULL, &child_inode);

With ll_dcompare() an invalid dentry never matched, so this always fell through to ll_get_fid_by_name(), i.e. a server lookup by name. Now an invalid dentry matches and the fallback is skipped.

ll_prune_aliases() marks aliases invalid on any MDS_INODELOCK_LOOKUP cancel and only d_prune_aliases() the unused ones, so a referenced dentry (cwd, cached children, open file) stays hashed and invalid. If another client renamed the name over a new object in the meantime, child_inode is the old object while mdt_migrate_lookup() resolves rr_name on the server and migrates the new one. The client then sets op_fid3, inode_lock()s, ll_lease_open()/ll_data_version() flushes, and on success clear_nlink()s the wrong inode.

The other two are less severe but the same root cause: the LL_IOC_PCC_STATE handler (dir.c:2857) reports state for a stale inode instead of falling back to ll_get_fid_by_name(), and sa_statahead() (statahead.c:1059) takes sa_revalidate() (getattr by fid on the stale inode) where it used to take sa_lookup() (lookup by name).

The new ->d_revalidate() check cannot cover these - they never reach it. Should these sites gain an explicit d_lustre_invalid() test before using the dcache result?
owner Timothy Day · uploader Timothy Day · PS4 uploaded 89d ago · NEW · open in Gerrit ↗
commit message
LU-20253 llite: remove d_compare() for overlayfs support

To support overlayfs, Lustre must not implement DCACHE_OP_COMPARE.
Otherwise, ovl_dentry_weird() will block the overlayfs mount with
an error like: 'filesystem on lower not supported'. Lustre's
custom d_compare() is very similar to the default d_compare()
operation implemented by the kernel. Hence, remove Lustre's
reimplementation and move the special revalidation logic.

Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Iedd9b9ed837ae4b0db50770da30a80f140d427bb
59826 master J ✗4B ✓T ✗17R 0/2
LU-19061 debug: restore --enable-pgstate-track
cc Shaun Tancheff · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
4 unique failures 1 unresolved M +93 −36
96d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity3@ldiskfs+DNE:test_78seen in 1 other review
sanity-lfsck@ldiskfs+DNE:test_45seen in 1 other review
sanity-quota@ldiskfs+DNE:test_13seen in 1 other review
sanity-quota@ldiskfs+DNE:test_86seen in 15 other reviews
failed enforced testplatformdetail
review-dne-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-1 RHEL 9.5 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-part-2 RHEL 8.10 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-part-2 RHEL 9.5 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-part-4 RHEL 9.5 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-part-6 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: replay-single. session
review-dne-part-6 RHEL 9.5 / x86_64 ran 6 tests. 1 tests failed: replay-single. session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
review-dne-zfs-part-5 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-dne-zfs-part-6 RHEL 8.10 / x86_64 ran 6 tests. 1 tests failed: replay-single. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.10 / x86_64, SLES 15.5 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 22.04 / x86_64 ran 8 tests. 2 tests failed: sanity-sec, sanity. session
review-zfs RHEL 8.10 / x86_64 ran 10 tests. 2 tests failed: replay-single, sanity-quota. session
4 optional test failure(s) — informational
build #114515 SUCCESS · tests all Maloo sessions
no vote yet: Timothy Day
patchsets: PS1 06-18 PS2 06-18 PS3 06-22
threads: 0 need your reply · 0 waiting on others · 1 own notes · 0 bot
note PS3 2026-03-11 14:48 James Simmons lustre-core.m4:6238 — Close. For upstream it should be ONFIG_LUSTRE_FS_DEBUG_PAGESTATE_TRACKING.
James Simmons PS3 · 2026-03-11 14:48
Close. For upstream it should be ONFIG_LUSTRE_FS_DEBUG_PAGESTATE_TRACKING.
owner Shaun Tancheff · uploader Shaun Tancheff · PS3 uploaded 500d ago · NEW · open in Gerrit ↗
commit message
LU-19061 debug: restore --enable-pgstate-track

Statistics on cl_page tracking of folios in system cache.

This also fixes KASAN errors related to use after free and
a crash when checking stats during umount.

Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ic84c7839b4a8ee5c74bf0249cf4920b0bf491561
47013 master J ✓B ✓T ✓R 0/2
LU-13847 test: add sanity test_64f() to ALWAYS_EXCEPT
cc John Hammond ·
stalled 105d XS +2 −0
105d
build #87303 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Mikhail Pershin, Vladimir Saveliev
patchsets: PS1 04-07 PS2 04-07 PS3 05-06
owner John Hammond · uploader John Hammond · PS3 uploaded 1643d ago · NEW · open in Gerrit ↗
commit message
LU-13847 test: add sanity test_64f() to ALWAYS_EXCEPT

sanity test_64f() fails some non zero percent of the time and no one
is working on it so add it to ALWAYS_EXCEPT.

Test-Parameters: trivial testlist=sanity
Signed-off-by: John L. Hammond <jhammond@whamcloud.com>
Change-Id: Iafc080502fe4c9f2b7be8a95f268953296d8a1e3
63175 master J ✗2B ✓T ✗1R -2/2−
LU-19692 test: track portal leak
cc Mikhail Pershin · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; janitor: test failures unique to this patch; enforced tests failed
needs rebase 2 unique failures stalled 116d S +32 −13
116d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity2@ldiskfs+DNE:test_73eNEW unique failure for this branch in the last 30 days, and was seen 2 times across 1 other branches 1 reviews
conf-sanity2@zfs:test_73eNEW unique failure for this branch in the last 30 days, and was seen 2 times across 1 other branches 1 reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. This build will be scored -1 since fortestonly was specified. session
build #120101 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov
patchsets:
+4 earlier PS1 12-26 PS2 12-26 PS3 12-27 PS4 12-28
PS5 12-29 PS6 12-29 PS7 12-29 PS8 12-29 PS9 01-02
owner Mikhail Pershin · uploader Mikhail Pershin · PS9 uploaded 305d ago · NEW · open in Gerrit ↗
commit message
LU-19692 test: track portal leak

attempt to reproduce

Test-Parameters: fortestonly testlist=conf-sanity env=ONLY=73,ONLY_REPEAT=10
Signed-off-by: Mikhail Pershin <mpershin@whamcloud.com>
Change-Id: Ie1b9f16b5049483879437a5ab7a42caefbf1ea25
29117 master J –B ✓T ✗0R -2/2−
LU-10013 llite: Atomic usage cleanups
cc Patrick Farrell · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; enforced tests failed
needs rebase stalled 292d 5 unresolved M +76 −88
292d
reviews: Alex Zhuravlev -1 2017-09-22 08:17
no vote yet: Dmitry Eremin, Arshad Hussain, Patrick Farrell
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2025-08-01 05:17 Arshad Hussain COMMIT_MSG:9 — This patch is a improvement even if it does do "There are a lot of places in Lustre where we use more than one atomic operation where one wi
Arshad Hussain PS3 · 2025-08-01 05:17
This patch is a improvement even if it does do "There are a lot of places in Lustre where we use more than one atomic operation where one will do".
reply PS3 2025-08-01 04:52 Arshad Hussain lib-lnet.h:420 — IMO, to change read + check for zero then increment like below...
Arshad Hussain PS3 · 2025-08-01 04:52
IMO, to change read + check for zero then increment like below...

ASSERT(atomic_read(&lp->lpni_refcount) > 0);
atomic_inc(&lp->lpni_refcount);

is to change to 

LASSERT(atomic_inc_not_zero(&hdev->ibh_ref));

since we do not want to always increment. But only increment if the value is not zero. Else it is error condition
reply PS3 2025-08-01 05:17 Arshad Hussain import.c:1380 — same...
Arshad Hussain PS3 · 2025-08-01 05:17
same...
reply PS3 2025-08-01 05:17 Arshad Hussain service.c:1386 — this looks correct
Arshad Hussain PS3 · 2025-08-01 05:17
this looks correct
reply PS3 2025-08-01 05:17 Arshad Hussain lquota_entry.c:126 — this is definitely a win... others also
Arshad Hussain PS3 · 2025-08-01 05:17
this is definitely a win... others also
owner Patrick Farrell · uploader Patrick Farrell · PS3 uploaded 3331d ago · NEW · open in Gerrit ↗
commit message
LU-10013 llite: Atomic usage cleanups

There are a lot of places in Lustre where we use more than
one atomic operation where one will do. The compiler can't
fix this for us, since usage of atomics is mostly exempt
from optimization.

This patch cleans up many of those cases. In a few places,
this has a measurable benefit.  (lu_object_get can use
atomic_inc_return for the ASSERT, and this nets a few %
improvement on single process reads).  The change to
osc_update_pending is expected to net a few % on shared
file workloads.

Signed-off-by: Patrick Farrell <paf@cray.com>
Change-Id: Ie2b0b4a7fac4e544a66746c95e496071765070a3
60050 master J !B ✗T –R -1/2−
LU-19162 lnet: implement simple LNet block driver
cc Timothy Day · blocked on the owner: needs rebase — checkpatch: cannot be cherry-picked; build failure
needs rebase stalled 369d L +703 −2
369d
janitor run: build failed — no tests ran — janitor results
build #114918 FAILURE
no vote yet: Serguei Smirnov
patchsets: PS1 07-07 PS2 07-07 PS3 07-07 PS4 07-09
owner Timothy Day · uploader Timothy Day · PS4 uploaded 482d ago · NEW · open in Gerrit ↗
commit message
LU-19162 lnet: implement simple LNet block driver

Implement a simple block device on-top of LNet.

This is implemented as two drivers: lnet_host.ko (client) and
lnet_target.ko (server). The target allocates an array of
pages and registers them as passive RDMAs. The host registers
a block device and devices block requests to the target as
LNetGet() and LNetPut(). There is a one-to-one mapping between
O_DIRECT block IOs and LNet network requests.

The LNet block driver aims to implement the simplest LNet
service possible. With some additional optimization, this
could serve as an alternative to LNet selftest.

Test-Parameters: ignore
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: Ic8968d37a76021939dcf082191598d7ca23c738a
60747 master J –B ✓T ✓R 0/2
LU-19238 tests: Ensure dir updates are visible
cc Oleg Drokin ·
stalled 444d S +16 −0
444d
build #115788 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-14 PS2 08-15 PS3 08-15
owner Oleg Drokin · uploader Oleg Drokin · PS3 uploaded 446d ago · NEW · open in Gerrit ↗
commit message
LU-19238 tests: Ensure dir updates are visible

This is a test for the actual fix.

Change-Id: I238171bc60586b8ae2a2d7d185b9c4ac3b70d48d
Test-Parameters: trivial testlist=parallel-scale-nfsv4,parallel-scale-nfsv3
Signed-off-by: Oleg Drokin <green@whamcloud.com>
60537 master J !B ✓T ✓R 0/2
LU-0000 lov: initial client support
cc Patrick Farrell ·
stalled 455d M +95 −12
455d
janitor run: 3 failing config(s), none unique to this patch — janitor results
3 optional test failure(s) — informational
build #115547 SUCCESS · tests all Maloo sessions
owner Patrick Farrell · uploader Patrick Farrell · PS1 uploaded 456d ago · NEW · open in Gerrit ↗
commit message
LU-0000 lov: initial client support

Initial client support for EC layouts.

A step towards allowing actually creating
EC layouts.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I0e2a5d59df04ba6f7053d889cb5f204048edf8d7
60538 master J !B ✗T –R 0/2
LU-0000 lod: initial implementation
cc Patrick Farrell · blocked on the owner: build failure
stalled 455d L +254 −81
455d
janitor run: build failed — no tests ran — janitor results
build #115548 FAILURE
owner Patrick Farrell · uploader Patrick Farrell · PS1 uploaded 456d ago · NEW · open in Gerrit ↗
commit message
LU-0000 lod: initial implementation

This is an initial and partially incorrect
implementation, which I'll be tearing up a bit
until we can actually get layout creation to
work.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I229b5751b60f8078e22dbb4ed3e2e205d3e4c9a1
50561 master J !B ✓T ✓R -1/2−
LU-16374 ldiskfs: implement backup/restore of enc files
cc Sebastien Buisson ·
stalled 456d XL +1336 −249
456d
janitor run: 2 failing config(s), none unique to this patch — janitor results
2 optional test failure(s) — informational
build #96694 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2023-08-22 19:49
no vote yet: Qian Yingjin
patchsets:
+3 earlier PS1 04-06 PS2 05-17 PS3 05-17
PS4 05-22 PS5 07-12 PS6 07-13 PS7 08-01 PS8 08-07
owner Sebastien Buisson · uploader Sebastien Buisson · PS8 uploaded 1184d ago · NEW · open in Gerrit ↗
commit message
LU-16374 ldiskfs: implement backup/restore of enc files

Add new dev/testing commands to lctl to perform backup and restore of
encrypted files at the ldiskfs level:
- lctl fscrypt backup
- lctl fscrypt restore

ldiskfs is patched to support reading encrypted files without the
encryption key, and also creating new files and writing to them
without the encryption key.

The backup phase (lctl fscrypt backup) consists in copying the source
directory or file to a backup folder. A file is opened with
O_CIPHERTEXT | O_DIRECT flags and content is copied. Then attributes
and xattrs are copied.

The restore phase (lctl fscrypt restore) consists in copying back a
file or directory to ldiskfs. A file is opened with O_TMPFILE flag in
addition to O_CIPHERTEXT | O_DIRECT, to create a temp file. After
restoring attributes and xattrs, the file is linked to the namespace
atomically, with its actual encrypted name. For directories we simply
use rename, as links on directories are not possible.

Add sanity-sec test_65 to exercise backup/restore at the ldiskfs level
via the lctl fscrypt backup/restore commands.

This patch only supports rhel8.

Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: I981a1c543819b3b097f41e4812fa82ef059e0a0c
58698 master J !B ✓T ✗3R 0/2
LU-18813 osd-wbcfs: store/pin LAST_ID and local files into MemFS
cc Qian Yingjin · blocked on the owner: enforced tests failed
stalled 573d 1 unresolved L +426 −28
573d
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
custom-1001 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
custom-1002 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
custom-1003 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
build #112346 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+1 earlier PS1 04-07
PS2 04-07 PS3 04-08 PS4 04-08 PS5 04-08 PS6 04-08
threads: 0 need your reply · 0 waiting on others · 1 own notes · 0 bot
note PS5 2025-04-08 14:03 James Simmons COMMIT_MSG:8 — sotre/store
James Simmons PS5 · 2025-04-08 14:03
sotre/store
owner Qian Yingjin · uploader Qian Yingjin · PS6 uploaded 574d ago · NEW · open in Gerrit ↗
commit message
LU-18813 osd-wbcfs: store/pin LAST_ID and local files into MemFS

The local files with the fid seq of "FID_SEQ_LOCAL_FILE" and the
"LAST_ID" for O/<seq> hierarchy should also be created and pinned
in MemFS.

Thus they will not evict from memory under the memory pressure or
manual cache shrinking command.

Test-Parameters: trivial
Test-Parameters: trivial
Test-Parameters: testlist=sanity fstype=wbcfs mdscount=1 mdtcount=1 osscount=1 ostcount=1
Test-Parameters: testlist=sanity fstype=wbcfs mdscount=1 mdtcount=1 osscount=4 ostcount=1
Test-Parameters: testlist=sanity fstype=wbcfs combinedmdsmgs=false standalonemgs=true mdscount=1 mdtcount=1 osscount=1 ostcount=1
Test-Parameters: testlist=sanity fstype=wbcfs combinedmdsmgs=false standalonemgs=true mdscount=1 mdtcount=1 osscount=4 ostcount=1
Signed-off-by: Yingjin Qian <qian@ddn.com>
Change-Id: I1bbf768f0467fff16b12896db3f4f329ae11c7f4
25901 multi-rail B ✓T ✓R 0/2
LU-9119 lnet: enable/disable multi-rail
cc Amir Shehata ·
stalled 862d L +182 −184
862d
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger
owner Amir Shehata · uploader Amir Shehata · PS3 uploaded 3525d ago · NEW · open in Gerrit ↗
commit message
LU-9119 lnet: enable/disable multi-rail

Add the ability to turn on and off multi-rail from user space.
A module parameter has been added for the same purpose.
When multi-rail is off, peers discovering the node see it as
non-multi-rail.

Test-Parameters: trivial
Signed-off-by: Amir Shehata <amir.shehata@intel.com>
Change-Id: I60f0fbb8d1b95297819bb0975bac31f1e8a5c60e
53730 master J ✗1B ✓T ✗3R 0/2
LU-10391 lnet: Add helpers for netlink initialization
cc Chris Horn · blocked on the owner: janitor: test failures unique to this patch; enforced tests failed
1 unique failure IPv6 stalled 1016d L +212 −456
1016d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@zfs:test_207seen in 4 other reviews
failed enforced testplatformdetail
custom-1001 RHEL 8.8/x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne RHEL 8.8/x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-dne-arm RHEL 8.8/aarch64, RHEL 8.8/x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
build #101520 SUCCESS · tests all Maloo sessions
patchsets: PS1 01-18 PS2 01-19
owner Chris Horn · uploader Chris Horn · PS2 uploaded 1019d ago · NEW · open in Gerrit ↗
commit message
LU-10391 lnet: Add helpers for netlink initialization

Remove some code duplication with helper routines for initalizing
the netlink/yaml API.

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Chris Horn <chris.horn@hpe.com>
Change-Id: I57fd64a37dbbde0428c26aa430e41986dba0b07b
41095 master J ✓B ✓T ✓R +1/2−
LU-10973 lnet: api_check_route works if no route
cc Cyril Bordage ·
stalled 1316d S +9 −6
1316d
build #19508 SUCCESS
reviews: Frank Sehr +1 2022-06-10 20:27 · Serguei Smirnov +1 2023-02-28 23:43 · Andreas Dilger -1 2023-03-29 03:24
no vote yet: Amir Shehata
owner Cyril Bordage · uploader Amir Shehata · PS2 uploaded 2066d ago · NEW · open in Gerrit ↗
commit message
LU-10973 lnet: api_check_route works if no route

We can use api_check_route with exception set to false even if there
is no configured route.

Test-Parameters: @lnet
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: Ib19180234b70b33dbd9f0af7ee66c978c8ddb508

Merged — last 30 days

(3)
69445 master J –B ✓T ✓R +4/2
LU-18687 llite: cleanup BDI_CAP_* flags
mine
upstream M +28 −65
13d
reviews: Arshad Hussain +1 2026-10-21 17:34 · Oleg Drokin +2 2026-10-21 17:34 · Timothy Day +1 2026-10-21 17:34
patchsets: PS1 10-06 PS2 10-06 PS3 10-07
owner James Simmons · uploader Oleg Drokin · PS4 uploaded 13d ago · MERGED · open in Gerrit ↗
commit message
LU-18687 llite: cleanup BDI_CAP_* flags

According to git commit v5.9-rc3-156-ged7b6b4f6e91 upstream
we don't need BDI_CAP_CGROUP_WRITEBACK anymore for SB_I_CGROUPWB
to function. For older kernels we need to keep it around. Also
SB_I_CGROUPWB has been around since 4.1 so we don't need the ifdef
anymore for SB_I_CGROUPWB.

For git commit 2841808f35eebfd07150333f3af3007cb2904a09 upstream
BDI_CAP_WRITEBACK_ACCT was removed. This is only needed for
wb_stat_mod() handling which is not used by lustre and also was
removed upstream. We can remove the wb_stats handling as well.
By default the Linux kernel enables a similar type of accounting
with newer kernels.

Due to these changes we can greatly simplify Lustre.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I1417eca54d9fa6b2c0e1d7d8a197146649f0b3c8
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/69445
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Timothy Day <timday@thelustrecollective.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Tested-by: Maloo <maloo@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
69444 master J –B ✓T ✓R +4/2
LU-18687 obd: cleanup kobject default groups handling
mine
upstream XS +1 −7
13d
reviews: Arshad Hussain +1 2026-10-21 17:34 · Oleg Drokin +2 2026-10-21 17:34 · Timothy Day +1 2026-10-21 17:34
patchsets: PS1 10-06 PS2 10-06
owner James Simmons · uploader Oleg Drokin · PS3 uploaded 13d ago · MERGED · open in Gerrit ↗
commit message
LU-18687 obd: cleanup kobject default groups handling

With our kobject abstraction we can simplify _get_attr_matches().
Currently if we drop it into a kernel tree this breaks the build.
Make it buildable in tree and out of tree by having
_get_attr_matches() now always walks kobj_type.default_groups[].
We can do this because our compat layer maps default_attrs of
older kernels to default_groups. 

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I8779b50f861d14310796dc2e8b49c47dab9e40cc
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/69444
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Timothy Day <timday@thelustrecollective.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
69043 master J –B ✓T ✓R +5/2
LU-18687 build: convert most cfs_timer users to the kernel API
mine
upstream M +76 −59
20d
reviews: Arshad Hussain +1 2026-10-13 04:29 · Andreas Dilger +1 2026-10-13 04:29 · Oleg Drokin +2 2026-10-13 04:29 · Timothy Day +1 2026-10-13 04:29
patchsets: PS1 09-18 PS2 09-22 PS3 09-23
owner James Simmons · uploader Oleg Drokin · PS4 uploaded 22d ago · MERGED · open in Gerrit ↗
commit message
LU-18687 build: convert most cfs_timer users to the kernel API

With the removal of pre-5.0 kernels only one difference exists
for the kernel timer API. We can simplify our code with using
the latest API directly. Only timer_container_of() is new so
add a m4 test and create a wrapper if not present. Fix an old
gnilnd bug using the wrong timer callback.

Test-Parameters: trivial
Fixes: 4b0e495e3c52 ("LU-14080 gnilnd: updates for SUSE 15 SP2")
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Iac012ec487b002f191647523e74bb5d29c1a8c64
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/69043
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Timothy Day <timday@thelustrecollective.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@thelustrecollective.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>