Gerrit Review Dashboard

James Simmons · review.whamcloud.com
updated 2026-09-17 17:29:21 UTC
10
needs action
88
longstanding
0
in CI
16
ready to land

Needs your action

10 new · 88 longstanding
58298 master J !B ✓T …R 0/2
LU-18774 lnet: SIGSEGV in lnetctl yaml parser
reviewing Frank Sehr · PS2→PS3 since your -1 — your objection was dropped
S +29 −7
11h
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131859 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Cyril Bordage, Manish Regmi, Serguei Smirnov, Chris Horn, Andreas Dilger
patchsets: PS1 03-04 PS2 08-01 PS3 09-16 Manish Regmi
your previous vote: -1 on PS2 (2025-08-06 17:21) — now at PS3
owner Frank Sehr · uploader Manish Regmi · PS3 uploaded 1d 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
Signed-off-by: Frank Sehr <fsehr@whamcloud.com>
Signed-off-by: Manish Regmi <mregmir@ddn.com>
Change-Id: I2633ee0bb5461eec25044f0ca622cfaf18e2e5a1
57877 master J !B ✓T ✗1R 0/2−
LU-8066 quota: migrate quota out of proc
mine enforced failed: review-dne-zfs-part-2
upstream 8 unresolved L +478 −363
1d
enforced failed: review-dne-zfs-part-2
Arshad Hussain voted -1
8 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-zfs-part-2 crashed RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. %% THIS TEST SESSION CRASHED %% session
build #131725 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain -1 2026-09-16 04:19
no vote yet: Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets:
+18 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
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre osd_lproc.c:524 — (style) The ldiskfs copy wraps this od_proc_entry cleanup in `#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)` but this one is ungua
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(style) The ldiskfs copy wraps this od_proc_entry cleanup in `#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)` but this one is unguarded. Harmless today, but the two should probably match so the guard can be dropped in one go later.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qmt_pool.c:202 — (defect) Same double-put as in qsd_tunables_init(): this drops the last reference, and then qmt_pool_alloc() does GOTO(out, rc) -> qpi_putre
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) Same double-put as in qsd_tunables_init(): this drops the last reference, and then qmt_pool_alloc() does GOTO(out, rc) -> qpi_putref() -> qmt_pool_free() -> qmt_pool_tunables_fini(), which puts qpi_kobj again. Leaving the put to the fini (as dt_tunables_fini() does, gated on qpi_def_attrs) would keep it balanced.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:145 — (minor) This limit predates the patch, but it reads differently now that the file lives in sysfs, where writing with `echo` is the normal th
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(minor) This limit predates the patch, but it reads differently now that the file lives in sysfs, where writing with `echo` is the normal thing to do: `echo ugp > enabled` is 4 bytes and works, while `echo none > enabled` is 5 and gets -E2BIG. Since the function is being rewritten anyway, sysfs_streq(buffer, "none") plus a slightly larger bound would accept the trailing newline.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:220 — (style) Not a bug, but qsd_wait_timeout() returns int and these used to print with %d; %u here and in verion_mismatch_timeout_show() would r
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(style) Not a bug, but qsd_wait_timeout() returns int and these used to print with %d; %u here and in verion_mismatch_timeout_show() would render a negative value as a huge number. Worth restoring %d if the patch is refreshed.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:614 — (defect) On the strscpy() error path in qsd_init(), qsd_dev is still NULL when qsd_fini() gets here, so qsd->qsd_dev->dd_lu_dev is a NULL de
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) On the strscpy() error path in qsd_init(), qsd_dev is still NULL when qsd_fini() gets here, so qsd->qsd_dev->dd_lu_dev is a NULL dereference.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:614 — (minor) The type is already known - qsd_tunables_init() is handed the server_name2index() result - so re-deriving it from ld_site->ls_top_de
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(minor) The type is already known - qsd_tunables_init() is handed the server_name2index() result - so re-deriving it from ld_site->ls_top_dev here means the two halves can disagree. During osd_device_init0() the site's top device is still the OSD itself, so lu_device_is_md() is false even on an MDT and the MD instance's `quota_slave` link is not removed by its own fini. Storing the type (or just a bool) in the qsd_instance would keep create and remove symmetrical.
reply PS23 2026-09-16 04:19 Arshad Hussain qsd_lib.c:622 — This is legit and a defect.
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) This put/wait runs unconditionally, but qsd_tunables_init() is the last thing qsd_init() does, and three earlier failures reach the same cleanup:

    qsd_init() -> GOTO(out, ...) -> qsd_fini() -> qsd_tunables_fini()

The strscpy(), server_name2fsname() and qsd_get_fsinfo() failures all land there before qsd_tunables_init() has run, so qsd_kobj and qsd_kobj_unregister are still the zeroed OBD_ALLOC_PTR memory. kobject_put() then WARNs (state_initialized == 0) and never calls the release, and wait_for_completion() adds to a swait_queue_head whose task_list is {NULL, NULL}, which faults in list_add().

dt_tunables_fini(), which this looks modelled on, keeps the put and wait inside `if (dt->dd_def_attrs)` for exactly this reason. Should the same guard be used here?
Arshad Hussain PS23 · 2026-09-16 04:19
This is legit and a defect.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:651 — (defect) Two problems in this error block:
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) Two problems in this error block:

The link is created on the parent, `sysfs_create_link(&dev->dd_kobj, ...)`, so removing it from `&qsd->qsd_kobj` is a no-op and the `quota_slave` link is left behind.

After this kobject_put() drops the last reference, qsd_init() still routes through `out:` -> qsd_fini() -> qsd_tunables_fini(), which puts qsd_kobj a second time. That is a refcount underflow on an already-released kobject.
owner James Simmons · uploader James Simmons · PS23 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-8066 quota: migrate quota out of proc

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
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
1d
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 2d 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>
57454 master J !B ✓T ✗2R 0/2
LU-18461 layout: allow to be started from zero offset.
reviewing Alexey Lyashkov · PS11→PS36 since your -1 — your objection was dropped
52 unresolved XL +1039 −39
1d
janitor run: 8 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / 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-lnet. session
build #131731 SUCCESS · tests all Maloo sessions
no vote yet: Alexander Boyko, Andreas Dilger, Mikhail Pershin, Zhenyu Xu
patchsets:
+31 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
your previous vote: -1 on PS11 (2025-07-17 17:15) — now at PS36
threads: 52 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 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 PS36 2026-09-15 22:37 Gerrit AI review for Lustre llapi_layout_pattern_get.3:51 — (minor) `llapi_join_layouts(3)` doesn't exist in the tree, so this is a dangling cross-reference.
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(minor) `llapi_join_layouts(3)` doesn't exist in the tree, so this is a dangling cross-reference.
reply PS27 2026-03-09 14:07 Alexander Boyko lustre_user.h:817 — pattern_base is more clear
Alexander Boyko PS27 · 2026-03-09 14:07
pattern_base is more clear
reply PS30 2026-05-21 21:31 Andreas Dilger lustre_user.h:32 — (minor) this should probably have `#ifndef BIT`
Andreas Dilger PS30 · 2026-05-21 21:31
(minor) this should probably have `#ifndef BIT`
reply PS30 2026-05-21 21:31 Andreas Dilger lustre_user.h:117 — (style) unnecessary
Andreas Dilger PS30 · 2026-05-21 21:31
(style) unnecessary
owner Alexey Lyashkov · uploader Alexey Lyashkov · PS36 uploaded 2d 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
68047 master J !B ✓T ✓R 0/2
LU-19768 obd: Create new framework for obd_device based Netlink
mine 1 unresolved thread(s) await your reply — last from Andreas Dilger
3 unresolved L +500 −230
1d
1 unresolved thread(s) await your reply — last from Andreas Dilger
CI green — no vote yet from Andreas Dilger, Minh, Timothy Day
2 thread(s) waiting on others
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131040 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Minh, Timothy Day
patchsets:
+18 earlier PS1 08-17 PS2 08-18 PS3 08-18 PS4 08-19 PS5 08-20 PS6 08-20 PS7 08-21 PS8 08-21 PS9 08-23 PS10 08-23 PS11 08-24 PS12 08-25 PS13 08-25 PS14 08-26 PS15 08-27 PS16 08-28 PS17 08-29 PS18 08-31
PS19 08-31 PS20 09-01 PS21 09-01 PS22 09-03 PS23 09-04
threads: 1 need your reply · 2 waiting on others · 0 own notes · 0 bot
reply PS23 2026-09-14 20:28 Andreas Dilger patchset comment — The proof will be in the follow-on patches being smaller than the existing ones. The other patch has +450 LOC for the base patch (with only
Timothy Day PS23 · 2026-09-10 12:33
Why are you working on a alternate version of the netlink patch series? What's the point?
James Simmons PS23 · 2026-09-10 13:26
Its a much simpler API than what has been developed. The other abstract doesn't buy much since its just as complicated. The goal here is to make the effort as little as possible.
Andreas Dilger PS23 · 2026-09-14 20:28
The proof will be in the follow-on patches being smaller than the existing ones.  The other patch has +450 LOC for the base patch (with only marginally more comments, not a full-on AI deluge), and this one is +270, so that is a good start.  

As we previously discussed, having a patch that implements the same functionality on top of this framework matching, say, https://review.whamcloud.com/65205 ("LU-19768 quota: add quota genetlink family") would allow an apples-to-apples comparison.
owner James Simmons · uploader James Simmons · PS23 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-19768 obd: Create new framework for obd_device based Netlink

The netlink API is very complex and each implementation has
repeated code. Create a framework to make implementation
easier and this allows more code sharing. To demostrate this
new API move the target_obd to this new framework.

This new framework actually uses the struct genl_info for its
family field which exposed some issues with older kernels.
Those issues have been fixed.

New features:

1) Enforce setup of min_dump_alloc so we never have sk_buff
   overflow. Common sizes like OBD_GENL_HDR_SIZE and
   OBD_GENL_SOURCE_SIZE are done for you. ctx->setup_keys()
   is used to do implementation specific sizing calculations.

2) Besides ensuring the obd still exist only collect obd
   devices that are attached, set up and not stopping.

3) Each source attribute is per obd device so only emit
   when the obd changes, not once per message.

4) Use Xarray instead of genradix since it has built in
   cursor handling.

5) Use of obd device's obd_minor value instead of the
   obd location string.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I06931716758cb02b353ba3ec37d08a73fb332c69
66253 master J !B ✓T ✓R 0/2
LU-19712 utils: Add only and not-pool options to lfs pool pin
reviewing Nikos Papakonstantinou · PS24→PS25 since your -1 — your objection was dropped
15 unresolved XL +1523 −160
1d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #131711 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Sebastien Buisson
patchsets:
+20 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
your previous vote: -1 on PS24 (2026-09-12 15:01) — now at PS25
threads: 15 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre COMMIT_MSG:24 — "since these are symbols exported from the shared library" looks backwards. lustre/utils/liblustreapi.map globs only `cfs_*`, `llapi_*`, `li
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
"since these are symbols exported from the shared library" looks backwards. lustre/utils/liblustreapi.map globs only `cfs_*`, `llapi_*`, `libcfs_*`, `l_ioctl`, `mdt_hash_name`, `lu_foreign_types`, `Parser_*` and ends with `local: *`, so dump_pin_object() and friends were hidden before this patch. The llapi_ prefix is what makes them match the `llapi_*` wildcard and become part of the library's exported ABI, even though they stay declared only in lustreapi_internal.h and take a `struct cYAML *` that is not public. Is exporting them intended, or should the rationale be restated?
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre COMMIT_MSG:28 — The body covers the two new options, the new llapi entry points and the renames, but the largest hunk in the patch is unmentioned: liblustre
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
The body covers the two new options, the new llapi entry points and the renames, but the largest hunk in the patch is unmentioned: liblustreapi_pcc.c replaces cYAML_build_tree() with a hand-written parser, parse_pin_xattr_advanced(), and rewrites llapi_dump_pin_object() so lustre.pin is now serialised as a single YAML flow sequence, e.g.

    [hsm: 1,pool: [p1,^p2,^any]]

That is a new on-disk encoding for lustre.pin and a new parser for attacker-settable input, so it deserves a paragraph of its own here. Should it be described, or split into its own patch ahead of the option work?
reply PS24 2026-09-05 16:49 Gerrit AI review for Lustre COMMIT_MSG:13 — (minor) The three `lfs pool pin/unpin/pin_info` option parsers also switch from `llint_lqa_name_verify()` to `llint_pool_name_verify()`, whi
Gerrit AI review for Lustre PS24 · 2026-09-05 16:49
(minor) The three `lfs pool pin/unpin/pin_info` option parsers also switch from `llint_lqa_name_verify()` to `llint_pool_name_verify()`, which is a user-visible fix rather than a rename: the LQA form only permits `_` as an extra character, so a pool name containing `-` was previously rejected (with an "LQA" diagnostic). Worth a sentence here so the hunk isn't a surprise.
reply PS24 2026-09-05 16:49 Gerrit AI review for Lustre lfs-pool-pin.1:122 — This reads as though the exclusive set can be grown, and the DESCRIPTION paragraph above only says a new *non-exclusive* pin fails with EPER
Gerrit AI review for Lustre PS24 · 2026-09-05 16:49
This reads as though the exclusive set can be grown, and the DESCRIPTION paragraph above only says a new *non-exclusive* pin fails with EPERM. `llapi_pool_pin_only_fd()` runs `pool_pin_check_constraints()` first, which returns -EPERM whenever an only_pool entry exists and the requested pool is not already among the `pool` entries, so a second `--only` pin is rejected too:

    lfs pool pin --only --pool p1 f   # [pool: [p1,^any]]
    lfs pool pin --only --pool p2 f   # EPERM, p2 is not added

Should adding another exclusive pool be allowed, or should the wording say that once a target is exclusively pinned no further pool can be added at all?
reply PS25 2026-09-15 16:50 Gerrit AI review for Lustre lfs-pool-pin.1:176 — (minor) if the patch is refreshed: every pre-existing form of the command has an example here, but the two new options do not. Something lik
Gerrit AI review for Lustre PS25 · 2026-09-15 16:50
(minor) if the patch is refreshed: every pre-existing form of the command has an example here, but the two new options do not. Something like

    $ lfs pool pin --only --pool scratch /mnt/testfs/file
    $ lfs pool pin --not-pool archive /mnt/testfs/file

would keep the section complete.
reply PS25 2026-09-15 16:50 Gerrit AI review for Lustre lfs-pool-unpin.1:157 — (minor) same as in lfs-pool-pin.1 - no example for the new --not-pool form, e.g. `lfs pool unpin --not-pool archive /mnt/testfs/file`.
Gerrit AI review for Lustre PS25 · 2026-09-15 16:50
(minor) same as in lfs-pool-pin.1 - no example for the new --not-pool form, e.g. `lfs pool unpin --not-pool archive /mnt/testfs/file`.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre lfs.c:11387 — (style) this isn't a bug, but the error string is split across two source lines; the sibling messages in this function keep theirs on one li
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
(style) this isn't a bug, but the error string is split across two source lines; the sibling messages in this function keep theirs on one line even when it runs long.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:973 — (style) this isn't a bug, but `int i;` here, `int j = i + 1; int k;` at 978, and `char *v = val; bool is_num = false;` at 1095 are declarati
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
(style) this isn't a bug, but `int i;` here, `int j = i + 1; int k;` at 978, and `char *v = val; bool is_num = false;` at 1095 are declarations after statements. Kernel/Lustre style keeps declarations at the top of their block; if the block gets too crowded for that, it is usually a sign the value-scanning loop wants to be its own helper.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:997 — Can this write one byte past `buff`?
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
Can this write one byte past `buff`?

In the unbracketed branch `end = len`, and for the last key/value pair no next-key comma is found, so `v_end = end` and `val_end = end`. `llapi_read_pin_xattr_object_fd()` calls this as

    rc = fgetxattr(fd, XATTR_LUSTRE_PIN, buff, sizeof(buff));  /* char buff[XATTR_SIZE_MAX] */
    yaml = parse_pin_xattr_advanced(buff, rc);

so `len` can be exactly XATTR_SIZE_MAX and `buff[val_end]` is `buff[XATTR_SIZE_MAX]`. setxattr() accepts a value of exactly XATTR_SIZE_MAX bytes, and a lustre.pin value that does not start with '[' and end with ']' is reachable via setfattr (sanity.sh sets lustre.pin that way).

The bracketed branch is fine because `end = len - 1`. Would rejecting `len >= XATTR_SIZE_MAX` on line 921, or reserving a byte for the terminator, close it?
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:1188 — (style) `else if` belongs on the same line as the preceding `}`.
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
(style) `else if` belongs on the same line as the preceding `}`.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:1194 — "a lone only_pool key is preserved as-is" does not round-trip. With no pool/deny_pool entry, `have_pool_tokens` is false, so the only_pool n
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
"a lone only_pool key is preserved as-is" does not round-trip. With no pool/deny_pool entry, `have_pool_tokens` is false, so the only_pool node falls through to the generic emitter and is written as

    [only_pool: name]

but parse_pin_xattr_advanced() rejects a literal only_pool key (`goto invalid` at 1092), so re-reading that attribute fails with EINVAL. It looks unreachable today because only_pool is always created alongside a pool entry and pool_unpin_update_entry() drops it when the last pool entry goes away. Should the comment say that instead, or should the emitter skip a lone only_pool?
reply PS24 2026-09-05 16:49 Gerrit AI review for Lustre liblustreapi_pcc.c:1060 — "^any" shares the same token space as a pool name, so a pool actually named `any` collides with the exclusivity marker. `llapi_pool_deny_fd(
Gerrit AI review for Lustre PS24 · 2026-09-05 16:49
"^any" shares the same token space as a pool name, so a pool actually named `any` collides with the exclusivity marker. `llapi_pool_deny_fd()` accepts it (`llint_pool_name_verify()`/`llapi_pool_name_validate()` both allow `any`, and neither pin path checks that the pool exists), and `llapi_dump_pin_object()` then writes it as a plain `^any` element.

Running the real parser/serialiser over that input:

    lfs pool pin --not-pool any f   ->  writes [pool: ^any]
    re-read of [pool: ^any]         ->  saw_any set, first_pool == NULL -> goto invalid, EINVAL

After that the attribute is unreadable by every later `lfs pool pin`, `lfs pool unpin`, `lfs pool pin_info` and `lfs pcc pin/unpin` on that file, and `lfs pool unpin --not-pool any` cannot undo it either, since it reads through the same parser. Only a raw `setfattr -x lustre.pin` recovers the file.

With other entries already present the deny is instead silently swallowed:

    [pool: [p1,^any]] + deny "any"  ->  writes [pool: [p1,^any,^any]]
    re-read                         ->  {pool=p1} {only_pool=p1}, deny rule gone

and a pre-existing `[pool: [^d1,^any]]` fails to parse outright. Should `any` be rejected as a reserved name in `llapi_pool_deny_fd()` (and documented as such in lfs-pool-pin.1), or should the marker use a spelling that cannot be a valid pool name?
owner Nikos Papakonstantinou · uploader Nikos Papakonstantinou · PS25 uploaded 3d 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, since these are symbols exported from the
shared library and the original unprefixed names were too generic for
that; --only/--not-pool themselves go through the new
llapi_pool_pin_only_fd()/llapi_pool_deny_fd()/llapi_pool_undeny_fd()
entry points instead.

Signed-off-by: Nikos Papakonstantinou <npapakonstantinou@ddn.com>
Change-Id: Icc35bf87444edd74c1fcda927cead5e3b34a0fcd
61282 master J !B ✓T ✓R 0/2−
LU-16832 lnet: add nanosecond delay latency support
carrying Sohei Koyama · Andreas Dilger voted -1
2 unresolved M +122 −63
1d
Andreas Dilger voted -1
2 unresolved thread(s) await your reply — last from Andreas Dilger
no vote yet from Chris Horn
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #131198 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-09-14 20:12
no vote yet: Chris Horn
patchsets:
+14 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
your previous vote: +1 on PS18 (2026-09-05 15:29) — now at PS19
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS19 2026-09-14 20:12 Andreas Dilger lib-types.h:1260 — Having a comment block that lists the enum field names but doesn't give them any descriptions is a waste of space.
Andreas Dilger PS19 · 2026-09-14 20:12
Having a comment block that lists the enum field names but doesn't give them any descriptions is a waste of space.
reply PS19 2026-09-14 20:12 Andreas Dilger portals.c:2871 — Makes sense to fix.
Gerrit AI review for Lustre PS19 · 2026-09-07 17:09
(minor) Two things on this line, both for whenever the patch is next refreshed.

`latency` is __u64, so `%lld` is the wrong conversion; `%ju` with a `(uintmax_t)` cast would match the rest of this format string.

More visibly, the value printed here is now nanoseconds when the rule came back over Netlink, but the old_api path below still assigns seconds from attr.u.delay.la_latency, and `lctl net_delay_add -l` is still seconds. So `-l 5` followed by `net_delay_list` reports "latency 5000000000" against a current kernel and "latency 5" against a pre-Netlink one, under the same label. Would it be clearer to convert back to seconds here, or to spell the unit out in the output?
Andreas Dilger PS19 · 2026-09-14 20:12
Makes sense to fix.
owner Sohei Koyama · uploader James Simmons · PS19 uploaded 10d 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
u64 nanoseconds and plumbs it so that sub-second delays
(s/ms/us/ns) 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. The internal timer is moved to hrtimer for
finer level of time resolution.

Test-Parameters: trivial
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I9ed1bd34cef0f0bf647f87d17dd68f05274e2b28
66886 master J !B ✓T ✓R 0/2
LU-18687 build: iov_iter_iovec to iter_iov_len, iter_iov_addr
carrying Shaun Tancheff · 7 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
7 unresolved M +42 −31
2d
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 3d 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
68412 master J ✗3B ✓T ✓R 0/2
LU-12514 utils: Build a real mount.lustre_tgt in a build tree
reviewing Xiao Yang · PS1→PS6 since your -1 — your objection was dropped
M +60 −14
5d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity3@zfs:test_907seen in 60 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
sanityn@ldiskfs+DNE:test_71aseen in 62 other reviews
build #131611 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+1 earlier PS1 08-26
PS2 09-03 PS3 09-04 PS4 09-08 PS5 09-10 PS6 09-11
your previous vote: -1 on PS1 (2026-08-26 14:39) — now at PS6
owner Xiao Yang · uploader Xiao Yang · PS6 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-12514 utils: Build a real mount.lustre_tgt in a build tree

mount.lustre reads the fstype from argv[0], but in a build tree it
is a libtool wrapper that execs the hard-coded .libs/lt-mount.lustre,
so a mount.lustre_tgt symlink to it quietly mounts with '-t lustre'.
Build a real one for the build tree, under 'if TESTS' since only the
tests use it; keep installing a symlink, from install-data-hook,
which runs after mount.lustre is installed, and remove it from
uninstall-hook.

Update load_modules_local() to point /sbin/mount.lustre_tgt at the
build tree's mount.lustre_tgt, or at mount.lustre when there is
none, unless it points there already. Whatever was there is saved
first, or a .nonex marker left if there was nothing, so that
unload_modules_local() can restore the node. The old cleanup sat in
unload_modules(), which remote nodes never run.

Fixes: 58adf0b4aaf1 ("LU-12514 tests: add testing for lustre_tgt type")
Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: I1ffdfafa0a127ba12b371e61d14a2ce49389f9bf
63767 master J ✗1B ✓T ✗4R 0/2
LU-20108 sec: support fscrypt natively for Linux 5.15
mine janitor: 1 test failure unique to this patch — runtests@ldiskfs+DNE:test_1
1 unique failure upstream 18 unresolved L +474 −208
6d
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 7d 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>

Longstanding (signal older than a week)

(88)
60112 master J !B ✓T ✗3R 0/2
LU-19167 lnet: add corrupt fault injection
reviewing Manish Regmi · PS6→PS13 since your -1 — your objection was dropped
6 unresolved XL +1037 −11
3h
janitor run: 4 failing config(s), none unique to this patch — janitor results
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-lfsck. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 8 tests. 1 tests failed: lnet-selftest. session
build #131812 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger, Oleg Drokin
patchsets:
+8 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
your previous vote: -1 on PS6 (2026-05-24 14:27) — now at PS13
threads: 5 need your reply · 0 waiting on others · 1 own notes · 0 bot
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-03 12:23 Gerrit AI review for Lustre lnetctl.8:524 — (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
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`.
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 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 · PS13 uploaded 14d 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 an LNet selftest for the corruption feature.

Assisted-By: Codex:5.6-Sol
Test-Parameters: testlist=corrupt-fault
Signed-off-by: Manish Regmi <mregmi@ddn.com>
Change-Id: Ib4972807a48c185043f335d030d266ed3cad7e1e
66083 master J !B ✓T ✓R 1/2
LU-20221 lnet: fix panic in lnet_net_show_dump with >128 NIDs
carrying Malkeet Singh · 3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
4 unresolved M +142 −3
1d
3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
no vote yet from Robert Read, Serguei Smirnov, Alexander Zarochentsev, Chris Horn
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #130713 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-31 14:06
no vote yet: Robert Read, Serguei Smirnov, Alexander Zarochentsev, Chris Horn, Andreas Dilger, Oleg Drokin, Timothy Day
patchsets:
+14 earlier PS1 05-22 PS2 07-02 PS3 07-02 PS4 07-03 PS5 07-08 PS6 07-09 PS7 08-13 James Simmons PS8 08-13 James Simmons PS9 08-14 James Simmons PS10 08-14 James Simmons PS11 08-20 James Simmons PS12 08-21 James Simmons PS13 08-23 James Simmons PS14 08-24 James Simmons
PS15 08-26 James Simmons PS16 08-27 James Simmons PS17 08-27 James Simmons PS18 08-27 James Simmons PS19 08-31 James Simmons
your previous vote: +1 on PS18 (2026-08-28 15:21) — now at PS19
threads: 3 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS19 2026-08-31 22:48 Gerrit AI review for Lustre COMMIT_MSG:21 — (typo) The test added by this patch is `test_113`, not `test_630`, so the message no longer greps against the code.
Gerrit AI review for Lustre PS19 · 2026-08-31 22:48
(typo) The test added by this patch is `test_113`, not `test_630`, so the message no longer greps against the code.

Also "interace" on the next line.
reply PS19 2026-08-31 22:48 Gerrit AI review for Lustre sanity-lnet.sh:2070 — (style) This isn't a bug, but the `case` is at the same indent as the enclosing `for` body while `esac` is one tab deeper. Both should line
Gerrit AI review for Lustre PS19 · 2026-08-31 22:48
(style) This isn't a bug, but the `case` is at the same indent as the enclosing `for` body while `esac` is one tab deeper. Both should line up one tab inside the loop.
reply PS19 2026-08-31 22:48 Gerrit AI review for Lustre sanity-lnet.sh:2072 — (defect) These rules name `tcp$i` while the nets above are created as `${NETTYPE}$i`. The guard at the top of the test only requires `tcp*`,
Gerrit AI review for Lustre PS19 · 2026-08-31 22:48
(defect) These rules name `tcp$i` while the nets above are created as `${NETTYPE}$i`. The guard at the top of the test only requires `tcp*`, so with `NETTYPE=tcp1` the nets are `tcp11`..`tcp1140` and none of the UDSP rules match anything.
owner Malkeet Singh · uploader James Simmons · PS19 uploaded 17d ago · NEW · open in Gerrit ↗
commit message
LU-20221 lnet: fix panic in lnet_net_show_dump with >128 NIDs

Dumping more than ~128 NIDs at high verbosity exhausts the hardcoded
64 KiB Netlink buffer. When the buffer is full, nla_nest_start()
returns NULL. The code previously failed to check this return value,
resulting in a NULL pointer dereference and an immediate kernel panic.

This patch fixes the crash by specifying the needed sk buffer size.
cb->min_dump_alloc is now dynamically sized based on
lnet_net_size_skb().
While strace profiling shows a typical NI payload takes ~480-520 bytes,
NI_MSG_VALUES_SIZE is set to more than 6Kb bytes. This provides
a safe margin for complex UDSP rulesets and massive IPv6 NIDs.

test_630 is added to sanity-lnet.sh to exercise high-stress
Netlink dumps using 140 LNet nets using the same interace and 50
UDSP policies.

Test-parameters: trivial
Fixes: 8f64231185a9 ("LU-9680 utils: fix nested attribute handling in liblnetconfig")
Signed-off-by: Malkeet Singh <masingh@ddn.com>
Change-Id: If8b55d87c13e3a14cb0335108dd3afedbc7a6c5f
66739 master J !B ✓T ✓R 1/2
LU-19921 sec: add disable_rootsquash mount option
reviewing wangdi · PS1→PS55 since your -1 — your objection was dropped
L +280 −43
6d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #131215 SUCCESS · tests all Maloo sessions
reviews: Sebastien Buisson +1 2026-09-07 15:34
no vote yet: Andreas Dilger
patchsets:
+50 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
your previous vote: -1 on PS1 (2026-06-18 21:52) — now at PS55
owner wangdi · uploader wangdi · PS55 uploaded 10d 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
66551 master J !B ✓T ✗1R 0/2
LU-1158 general: convert timestamps to nanoseconds
reviewing Sohei Koyama · PS6→PS8 since your -1 — your objection was dropped
31 unresolved XL +1296 −384
6d
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 #131490 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+3 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
your previous vote: -1 on PS6 (2026-08-05 15:42) — now at PS8
threads: 30 need your reply · 0 waiting on others · 1 own notes · 0 bot
reply PS5 2026-07-01 02:34 Sohei Koyama COMMIT_MSG:35 — Yes. The interop support has not been implemented in this series yet. (Sorry, the commit message was wrong)
Andreas Dilger PS5 · 2026-06-30 21:52
I guess based on your other comments that this has *not* been implemented yet?  If that is the case then I don't think this patch can land until the interop code is finished.  Otherwise, this patch will break interop testing for master and there is a risk that the interop patch is not completed before the 2.18.0 release, which would be a major problem for sites trying to upgrade to this release.
Sohei Koyama PS5 · 2026-07-01 02:34
Yes. The interop support has not been implemented in this series yet. (Sorry, the commit message was wrong)

I am currently working on it and testing it, based on the previous compatibility work (https://review.whamcloud.com/c/fs/lustre-release/+/63517 ). However, as I go through the validation, I am finding additional cases that were not sufficiently considered, so I do not yet have a reliable estimate for when it will be complete.

I agree that this patch should not land until the interop code is implemented and tested. Otherwise it could break master interop testing and create problems for sites upgrading to 2.18.0, as you pointed out.
reply PS6 2026-08-03 22:15 Gerrit AI review for Lustre COMMIT_MSG:27 — The ofd_attr_set() hunk keeping `ofo_atime_ondisk` in sync isn't described here, and it isn't a units change - it is an independent fix for
Gerrit AI review for Lustre PS6 · 2026-08-03 22:15
The ofd_attr_set() hunk keeping `ofo_atime_ondisk` in sync isn't described here, and it isn't a units change - it is an independent fix for stale cached atime from 7c9ce8aac9e8 ("LU-13383 ofd: lazy atime update"). Could it be split into its own patch with a Fixes: tag so it can land separately?

The hui_* LASSERTF reordering in both wiretest.c copies is also unexplained; see the comment there.
reply PS6 2026-08-03 22:15 Gerrit AI review for Lustre COMMIT_MSG:33 — (minor) The body doesn't mention `sb->s_time_gran = 1` in client_common_fill_super(). That is a fairly central part of the change - without
Gerrit AI review for Lustre PS6 · 2026-08-03 22:15
(minor) The body doesn't mention `sb->s_time_gran = 1` in client_common_fill_super(). That is a fairly central part of the change - without it current_time() keeps truncating to whole seconds, so nothing the client generates locally would ever carry a sub-second value. Worth a line in the "sinks" bullet.
reply PS7 2026-08-18 13:15 Gerrit AI review for Lustre COMMIT_MSG:37 — This changes the interpretation of several wire fields (ost_lvb, mdt_body, mdt_rec_*), so it should carry a Test-Parameters: line requesting
Gerrit AI review for Lustre PS7 · 2026-08-18 13:15
This changes the interpretation of several wire fields (ost_lvb, mdt_body, mdt_rec_*), so it should carry a Test-Parameters: line requesting interop runs against an older peer, e.g.

    Test-Parameters: clientversion=2.15 testlist=sanity,sanityn
    Test-Parameters: serverversion=2.15 testlist=sanity,sanityn

Without it the mixed-version paths this patch changes are never exercised by the automated test runs.
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre COMMIT_MSG:38 — (minor) s64 nanoseconds since the epoch runs out at 2262-04-11 23:47:16 UTC (S64_MAX / NSEC_PER_SEC = 9223372036 s), not 2292 - this is the
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(minor) s64 nanoseconds since the epoch runs out at 2262-04-11 23:47:16 UTC (S64_MAX / NSEC_PER_SEC = 9223372036 s), not 2292 - this is the usual ktime_t limit. Worth correcting, since that number is the bound on what the new representation can hold.
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre COMMIT_MSG:45 — (minor) The client advertisement is added by this patch: client_common_fill_super() gains OBD_CONNECT_NANOSEC_TIME for both the MDC and the
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(minor) The client advertisement is added by this patch: client_common_fill_super() gains OBD_CONNECT_NANOSEC_TIME for both the MDC and the OSC connect flags. "already advertised by clients" reads as if it came from an earlier change.
reply PS5 2026-06-30 21:52 Andreas Dilger patchset comment — Sohei, there *must* be compatibility between at least old/new clients/servers. This should use the `OBD_CONNECT_NANOSEC_TIME` flag to deter
Sohei Koyama PS5 · 2026-06-30 07:00
Hi Andreas and James,

I’d like to discuss this patch with you.

This patch does not currently include any compatibility support. For example, timestamps will break in configurations such as an ns-unaware MDS/OSS with an ns-aware client, or an ns-aware MDS/OSS with an ns-unaware client.

I’d like to discuss the following two points:

1. Whether a compatibility patch is necessary. For example, couldn't we avoid the need for a compatibility patch by merging this patch right before the release?

2. How far we should go in supporting compatibility. For example, should we also consider communication between an ns-aware MDS and an ns-unaware MDS? If so, the required patch would become quite large.

Best regards,
Sohei
Andreas Dilger PS5 · 2026-06-30 21:52
Sohei, there *must* be compatibility between at least old/new clients/servers.  This should use the `OBD_CONNECT_NANOSEC_TIME` flag to determine if the clients are sending nsec or sec timestamps.  This had been part of the other nanosecond timestamp patches, so I had assumed it is part of this series as well.

Even if the patch was landed right before a release, there is no requirement/guarantee that clients and servers are upgraded together.  We require at least interop between successive LTS releases (e.g. 2.15.latest to 2.18.0), but prefer interop for longer than this if possible (e.g. 2.14.x or earlier).

There does not need to be major version interoperability between different MDS versions because they are typically upgraded together, but if this is practical to implement (i.e. it uses mostly the same code as client interoperability) it would be good to have this as well.
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 PS7 2026-08-18 13:15 Gerrit AI review for Lustre lustre_idl.h:905 — OBD_CONNECT_NANOSEC_TIME is missing from MDT_CONNECT_SUPPORTED here, and from OST_CONNECT_SUPPORTED below.
Gerrit AI review for Lustre PS7 · 2026-08-18 13:15
OBD_CONNECT_NANOSEC_TIME is missing from MDT_CONNECT_SUPPORTED here, and from OST_CONNECT_SUPPORTED below.

The client asks for it in client_common_fill_super(), but both servers unconditionally strip unsupported bits from the reply:

    mdt_connect_internal():  data->ocd_connect_flags &= MDT_CONNECT_SUPPORTED;
    ofd_parse_connect_data(): data->ocd_connect_flags &= OST_CONNECT_SUPPORTED;

so the bit is cleared on every connect and exp_connect_nanosec_time()/imp_connect_nanosec_time() return false even when both peers are new. Should the two masks be extended in this patch, so the follow-on compatibility patch has a flag that can actually be negotiated?
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre cl_object.h:134 — (minor) The matching comments on struct lu_attr's la_mtime/la_atime/la_ctime/la_btime in lustre/include/lu_object.h still read "in seconds s
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(minor) The matching comments on struct lu_attr's la_mtime/la_atime/la_ctime/la_btime in lustre/include/lu_object.h still read "in seconds since Epoch". Those fields change units in this patch too, and the follow-on rename patch leaves the comments alone as well.
reply PS5 2026-06-30 21:52 Andreas Dilger lustre_export.h:405 — I guess I had assumed when seeing these functions checking `OBD_CONNECT_NANOSEC_TIME` that the protocol interop was implemented.
Andreas Dilger PS5 · 2026-06-30 21:52
I guess I had assumed when seeing these functions checking `OBD_CONNECT_NANOSEC_TIME` that the protocol interop was implemented.
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre obd_class.h:477 — (style) These are defined in obdclass/obdo.c right next to lustre_set_wire_obdo()/lustre_get_wire_obdo(), whose prototypes live in lustre_ob
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(style) These are defined in obdclass/obdo.c right next to lustre_set_wire_obdo()/lustre_get_wire_obdo(), whose prototypes live in lustre_obdo.h. Declaring the new pair there would keep the obdo wire helpers together - not a bug, just placement.
owner Sohei Koyama · uploader Sohei Koyama · PS8 uploaded 7d 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 so that current_time() keeps
  the sub-second part for locally generated timestamps.
- sinks: the stat/statx paths convert the s64 nanosecond value
  back to a timespec64 with the standard ns_to_timespec64()
  (and ktime_to_timespec64() for ktime_t sources).
- 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.
- the llog object mtime keeps its once-per-second update filter
  and is stored scaled to nanoseconds.

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 up to year 2292.

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.

Negotiate OBD_CONNECT_NANOSEC_TIME on the MDT and OST connections
(it is already advertised by clients) 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.

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 and the ofd reply handlers).

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-ns.sh, a configuration-aware test suite that verifies
timestamps warm and cold, including near-epoch and boundary values
(pre-1970, y2038), 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.  It is
added to the regression test group.

Assisted-by: ClaudeCode:Fable-5.1
Test-Parameters: testlist=sanity-ns
Test-Parameters: mdscount=2 mdtcount=4 testlist=sanity-ns
Test-Parameters: ostcount=4 testlist=sanity-ns
Test-Parameters: fstype=zfs testlist=sanity-ns
Test-Parameters: fstype=zfs mdscount=2 mdtcount=4 testlist=sanity-ns
Test-Parameters: clientcount=2 testlist=sanity-ns
Test-Parameters: serverversion=2.16 testlist=sanity-ns
Test-Parameters: serverversion=2.15 mdscount=2 mdtcount=4 testlist=sanity-ns
Test-Parameters: clientcount=2 serverversion=2.16 testlist=sanity-ns
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"
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I79570bc5a66e7c15472af90d690d689d3aa36269
56434 master J !B ✓T ✗1R 3/2
LU-18231 obd: change obd_recovery_expired into OBDF_RECOVERY_EXPIRED
carrying Ronnie Sahlberg · enforced failed: review-dne-zfs-part-6
S +10 −12
7d
janitor run: 6 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-6 RHEL 9.7 / x86_64 ran 4 tests. 2 tests failed: ost-pools, replay-single. session
build #131250 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-07 14:18 · Arshad Hussain +1 2026-09-07 14:18 · Timothy Day +1 2026-09-10 16:04
no vote yet: Andreas Dilger
patchsets:
+5 earlier PS1 09-20 PS2 09-20 PS3 09-20 PS4 10-01 PS5 10-02 Andreas Dilger
PS6 08-03 James Simmons PS7 08-25 James Simmons PS8 08-25 James Simmons PS9 09-03 James Simmons PS10 09-07 James Simmons
your previous vote: +1 on PS9 (2026-09-03 18:50) — now at PS10
owner Ronnie Sahlberg · uploader James Simmons · PS10 uploaded 10d ago · NEW · open in Gerrit ↗
commit message
LU-18231 obd: change obd_recovery_expired into OBDF_RECOVERY_EXPIRED

obd_recovery_expired is set from interrupt context and
was moved to a dedicated bitfield variable in
commit 848d709605948 ("b=17760 Separate locking for obd
bitfield and recovery") as to avoid having to use locking
from within the interrupt context.

As we now have migrated to use atomic {test|set|clear}_bit
operations to set individual bits we no longer depend on
spinlocks when accessing them and can thus move this bit
back into the bitmap.

Signed-off-by: Ronnie Sahlberg <rsahlberg@whamcloud.com>
Change-Id: I81a2a7efc057b67cdfd82ca978116d44bbca82b8
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
9d
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 10d 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 0/2−
LU-14291 utils: don't build gss server utilies for clients
mine needs rebase — checkpatch: cannot be cherry-picked
5 unresolved S +11 −6
10d
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 80d 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
37013 master J ✗1B ✓T ✗2R 0/2
LU-9868 llite: use d_splice_alias for directories.
mine janitor: 1 test failure unique to this patch — sanity-slow@zfs:test_64b
1 unique failure upstream 10 unresolved M +43 −11
11d
janitor: 1 test failure unique to this patch — sanity-slow@zfs:test_64b
enforced failed: review-dne-zfs-part-2, review-dne-zfs-part-4
10 unresolved thread(s) await your reply — last from Oleg Drokin
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-slow@zfs:test_64bseen in 3 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-zfs-part-4 crashed RHEL 9.7 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. %% THIS TEST SESSION CRASHED %% session
build #131086 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Lai Siyao, Neil Brown, Andreas Dilger, Alex Zhuravlev, Oleg Drokin
patchsets:
+26 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
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS28 2026-07-23 02:10 Oleg Drokin COMMIT_MSG:39 — I think this is basically a change to the fixture of Lustre since the beginning of time so there's nothing to declare here?
Andreas Dilger PS28 · 2026-07-22 23:04
Should this get a `Fixes:` label?
Oleg Drokin PS28 · 2026-07-23 02:10
I think this is basically a change to the fixture of Lustre since the beginning of time so there's nothing to declare here?
reply PS31 2026-07-24 08:25 Gerrit AI review for Lustre COMMIT_MSG:21 — (minor) The double-iput fix described here lands in revalidate_statahead_dentry(), not ll_statahead_interpret(). The latter only igrab()s th
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.
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre COMMIT_MSG:51 — (minor) Not a bug, but is "both of them consequences of the OBF namespace" complete? d_lustre_invalidate() only sets a flag (llite_internal.
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(minor) Not a bug, but is "both of them consequences of the OBF namespace" complete? d_lustre_invalidate() only sets a flag (llite_internal.h), so a directory renamed on another client keeps its old-parent dentry hashed and on the inode alias list. A later lookup of the new path then gets that alias from __d_find_any_alias(), with a different d_parent and no .lustre/fid anywhere in the picture, so it takes the same cross-parent __d_unalias() trylock path and the same -ESTALE.

That is ordinary d_splice_alias() semantics and not a reason to change the patch, but as written the paragraph reads as if the by_fid test bounds the new -ESTALE exposure, and it doesn't.
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 PS28 2026-07-23 02:10 Oleg Drokin namei.c:637 — after some more thinking, this looks wrong.
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)
reply PS31 2026-07-24 08:25 Gerrit AI review for Lustre namei.c:637 — (defect) For regular files this throws away a still-usable alias instead of reusing it. Before this patch ll_find_alias()'s invalid alias wa
Gerrit AI review for Lustre PS31 · 2026-07-24 08:25
(defect) For regular files this throws away a still-usable alias instead of reusing it. Before this patch ll_find_alias()'s invalid alias was always d_move()'d and reused; a d_lustre_invalid() dentry just means the LOOKUP lock was dropped, which is the common case. Now every non-directory lookup that finds such an alias discards it (d_invalidate() + dput()) and re-adds a fresh dentry via d_add().

An open note on an earlier patchset raised the same doubt and is still unresolved. Should the discard be gated on the by_fid / directory case only, leaving regular-file aliases to be reused as before?
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre namei.c:655 — (style) This isn't a bug, but %pd prints the raw name and bypasses the filename obfuscation that obd_enable_fname_encoding controls. The res
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(style) This isn't a bug, but %pd prints the raw name and bypasses the filename obfuscation that obd_enable_fname_encoding controls. The rest of namei.c uses DNAME with encode_fn_dentry(), e.g.

    "cannot splice inode %p as "DNAME": rc = %d\n", inode, encode_fn_dentry(de), ...
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre namei.c:665 — (nit) de cannot be NULL here - the argument is never NULL and the else branch only reassigns it when d_splice_alias() returned non-NULL - so
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(nit) de cannot be NULL here - the argument is never NULL and the else branch only reassigns it when d_splice_alias() returned non-NULL - so IS_ERR_OR_NULL() is just IS_ERR(). It also reads oddly next to the plain !IS_ERR(de) guard a few lines below; if the patch is refreshed anyway, making both the same would help.
reply PS33 2026-09-04 22:14 Misc Code Checks Robot (Gatekeeper helper) namei.c:679 — warn: ll_splice_alias():'de' can also be NULL
Misc Code Checks Robot (Gatekeeper helper) PS33 · 2026-09-04 22:14
warn: ll_splice_alias():'de' can also be NULL
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre namei.c:800 — (minor) This comment now says the opposite of what the code requires: d_splice_alias() opens with BUG_ON(!d_unhashed(de)), and the commit me
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(minor) This comment now says the opposite of what the code requires: d_splice_alias() opens with BUG_ON(!d_unhashed(de)), and the commit message spends a paragraph establishing that no caller ever hands over a hashed dentry. Worth rewording while it is being touched (and it carries two typos, "Atoimc" and "passin").
owner James Simmons · uploader Oleg Drokin · PS33 uploaded 12d 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 -- the useful
      direction, but a direction 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 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
68228 master J !B ✓T ✓R 0/2
LU-11850 lov: create Netlink interface for pools
mine 18 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
19 unresolved XL +973 −262
12d
18 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: 4 failing config(s), none unique to this patch — janitor results
build #130976 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-23 PS2 08-28 PS3 09-01 PS4 09-03
threads: 18 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 lustre_kernelcomm.h:233 — (typo) The kernel-doc name doesn't match the enum: `lustre_pool_props_attrs` here vs `lustre_pool_prop_attrs` below, and there is no " - des
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(typo) The kernel-doc name doesn't match the enum: `lustre_pool_props_attrs` here vs `lustre_pool_prop_attrs` below, and there is no " - description" after the name. kernel-doc warns:

    lustre_kernelcomm.h:248: expecting prototype for enum lustre_pool_props_attrs. Prototype was for enum lustre_pool_prop_attrs instead

The same slip already exists for lustre_target_prop_attrs, so it looks copied from there - as is the LUSTRE_POOL_ATTR_SOURCE description "obd device targets belong too", which describes targets rather than pools.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre lov_pool.c:306 — (style) This isn't a bug, but `s` is read from `file->private_data` before seq_open() has set it and then reassigned two lines later - the i
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(style) This isn't a bug, but `s` is read from `file->private_data` before seq_open() has set it and then reassigned two lines later - the initializer can just be dropped.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre lov_pool.c:385 — (typo) The reference is now held for the debugfs entry rather than a /proc file.
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(typo) The reference is now held for the debugfs entry rather than a /proc file.
reply PS4 2026-09-04 12:51 Gerrit AI review for Lustre lov_pool.c:138 — (minor) The kernel-doc headers were not renamed along with the functions. contrib/scripts/kernel-doc reports four warnings on this file now:
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(minor) The kernel-doc headers were not renamed along with the functions. contrib/scripts/kernel-doc reports four warnings on this file now:

    lov_pool.c:154: expecting prototype for pool_proc_next(). Prototype was for pool_seq_next() instead
    lov_pool.c:192: expecting prototype for pool_proc_start(). Prototype was for pool_seq_start() instead
    lov_pool.c:243: expecting prototype for pool_proc_stop(). Prototype was for pool_seq_stop() instead
    lov_pool.c:270: expecting prototype for pool_proc_show(). Prototype was for pool_seq_show() instead

The /proc wording in those blocks ("/proc sequence file iteration tracking structure", "Start seq_file iteration via /proc", "inode to store iteration state for /proc") is also stale now that these back a debugfs file.
reply PS4 2026-09-04 12:51 Gerrit AI review for Lustre lov_pool.c:636 — (style) This isn't a bug, but the commented-out call here and the matching one in lustre_pools_end_cb() read as work-in-progress. Lustre C f
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(style) This isn't a bug, but the commented-out call here and the matching one in lustre_pools_end_cb() read as work-in-progress. Lustre C files also avoid // comments. Can they come out before this lands?
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?
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:699 — (defect) On the -EMSGSIZE path `hdr` is neither ended nor cancelled, so genlmsg_end() never runs and `nlh->nlmsg_len` still covers only the
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(defect) On the -EMSGSIZE path `hdr` is neither ended nor cancelled, so genlmsg_end() never runs and `nlh->nlmsg_len` still covers only the fixed header.

The LUSTRE_PARAM_ATTR_HDR/SOURCE attributes already appended to the skb therefore sit past `nlmsg_len`, and userspace reads those bytes as the start of the next nlmsghdr.
reply PS3 2026-09-01 18:46 Misc Code Checks Robot (Gatekeeper helper) kernelcomm.c:714 — warn: lustre_obd_genl_many_dump():inconsistent returns '&(ctx->ogc_xas.xa)->xa_lock'.
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-09-01 18:46
warn: lustre_obd_genl_many_dump():inconsistent returns '&(ctx->ogc_xas.xa)->xa_lock'.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:1445 — (minor) The `! ` prefix is skipped but nothing ever negates the match - lov_pool_list() just does `glob_match(poolname, pool->pool_name)`, s
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(minor) The `! ` prefix is skipped but nothing ever negates the match - lov_pool_list() just does `glob_match(poolname, pool->pool_name)`, so `! foo` selects the same pools as `foo`. No other parameter path in the tree uses a `! ` prefix either. Is the exclusion meant to be implemented, or can this come out?
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:1540 — (defect) `all` is fixed at three slots, but `start` ends up declaring one NLA_NESTED attribute per pool, and lnet_genl_parse_list() consumes
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(defect) `all` is fixed at three slots, but `start` ends up declaring one NLA_NESTED attribute per pool, and lnet_genl_parse_list() consumes one sub-list from `data[]` for each NLA_NESTED key it emits:

    rc = lnet_genl_parse_list(msg, data, ++idx);
    idx = rc;

With two pools the second nested key looks at `data[2]`, which is NULL, so parse_list() returns 0 without emitting anything and resets `idx` to 0; the third nested key then re-uses `data[1]`. lustre_stats_dump() allocates `ls_num + 2` and fills `all[1..ls_num]` for exactly this reason.

Should this be `pool_count + 2` with `all[1..pool_count]` all pointing at `props`? lustre_pools_free_keys() hard-codes 3 in its OBD_FREE_PTR_ARRAY() as well.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:1554 — (defect) `lkl_list[]` is a flexible array member, so it is not counted by `sizeof(struct ln_key_list)` and this assignment copies only `lkl_
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(defect) `lkl_list[]` is a flexible array member, so it is not counted by `sizeof(struct ln_key_list)` and this assignment copies only `lkl_maxattr` - the `pools` and `source` entries stay zeroed from the OBD_ALLOC.

Compiling against the real header gives `sizeof(struct ln_key_list)` = 8 and `sizeof(struct ln_key_props)` = 16, and after `*start = pool_keys` both `lkl_list[1].lkp_value` and `lkl_list[2].lkp_value` are NULL.

lnet_genl_parse_list() then emits those two keys with no LN_SCALAR_ATTR_VALUE and NLA_UNSPEC as the type, so the reply carries no `pools`/`source` names and llapi_param_display_value() never dispatches to print_out_pools(). This branch is taken as soon as `pool_count > 1`, so does `lfs pool_list` still work on a filesystem with two pools?

Would copying `hdr_len + sizeof(struct ln_key_props) * (LUSTRE_POOL_ATTR_MAX + 1)` bytes from `pool_keys` work here instead of the struct assignment?
owner James Simmons · uploader James Simmons · PS4 uploaded 13d 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
57948 master J !B ✓T ✗2R 1/2−
LU-18689 ptlrpc: ensure import exist for sec debugfs files
carrying Oleg Drokin · needs rebase — checkpatch: cannot be cherry-picked
M +63 −55
13d
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 433d 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
68164 master J ✓B ✓T ✓R 0/2
LU-20587 lnet: expand Netlink support for more peers
mine 10 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
10 unresolved M +114 −0
18d
10 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green — no vote yet from Serguei Smirnov, Alexey Lyashkov, Chris Horn
build #130603 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Alexey Lyashkov, Chris Horn
patchsets: PS1 08-20 PS2 08-27 PS3 08-27 PS4 08-29
threads: 10 need your reply · 0 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 COMMIT_MSG:10 — (typo) "for it struct sk_buf" - the type is `struct sk_buff`, and "it" should be "its". Same misspelling on the line below.
Gerrit AI review for Lustre PS3 · 2026-08-28 13:13
(typo) "for it struct sk_buf" - the type is `struct sk_buff`, and "it" should be "its". Same misspelling on the line below.
reply PS3 2026-08-28 13:13 Gerrit AI review for Lustre api-ni.c:7695 — (style) Not a bug, but 2580 has no derivation in the source, so it silently goes stale the next time an attribute is added to lnet_peer_ni_k
Gerrit AI review for Lustre PS3 · 2026-08-28 13:13
(style) Not a bug, but 2580 has no derivation in the source, so it silently goes stale the next time an attribute is added to lnet_peer_ni_keys/lnet_peer_ni_list. Same for the literals below: 64 is LNET_NIDSTR_SIZE and the 128 in the version 4 comment is LNET_MAX_SHOW_NUM_NID - using the macros would at least keep them tied to what they measure.
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:7698 — (typo) LNET_GENL_VERION -> LNET_GENL_VERSION.
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(typo) LNET_GENL_VERION -> LNET_GENL_VERSION.
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:7870 — (defect) Skipping the peer NI walk for version 0 undercounts, because the dump still emits per peer NI at version 0. In lnet_peer_ni_show_du
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(defect) Skipping the peer NI walk for version 0 undercounts, because the dump still emits per peer NI at version 0. In lnet_peer_ni_show_dump() the `if (gnlh->version)` guard only covers the credits/stats block; the nest, LNET_PEER_NI_LIST_ATTR_NID and LNET_PEER_NI_LIST_ATTR_STATE are written for every version:

    nid_list = nla_nest_start(msg, LNET_PEER_NI_ATTR_PEER_NI_LIST);
    while ((lpni = lnet_get_next_peer_ni_locked(lp, NULL, lpni)) != NULL) {
            struct nlattr *peer_nid = nla_nest_start(msg, count++);
            nla_put_string(msg, LNET_PEER_NI_LIST_ATTR_NID, ...);

That is 4 + nla_total_size(strlen(nid) + 1) + nla_total_size(5) per peer NI, plus 4 for the nid_list nest, none of which appears in PEER_VERSION_0_VALUES_MSG_SIZE.

For a peer with a 17-character NID: 20 (genl header) + 24 (primary nid) + 4 (multirail) + 4 (nest) + 40 per peer NI. One NI is 92 and fits in 136; three NIs is 172 and does not. Longer NIDs push the single-NI case over as well.

Version 0 is not a corner case - `lnetctl peer show` with no -v passes detail = 0 as the genl version (lnetctl.c jt_show_peer()), and `lnetctl peer list` passes 0 literally, so this is the common invocation.

Related: the per-peer-NI NID string is not charged in any of the PEER_VERSION_* terms. For version >= 1 the slack in PEER_VERSION_1_VALUES_MSG_SIZE happens to absorb it, but nothing in the table accounts for it, so it goes wrong again the next time one of these constants is tightened. LNET_PEER_NI_ATTR_HDR is documented as 48 bytes here but is nla_put_string(msg, ..., ""), i.e. 8 bytes, and only for the first peer - that leftover is what makes the version 0 number look adequate.
reply PS4 2026-08-30 07:06 Gerrit AI review for Lustre api-ni.c:7878 — (minor) This builds the whole UDSP info for every peer NI - lnet_udsp_get_construct_info() does a peer table hash lookup and fills a ~2KB st
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(minor) This builds the whole UDSP info for every peer NI - lnet_udsp_get_construct_info() does a peer table hash lookup and fills a ~2KB struct - and the only thing read back is `cud_pref_rtr_nid[0] != 0`. That is just `!list_empty(&lpni->lpni_rtr_pref_nids)`, which needs no buffer and no lookup.

Related to the same allocation: it is done unconditionally at the top, so version 0 and versions 1-3 pay for a buffer they never touch, and LIBCFS_ALLOC_ATOMIC uses GFP_ATOMIC even though this is ->start() in process context - the genradix_ptr_alloc() calls a few lines above use GFP_KERNEL.

Worth noting the cost overall: this loop repeats the peer and peer NI traversal that lnet_peer_ni_show_dump() then does again, under ln_api_mutex, so `lnetctl peer show -v 4` now walks every peer twice.
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?
owner James Simmons · uploader James Simmons · PS4 uploaded 18d 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
68022 master J ✗1B ✓T ✗2R 1/2
LU-20587 lnet: fix NULL pointer deref in lnet_peer_ni_show_dump
reviewing Andrew Perepechko · PS7→PS10 since your -1 — your objection was dropped
1 unique failure 10 unresolved L +350 −107
22d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanityn@zfs+DNE:test_102seen in 1 other review
failed enforced testplatformdetail
review-dne-zfs-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-7 failed 2× RHEL 9.7 / x86_64 ran 6 tests. 1 tests failed: sanity-ec. session
build #130159 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov +1 2026-08-25 15:08
no vote yet: Alexander Zarochentsev
patchsets:
+5 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
your previous vote: -1 on PS7 (2026-08-18 20:12) — now at PS10
threads: 10 need your reply · 0 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 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 PS10 2026-08-25 12:01 Gerrit AI review for Lustre liblnetconfig_netlink.c:519 — (minor) A realloc() failure is swallowed here - yaml_parse_value_list() returns void and neither data->error nor data->errmsg is set, so lne
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) A realloc() failure is swallowed here - yaml_parse_value_list() returns void and neither data->error nor data->errmsg is set, so lnetctl prints a truncated YAML document and still exits 0.

The older grow in yaml_netlink_msg_parse() returns NL_STOP for the same condition. Could this one report the failure too, so a short document isn't mistaken for the full listing?
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre liblnetconfig_netlink.c:812 — (minor) This is the mirror of the accounting fixed a few lines above: data->buffer moves backwards here, so the free space grows and it shou
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) This is the mirror of the accounting fixed a few lines above: data->buffer moves backwards here, so the free space grows and it should be `*size += data->indent + 2;`.

It only fires when a snprintf() returns negative, so it isn't reachable today, but leaving one of the two sites inverted invites the next reader to copy the wrong one.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre sanity-lnet.sh:7529 — (minor) `<= 1` also passes when the header is missing altogether, which is the other way the once-per-dump attribute can go wrong. The dump
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) `<= 1` also passes when the header is missing altogether, which is the other way the once-per-dump attribute can go wrong. The dump promises exactly one, so `((hdrs == 1))` would catch both a lost and a repeated header.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre sanity-lnet.sh:7537 — (minor) The comment above says the check also confirms the retry path doesn't duplicate entries, but grep -q only proves each primary NID ap
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) The comment above says the check also confirms the retry path doesn't duplicate entries, but grep -q only proves each primary NID appears at least once.

Comparing `grep -c "primary nid: " $out` against $num_peers would actually cover the duplicate case.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre sanity-lnet.sh:7539 — (style) Not a bug, but the peers and $out are only cleaned up when every assertion passes - any error() above leaves 300 peers (1500 with SL
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(style) Not a bug, but the peers and $out are only cleaned up when every assertion passes - any error() above leaves 300 peers (1500 with SLOW=yes) configured and the YAML file in $TMP for the next subtest.

A `stack_trap "rm -f $out"` plus a stack_trap for the peer teardown registered right after the add loop would make the failure path tidy, and would let the del loop drop out of the verification loop.
owner Andrew Perepechko · uploader Andrew Perepechko · PS10 uploaded 23d 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.

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
68287 master J !B ✗T –R 0/2
LU-14291 obdclass: unwind server code out of llog
mine build failure (#130151)
XL +1100 −1073
22d
janitor run: build failed — no tests ran — janitor results
build #130151 FAILURE
owner James Simmons · uploader James Simmons · PS1 uploaded 23d 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
45882 master J ✗1B ✓T ✗5R 0/2
LU-8130 ldlm: convert ldlm_resource hash to rhashtable
mine janitor: 1 test failure unique to this patch — sanity-pcc@ldiskfs+DNE:test_22
1 unique failure upstream 19 unresolved L +441 −347
28d
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 28d 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
65199 master J ✗1B ✓T ✗1R 0/2
LU-19768 obdclass: table-driven netlink framework
reviewing Timothy Day · PS1→PS8 since your -1 — your objection was dropped
1 unique failure 17 unresolved L +494 −43
32d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-quota@ldiskfs+DNE:test_80seen in 67 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
build #129426 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn, Andreas Dilger, Minh
patchsets:
+3 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
your previous vote: -1 on PS1 (2026-04-10 19:43) — now at PS8
threads: 15 need your reply · 0 waiting on others · 2 own notes · 0 bot
reply PS8 2026-08-14 23:29 Andreas Dilger COMMIT_MSG:25 — (minor) duplicate `Signed-off-by: Minh`...
Andreas Dilger PS8 · 2026-08-14 23:29
(minor) duplicate `Signed-off-by: Minh`...
reply PS8 2026-08-14 23:29 Andreas Dilger lustre_kernelcomm.h:267 — (style) instead of putting this here, it would be better to `#define GENRADIX_NODE_SIZE PAGE_SIZE` in the compat code and use that instead o
Andreas Dilger PS8 · 2026-08-14 23:29
(style) instead of putting this here, it would be better to `#define GENRADIX_NODE_SIZE PAGE_SIZE` in the compat code and use that instead of `LUSTRE_NL_ENTRY_SIZE_MAX`.
note PS1 2026-04-10 19:43 James Simmons kernelcomm.c:1413 — So the table stuff is meant to obd specific but this is really really generic. The code seems to be a mix of both behaviors of being obd spe
James Simmons PS1 · 2026-04-10 19:43
So the table stuff is meant to obd specific but this is really really generic. The code seems to be a mix of both behaviors of being obd specific and then super generic. I would prefer that it was only obd specific. Its not going to be easy to make dump_one() flexible for all cases. So I'm not sold on a dump function.
note PS1 2026-04-10 19:43 James Simmons kernelcomm.c:1455 — Same here. While its labled as obd specific its really super generic.
James Simmons PS1 · 2026-04-10 19:43
Same here. While its labled as obd specific its really super generic.
reply PS2 2026-07-28 10:31 Gerrit AI review for Lustre kernelcomm.c:1341 — `ops->collect()` is called with `obd_device_lock()` held, and that is `xa_lock(&obd_devs)` -- a spinlock. So a collect callback can't sleep,
Gerrit AI review for Lustre PS2 · 2026-07-28 10:31
`ops->collect()` is called with `obd_device_lock()` held, and that is `xa_lock(&obd_devs)` -- a spinlock. So a collect callback can't sleep, and anything it allocates (the natural implementation is `genradix_ptr_alloc()`, which existing callers such as tgt_mount.c use with GFP_KERNEL) has to be GFP_ATOMIC.

Nothing in the descriptor comment in lustre_kernelcomm.h says this, and the header also doesn't say that `collect` owns updating `ctx->count` and must store entries at 0..count-1 (both the cleanup loop here and `lustre_obd_nl_dump()` assume that). Since there is no in-tree implementation yet to copy from, could the contract be spelled out with the struct?

Holding the spinlock across the whole device scan is also a change in character from the existing handlers -- `lustre_stats_start()` does its scan outside `obd_device_lock()`.
reply PS2 2026-07-28 10:31 Gerrit AI review for Lustre kernelcomm.c:1350 — `cb->min_dump_alloc` is set to a fixed `ops->min_alloc` regardless of how many entries `collect()` gathered. The two existing handlers scale
Gerrit AI review for Lustre PS2 · 2026-07-28 10:31
`cb->min_dump_alloc` is set to a fixed `ops->min_alloc` regardless of how many entries `collect()` gathered. The two existing handlers scale it: `lustre_device_list_start()` uses `class_obd_devs_count() * DEVICE_VALUE_PACKET_SIZE`, and `lustre_stats_start()` accumulates `STATS_MSG_DATASET_SIZE * rc`. With a constant, any node with more devices than the descriptor author assumed overflows the skb -- and per the comment below, that ends the dump with an error rather than continuing. Should this be `ops->min_alloc * ctx->count` plus the key-table size?
reply PS2 2026-08-14 23:29 Andreas Dilger kernelcomm.c:1407 — This looks like a reasonable suggestion?
Gerrit AI review for Lustre PS2 · 2026-07-28 10:31
When the skb fills, this returns -EMSGSIZE and the whole dump is aborted, dropping every entry from `ctx->index` onwards. The usual pattern -- and what `lustre_device_list_dump()` does -- is to stop adding messages and return the byte count so netlink flushes the skb and re-enters the dump:

    return rc < 0 ? rc : msg->len;

`ctx->index` is already carried in the context, so resumption would work; only the return value is missing. Same for the `dump_one()` failure just below, where `rc` may well be -EMSGSIZE too.

No caller exists yet, so this isn't reachable today, but it looks worth fixing before the first command is wired up.
Andreas Dilger PS2 · 2026-08-14 23:29
This looks like a reasonable suggestion?
reply PS3 2026-08-14 23:29 Andreas Dilger kernelcomm.c:1280 — This also seems reasonable
Gerrit AI review for Lustre PS3 · 2026-07-30 06:01
(minor) This is the same loop that is still open-coded in `lustre_stats_dump()` above. The patch adds the `nla_put` return checks to that copy and lands a second, identical copy here, so a future fix to one will miss the other -- which is the opposite of what the commit message says the change does.

Could `lustre_stats_dump()` just call this?

    rc = lustre_nl_put_dataset(msg, stats, LUSTRE_STATS_ATTR_DATASET);
    if (rc)
        GOTO(out_cancel, rc);
Andreas Dilger PS3 · 2026-08-14 23:29
This also seems reasonable
reply PS8 2026-08-15 13:12 Gerrit AI review for Lustre kernelcomm.c:32 — (style) dropping the `static struct genl_family lustre_family;` forward declaration left two blank lines here; one is enough.
Gerrit AI review for Lustre PS8 · 2026-08-15 13:12
(style) dropping the `static struct genl_family lustre_family;` forward declaration left two blank lines here; one is enough.
reply PS8 2026-08-15 13:12 Gerrit AI review for Lustre kernelcomm.c:641 — (style) not a bug, but `stats_dataset_list` becomes a kernel-global symbol here with no subsystem prefix, which is easy to collide with. `lu
Gerrit AI review for Lustre PS8 · 2026-08-15 13:12
(style) not a bug, but `stats_dataset_list` becomes a kernel-global symbol here with no subsystem prefix, which is easy to collide with. `lustre_stats_dataset_list` would match `lustre_family` and `lustre_stats_dump()` alongside it. The extern in lustre_kernelcomm.h would need the same rename.
reply PS8 2026-08-14 23:29 Andreas Dilger kernelcomm.c:841 — (style) doesn't need a whole saga. Just a short comment like `copy by element, struct copy only copies fixed header` or maybe use `unsafe_m
Andreas Dilger PS8 · 2026-08-14 23:29
(style) doesn't need a whole saga.  Just a short comment like `copy by element, struct copy only copies fixed header` or maybe use `unsafe_memcpy()` to avoid the warning.
reply PS8 2026-08-15 13:12 Gerrit AI review for Lustre lprocfs_status.c:1538 — (minor) This repeats the xa_lock()/__xa_alloc()/atomic_inc() sequence from ldebugfs_stats_alloc() verbatim, so the two copies can drift apar
Gerrit AI review for Lustre PS8 · 2026-08-15 13:12
(minor) This repeats the xa_lock()/__xa_alloc()/atomic_inc() sequence from ldebugfs_stats_alloc() verbatim, so the two copies can drift apart.

This was raised on the first revision and still applies: ldebugfs_stats_alloc() could compute its truncated source string and then call ldebugfs_stats_register(), leaving only the debugfs file creation behind and keeping one copy of the xarray insertion.
owner Timothy Day · uploader Minh · PS8 uploaded 33d ago · NEW · open in Gerrit ↗
commit message
LU-19768 obdclass: table-driven netlink framework

Introduce a reusable table-driven netlink handler framework
(lustre_nl_obd_ops / 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, dump_one, and
optional 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
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Change-Id: Ic3267111785fe79761f0673477149f7fca470a35
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
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
34d
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 35d 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>
62748 master J !B ✓T ✓R 0/2−
LU-16518 osc: fix -Wunused-but-set-variable warnings
carrying Timothy Day · Timothy Day voted -1
8 unresolved S +7 −7
34d
Timothy Day voted -1
7 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
no vote yet from Arshad Hussain, Andreas Dilger
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #129110 SUCCESS · tests all Maloo sessions
reviews: Timothy Day -1 2026-08-13 19:51
no vote yet: Arshad Hussain, Andreas Dilger
patchsets: PS1 11-26 PS2 08-05 James Simmons PS3 08-11 James Simmons
threads: 7 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-06 03:48 Gerrit AI review for Lustre COMMIT_MSG:10 — (defect) The body only describes removing unused variables, but the osc_page.c hunk also adds a new early return when the LRU wait is interr
Gerrit AI review for Lustre PS2 · 2026-08-06 03:48
(defect) The body only describes removing unused variables, but the osc_page.c hunk also adds a new early return when the LRU wait is interrupted. That is a behaviour change, not a variable removal, and nothing in the message accounts for it.

Could the message describe the new abort path (and why it is correct) so a reader isn't surprised by it? If the intent is really just to silence the warning, the alternative would be to drop the assignment entirely and leave the retry loop as-is.
reply PS2 2026-08-06 03:48 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) If the abort-on-signal behaviour is intentional, this is a fix for a loop that could not be interrupted, and it would help to carry
Gerrit AI review for Lustre PS2 · 2026-08-06 03:48
(minor) If the abort-on-signal behaviour is intentional, this is a fix for a loop that could not be interrupted, and it would help to carry a Fixes: tag pointing at the commit that added the uninterruptible retry:

    Fixes: e8b421531c16 ("LU-6271 osc: further OSC cleanup after eviction")
reply PS3 2026-08-11 22:04 Gerrit AI review for Lustre COMMIT_MSG:15 — (minor) This sha doesn't look like the origin of the bug. osc_lru_reserve() as added by e8b421531c16 had no retry loop at all - a single bes
Gerrit AI review for Lustre PS3 · 2026-08-11 22:04
(minor) This sha doesn't look like the origin of the bug. osc_lru_reserve() as added by e8b421531c16 had no retry loop at all - a single best-effort cmpxchg, returning 0 when it could not reserve, and no `rc` variable.

The `again:` loop over an unchecked l_wait_event_abortable() came in later:

    2a34dc95bd10 ("LU-12142 clio: fix hang on urgent cached pages")

and `rc` only became set-but-unused when 776e163cf542 ("LU-17180 ptlrpc: don't block ptlrpcd too long") replaced `rc = ptlrpcd_queue_work(cli->cl_writeback_work); if (rc) return 0;` with a plain schedule_work().

Since the substance of this hunk is making the wait abortable again, 2a34dc95bd10 looks like the right target:

    Fixes: 2a34dc95bd10 ("LU-12142 clio: fix hang on urgent cached pages")
reply PS1 2025-12-02 04:48 Andreas Dilger osc_page.c:1079 — Up here the `rc` is checked and the loop is aborted if the wait is interrupted.
Andreas Dilger PS1 · 2025-12-02 04:48
Up here the `rc` is checked and the loop is aborted if the wait is interrupted.
reply PS2 2026-08-07 05:06 Arshad Hussain osc_page.c:1154 — > (defect) osc_lru_reserve() returns unsigned long, and its value is the number of pages reserved - there is no error channel. Returning -EI
Gerrit AI review for Lustre PS2 · 2026-08-06 03:48
(defect) osc_lru_reserve() returns `unsigned long`, and its value is the number of pages reserved - there is no error channel. Returning -EINTR here hands the caller (unsigned long)-4, i.e. 0xfffffffffffffffc.

osc_io_lru_reserve() stores it verbatim and discards nothing:

    oio->oi_lru_reserved = osc_lru_reserve(osc_cli(osc), npages);
    RETURN(0);

So the I/O keeps running with a bogus reservation, and two things follow.

osc_lru_alloc() takes the reserved-slot shortcut for every page of the I/O:

    if (oio->oi_lru_reserved > 0) {
            --oio->oi_lru_reserved;
            goto out;
    }

cl_lru_busy is incremented but cl_lru_left is never debited, so the LRU budget is bypassed for the rest of the I/O.

Then osc_io_rw_iter_fini() gives the remainder back:

    if (oio->oi_lru_reserved > 0)
            osc_lru_unreserve(osc_cli(osc), oio->oi_lru_reserved);

and osc_lru_unreserve() does atomic_long_add(npages, cli->cl_lru_left) - the huge unsigned value converts to a large negative long, so cl_lru_left is permanently reduced by roughly (4 + pages touched). cl_lru_left points into the mount-wide cl_cache->ccc_lru_left, so every OSC on the mount is affected, and once it goes negative the next unreserved allocation trips

    LASSERT(atomic_long_read(cli->cl_lru_left) >= 0);

in osc_lru_alloc(). The trigger is a fatal signal delivered while a writer waits for LRU slots, which is exactly the case l_wait_event_abortable() exists for.

Would `return 0;` (nothing reserved) work here instead? osc_lru_alloc() then does its own per-page reservation and already handles the abort correctly with `rc = -EINTR; break;`. Alternatively, propagate the failure through osc_io_lru_reserve()'s int return so the I/O actually stops - but that needs the callers of cio_lru_reserve to honour it.
Arshad Hussain PS2 · 2026-08-07 05:06
> (defect) osc_lru_reserve() returns unsigned long, and its value is the number of pages reserved - there is no error channel. Returning -EINTR here hands the caller (unsigned long)-4, i.e. 0xfffffffffffffffc.

This look correct. I think even coverity will flag this. (-1 just to highlight this)
reply PS3 2026-08-11 22:04 Gerrit AI review for Lustre osc_page.c:1154 — (style) Not a bug, but there's a stray `;` left after the comment:
Gerrit AI review for Lustre PS3 · 2026-08-11 22:04
(style) Not a bug, but there's a stray `;` left after the comment:

    return 0; /* reserve nothing */;
reply PS1 2025-12-02 04:48 Andreas Dilger osc_request.c:2308 — I think in the old days the cksum_counter was used to change the `CDEBUG(D_PAGE)` into `CDEBUG(D_ERROR)` when the number of errors exceeded
Arshad Hussain PS1 · 2025-11-27 03:49
(Your thoughts?) Tim, looks like cksum_counter is already being calculated on successful read. Why not (debug)print it below along with client_cksum. Instead of deleting it completely.? This can give us number of successful read's inbetween failures where it is reset to 0.
Timothy Day PS1 · 2025-11-27 04:49
I'm skeptical it would be useful. We could get similar info (i.e. number of successful reads vs failures) by comparing llite stats to the number of error/debug messages. Plus, static variables like this aren't thread safe. The stat may not be reliable anyway.
Andreas Dilger PS1 · 2025-12-02 04:48
I think in the old days the cksum_counter was used to change the `CDEBUG(D_PAGE)` into `CDEBUG(D_ERROR)` when the number of errors exceeded some threshold?  I see something similar below with `cksum_missed`.

That said, I don't think there is much value to keeping this anymore, just overhead that doesn't provide any value.
owner Timothy Day · uploader James Simmons · PS3 uploaded 37d ago · NEW · open in Gerrit ↗
commit message
LU-16518 osc: fix -Wunused-but-set-variable warnings

Remove unused variables in osc. Clang emits a warning on set
but unused variables, so remove them. For osc_lru_reserve() we don't
handle the rc returned by l_wait_event_abortable(). If we do get
an interruption abort and report we reserved nothing.

Test-Parameters: trivial
Fixes: e8b421531c16 ("LU-6271 osc: further OSC cleanup after eviction")
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I7cbfbb937ba5b9947bf685fbd3bbff2b6f3b461d
65110 master J ✗7B ✓T ✓R 0/2
LU-9680 utils: remove forced debugfs mounting
mine 5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
5 unresolved S +0 −24
37d
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 38d 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
66820 master J !B ✓T ✓R 1/2−
LU-20422 lod: fix lockdep bug
carrying Timothy Day · Timothy Day voted -1
2 unresolved S +24 −8
44d
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 64d 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 0/2−
LU-18652 tests: no compression with zfs create / zpool setup
mine needs rebase — checkpatch: cannot be cherry-picked
rocky8 S +9 −11
46d
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 537d 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>
55554 master J ✗1B ✓T ✓R 0/2
LU-14636 pcc: reproduce hang in sanity-pcc 7a
mine 2 unresolved thread(s) await your reply — last from Andreas Dilger
2 unresolved XS +6 −2
48d
2 unresolved thread(s) await your reply — last from Andreas Dilger
CI green — no vote yet from Qian Yingjin
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-hsm@zfs:test_52seen in 13 other reviews
build #114094 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin
patchsets: PS1 06-27 PS2 06-27 PS3 12-10 PS4 03-07 PS5 06-09
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-07-31 11:38 Andreas Dilger COMMIT_MSG:9 — It would be useful to have an explanation of what the problem is, and what this patch is doing to fix it.
Andreas Dilger PS5 · 2026-07-31 11:38
It would be useful to have an explanation of what the problem is, and what this patch is doing to fix it.

Is it intended for landing or just running testing?
reply PS5 2026-07-31 11:37 Andreas Dilger multiop.c:860 — Please fix if patch is refreshed.
wc-checkpatch PS5 · 2025-06-09 13:37
(style)  space required before the open brace '{'
Andreas Dilger PS5 · 2026-07-31 11:37
Please fix if patch is refreshed.
owner James Simmons · uploader James Simmons · PS5 uploaded 465d ago · NEW · open in Gerrit ↗
commit message
LU-14636 pcc: reproduce hang in sanity-pcc 7a

Test to see if this is still a problem.

Test-Parameters: trivial testlist=sanity-pcc
Change-Id: I1e0ad250e0c957f5d52f65d587d6d5cadfd9b3f3
Signed-off-by: James Simmons <jsimmons@infradead.org>
56526 master J !B ✓T ✗2R 0/2
LU-18076 llite: add $MOUNT/.lustre/uuid
reviewing Emoly Liu · PS1→PS10 since your -1 — your objection was dropped
5 unresolved M +125 −3
49d
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 50d 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
65688 master J ✗21B ✗T –R 0/2−
LU-18041 obd: mgc uses real uuid for its uuid to NID mapping
mine build failure (#128071)
21 unique failures 2 unresolved M +67 −48
51d
build failure (#128071)
janitor: 21 test failures unique to this patch — conf-sanity4@ldiskfs+DNE:test_153a, conf-sanity4@ldiskfs+DNE:test_153c, racer@ldiskfs+DNE:test_1 +18 more
Andreas Dilger voted -1
2 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity4@ldiskfs+DNE:test_153aseen in 22 other reviews
conf-sanity4@ldiskfs+DNE:test_153cseen in 1 other review
racer@ldiskfs+DNE:test_1seen in 48 other reviews
sanity-scrub@ldiskfs+DNE:test_1aseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_1cseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_4aseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_4bseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_4cseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_5seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_6seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_7seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_8seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_9seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_10aseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_15seen in 2 other reviews
sanity-scrub@zfs:test_1aseen in 2 other reviews
sanity-scrub@zfs:test_1bseen in 2 other reviews
sanity-scrub@zfs:test_4aseen in 2 other reviews
sanity-scrub@zfs:test_5seen in 2 other reviews
sanity-scrub@zfs:test_10aseen in 2 other reviews
sanity-scrub@zfs:test_12seen in 2 other reviews
build #128071 FAILURE
reviews: Andreas Dilger -1 2026-07-24 17:59
no vote yet: Serguei Smirnov, Mikhail Pershin
patchsets: PS1 05-06 PS2 07-14 PS3 07-16 PS4 07-24
threads: 0 need your reply · 2 waiting on others · 0 own notes · 0 bot
owner James Simmons · uploader James Simmons · PS4 uploaded 54d 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
65426 master J ✓B ✓T ✓R 0/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
51d
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 72d 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
51d
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 69d 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
54225 master J !B ✓T ✓R 1/2−
LU-17594 ptlrpc: remove ptlrpc_connection hash table
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
4 unresolved L +247 −400
64d
needs rebase — checkpatch: cannot be cherry-picked
Timothy Day voted -1
4 unresolved thread(s) await your reply — last from Oleg Drokin
no vote yet from Shaun Tancheff, Chris Horn, Andreas Dilger, Neil Brown
janitor run: 2 failing config(s), none unique to this patch — janitor results
5 optional test failure(s) — informational
build #122221 SUCCESS · tests all Maloo sessions
reviews: Serguei Smirnov +1 2026-03-12 16:07 · Timothy Day -1 2026-03-21 17:33
no vote yet: Shaun Tancheff, Chris Horn, Andreas Dilger, Neil Brown, Mikhail Pershin
patchsets:
+11 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
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS16 2026-03-22 01:20 Oleg Drokin lproc_ptlrpc.c:34 — all these need to be static
Misc Code Checks Robot (Gatekeeper helper) PS16 · 2026-03-10 00:04
warning: sparse:symbol 'ptlrpc_pmqos_use_stats_for_duration' was not declared. Should it be static?
Oleg Drokin PS16 · 2026-03-22 01:20
all these need to be static
reply PS16 2026-03-22 01:20 Oleg Drokin lproc_ptlrpc.c:1482 — and this one too.
Misc Code Checks Robot (Gatekeeper helper) PS16 · 2026-03-10 00:04
warning: sparse:symbol 'cpus_latency_qos' was not declared. Should it be static?
Oleg Drokin PS16 · 2026-03-22 01:20
and this one too.
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.
owner Timothy Day · uploader James Simmons · PS16 uploaded 191d 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
65397 master J !B ✗T –R 0/2−
LU-0000 obdclass: rollback testing
mine needs rebase — checkpatch: cannot be cherry-picked
S +2 −17
68d
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 146d 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
S +13 −15
76d
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 788d 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
1 unresolved S +21 −11
86d
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 259d 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 3/2−
LU-8980 libcfs: add tracepoint support for libcfs
mine needs rebase — checkpatch: cannot be cherry-picked
XL +3118 −254
93d
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 3327d 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 0/2−
LU-14291 gss: seperate out the client from server code.
mine needs rebase — checkpatch: cannot be cherry-picked
1 unique failure stalled 111d M +86 −44
111d
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 139d 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 0/2−
LU-19323 lnet: add IPv6 support to lnet_selftest
reviewing Serguei Smirnov · PS4→PS6 since your -1 — your objection was dropped
1 unique failure stalled 129d 12 unresolved XL +2239 −574
129d
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 184d 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
36612 master J ✗1B ✓T ✗2R 0/2
LU-8585 tests: re-enable fid2path sanity test for subdir mount
mine janitor: 1 test failure unique to this patch — sanity-quota@ldiskfs+DNE:test_48
1 unique failure stalled 139d M +125 −10
139d
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 139d 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>
53005 master J !B ✓T ✗3R 0/2−
LU-17266 mdt: purge objects via procfs
reviewing Alex Zhuravlev · PS57→PS62 since your -1 — your objection was dropped
stalled 151d 3 unresolved M +124 −3
151d
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 345d 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 159d S +9 −18
159d
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 160d 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
4 unique failures stalled 160d 1 unresolved M +105 −28
160d
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 1155d 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 160d S +20 −10
160d
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 161d 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 160d S +8 −15
160d
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 161d 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 163d L +154 −115
163d
no vote yet: Sebastien Buisson, Nathan Lavender, Chris Hanna
owner James Nunez · uploader James Simmons · PS4 uploaded 3394d 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 0/2−
LU-19298 lod: use Xarray instead of static arrays for comp entires
mine needs rebase — checkpatch: cannot be cherry-picked
stalled 169d 1 unresolved L +442 −423
169d
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 278d 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 0/2−
LU-19298 lod: merge different lmm handling togther.
mine needs rebase — checkpatch: cannot be cherry-picked
2 unique failures stalled 170d L +225 −300
170d
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 381d 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 195d 8 unresolved XL +643 −2491
195d
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 834d 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 0/2−
LU-18175 ldlm: replace namespace lock with RCU
mine needs rebase — checkpatch: cannot be cherry-picked
rocky8 stalled 232d M +62 −75
232d
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 428d 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 244d M +221 −5
244d
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 2332d 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 3/2−
LU-18162 obdclass: standardize class_(un)register_type
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
stalled 245d 2 unresolved L +216 −201
245d
needs rebase — checkpatch: cannot be cherry-picked
Verified -1 veto by Oleg Drokin
2 unresolved thread(s) await your reply — 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 417d 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 278d 7 unresolved M +58 −50
278d
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 511d 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>
45608 master J ✗2B ✓T ✗2R 0/2
LU-10824 llite: remove may_umount() loop
mine janitor: 2 test failures unique to this patch — conf-sanity-slow@zfs:test_45, conf-sanity-slow@zfs:test_69
2 unique failures upstream stalled 278d 3 unresolved S +15 −17
278d
janitor: 2 test failures unique to this patch — conf-sanity-slow@zfs:test_45, conf-sanity-slow@zfs:test_69
enforced failed: review-ldiskfs-dne
2 unresolved thread(s) await your reply — last from Andreas Dilger
1 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity-slow@zfs:test_45NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
conf-sanity-slow@zfs:test_69NEW 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-ldiskfs-dne RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-dne RHEL 9.5 / x86_64 ran 7 tests. 1 tests failed: sanity. session
build #115896 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Andreas Dilger, Neil Brown, Feng Lei
patchsets:
+13 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
threads: 2 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS5 2024-02-28 20:27 Andreas Dilger COMMIT_MSG:11 — I think the issue is a matter of scale. Having your local filesystem fail to unmount because of a transient issue is not a huge deal to cle
Andreas Dilger PS5 · 2023-05-10 20:27
This says that conf-santity test_45 needs to be updated, but I don't see any changes to that test?
Neil Brown PS5 · 2023-06-05 06:40
I don't think it is reasonable to expect "umount -f" to be 100% reliable.  It certainly isn't for NFS.
As long as it helps the unmount processes a long, so a few more tries will succeed, it is enough.

That is unless the lustre community has some firm requirements for -f, which Linux itself doesn't have.
Andreas Dilger PS5 · 2024-02-28 20:27
I think the issue is a matter of scale.  Having your local filesystem fail to unmount because of a transient issue is not a huge deal to clean up, doing it on thousands of nodes is a bigger hassle.

I think a reasonable replacement would be to add a /sbin/umount.lustre script to retry the unmount instead of in the kernel, now that util-linux supports this.  Something like:

 #!/bin/bash
 count=10
 while ((count-- > 0)) && ! umount --internal-only "$@"; do
        sleep 1
 done
reply PS10 2024-06-11 17:11 Andreas Dilger Makefile.am:58 — Feng is correct here - this needs to be added into lustre.spec.in below mount.lustre in the "lustre.files" section:
Feng Lei PS10 · 2024-06-06 08:47
It is not enough to make umount.lustre here. I guess the command should be added into rpm spec files too. Try to install lustre from rpms and check whether umount.lustre is in the system as expected.
But if we can find mnt from superblock as I mentioned in another comment, we don't need to add this new command.
Andreas Dilger PS10 · 2024-06-11 17:11
Feng is correct here - this needs to be added into lustre.spec.in below mount.lustre in the "lustre.files" section:

 /sbin/mount.lustre
+/sbin/umount.lustre
 %if %{with servers}
 /sbin/mount.lustre_tgt
 %endif

It doesn't look like it is needed in the debian/ tree since it doesn't mention "mount.lustre" at all.
owner James Simmons · uploader James Simmons · PS18 uploaded 393d 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 todays util-linux you can provide
umount helper scripts. Create one for Lustre that does the same
thing that the kernel tried to accomplish.

Fixes: 205a57df2787 ("LU-1882 llite: Adding timed wait in ll_umount_begin")
Test-Parameters: trivial testlist=conf-sanity env=ONLY=45,ONLY_REPEAT=100
Change-Id: I1498c6348022bdd6a74db887ffc8836a7a03bab6
Signed-off-by: Rick Mohr <rmohr@ornl.gov>
Signed-off-by: James Simmons <jsimmons@infradead.org>
58304 master J !B ✓T ✗1R 0/2−
LU-18657 pcc: invalidate instead of truncate inode mapping
mine enforced failed: custom-1001
stalled 282d 1 unresolved XS +2 −2
282d
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 286d 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 318d 1 unresolved XS +1 −1
318d
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 694d 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 324d XS +5 −0
324d
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 1097d 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 0/2−
LU-18544 utils: handle special lnetctl import for route setup
mine needs rebase — checkpatch: cannot be cherry-picked
2 unique failures IPv6 stalled 344d 2 unresolved M +155 −0
344d
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 386d 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 0/2−
LU-17022 obdclass: convert more flags to bitops
carrying Neil Brown · needs rebase — checkpatch: cannot be cherry-picked
stalled 357d M +57 −41
357d
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 567d 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
55818 master J ✗2B ✓T ✗29R 0/2−
LU-18884 osp: use UUIDs instead of NIDs for LWP setup
mine janitor: 2 test failures unique to this patch — runtests-ssk@ldiskfs+SharedKey:test_1, runtests@zfs:test_1
2 unique failures IPv6 stalled 359d 1 unresolved S +24 −11
359d
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 failed 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 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 466d 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>
8027 master J –B ✓T ✓R 1/2−
LU-5960 lnet: add in functionality of lctl to DLC
carrying Amir Shehata · Christopher J. Morrone voted -1
stalled 408d XL +1916 −144
408d
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 3836d 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 2/2−
LU-6034 lnet: Enable lnetctl to handle checksum settings for LNet
mine Oleg Drokin voted -1
stalled 408d S +33 −7
408d
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 4063d 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 0/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 408d L +789 −117
408d
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 2312d 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 408d L +297 −19
408d
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 1815d 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 408d L +346 −147
408d
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 2662d 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 408d XL +1743 −1123
408d
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 2405d 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
stalled 408d M +61 −24
408d
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 2838d 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 408d XL +2713 −2
408d
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 2425d 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 408d S +4 −9
408d
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 701d 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 408d S +10 −36
408d
build #78732 FAILURE
no vote yet: Minh Diep, Alex Zhuravlev
owner James Simmons · uploader James Simmons · PS8 uploaded 2071d 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 0/2−
LU-11380 utils: split llapi_fid2path() in three functions
reviewing Andreas Dilger · PS11→PS23 since your -1 — your objection was dropped
stalled 408d L +359 −184
408d
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 2353d 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 408d XL +4700 −204
408d
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 1660d 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 408d M +4 −151
408d
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 2371d 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 408d S +0 −29
408d
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 2418d 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>
41196 master J ✗2B ✓T ✗18R 0/2−
LU-14319 layout: make foreign layout as a mirror component
carrying Qian Yingjin · janitor: 2 test failures unique to this patch — sanity-flr@ldiskfs+DNE:test_212, sanity-flr@zfs:test_212
2 unique failures stalled 408d L +448 −222
408d
janitor: 2 test failures unique to this patch — sanity-flr@ldiskfs+DNE:test_212, sanity-flr@zfs:test_212
enforced failed: review-dne-part-1, review-dne-part-4, review-dne-part-7, review-dne-selinux-ssk-part-1, review-dne-subtest-change, review-dne-zfs-part-1, review-dne-zfs-part-4, review-dne-zfs-part-7, review-dne-zfs-subtest-change, review-ldiskfs, review-ldiskfs-ubuntu, review-zfs
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-flr@ldiskfs+DNE:test_212NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity-flr@zfs:test_212NEW 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 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity. session
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. 1 tests failed: sanity-flr. session
review-dne-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-part-7 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.3 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-flr. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-zfs-part-7 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-flr. session
review-ldiskfs RHEL 8.10 / 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 RHEL 8.10 / x86_64, RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 9.4 / 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-lnet, sanity. session
review-zfs RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: sanity-flr. session
8 optional test failure(s) — informational
build #109664 SUCCESS · tests all Maloo sessions
no vote yet: Etienne AUJAMES, Andreas Dilger, Zhenyu Xu
patchsets: PS6 09-10 James Simmons PS7 12-11 James Simmons PS8 12-11 James Simmons PS9 12-11 James Simmons PS10 12-13 James Simmons
owner Qian Yingjin · uploader James Simmons · PS10 uploaded 642d ago · NEW · open in Gerrit ↗
commit message
LU-14319 layout: make foreign layout as a mirror component

A closer coupling between the HSM archive state/PCC-RW/PCC-RO (a
kind of a foreign layout) and Lustre File Level Redundancy (FLR)
can make PCC and HSM management more consistent with the
management of other replicas in the file system.

This patch adds the basic support to store foreign layout as a FLR
mirror component.

Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: Ic4d699bc512599438a5ef2c1a300099494de1aed
41664 master J ✓B ✗T –R 0/2−
LU-14428 libcfs: replace tracefile buffer with ring_buffer
carrying Neil Brown · build failure (#108522)
stalled 408d 2 unresolved L +220 −766
408d
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 692d 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 408d S +13 −13
408d
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 576d 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 408d XS +4 −1
408d
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 1904d 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 408d S +31 −0
408d
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 1799d 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 408d M +86 −34
408d
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 1008d 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 0/2−
LU-9897 build: add real versioning to liblustreapi
mine needs rebase — checkpatch: cannot be cherry-picked
stalled 409d XS +7 −2
409d
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 2111d 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 0/2−
LU-2096 sysfs: symlinks for forward compatibility
mine needs rebase — checkpatch: cannot be cherry-picked
2 unique failures stalled 409d M +101 −12
409d
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 580d 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>
31478 master J –B ✓T ✗5R 0/2−
LU-10937 sptlrpc: make srpc_info writable
mine needs rebase — checkpatch: cannot be cherry-picked
stalled 409d L +165 −170
409d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: custom-101, review-dne-part-1, review-dne-zfs-part-1, review-ldiskfs, review-ldiskfs-arm
failed enforced testplatformdetail
custom-101 crashed CentOS 7.0/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed CentOS 7.0/x86_64 ran 8 tests. 2 tests failed: recovery-small, sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed CentOS 7.0/x86_64 ran 8 tests. 3 tests failed: recovery-small, sanityn, sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm RHEL 7.6/aarch64, RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #5357 SUCCESS
no vote yet: Sebastien Buisson, Peter Jones, Nathan Lavender
owner James Simmons · uploader Sebastien Buisson · PS14 uploaded 2673d ago · NEW · open in Gerrit ↗
commit message
LU-10937 sptlrpc: make srpc_info writable

Lustre allows tuning of many nodes from the MGS server. Their
are two ways to do this and currently sptlrpc can only be set
by one method. This patch enables the other approach of setting
the sptlrpc by making the debugfs file srpc_info writable which
can now accept new configurations.

Test-Parameters: envdefinitions=SHARED_KEY=true testlist=sanity,recovery-small,sanity-sec
Change-Id: If8ca36dbfce20c13ab603835cf5d77fbc19de7a8
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
23552 master J –B ✓T ✗7R 1/2−
LU-8709 llite: implement parallel asynchronous readahead
reviewing Li Xi · PS10→PS14 since your -1 — your objection was dropped
stalled 409d XL +1467 −1103
409d
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 2813d 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 415d S +10 −18
415d
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 535d 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 0/2−
LU-11621 utils: optimize lustre_rsync with copy_file_range()
mine John Hammond voted -1
stalled 415d S +16 −1
415d
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 2142d 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 415d 2 unresolved S +28 −20
415d
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 648d 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 0/2−
LU-12251 tests: re-enable running sanity-flr for PPC
mine Andreas Dilger voted -1
stalled 415d XS +1 −2
415d
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 1377d 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 0/2−
LU-12252 tests: re-enable running sanity-hsm for PPC
mine Andreas Dilger voted -1
stalled 415d S +0 −22
415d
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 1378d 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 415d XS +1 −1
415d
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 1226d 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 415d XS +1 −1
415d
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 828d 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 ✗24R 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 415d S +4 −9
415d
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 failed 2× 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 463d 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>
57671 master J ✗2B ✓T ✗6R 0/2−
LU-10499 pcc: Add --pin option for 'lfs pcc attach' command
mine janitor: 2 test failures unique to this patch — sanity-pcc@ldiskfs+DNE:test_204a, sanity-pcc@zfs:test_204a
2 unique failures stalled 617d L +335 −24
617d
janitor: 2 test failures unique to this patch — sanity-pcc@ldiskfs+DNE:test_204a, sanity-pcc@zfs:test_204a
enforced failed: custom-1001, review-dne-part-7, review-dne-subtest-change, review-dne-zfs-part-7, review-dne-zfs-subtest-change
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-pcc@ldiskfs+DNE:test_204aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-pcc@zfs:test_204aNEW 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 3 tests. 1 tests failed: sanity-pcc. 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-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-zfs-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. session
2 optional test failure(s) — informational
build #110116 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Feng Lei
owner James Simmons · uploader James Simmons · PS1 uploaded 617d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: Add --pin option for 'lfs pcc attach' command

If --pin option is provided, 'lfs pcc attach' command will
first pin then attach a file. So that user does not need
to run them separately.

EX-5936 pcc: dont take UPDATE lock when set lustre.pin xattr

In this patch, we do not take UPDATE lock whan set lustre.pin
XATTR during the PCC pin command.
The reason is that it may revoke the combined UPDATE|LAYOUT lock
cached on the client namespace, and invalidate the layout and PCC
cache.

As we disable to cache lustre.pin xattr on the client XATTR cache,
so it does not cause problem without taking UPDATE lock bit during
set lustre.pin XATTR.

Add test case: sanity-pcc/204d.
Was-Change-Id: I35a0e399294020efdb0e4710500e8f7b846c290f

EX-7395 pcc: use llapi_open_by_fid to check pinned files

When check whether a file was pinned in PCC backend, it reported:
"cannot read or parse pin xattr of file
'/lustre/fsr/.lustre/fid/[0x780001b83:0x2138:0x0]'.: No such file
or directory (2)"

The failure reason is that open by FID is not configured for
subdirectory mounts.
In this patch, we use llapi_open_by_fid (which supports for
subdirectory mount) to open the file to solve this error.
Was-Change-Id: If0120d745418836cfdf449a795b6f524c40f9c27

Change-Id: Iee873821ff5815fd6b56ed8f4c48147f5ef9321f
Test-Parameters: testlist=sanity-pcc
EX-bug-id: EX-5102 EX-5176 EX-5477 EX-5936 EX-7395
Signed-off-by: Lei Feng <flei@whamcloud.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
53594 master J ✗4B ✓T ✗2R 0/2−
LU-10391 tests: debug ping failures
mine needs rebase — checkpatch: cannot be cherry-picked
4 unique failures IPv6 stalled 622d XS +1 −1
622d
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 695d 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 4067d L +194 −74
4067d
no vote yet: Frank Zago
owner James Simmons · uploader James Simmons · PS1 uploaded 4073d 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>
0 watched
Nothing watched. Add a change above — e.g. after rebasing someone's patch — and its build/test state shows up here.
64 open

Failed / broken

(47)
57877 master J !B ✓T ✗1R 0/2−
LU-8066 quota: migrate quota out of proc
enforced failed: review-dne-zfs-part-2
upstream 8 unresolved L +478 −363
1d
enforced failed: review-dne-zfs-part-2
Arshad Hussain voted -1
8 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-zfs-part-2 crashed RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: sanity-pfl. %% THIS TEST SESSION CRASHED %% session
build #131725 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain -1 2026-09-16 04:19
no vote yet: Shaun Tancheff, Andreas Dilger, Timothy Day
patchsets:
+18 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
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre osd_lproc.c:524 — (style) The ldiskfs copy wraps this od_proc_entry cleanup in `#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)` but this one is ungua
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(style) The ldiskfs copy wraps this od_proc_entry cleanup in `#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 18, 53, 0)` but this one is unguarded. Harmless today, but the two should probably match so the guard can be dropped in one go later.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qmt_pool.c:202 — (defect) Same double-put as in qsd_tunables_init(): this drops the last reference, and then qmt_pool_alloc() does GOTO(out, rc) -> qpi_putre
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) Same double-put as in qsd_tunables_init(): this drops the last reference, and then qmt_pool_alloc() does GOTO(out, rc) -> qpi_putref() -> qmt_pool_free() -> qmt_pool_tunables_fini(), which puts qpi_kobj again. Leaving the put to the fini (as dt_tunables_fini() does, gated on qpi_def_attrs) would keep it balanced.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:145 — (minor) This limit predates the patch, but it reads differently now that the file lives in sysfs, where writing with `echo` is the normal th
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(minor) This limit predates the patch, but it reads differently now that the file lives in sysfs, where writing with `echo` is the normal thing to do: `echo ugp > enabled` is 4 bytes and works, while `echo none > enabled` is 5 and gets -E2BIG. Since the function is being rewritten anyway, sysfs_streq(buffer, "none") plus a slightly larger bound would accept the trailing newline.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:220 — (style) Not a bug, but qsd_wait_timeout() returns int and these used to print with %d; %u here and in verion_mismatch_timeout_show() would r
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(style) Not a bug, but qsd_wait_timeout() returns int and these used to print with %d; %u here and in verion_mismatch_timeout_show() would render a negative value as a huge number. Worth restoring %d if the patch is refreshed.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:614 — (defect) On the strscpy() error path in qsd_init(), qsd_dev is still NULL when qsd_fini() gets here, so qsd->qsd_dev->dd_lu_dev is a NULL de
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) On the strscpy() error path in qsd_init(), qsd_dev is still NULL when qsd_fini() gets here, so qsd->qsd_dev->dd_lu_dev is a NULL dereference.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:614 — (minor) The type is already known - qsd_tunables_init() is handed the server_name2index() result - so re-deriving it from ld_site->ls_top_de
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(minor) The type is already known - qsd_tunables_init() is handed the server_name2index() result - so re-deriving it from ld_site->ls_top_dev here means the two halves can disagree. During osd_device_init0() the site's top device is still the OSD itself, so lu_device_is_md() is false even on an MDT and the MD instance's `quota_slave` link is not removed by its own fini. Storing the type (or just a bool) in the qsd_instance would keep create and remove symmetrical.
reply PS23 2026-09-16 04:19 Arshad Hussain qsd_lib.c:622 — This is legit and a defect.
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) This put/wait runs unconditionally, but qsd_tunables_init() is the last thing qsd_init() does, and three earlier failures reach the same cleanup:

    qsd_init() -> GOTO(out, ...) -> qsd_fini() -> qsd_tunables_fini()

The strscpy(), server_name2fsname() and qsd_get_fsinfo() failures all land there before qsd_tunables_init() has run, so qsd_kobj and qsd_kobj_unregister are still the zeroed OBD_ALLOC_PTR memory. kobject_put() then WARNs (state_initialized == 0) and never calls the release, and wait_for_completion() adds to a swait_queue_head whose task_list is {NULL, NULL}, which faults in list_add().

dt_tunables_fini(), which this looks modelled on, keeps the put and wait inside `if (dt->dd_def_attrs)` for exactly this reason. Should the same guard be used here?
Arshad Hussain PS23 · 2026-09-16 04:19
This is legit and a defect.
reply PS23 2026-09-15 20:50 Gerrit AI review for Lustre qsd_lib.c:651 — (defect) Two problems in this error block:
Gerrit AI review for Lustre PS23 · 2026-09-15 20:50
(defect) Two problems in this error block:

The link is created on the parent, `sysfs_create_link(&dev->dd_kobj, ...)`, so removing it from `&qsd->qsd_kobj` is a no-op and the `quota_slave` link is left behind.

After this kobject_put() drops the last reference, qsd_init() still routes through `out:` -> qsd_fini() -> qsd_tunables_fini(), which puts qsd_kobj a second time. That is a refcount underflow on an already-released kobject.
owner James Simmons · uploader James Simmons · PS23 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-8066 quota: migrate quota out of proc

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
63767 master J ✗1B ✓T ✗4R 0/2
LU-20108 sec: support fscrypt natively for Linux 5.15
janitor: 1 test failure unique to this patch — runtests@ldiskfs+DNE:test_1
1 unique failure upstream 18 unresolved L +474 −208
6d
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 7d 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>
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
9d
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 10d 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 0/2−
LU-14291 utils: don't build gss server utilies for clients
needs rebase — checkpatch: cannot be cherry-picked
5 unresolved S +11 −6
10d
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 80d 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
37013 master J ✗1B ✓T ✗2R 0/2
LU-9868 llite: use d_splice_alias for directories.
janitor: 1 test failure unique to this patch — sanity-slow@zfs:test_64b
1 unique failure upstream 10 unresolved M +43 −11
11d
janitor: 1 test failure unique to this patch — sanity-slow@zfs:test_64b
enforced failed: review-dne-zfs-part-2, review-dne-zfs-part-4
10 unresolved thread(s) await your reply — last from Oleg Drokin
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-slow@zfs:test_64bseen in 3 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-2 RHEL 10.1 / x86_64 ran 11 tests. 1 tests failed: sanity-lfsck. session
review-dne-zfs-part-4 crashed RHEL 9.7 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. %% THIS TEST SESSION CRASHED %% session
build #131086 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Lai Siyao, Neil Brown, Andreas Dilger, Alex Zhuravlev, Oleg Drokin
patchsets:
+26 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
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS28 2026-07-23 02:10 Oleg Drokin COMMIT_MSG:39 — I think this is basically a change to the fixture of Lustre since the beginning of time so there's nothing to declare here?
Andreas Dilger PS28 · 2026-07-22 23:04
Should this get a `Fixes:` label?
Oleg Drokin PS28 · 2026-07-23 02:10
I think this is basically a change to the fixture of Lustre since the beginning of time so there's nothing to declare here?
reply PS31 2026-07-24 08:25 Gerrit AI review for Lustre COMMIT_MSG:21 — (minor) The double-iput fix described here lands in revalidate_statahead_dentry(), not ll_statahead_interpret(). The latter only igrab()s th
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.
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre COMMIT_MSG:51 — (minor) Not a bug, but is "both of them consequences of the OBF namespace" complete? d_lustre_invalidate() only sets a flag (llite_internal.
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(minor) Not a bug, but is "both of them consequences of the OBF namespace" complete? d_lustre_invalidate() only sets a flag (llite_internal.h), so a directory renamed on another client keeps its old-parent dentry hashed and on the inode alias list. A later lookup of the new path then gets that alias from __d_find_any_alias(), with a different d_parent and no .lustre/fid anywhere in the picture, so it takes the same cross-parent __d_unalias() trylock path and the same -ESTALE.

That is ordinary d_splice_alias() semantics and not a reason to change the patch, but as written the paragraph reads as if the by_fid test bounds the new -ESTALE exposure, and it doesn't.
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 PS28 2026-07-23 02:10 Oleg Drokin namei.c:637 — after some more thinking, this looks wrong.
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)
reply PS31 2026-07-24 08:25 Gerrit AI review for Lustre namei.c:637 — (defect) For regular files this throws away a still-usable alias instead of reusing it. Before this patch ll_find_alias()'s invalid alias wa
Gerrit AI review for Lustre PS31 · 2026-07-24 08:25
(defect) For regular files this throws away a still-usable alias instead of reusing it. Before this patch ll_find_alias()'s invalid alias was always d_move()'d and reused; a d_lustre_invalid() dentry just means the LOOKUP lock was dropped, which is the common case. Now every non-directory lookup that finds such an alias discards it (d_invalidate() + dput()) and re-adds a fresh dentry via d_add().

An open note on an earlier patchset raised the same doubt and is still unresolved. Should the discard be gated on the by_fid / directory case only, leaving regular-file aliases to be reused as before?
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre namei.c:655 — (style) This isn't a bug, but %pd prints the raw name and bypasses the filename obfuscation that obd_enable_fname_encoding controls. The res
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(style) This isn't a bug, but %pd prints the raw name and bypasses the filename obfuscation that obd_enable_fname_encoding controls. The rest of namei.c uses DNAME with encode_fn_dentry(), e.g.

    "cannot splice inode %p as "DNAME": rc = %d\n", inode, encode_fn_dentry(de), ...
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre namei.c:665 — (nit) de cannot be NULL here - the argument is never NULL and the else branch only reassigns it when d_splice_alias() returned non-NULL - so
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(nit) de cannot be NULL here - the argument is never NULL and the else branch only reassigns it when d_splice_alias() returned non-NULL - so IS_ERR_OR_NULL() is just IS_ERR(). It also reads oddly next to the plain !IS_ERR(de) guard a few lines below; if the patch is refreshed anyway, making both the same would help.
reply PS33 2026-09-04 22:14 Misc Code Checks Robot (Gatekeeper helper) namei.c:679 — warn: ll_splice_alias():'de' can also be NULL
Misc Code Checks Robot (Gatekeeper helper) PS33 · 2026-09-04 22:14
warn: ll_splice_alias():'de' can also be NULL
reply PS33 2026-09-06 15:06 Gerrit AI review for Lustre namei.c:800 — (minor) This comment now says the opposite of what the code requires: d_splice_alias() opens with BUG_ON(!d_unhashed(de)), and the commit me
Gerrit AI review for Lustre PS33 · 2026-09-06 15:06
(minor) This comment now says the opposite of what the code requires: d_splice_alias() opens with BUG_ON(!d_unhashed(de)), and the commit message spends a paragraph establishing that no caller ever hands over a hashed dentry. Worth rewording while it is being touched (and it carries two typos, "Atoimc" and "passin").
owner James Simmons · uploader Oleg Drokin · PS33 uploaded 12d 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 -- the useful
      direction, but a direction 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 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
68287 master J !B ✗T –R 0/2
LU-14291 obdclass: unwind server code out of llog
build failure (#130151)
XL +1100 −1073
22d
janitor run: build failed — no tests ran — janitor results
build #130151 FAILURE
owner James Simmons · uploader James Simmons · PS1 uploaded 23d 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
45882 master J ✗1B ✓T ✗5R 0/2
LU-8130 ldlm: convert ldlm_resource hash to rhashtable
janitor: 1 test failure unique to this patch — sanity-pcc@ldiskfs+DNE:test_22
1 unique failure upstream 19 unresolved L +441 −347
28d
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 28d 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
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
34d
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 35d 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 0/2−
LU-18652 tests: no compression with zfs create / zpool setup
needs rebase — checkpatch: cannot be cherry-picked
rocky8 S +9 −11
46d
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 537d 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>
65688 master J ✗21B ✗T –R 0/2−
LU-18041 obd: mgc uses real uuid for its uuid to NID mapping
build failure (#128071)
21 unique failures 2 unresolved M +67 −48
51d
build failure (#128071)
janitor: 21 test failures unique to this patch — conf-sanity4@ldiskfs+DNE:test_153a, conf-sanity4@ldiskfs+DNE:test_153c, racer@ldiskfs+DNE:test_1 +18 more
Andreas Dilger voted -1
2 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity4@ldiskfs+DNE:test_153aseen in 22 other reviews
conf-sanity4@ldiskfs+DNE:test_153cseen in 1 other review
racer@ldiskfs+DNE:test_1seen in 48 other reviews
sanity-scrub@ldiskfs+DNE:test_1aseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_1cseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_4aseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_4bseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_4cseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_5seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_6seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_7seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_8seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_9seen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_10aseen in 2 other reviews
sanity-scrub@ldiskfs+DNE:test_15seen in 2 other reviews
sanity-scrub@zfs:test_1aseen in 2 other reviews
sanity-scrub@zfs:test_1bseen in 2 other reviews
sanity-scrub@zfs:test_4aseen in 2 other reviews
sanity-scrub@zfs:test_5seen in 2 other reviews
sanity-scrub@zfs:test_10aseen in 2 other reviews
sanity-scrub@zfs:test_12seen in 2 other reviews
build #128071 FAILURE
reviews: Andreas Dilger -1 2026-07-24 17:59
no vote yet: Serguei Smirnov, Mikhail Pershin
patchsets: PS1 05-06 PS2 07-14 PS3 07-16 PS4 07-24
threads: 0 need your reply · 2 waiting on others · 0 own notes · 0 bot
owner James Simmons · uploader James Simmons · PS4 uploaded 54d 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
65397 master J !B ✗T –R 0/2−
LU-0000 obdclass: rollback testing
needs rebase — checkpatch: cannot be cherry-picked
S +2 −17
68d
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 146d 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
S +13 −15
76d
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 788d 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
1 unresolved S +21 −11
86d
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 259d 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 3/2−
LU-8980 libcfs: add tracepoint support for libcfs
needs rebase — checkpatch: cannot be cherry-picked
XL +3118 −254
93d
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 3327d 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 0/2−
LU-14291 gss: seperate out the client from server code.
needs rebase — checkpatch: cannot be cherry-picked
1 unique failure stalled 111d M +86 −44
111d
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 139d 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
36612 master J ✗1B ✓T ✗2R 0/2
LU-8585 tests: re-enable fid2path sanity test for subdir mount
janitor: 1 test failure unique to this patch — sanity-quota@ldiskfs+DNE:test_48
1 unique failure stalled 139d M +125 −10
139d
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 139d 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>
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 159d S +9 −18
159d
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 160d 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
4 unique failures stalled 160d 1 unresolved M +105 −28
160d
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 1155d 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 160d S +20 −10
160d
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 161d 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 160d S +8 −15
160d
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 161d 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 0/2−
LU-19298 lod: use Xarray instead of static arrays for comp entires
needs rebase — checkpatch: cannot be cherry-picked
stalled 169d 1 unresolved L +442 −423
169d
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 278d 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 0/2−
LU-19298 lod: merge different lmm handling togther.
needs rebase — checkpatch: cannot be cherry-picked
2 unique failures stalled 170d L +225 −300
170d
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 381d 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 0/2−
LU-18175 ldlm: replace namespace lock with RCU
needs rebase — checkpatch: cannot be cherry-picked
rocky8 stalled 232d M +62 −75
232d
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 428d 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 278d 7 unresolved M +58 −50
278d
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 511d 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>
45608 master J ✗2B ✓T ✗2R 0/2
LU-10824 llite: remove may_umount() loop
janitor: 2 test failures unique to this patch — conf-sanity-slow@zfs:test_45, conf-sanity-slow@zfs:test_69
2 unique failures upstream stalled 278d 3 unresolved S +15 −17
278d
janitor: 2 test failures unique to this patch — conf-sanity-slow@zfs:test_45, conf-sanity-slow@zfs:test_69
enforced failed: review-ldiskfs-dne
2 unresolved thread(s) await your reply — last from Andreas Dilger
1 thread(s) waiting on others
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity-slow@zfs:test_45NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
conf-sanity-slow@zfs:test_69NEW 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-ldiskfs-dne RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity. session
review-ldiskfs-dne RHEL 9.5 / x86_64 ran 7 tests. 1 tests failed: sanity. session
build #115896 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Andreas Dilger, Neil Brown, Feng Lei
patchsets:
+13 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
threads: 2 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS5 2024-02-28 20:27 Andreas Dilger COMMIT_MSG:11 — I think the issue is a matter of scale. Having your local filesystem fail to unmount because of a transient issue is not a huge deal to cle
Andreas Dilger PS5 · 2023-05-10 20:27
This says that conf-santity test_45 needs to be updated, but I don't see any changes to that test?
Neil Brown PS5 · 2023-06-05 06:40
I don't think it is reasonable to expect "umount -f" to be 100% reliable.  It certainly isn't for NFS.
As long as it helps the unmount processes a long, so a few more tries will succeed, it is enough.

That is unless the lustre community has some firm requirements for -f, which Linux itself doesn't have.
Andreas Dilger PS5 · 2024-02-28 20:27
I think the issue is a matter of scale.  Having your local filesystem fail to unmount because of a transient issue is not a huge deal to clean up, doing it on thousands of nodes is a bigger hassle.

I think a reasonable replacement would be to add a /sbin/umount.lustre script to retry the unmount instead of in the kernel, now that util-linux supports this.  Something like:

 #!/bin/bash
 count=10
 while ((count-- > 0)) && ! umount --internal-only "$@"; do
        sleep 1
 done
reply PS10 2024-06-11 17:11 Andreas Dilger Makefile.am:58 — Feng is correct here - this needs to be added into lustre.spec.in below mount.lustre in the "lustre.files" section:
Feng Lei PS10 · 2024-06-06 08:47
It is not enough to make umount.lustre here. I guess the command should be added into rpm spec files too. Try to install lustre from rpms and check whether umount.lustre is in the system as expected.
But if we can find mnt from superblock as I mentioned in another comment, we don't need to add this new command.
Andreas Dilger PS10 · 2024-06-11 17:11
Feng is correct here - this needs to be added into lustre.spec.in below mount.lustre in the "lustre.files" section:

 /sbin/mount.lustre
+/sbin/umount.lustre
 %if %{with servers}
 /sbin/mount.lustre_tgt
 %endif

It doesn't look like it is needed in the debian/ tree since it doesn't mention "mount.lustre" at all.
owner James Simmons · uploader James Simmons · PS18 uploaded 393d 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 todays util-linux you can provide
umount helper scripts. Create one for Lustre that does the same
thing that the kernel tried to accomplish.

Fixes: 205a57df2787 ("LU-1882 llite: Adding timed wait in ll_umount_begin")
Test-Parameters: trivial testlist=conf-sanity env=ONLY=45,ONLY_REPEAT=100
Change-Id: I1498c6348022bdd6a74db887ffc8836a7a03bab6
Signed-off-by: Rick Mohr <rmohr@ornl.gov>
Signed-off-by: James Simmons <jsimmons@infradead.org>
58304 master J !B ✓T ✗1R 0/2−
LU-18657 pcc: invalidate instead of truncate inode mapping
enforced failed: custom-1001
stalled 282d 1 unresolved XS +2 −2
282d
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 286d 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 318d 1 unresolved XS +1 −1
318d
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 694d 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 0/2−
LU-18544 utils: handle special lnetctl import for route setup
needs rebase — checkpatch: cannot be cherry-picked
2 unique failures IPv6 stalled 344d 2 unresolved M +155 −0
344d
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 386d 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
55818 master J ✗2B ✓T ✗29R 0/2−
LU-18884 osp: use UUIDs instead of NIDs for LWP setup
janitor: 2 test failures unique to this patch — runtests-ssk@ldiskfs+SharedKey:test_1, runtests@zfs:test_1
2 unique failures IPv6 stalled 359d 1 unresolved S +24 −11
359d
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 failed 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 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 466d 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>
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 408d L +297 −19
408d
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 1815d 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
stalled 408d M +61 −24
408d
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 2838d 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 408d S +4 −9
408d
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 701d 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 408d S +10 −36
408d
build #78732 FAILURE
no vote yet: Minh Diep, Alex Zhuravlev
owner James Simmons · uploader James Simmons · PS8 uploaded 2071d 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 408d M +4 −151
408d
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 2371d 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 408d S +0 −29
408d
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 2418d 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 408d XS +4 −1
408d
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 1904d 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 408d M +86 −34
408d
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 1008d 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 0/2−
LU-9897 build: add real versioning to liblustreapi
needs rebase — checkpatch: cannot be cherry-picked
stalled 409d XS +7 −2
409d
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 2111d 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 0/2−
LU-2096 sysfs: symlinks for forward compatibility
needs rebase — checkpatch: cannot be cherry-picked
2 unique failures stalled 409d M +101 −12
409d
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 580d 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>
31478 master J –B ✓T ✗5R 0/2−
LU-10937 sptlrpc: make srpc_info writable
needs rebase — checkpatch: cannot be cherry-picked
stalled 409d L +165 −170
409d
needs rebase — checkpatch: cannot be cherry-picked
enforced failed: custom-101, review-dne-part-1, review-dne-zfs-part-1, review-ldiskfs, review-ldiskfs-arm
failed enforced testplatformdetail
custom-101 crashed CentOS 7.0/x86_64 ran 7 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-part-1 crashed CentOS 7.0/x86_64 ran 8 tests. 2 tests failed: recovery-small, sanity. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-1 crashed CentOS 7.0/x86_64 ran 8 tests. 3 tests failed: recovery-small, sanityn, sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs crashed CentOS 7.0/x86_64 ran 6 tests. 1 tests failed: sanity. %% THIS TEST SESSION CRASHED %% session
review-ldiskfs-arm RHEL 7.6/aarch64, RHEL 7.6/x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #5357 SUCCESS
no vote yet: Sebastien Buisson, Peter Jones, Nathan Lavender
owner James Simmons · uploader Sebastien Buisson · PS14 uploaded 2673d ago · NEW · open in Gerrit ↗
commit message
LU-10937 sptlrpc: make srpc_info writable

Lustre allows tuning of many nodes from the MGS server. Their
are two ways to do this and currently sptlrpc can only be set
by one method. This patch enables the other approach of setting
the sptlrpc by making the debugfs file srpc_info writable which
can now accept new configurations.

Test-Parameters: envdefinitions=SHARED_KEY=true testlist=sanity,recovery-small,sanity-sec
Change-Id: If8ca36dbfce20c13ab603835cf5d77fbc19de7a8
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
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 415d S +10 −18
415d
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 535d 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 415d XS +1 −1
415d
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 1226d 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 415d XS +1 −1
415d
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 828d 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 ✗24R 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 415d S +4 −9
415d
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 failed 2× 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 463d 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>
57671 master J ✗2B ✓T ✗6R 0/2−
LU-10499 pcc: Add --pin option for 'lfs pcc attach' command
janitor: 2 test failures unique to this patch — sanity-pcc@ldiskfs+DNE:test_204a, sanity-pcc@zfs:test_204a
2 unique failures stalled 617d L +335 −24
617d
janitor: 2 test failures unique to this patch — sanity-pcc@ldiskfs+DNE:test_204a, sanity-pcc@zfs:test_204a
enforced failed: custom-1001, review-dne-part-7, review-dne-subtest-change, review-dne-zfs-part-7, review-dne-zfs-subtest-change
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-pcc@ldiskfs+DNE:test_204aNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity-pcc@zfs:test_204aNEW 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 3 tests. 1 tests failed: sanity-pcc. 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-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
review-dne-zfs-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-pcc. session
2 optional test failure(s) — informational
build #110116 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Feng Lei
owner James Simmons · uploader James Simmons · PS1 uploaded 617d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: Add --pin option for 'lfs pcc attach' command

If --pin option is provided, 'lfs pcc attach' command will
first pin then attach a file. So that user does not need
to run them separately.

EX-5936 pcc: dont take UPDATE lock when set lustre.pin xattr

In this patch, we do not take UPDATE lock whan set lustre.pin
XATTR during the PCC pin command.
The reason is that it may revoke the combined UPDATE|LAYOUT lock
cached on the client namespace, and invalidate the layout and PCC
cache.

As we disable to cache lustre.pin xattr on the client XATTR cache,
so it does not cause problem without taking UPDATE lock bit during
set lustre.pin XATTR.

Add test case: sanity-pcc/204d.
Was-Change-Id: I35a0e399294020efdb0e4710500e8f7b846c290f

EX-7395 pcc: use llapi_open_by_fid to check pinned files

When check whether a file was pinned in PCC backend, it reported:
"cannot read or parse pin xattr of file
'/lustre/fsr/.lustre/fid/[0x780001b83:0x2138:0x0]'.: No such file
or directory (2)"

The failure reason is that open by FID is not configured for
subdirectory mounts.
In this patch, we use llapi_open_by_fid (which supports for
subdirectory mount) to open the file to solve this error.
Was-Change-Id: If0120d745418836cfdf449a795b6f524c40f9c27

Change-Id: Iee873821ff5815fd6b56ed8f4c48147f5ef9321f
Test-Parameters: testlist=sanity-pcc
EX-bug-id: EX-5102 EX-5176 EX-5477 EX-5936 EX-7395
Signed-off-by: Lei Feng <flei@whamcloud.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
53594 master J ✗4B ✓T ✗2R 0/2−
LU-10391 tests: debug ping failures
needs rebase — checkpatch: cannot be cherry-picked
4 unique failures IPv6 stalled 622d XS +1 −1
622d
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 695d 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 4067d L +194 −74
4067d
no vote yet: Frank Zago
owner James Simmons · uploader James Simmons · PS1 uploaded 4073d 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

(9)
68047 master J !B ✓T ✓R 0/2
LU-19768 obd: Create new framework for obd_device based Netlink
1 unresolved thread(s) await your reply — last from Andreas Dilger
3 unresolved L +500 −230
1d
1 unresolved thread(s) await your reply — last from Andreas Dilger
CI green — no vote yet from Andreas Dilger, Minh, Timothy Day
2 thread(s) waiting on others
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131040 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Minh, Timothy Day
patchsets:
+18 earlier PS1 08-17 PS2 08-18 PS3 08-18 PS4 08-19 PS5 08-20 PS6 08-20 PS7 08-21 PS8 08-21 PS9 08-23 PS10 08-23 PS11 08-24 PS12 08-25 PS13 08-25 PS14 08-26 PS15 08-27 PS16 08-28 PS17 08-29 PS18 08-31
PS19 08-31 PS20 09-01 PS21 09-01 PS22 09-03 PS23 09-04
threads: 1 need your reply · 2 waiting on others · 0 own notes · 0 bot
reply PS23 2026-09-14 20:28 Andreas Dilger patchset comment — The proof will be in the follow-on patches being smaller than the existing ones. The other patch has +450 LOC for the base patch (with only
Timothy Day PS23 · 2026-09-10 12:33
Why are you working on a alternate version of the netlink patch series? What's the point?
James Simmons PS23 · 2026-09-10 13:26
Its a much simpler API than what has been developed. The other abstract doesn't buy much since its just as complicated. The goal here is to make the effort as little as possible.
Andreas Dilger PS23 · 2026-09-14 20:28
The proof will be in the follow-on patches being smaller than the existing ones.  The other patch has +450 LOC for the base patch (with only marginally more comments, not a full-on AI deluge), and this one is +270, so that is a good start.  

As we previously discussed, having a patch that implements the same functionality on top of this framework matching, say, https://review.whamcloud.com/65205 ("LU-19768 quota: add quota genetlink family") would allow an apples-to-apples comparison.
owner James Simmons · uploader James Simmons · PS23 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-19768 obd: Create new framework for obd_device based Netlink

The netlink API is very complex and each implementation has
repeated code. Create a framework to make implementation
easier and this allows more code sharing. To demostrate this
new API move the target_obd to this new framework.

This new framework actually uses the struct genl_info for its
family field which exposed some issues with older kernels.
Those issues have been fixed.

New features:

1) Enforce setup of min_dump_alloc so we never have sk_buff
   overflow. Common sizes like OBD_GENL_HDR_SIZE and
   OBD_GENL_SOURCE_SIZE are done for you. ctx->setup_keys()
   is used to do implementation specific sizing calculations.

2) Besides ensuring the obd still exist only collect obd
   devices that are attached, set up and not stopping.

3) Each source attribute is per obd device so only emit
   when the obd changes, not once per message.

4) Use Xarray instead of genradix since it has built in
   cursor handling.

5) Use of obd device's obd_minor value instead of the
   obd location string.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I06931716758cb02b353ba3ec37d08a73fb332c69
68228 master J !B ✓T ✓R 0/2
LU-11850 lov: create Netlink interface for pools
18 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
19 unresolved XL +973 −262
12d
18 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: 4 failing config(s), none unique to this patch — janitor results
build #130976 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-23 PS2 08-28 PS3 09-01 PS4 09-03
threads: 18 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 lustre_kernelcomm.h:233 — (typo) The kernel-doc name doesn't match the enum: `lustre_pool_props_attrs` here vs `lustre_pool_prop_attrs` below, and there is no " - des
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(typo) The kernel-doc name doesn't match the enum: `lustre_pool_props_attrs` here vs `lustre_pool_prop_attrs` below, and there is no " - description" after the name. kernel-doc warns:

    lustre_kernelcomm.h:248: expecting prototype for enum lustre_pool_props_attrs. Prototype was for enum lustre_pool_prop_attrs instead

The same slip already exists for lustre_target_prop_attrs, so it looks copied from there - as is the LUSTRE_POOL_ATTR_SOURCE description "obd device targets belong too", which describes targets rather than pools.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre lov_pool.c:306 — (style) This isn't a bug, but `s` is read from `file->private_data` before seq_open() has set it and then reassigned two lines later - the i
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(style) This isn't a bug, but `s` is read from `file->private_data` before seq_open() has set it and then reassigned two lines later - the initializer can just be dropped.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre lov_pool.c:385 — (typo) The reference is now held for the debugfs entry rather than a /proc file.
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(typo) The reference is now held for the debugfs entry rather than a /proc file.
reply PS4 2026-09-04 12:51 Gerrit AI review for Lustre lov_pool.c:138 — (minor) The kernel-doc headers were not renamed along with the functions. contrib/scripts/kernel-doc reports four warnings on this file now:
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(minor) The kernel-doc headers were not renamed along with the functions. contrib/scripts/kernel-doc reports four warnings on this file now:

    lov_pool.c:154: expecting prototype for pool_proc_next(). Prototype was for pool_seq_next() instead
    lov_pool.c:192: expecting prototype for pool_proc_start(). Prototype was for pool_seq_start() instead
    lov_pool.c:243: expecting prototype for pool_proc_stop(). Prototype was for pool_seq_stop() instead
    lov_pool.c:270: expecting prototype for pool_proc_show(). Prototype was for pool_seq_show() instead

The /proc wording in those blocks ("/proc sequence file iteration tracking structure", "Start seq_file iteration via /proc", "inode to store iteration state for /proc") is also stale now that these back a debugfs file.
reply PS4 2026-09-04 12:51 Gerrit AI review for Lustre lov_pool.c:636 — (style) This isn't a bug, but the commented-out call here and the matching one in lustre_pools_end_cb() read as work-in-progress. Lustre C f
Gerrit AI review for Lustre PS4 · 2026-09-04 12:51
(style) This isn't a bug, but the commented-out call here and the matching one in lustre_pools_end_cb() read as work-in-progress. Lustre C files also avoid // comments. Can they come out before this lands?
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?
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:699 — (defect) On the -EMSGSIZE path `hdr` is neither ended nor cancelled, so genlmsg_end() never runs and `nlh->nlmsg_len` still covers only the
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(defect) On the -EMSGSIZE path `hdr` is neither ended nor cancelled, so genlmsg_end() never runs and `nlh->nlmsg_len` still covers only the fixed header.

The LUSTRE_PARAM_ATTR_HDR/SOURCE attributes already appended to the skb therefore sit past `nlmsg_len`, and userspace reads those bytes as the start of the next nlmsghdr.
reply PS3 2026-09-01 18:46 Misc Code Checks Robot (Gatekeeper helper) kernelcomm.c:714 — warn: lustre_obd_genl_many_dump():inconsistent returns '&(ctx->ogc_xas.xa)->xa_lock'.
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-09-01 18:46
warn: lustre_obd_genl_many_dump():inconsistent returns '&(ctx->ogc_xas.xa)->xa_lock'.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:1445 — (minor) The `! ` prefix is skipped but nothing ever negates the match - lov_pool_list() just does `glob_match(poolname, pool->pool_name)`, s
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(minor) The `! ` prefix is skipped but nothing ever negates the match - lov_pool_list() just does `glob_match(poolname, pool->pool_name)`, so `! foo` selects the same pools as `foo`. No other parameter path in the tree uses a `! ` prefix either. Is the exclusion meant to be implemented, or can this come out?
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:1540 — (defect) `all` is fixed at three slots, but `start` ends up declaring one NLA_NESTED attribute per pool, and lnet_genl_parse_list() consumes
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(defect) `all` is fixed at three slots, but `start` ends up declaring one NLA_NESTED attribute per pool, and lnet_genl_parse_list() consumes one sub-list from `data[]` for each NLA_NESTED key it emits:

    rc = lnet_genl_parse_list(msg, data, ++idx);
    idx = rc;

With two pools the second nested key looks at `data[2]`, which is NULL, so parse_list() returns 0 without emitting anything and resets `idx` to 0; the third nested key then re-uses `data[1]`. lustre_stats_dump() allocates `ls_num + 2` and fills `all[1..ls_num]` for exactly this reason.

Should this be `pool_count + 2` with `all[1..pool_count]` all pointing at `props`? lustre_pools_free_keys() hard-codes 3 in its OBD_FREE_PTR_ARRAY() as well.
reply PS3 2026-09-02 20:50 Gerrit AI review for Lustre kernelcomm.c:1554 — (defect) `lkl_list[]` is a flexible array member, so it is not counted by `sizeof(struct ln_key_list)` and this assignment copies only `lkl_
Gerrit AI review for Lustre PS3 · 2026-09-02 20:50
(defect) `lkl_list[]` is a flexible array member, so it is not counted by `sizeof(struct ln_key_list)` and this assignment copies only `lkl_maxattr` - the `pools` and `source` entries stay zeroed from the OBD_ALLOC.

Compiling against the real header gives `sizeof(struct ln_key_list)` = 8 and `sizeof(struct ln_key_props)` = 16, and after `*start = pool_keys` both `lkl_list[1].lkp_value` and `lkl_list[2].lkp_value` are NULL.

lnet_genl_parse_list() then emits those two keys with no LN_SCALAR_ATTR_VALUE and NLA_UNSPEC as the type, so the reply carries no `pools`/`source` names and llapi_param_display_value() never dispatches to print_out_pools(). This branch is taken as soon as `pool_count > 1`, so does `lfs pool_list` still work on a filesystem with two pools?

Would copying `hdr_len + sizeof(struct ln_key_props) * (LUSTRE_POOL_ATTR_MAX + 1)` bytes from `pool_keys` work here instead of the struct assignment?
owner James Simmons · uploader James Simmons · PS4 uploaded 13d 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 0/2
LU-20587 lnet: expand Netlink support for more peers
10 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
10 unresolved M +114 −0
18d
10 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
CI green — no vote yet from Serguei Smirnov, Alexey Lyashkov, Chris Horn
build #130603 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Alexey Lyashkov, Chris Horn
patchsets: PS1 08-20 PS2 08-27 PS3 08-27 PS4 08-29
threads: 10 need your reply · 0 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 COMMIT_MSG:10 — (typo) "for it struct sk_buf" - the type is `struct sk_buff`, and "it" should be "its". Same misspelling on the line below.
Gerrit AI review for Lustre PS3 · 2026-08-28 13:13
(typo) "for it struct sk_buf" - the type is `struct sk_buff`, and "it" should be "its". Same misspelling on the line below.
reply PS3 2026-08-28 13:13 Gerrit AI review for Lustre api-ni.c:7695 — (style) Not a bug, but 2580 has no derivation in the source, so it silently goes stale the next time an attribute is added to lnet_peer_ni_k
Gerrit AI review for Lustre PS3 · 2026-08-28 13:13
(style) Not a bug, but 2580 has no derivation in the source, so it silently goes stale the next time an attribute is added to lnet_peer_ni_keys/lnet_peer_ni_list. Same for the literals below: 64 is LNET_NIDSTR_SIZE and the 128 in the version 4 comment is LNET_MAX_SHOW_NUM_NID - using the macros would at least keep them tied to what they measure.
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:7698 — (typo) LNET_GENL_VERION -> LNET_GENL_VERSION.
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(typo) LNET_GENL_VERION -> LNET_GENL_VERSION.
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:7870 — (defect) Skipping the peer NI walk for version 0 undercounts, because the dump still emits per peer NI at version 0. In lnet_peer_ni_show_du
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(defect) Skipping the peer NI walk for version 0 undercounts, because the dump still emits per peer NI at version 0. In lnet_peer_ni_show_dump() the `if (gnlh->version)` guard only covers the credits/stats block; the nest, LNET_PEER_NI_LIST_ATTR_NID and LNET_PEER_NI_LIST_ATTR_STATE are written for every version:

    nid_list = nla_nest_start(msg, LNET_PEER_NI_ATTR_PEER_NI_LIST);
    while ((lpni = lnet_get_next_peer_ni_locked(lp, NULL, lpni)) != NULL) {
            struct nlattr *peer_nid = nla_nest_start(msg, count++);
            nla_put_string(msg, LNET_PEER_NI_LIST_ATTR_NID, ...);

That is 4 + nla_total_size(strlen(nid) + 1) + nla_total_size(5) per peer NI, plus 4 for the nid_list nest, none of which appears in PEER_VERSION_0_VALUES_MSG_SIZE.

For a peer with a 17-character NID: 20 (genl header) + 24 (primary nid) + 4 (multirail) + 4 (nest) + 40 per peer NI. One NI is 92 and fits in 136; three NIs is 172 and does not. Longer NIDs push the single-NI case over as well.

Version 0 is not a corner case - `lnetctl peer show` with no -v passes detail = 0 as the genl version (lnetctl.c jt_show_peer()), and `lnetctl peer list` passes 0 literally, so this is the common invocation.

Related: the per-peer-NI NID string is not charged in any of the PEER_VERSION_* terms. For version >= 1 the slack in PEER_VERSION_1_VALUES_MSG_SIZE happens to absorb it, but nothing in the table accounts for it, so it goes wrong again the next time one of these constants is tightened. LNET_PEER_NI_ATTR_HDR is documented as 48 bytes here but is nla_put_string(msg, ..., ""), i.e. 8 bytes, and only for the first peer - that leftover is what makes the version 0 number look adequate.
reply PS4 2026-08-30 07:06 Gerrit AI review for Lustre api-ni.c:7878 — (minor) This builds the whole UDSP info for every peer NI - lnet_udsp_get_construct_info() does a peer table hash lookup and fills a ~2KB st
Gerrit AI review for Lustre PS4 · 2026-08-30 07:06
(minor) This builds the whole UDSP info for every peer NI - lnet_udsp_get_construct_info() does a peer table hash lookup and fills a ~2KB struct - and the only thing read back is `cud_pref_rtr_nid[0] != 0`. That is just `!list_empty(&lpni->lpni_rtr_pref_nids)`, which needs no buffer and no lookup.

Related to the same allocation: it is done unconditionally at the top, so version 0 and versions 1-3 pay for a buffer they never touch, and LIBCFS_ALLOC_ATOMIC uses GFP_ATOMIC even though this is ->start() in process context - the genradix_ptr_alloc() calls a few lines above use GFP_KERNEL.

Worth noting the cost overall: this loop repeats the peer and peer NI traversal that lnet_peer_ni_show_dump() then does again, under ln_api_mutex, so `lnetctl peer show -v 4` now walks every peer twice.
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?
owner James Simmons · uploader James Simmons · PS4 uploaded 18d 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
65110 master J ✗7B ✓T ✓R 0/2
LU-9680 utils: remove forced debugfs mounting
5 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
5 unresolved S +0 −24
37d
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 38d 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
55554 master J ✗1B ✓T ✓R 0/2
LU-14636 pcc: reproduce hang in sanity-pcc 7a
2 unresolved thread(s) await your reply — last from Andreas Dilger
2 unresolved XS +6 −2
48d
2 unresolved thread(s) await your reply — last from Andreas Dilger
CI green — no vote yet from Qian Yingjin
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-hsm@zfs:test_52seen in 13 other reviews
build #114094 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin
patchsets: PS1 06-27 PS2 06-27 PS3 12-10 PS4 03-07 PS5 06-09
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-07-31 11:38 Andreas Dilger COMMIT_MSG:9 — It would be useful to have an explanation of what the problem is, and what this patch is doing to fix it.
Andreas Dilger PS5 · 2026-07-31 11:38
It would be useful to have an explanation of what the problem is, and what this patch is doing to fix it.

Is it intended for landing or just running testing?
reply PS5 2026-07-31 11:37 Andreas Dilger multiop.c:860 — Please fix if patch is refreshed.
wc-checkpatch PS5 · 2025-06-09 13:37
(style)  space required before the open brace '{'
Andreas Dilger PS5 · 2026-07-31 11:37
Please fix if patch is refreshed.
owner James Simmons · uploader James Simmons · PS5 uploaded 465d ago · NEW · open in Gerrit ↗
commit message
LU-14636 pcc: reproduce hang in sanity-pcc 7a

Test to see if this is still a problem.

Test-Parameters: trivial testlist=sanity-pcc
Change-Id: I1e0ad250e0c957f5d52f65d587d6d5cadfd9b3f3
Signed-off-by: James Simmons <jsimmons@infradead.org>
13135 master J –B ✓T ✓R 2/2−
LU-6034 lnet: Enable lnetctl to handle checksum settings for LNet
Oleg Drokin voted -1
stalled 408d S +33 −7
408d
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 4063d 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 0/2−
LU-11621 utils: optimize lustre_rsync with copy_file_range()
John Hammond voted -1
stalled 415d S +16 −1
415d
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 2142d 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 0/2−
LU-12251 tests: re-enable running sanity-flr for PPC
Andreas Dilger voted -1
stalled 415d XS +1 −2
415d
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 1377d 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 0/2−
LU-12252 tests: re-enable running sanity-hsm for PPC
Andreas Dilger voted -1
stalled 415d S +0 −22
415d
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 1378d 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

(3)
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 408d S +39 −0
408d
build #18181 SUCCESS
no vote yet: Andreas Dilger
owner James Simmons · uploader James Simmons · PS17 uploaded 2108d 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>
39910 master J ✗2B ✓T ✓R 0/2−
LU-13745 test: add PCC test for splice handling
CI green — no vote yet from Wang Shilong, Qian Yingjin, Andreas Dilger
stalled 408d S +30 −0
408d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-pcc@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-pcc@zfs:test_21NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #86116 SUCCESS · tests all Maloo sessions
no vote yet: Wang Shilong, Qian Yingjin, Andreas Dilger
owner James Simmons · uploader James Simmons · PS4 uploaded 1682d ago · NEW · open in Gerrit ↗
commit message
LU-13745 test: add PCC test for splice handling

Add a test to exercise splice() and eventually sendfile() handling
with PCC.

Test-Parameters: trivial env=ONLY=21 testlist=sanity-pcc

Change-Id: Iae2517110c7332a81d0334232772ef1844d320ae
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 2140d M +54 −22
2140d
build #17528 SUCCESS
no vote yet: Andreas Dilger
owner James Simmons · uploader James Simmons · PS1 uploaded 2142d 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

(2)
24560 master J –B ✓T ✓R 0/2
LU-8980 llite: add tracepoint support for llite layer
XL +905 −509
93d
no vote yet: Dmitry Eremin, Jinshan Xiong, Lustre Buildbot
owner James Simmons · uploader James Simmons · PS1 uploaded 3546d 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 1265d S +9 −9
1265d
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 1483d 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)
68358 master J ✓B ✓T ✓R 2/2
LU-9680 utils: handle very large netlink message in liblnetconfig
all green — ready to land (not in master-next yet)
M +107 −9
1d
reviews: Serguei Smirnov +1 2026-09-15 22:22 · Chris Horn +1 2026-09-16 17:22
no vote yet: Andreas Dilger, Minh
patchsets:
+5 earlier PS1 08-26 PS2 08-27 PS3 08-27 PS4 09-01 PS5 09-03
PS6 09-04 PS7 09-07 PS8 09-08 PS9 09-14 PS10 09-14
owner James Simmons · uploader James Simmons · PS10 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-9680 utils: handle very large netlink message in liblnetconfig

A few scaling patches have exposed a problem in the liblnetconfig
library when receiving message from kernel space. Currently we
examine if the remaining space falls below a certain level, 1024
bytes, then we increase the internal buffer size to receive the
next Netlink message. It is possible that the next Netlink message
is much larger than the remaining 1024 bytes. This patch changes
it to compare the calculated size needed to fit the unpacked
Netlink packet into the internal buffer. Be aware the internal
buffer consumes more space than the size of the received Netlink
packet so we scale it by 4 which covers most cases. The new
buffer size is to ensure it's large enough to cover the next
Netlink packet. A few other issues are addressed as well. Now
data->read is correctly preserved which matters for Netlink
streaming. On error of realloc() we preserve data->start so
it doesn't leak. Lastly set data->error to an errno code
return from a new function nlerr2syserr() which was missed
for yaml_netlink_read_handler(). Unlike most c applications
Lustre utilities treat errno as a negative value. Its still
can be used by strerror().

Test-Parameters: trivial
Fixes: 985fc4fa2caf ("LU-14391 utils: handle very large YAML data sets.")
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I60d81bd21496f814b1e8e4884dc4d4a5334fd21c
68584 master J !B ✓T ✓R 2/2
LU-9680 lnet: pass version to lnet_genl_send_scalar_list
all green — ready to land (not in master-next yet)
1 unresolved M +42 −16
2d
all green — ready to land (not in master-next yet)
1 reviewer comment(s) to address if a respin is needed — last from Andreas Dilger
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #131016 SUCCESS · tests all Maloo sessions
reviews: Serguei Smirnov +1 2026-09-10 18:22 · Chris Horn +1 2026-09-04 15:22
no vote yet: Andreas Dilger, Minh, Timothy Day
patchsets: PS1 09-02 PS2 09-03 PS3 09-04
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-09-14 20:15 Andreas Dilger api-ni.c:6213 — Most other `gnlh->version` checks use `if (!gnlh->version) goto XXX` to skip the code (even for a few lines), but this huge block of code is
Andreas Dilger PS3 · 2026-09-14 20:15
Most other `gnlh->version` checks use `if (!gnlh->version) goto XXX` to skip the code (even for a few lines), but this huge block of code is indented. It would be better to move these 200 lines of code into a separate function instead of keeping it inline in this sprawling 400-line function.
owner James Simmons · uploader James Simmons · PS3 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-9680 lnet: pass version to lnet_genl_send_scalar_list

By default genlmsg_put() sets the message version to the default
genl_family version. That is the latest version. Much of our
Netlink handling involves requesting that a specific version
of a message be sent back to user land and user land can query
the received version. This change ensures the correct version
is sent with the key table message.

Test-Parameters: trivial
Fixes: 3c39dac19aa ("LU-9680 utils: add netlink infrastructure")
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I16bac147b69b0761b96aa9f5c01222b8353355c4
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 1483d L +225 −187
1483d
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 1485d 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

37 open

Failed / broken

(14)
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
1d
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 2d 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>
56434 master J !B ✓T ✗1R 3/2
LU-18231 obd: change obd_recovery_expired into OBDF_RECOVERY_EXPIRED
carrying Ronnie Sahlberg · enforced failed: review-dne-zfs-part-6
S +10 −12
7d
janitor run: 6 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-6 RHEL 9.7 / x86_64 ran 4 tests. 2 tests failed: ost-pools, replay-single. session
build #131250 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-07 14:18 · Arshad Hussain +1 2026-09-07 14:18 · Timothy Day +1 2026-09-10 16:04
no vote yet: Andreas Dilger
patchsets:
+5 earlier PS1 09-20 PS2 09-20 PS3 09-20 PS4 10-01 PS5 10-02 Andreas Dilger
PS6 08-03 James Simmons PS7 08-25 James Simmons PS8 08-25 James Simmons PS9 09-03 James Simmons PS10 09-07 James Simmons
your previous vote: +1 on PS9 (2026-09-03 18:50) — now at PS10
owner Ronnie Sahlberg · uploader James Simmons · PS10 uploaded 10d ago · NEW · open in Gerrit ↗
commit message
LU-18231 obd: change obd_recovery_expired into OBDF_RECOVERY_EXPIRED

obd_recovery_expired is set from interrupt context and
was moved to a dedicated bitfield variable in
commit 848d709605948 ("b=17760 Separate locking for obd
bitfield and recovery") as to avoid having to use locking
from within the interrupt context.

As we now have migrated to use atomic {test|set|clear}_bit
operations to set individual bits we no longer depend on
spinlocks when accessing them and can thus move this bit
back into the bitmap.

Signed-off-by: Ronnie Sahlberg <rsahlberg@whamcloud.com>
Change-Id: I81a2a7efc057b67cdfd82ca978116d44bbca82b8
57948 master J !B ✓T ✗2R 1/2−
LU-18689 ptlrpc: ensure import exist for sec debugfs files
carrying Oleg Drokin · needs rebase — checkpatch: cannot be cherry-picked
M +63 −55
13d
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 433d 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
54225 master J !B ✓T ✓R 1/2−
LU-17594 ptlrpc: remove ptlrpc_connection hash table
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
4 unresolved L +247 −400
64d
needs rebase — checkpatch: cannot be cherry-picked
Timothy Day voted -1
4 unresolved thread(s) await your reply — last from Oleg Drokin
no vote yet from Shaun Tancheff, Chris Horn, Andreas Dilger, Neil Brown
janitor run: 2 failing config(s), none unique to this patch — janitor results
5 optional test failure(s) — informational
build #122221 SUCCESS · tests all Maloo sessions
reviews: Serguei Smirnov +1 2026-03-12 16:07 · Timothy Day -1 2026-03-21 17:33
no vote yet: Shaun Tancheff, Chris Horn, Andreas Dilger, Neil Brown, Mikhail Pershin
patchsets:
+11 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
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS16 2026-03-22 01:20 Oleg Drokin lproc_ptlrpc.c:34 — all these need to be static
Misc Code Checks Robot (Gatekeeper helper) PS16 · 2026-03-10 00:04
warning: sparse:symbol 'ptlrpc_pmqos_use_stats_for_duration' was not declared. Should it be static?
Oleg Drokin PS16 · 2026-03-22 01:20
all these need to be static
reply PS16 2026-03-22 01:20 Oleg Drokin lproc_ptlrpc.c:1482 — and this one too.
Misc Code Checks Robot (Gatekeeper helper) PS16 · 2026-03-10 00:04
warning: sparse:symbol 'cpus_latency_qos' was not declared. Should it be static?
Oleg Drokin PS16 · 2026-03-22 01:20
and this one too.
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.
owner Timothy Day · uploader James Simmons · PS16 uploaded 191d 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
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 163d L +154 −115
163d
no vote yet: Sebastien Buisson, Nathan Lavender, Chris Hanna
owner James Nunez · uploader James Simmons · PS4 uploaded 3394d 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 244d M +221 −5
244d
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 2332d 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 3/2−
LU-18162 obdclass: standardize class_(un)register_type
carrying Timothy Day · needs rebase — checkpatch: cannot be cherry-picked
stalled 245d 2 unresolved L +216 −201
245d
needs rebase — checkpatch: cannot be cherry-picked
Verified -1 veto by Oleg Drokin
2 unresolved thread(s) await your reply — 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 417d 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 0/2−
LU-17022 obdclass: convert more flags to bitops
carrying Neil Brown · needs rebase — checkpatch: cannot be cherry-picked
stalled 357d M +57 −41
357d
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 567d 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 0/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 408d L +789 −117
408d
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 2312d 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 408d L +346 −147
408d
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 2662d 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 408d XL +4700 −204
408d
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 1660d 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
41196 master J ✗2B ✓T ✗18R 0/2−
LU-14319 layout: make foreign layout as a mirror component
carrying Qian Yingjin · janitor: 2 test failures unique to this patch — sanity-flr@ldiskfs+DNE:test_212, sanity-flr@zfs:test_212
2 unique failures stalled 408d L +448 −222
408d
janitor: 2 test failures unique to this patch — sanity-flr@ldiskfs+DNE:test_212, sanity-flr@zfs:test_212
enforced failed: review-dne-part-1, review-dne-part-4, review-dne-part-7, review-dne-selinux-ssk-part-1, review-dne-subtest-change, review-dne-zfs-part-1, review-dne-zfs-part-4, review-dne-zfs-part-7, review-dne-zfs-subtest-change, review-ldiskfs, review-ldiskfs-ubuntu, review-zfs
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-flr@ldiskfs+DNE:test_212NEW unique failure for this branch in the last 30 days, and was seen 1 times across 1 other branches 1 reviews
sanity-flr@zfs:test_212NEW 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 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity. session
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. 1 tests failed: sanity-flr. session
review-dne-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-part-7 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-part-7 crashed RHEL 9.3 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-flr. session
review-dne-zfs-part-1 RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: sanity-flr. session
review-dne-zfs-part-7 crashed RHEL 8.10 / x86_64 ran 4 tests. 1 tests failed: sanity-pcc. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity-flr. session
review-ldiskfs RHEL 8.10 / 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 RHEL 8.10 / x86_64, RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 9.4 / 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-lnet, sanity. session
review-zfs RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: sanity-flr. session
8 optional test failure(s) — informational
build #109664 SUCCESS · tests all Maloo sessions
no vote yet: Etienne AUJAMES, Andreas Dilger, Zhenyu Xu
patchsets: PS6 09-10 James Simmons PS7 12-11 James Simmons PS8 12-11 James Simmons PS9 12-11 James Simmons PS10 12-13 James Simmons
owner Qian Yingjin · uploader James Simmons · PS10 uploaded 642d ago · NEW · open in Gerrit ↗
commit message
LU-14319 layout: make foreign layout as a mirror component

A closer coupling between the HSM archive state/PCC-RW/PCC-RO (a
kind of a foreign layout) and Lustre File Level Redundancy (FLR)
can make PCC and HSM management more consistent with the
management of other replicas in the file system.

This patch adds the basic support to store foreign layout as a FLR
mirror component.

Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: Ic4d699bc512599438a5ef2c1a300099494de1aed
41664 master J ✓B ✗T –R 0/2−
LU-14428 libcfs: replace tracefile buffer with ring_buffer
carrying Neil Brown · build failure (#108522)
stalled 408d 2 unresolved L +220 −766
408d
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 692d 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 408d S +13 −13
408d
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 576d 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

(7)
66083 master J !B ✓T ✓R 1/2
LU-20221 lnet: fix panic in lnet_net_show_dump with >128 NIDs
carrying Malkeet Singh · 3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
4 unresolved M +142 −3
1d
3 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
no vote yet from Robert Read, Serguei Smirnov, Alexander Zarochentsev, Chris Horn
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #130713 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-31 14:06
no vote yet: Robert Read, Serguei Smirnov, Alexander Zarochentsev, Chris Horn, Andreas Dilger, Oleg Drokin, Timothy Day
patchsets:
+14 earlier PS1 05-22 PS2 07-02 PS3 07-02 PS4 07-03 PS5 07-08 PS6 07-09 PS7 08-13 James Simmons PS8 08-13 James Simmons PS9 08-14 James Simmons PS10 08-14 James Simmons PS11 08-20 James Simmons PS12 08-21 James Simmons PS13 08-23 James Simmons PS14 08-24 James Simmons
PS15 08-26 James Simmons PS16 08-27 James Simmons PS17 08-27 James Simmons PS18 08-27 James Simmons PS19 08-31 James Simmons
your previous vote: +1 on PS18 (2026-08-28 15:21) — now at PS19
threads: 3 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS19 2026-08-31 22:48 Gerrit AI review for Lustre COMMIT_MSG:21 — (typo) The test added by this patch is `test_113`, not `test_630`, so the message no longer greps against the code.
Gerrit AI review for Lustre PS19 · 2026-08-31 22:48
(typo) The test added by this patch is `test_113`, not `test_630`, so the message no longer greps against the code.

Also "interace" on the next line.
reply PS19 2026-08-31 22:48 Gerrit AI review for Lustre sanity-lnet.sh:2070 — (style) This isn't a bug, but the `case` is at the same indent as the enclosing `for` body while `esac` is one tab deeper. Both should line
Gerrit AI review for Lustre PS19 · 2026-08-31 22:48
(style) This isn't a bug, but the `case` is at the same indent as the enclosing `for` body while `esac` is one tab deeper. Both should line up one tab inside the loop.
reply PS19 2026-08-31 22:48 Gerrit AI review for Lustre sanity-lnet.sh:2072 — (defect) These rules name `tcp$i` while the nets above are created as `${NETTYPE}$i`. The guard at the top of the test only requires `tcp*`,
Gerrit AI review for Lustre PS19 · 2026-08-31 22:48
(defect) These rules name `tcp$i` while the nets above are created as `${NETTYPE}$i`. The guard at the top of the test only requires `tcp*`, so with `NETTYPE=tcp1` the nets are `tcp11`..`tcp1140` and none of the UDSP rules match anything.
owner Malkeet Singh · uploader James Simmons · PS19 uploaded 17d ago · NEW · open in Gerrit ↗
commit message
LU-20221 lnet: fix panic in lnet_net_show_dump with >128 NIDs

Dumping more than ~128 NIDs at high verbosity exhausts the hardcoded
64 KiB Netlink buffer. When the buffer is full, nla_nest_start()
returns NULL. The code previously failed to check this return value,
resulting in a NULL pointer dereference and an immediate kernel panic.

This patch fixes the crash by specifying the needed sk buffer size.
cb->min_dump_alloc is now dynamically sized based on
lnet_net_size_skb().
While strace profiling shows a typical NI payload takes ~480-520 bytes,
NI_MSG_VALUES_SIZE is set to more than 6Kb bytes. This provides
a safe margin for complex UDSP rulesets and massive IPv6 NIDs.

test_630 is added to sanity-lnet.sh to exercise high-stress
Netlink dumps using 140 LNet nets using the same interace and 50
UDSP policies.

Test-parameters: trivial
Fixes: 8f64231185a9 ("LU-9680 utils: fix nested attribute handling in liblnetconfig")
Signed-off-by: Malkeet Singh <masingh@ddn.com>
Change-Id: If8b55d87c13e3a14cb0335108dd3afedbc7a6c5f
61282 master J !B ✓T ✓R 0/2−
LU-16832 lnet: add nanosecond delay latency support
carrying Sohei Koyama · Andreas Dilger voted -1
2 unresolved M +122 −63
1d
Andreas Dilger voted -1
2 unresolved thread(s) await your reply — last from Andreas Dilger
no vote yet from Chris Horn
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #131198 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger -1 2026-09-14 20:12
no vote yet: Chris Horn
patchsets:
+14 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
your previous vote: +1 on PS18 (2026-09-05 15:29) — now at PS19
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS19 2026-09-14 20:12 Andreas Dilger lib-types.h:1260 — Having a comment block that lists the enum field names but doesn't give them any descriptions is a waste of space.
Andreas Dilger PS19 · 2026-09-14 20:12
Having a comment block that lists the enum field names but doesn't give them any descriptions is a waste of space.
reply PS19 2026-09-14 20:12 Andreas Dilger portals.c:2871 — Makes sense to fix.
Gerrit AI review for Lustre PS19 · 2026-09-07 17:09
(minor) Two things on this line, both for whenever the patch is next refreshed.

`latency` is __u64, so `%lld` is the wrong conversion; `%ju` with a `(uintmax_t)` cast would match the rest of this format string.

More visibly, the value printed here is now nanoseconds when the rule came back over Netlink, but the old_api path below still assigns seconds from attr.u.delay.la_latency, and `lctl net_delay_add -l` is still seconds. So `-l 5` followed by `net_delay_list` reports "latency 5000000000" against a current kernel and "latency 5" against a pre-Netlink one, under the same label. Would it be clearer to convert back to seconds here, or to spell the unit out in the output?
Andreas Dilger PS19 · 2026-09-14 20:12
Makes sense to fix.
owner Sohei Koyama · uploader James Simmons · PS19 uploaded 10d 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
u64 nanoseconds and plumbs it so that sub-second delays
(s/ms/us/ns) 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. The internal timer is moved to hrtimer for
finer level of time resolution.

Test-Parameters: trivial
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I9ed1bd34cef0f0bf647f87d17dd68f05274e2b28
66886 master J !B ✓T ✓R 0/2
LU-18687 build: iov_iter_iovec to iter_iov_len, iter_iov_addr
carrying Shaun Tancheff · 7 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
7 unresolved M +42 −31
2d
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 3d 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
62748 master J !B ✓T ✓R 0/2−
LU-16518 osc: fix -Wunused-but-set-variable warnings
carrying Timothy Day · Timothy Day voted -1
8 unresolved S +7 −7
34d
Timothy Day voted -1
7 unresolved thread(s) await your reply — last from Gerrit AI review for Lustre
1 thread(s) waiting on others
no vote yet from Arshad Hussain, Andreas Dilger
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #129110 SUCCESS · tests all Maloo sessions
reviews: Timothy Day -1 2026-08-13 19:51
no vote yet: Arshad Hussain, Andreas Dilger
patchsets: PS1 11-26 PS2 08-05 James Simmons PS3 08-11 James Simmons
threads: 7 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-06 03:48 Gerrit AI review for Lustre COMMIT_MSG:10 — (defect) The body only describes removing unused variables, but the osc_page.c hunk also adds a new early return when the LRU wait is interr
Gerrit AI review for Lustre PS2 · 2026-08-06 03:48
(defect) The body only describes removing unused variables, but the osc_page.c hunk also adds a new early return when the LRU wait is interrupted. That is a behaviour change, not a variable removal, and nothing in the message accounts for it.

Could the message describe the new abort path (and why it is correct) so a reader isn't surprised by it? If the intent is really just to silence the warning, the alternative would be to drop the assignment entirely and leave the retry loop as-is.
reply PS2 2026-08-06 03:48 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) If the abort-on-signal behaviour is intentional, this is a fix for a loop that could not be interrupted, and it would help to carry
Gerrit AI review for Lustre PS2 · 2026-08-06 03:48
(minor) If the abort-on-signal behaviour is intentional, this is a fix for a loop that could not be interrupted, and it would help to carry a Fixes: tag pointing at the commit that added the uninterruptible retry:

    Fixes: e8b421531c16 ("LU-6271 osc: further OSC cleanup after eviction")
reply PS3 2026-08-11 22:04 Gerrit AI review for Lustre COMMIT_MSG:15 — (minor) This sha doesn't look like the origin of the bug. osc_lru_reserve() as added by e8b421531c16 had no retry loop at all - a single bes
Gerrit AI review for Lustre PS3 · 2026-08-11 22:04
(minor) This sha doesn't look like the origin of the bug. osc_lru_reserve() as added by e8b421531c16 had no retry loop at all - a single best-effort cmpxchg, returning 0 when it could not reserve, and no `rc` variable.

The `again:` loop over an unchecked l_wait_event_abortable() came in later:

    2a34dc95bd10 ("LU-12142 clio: fix hang on urgent cached pages")

and `rc` only became set-but-unused when 776e163cf542 ("LU-17180 ptlrpc: don't block ptlrpcd too long") replaced `rc = ptlrpcd_queue_work(cli->cl_writeback_work); if (rc) return 0;` with a plain schedule_work().

Since the substance of this hunk is making the wait abortable again, 2a34dc95bd10 looks like the right target:

    Fixes: 2a34dc95bd10 ("LU-12142 clio: fix hang on urgent cached pages")
reply PS1 2025-12-02 04:48 Andreas Dilger osc_page.c:1079 — Up here the `rc` is checked and the loop is aborted if the wait is interrupted.
Andreas Dilger PS1 · 2025-12-02 04:48
Up here the `rc` is checked and the loop is aborted if the wait is interrupted.
reply PS2 2026-08-07 05:06 Arshad Hussain osc_page.c:1154 — > (defect) osc_lru_reserve() returns unsigned long, and its value is the number of pages reserved - there is no error channel. Returning -EI
Gerrit AI review for Lustre PS2 · 2026-08-06 03:48
(defect) osc_lru_reserve() returns `unsigned long`, and its value is the number of pages reserved - there is no error channel. Returning -EINTR here hands the caller (unsigned long)-4, i.e. 0xfffffffffffffffc.

osc_io_lru_reserve() stores it verbatim and discards nothing:

    oio->oi_lru_reserved = osc_lru_reserve(osc_cli(osc), npages);
    RETURN(0);

So the I/O keeps running with a bogus reservation, and two things follow.

osc_lru_alloc() takes the reserved-slot shortcut for every page of the I/O:

    if (oio->oi_lru_reserved > 0) {
            --oio->oi_lru_reserved;
            goto out;
    }

cl_lru_busy is incremented but cl_lru_left is never debited, so the LRU budget is bypassed for the rest of the I/O.

Then osc_io_rw_iter_fini() gives the remainder back:

    if (oio->oi_lru_reserved > 0)
            osc_lru_unreserve(osc_cli(osc), oio->oi_lru_reserved);

and osc_lru_unreserve() does atomic_long_add(npages, cli->cl_lru_left) - the huge unsigned value converts to a large negative long, so cl_lru_left is permanently reduced by roughly (4 + pages touched). cl_lru_left points into the mount-wide cl_cache->ccc_lru_left, so every OSC on the mount is affected, and once it goes negative the next unreserved allocation trips

    LASSERT(atomic_long_read(cli->cl_lru_left) >= 0);

in osc_lru_alloc(). The trigger is a fatal signal delivered while a writer waits for LRU slots, which is exactly the case l_wait_event_abortable() exists for.

Would `return 0;` (nothing reserved) work here instead? osc_lru_alloc() then does its own per-page reservation and already handles the abort correctly with `rc = -EINTR; break;`. Alternatively, propagate the failure through osc_io_lru_reserve()'s int return so the I/O actually stops - but that needs the callers of cio_lru_reserve to honour it.
Arshad Hussain PS2 · 2026-08-07 05:06
> (defect) osc_lru_reserve() returns unsigned long, and its value is the number of pages reserved - there is no error channel. Returning -EINTR here hands the caller (unsigned long)-4, i.e. 0xfffffffffffffffc.

This look correct. I think even coverity will flag this. (-1 just to highlight this)
reply PS3 2026-08-11 22:04 Gerrit AI review for Lustre osc_page.c:1154 — (style) Not a bug, but there's a stray `;` left after the comment:
Gerrit AI review for Lustre PS3 · 2026-08-11 22:04
(style) Not a bug, but there's a stray `;` left after the comment:

    return 0; /* reserve nothing */;
reply PS1 2025-12-02 04:48 Andreas Dilger osc_request.c:2308 — I think in the old days the cksum_counter was used to change the `CDEBUG(D_PAGE)` into `CDEBUG(D_ERROR)` when the number of errors exceeded
Arshad Hussain PS1 · 2025-11-27 03:49
(Your thoughts?) Tim, looks like cksum_counter is already being calculated on successful read. Why not (debug)print it below along with client_cksum. Instead of deleting it completely.? This can give us number of successful read's inbetween failures where it is reset to 0.
Timothy Day PS1 · 2025-11-27 04:49
I'm skeptical it would be useful. We could get similar info (i.e. number of successful reads vs failures) by comparing llite stats to the number of error/debug messages. Plus, static variables like this aren't thread safe. The stat may not be reliable anyway.
Andreas Dilger PS1 · 2025-12-02 04:48
I think in the old days the cksum_counter was used to change the `CDEBUG(D_PAGE)` into `CDEBUG(D_ERROR)` when the number of errors exceeded some threshold?  I see something similar below with `cksum_missed`.

That said, I don't think there is much value to keeping this anymore, just overhead that doesn't provide any value.
owner Timothy Day · uploader James Simmons · PS3 uploaded 37d ago · NEW · open in Gerrit ↗
commit message
LU-16518 osc: fix -Wunused-but-set-variable warnings

Remove unused variables in osc. Clang emits a warning on set
but unused variables, so remove them. For osc_lru_reserve() we don't
handle the rc returned by l_wait_event_abortable(). If we do get
an interruption abort and report we reserved nothing.

Test-Parameters: trivial
Fixes: e8b421531c16 ("LU-6271 osc: further OSC cleanup after eviction")
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I7cbfbb937ba5b9947bf685fbd3bbff2b6f3b461d
66820 master J !B ✓T ✓R 1/2−
LU-20422 lod: fix lockdep bug
carrying Timothy Day · Timothy Day voted -1
2 unresolved S +24 −8
44d
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 64d 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
51d
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 69d 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 1/2−
LU-5960 lnet: add in functionality of lctl to DLC
carrying Amir Shehata · Christopher J. Morrone voted -1
stalled 408d XL +1916 −144
408d
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 3836d 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

(0)
nothing here right now

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 stalled 415d S +23 −23
415d
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 552d 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 737d S +10 −5
737d
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 1358d 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

(13)
66791 master J –B ✓T ✓R 2/2
LU-18687 build: reimplement dist target in plain make
carrying Timothy Day · all green — ready to land (not in master-next yet)
8 unresolved M +92 −74
3d
all green — ready to land (not in master-next yet)
1 thread(s) waiting on others
7 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #130840 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-02 15:15 · Arshad Hussain +1 2026-09-14 10:43
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: 7 need your reply · 1 waiting on others · 0 own notes · 0 bot
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-09-03 03:14 Gerrit AI review for Lustre Makefile.dist:9 — (defect) `VERSION` and `PACKAGE` are also defined by `config/Makefile.exports`, which the top-level Makefile includes on the very next line,
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?
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 15d 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
66901 master J !B ✓T ✓R 2/2
LU-18687 build: drop defines in config.h from lustre_compat.h
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
1 unresolved M +70 −65
5d
all green — ready to land (not in master-next yet)
1 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #131620 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-12 15:01 · Timothy Day +1 2026-09-11 18:10
no vote yet: Arshad Hussain, Andreas Dilger
patchsets: PS1 06-27 PS2 09-11 James Simmons
your previous vote: -1 on PS1 (2026-08-13 20:03) — now at PS2
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-09-12 11:50 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) Two things the body does not mention, which made the diff larger than the summary suggests:
Gerrit AI review for Lustre PS2 · 2026-09-12 11:50
(minor) Two things the body does not mention, which made the diff larger than the summary suggests:

These are not just moved - they are renamed to `compat_capability_u32()` and `compat_set_capability_u32()`. That rename is the sole reason 7 of the 8 touched files change, so it would help to say so (and to say why, since keeping the old names would have made this a two-file patch).

`HAVE_U64_CAPABILITY` and `HAVE_STRUCT_FILE_LOCK_CORE` also stop being defined at all, while `HAVE_DENTRY_D_CHILDREN` is kept. Nothing in tree uses the first two today, so this builds fine, but an `#ifdef` on a now-undefined macro fails silently rather than loudly - worth a line in the message for anyone rebasing onto this.
owner Shaun Tancheff · uploader James Simmons · PS2 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: drop defines in config.h from lustre_compat.h

Moved to config.h
  C_FLC_*
  ll_capability_u32 and ll_set_capability_u32
  d_no_children and d_for_each_child

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I45987b72905fd7e7c1e49d6e0c608034814889f7
66904 master J ✓B ✓T ✓R 2/2
LU-18687 build: move vfs_unlink and lsm* from lustre_compat.h
carrying Shaun Tancheff · all green — ready to land (not in master-next yet)
2 unresolved L +160 −138
6d
all green — ready to land (not in master-next yet)
2 reviewer comment(s) to address if a respin is needed — last from Gerrit AI review for Lustre
build #131321 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-08 17:41 · Timothy Day +1 2026-09-10 19:22
no vote yet: Arshad Hussain, Andreas Dilger
patchsets: PS1 06-27 PS2 08-19 James Simmons PS3 08-30 James Simmons PS4 08-31 James Simmons PS5 09-08 James Simmons
your previous vote: +1 on PS4 (2026-09-01 15:39) — now at PS5
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-09-10 04:48 Gerrit AI review for Lustre xattr.h:12 — (suggestion) This isn't a bug today, but the new header doesn't quite stand on its own. On HAVE_MNT_IDMAP_ARG kernels `nop_mnt_idmap` is dec
Gerrit AI review for Lustre PS5 · 2026-09-10 04:48
(suggestion) This isn't a bug today, but the new header doesn't quite stand on its own. On HAVE_MNT_IDMAP_ARG kernels `nop_mnt_idmap` is declared in <linux/mnt_idmap.h>; assuming <linux/xattr.h> still only forward-declares `struct mnt_idmap`, this compiles only because every current includer happens to pull <linux/fs.h> earlier in the TU (pcc.c and osd_compat.c via lustre_compat/linux/fs.h, xattr_security.c and osd_internal.h via lustre_compat/linux/security.h, llite_internal.h via obd.h).

A new .c file that includes just this header would fail. Adding <linux/fs.h> (or <lustre_compat/linux/fs.h>) here would make it self-contained.
reply PS5 2026-09-10 04:48 Gerrit AI review for Lustre xattr.c:20 — (style) This isn't a bug, but the added include leaves two consecutive blank lines before the DEBUG_SUBSYSTEM define. One is enough.
Gerrit AI review for Lustre PS5 · 2026-09-10 04:48
(style) This isn't a bug, but the added include leaves two consecutive blank lines before the DEBUG_SUBSYSTEM define. One is enough.
owner Shaun Tancheff · uploader James Simmons · PS5 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: move vfs_unlink and lsm* from lustre_compat.h

Core lustre code uses the upstream vfs_unlink() and compat
macro lives in compat fs.h

Move LSM* compat wrappers to compat security.h

Move ll_vfs_setxattr to compat xattr.h

Migrate the changes in llite to support user namespace
argument to lustre_compat headers to cleanup the ifdef
mess in llite.

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: Ifd50da01e73ed76d8f344e2a78408b49d22bc6fb
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
51d
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 68d 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
51d
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 69d 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
51d
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 69d 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
51d
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 69d 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
51d
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 69d 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 1/1+2
LU-13344 lnet: stop using struct timeval
all green — ready to land (not in b2_12-next yet)
stalled 737d M +78 −82
737d
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 2155d 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 737d S +17 −19
737d
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 1703d 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 737d M +54 −75
737d
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 2624d 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 960d M +50 −1
960d
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 1020d 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 1166d M +42 −39
1166d
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 1172d 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 0/2−
LU-4665 utils: Specified OSTs setstripe for directories
carrying Jinshan Xiong · parked by your own -1
XL +685 −570
408d
reviews: James Simmons -1 2014-11-02 20:46
no vote yet: Andreas Dilger
owner Jinshan Xiong · uploader James Simmons · PS6 uploaded 4336d 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
322 open

Re-review needed — new patchset since your vote

(45)
66996 master J !B ✓T ✓R 0/2
LU-20390 enc: fix subdir mount of an encrypted directory
reviewing Sebastien Buisson · PS5→PS6 since your +1
1 unresolved M +84 −55
27m
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #129359 SUCCESS · tests all Maloo sessions
no vote yet: Marc Vef, Andreas Dilger, Timothy Day
patchsets:
+1 earlier PS1 06-30
PS2 06-30 PS3 07-01 PS4 07-08 PS5 07-10 PS6 08-14
your previous vote: +1 on PS5 (2026-07-10 14:17) — now at PS6
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-09-17 17:02 Timothy Day crypto.c:418 — It seems odd that we are duplicating this entire block of code (~30 lines or so). Is there some kind of helper we could implement?
Timothy Day PS6 · 2026-09-17 17:02
It seems odd that we are duplicating this entire block of code (~30 lines or so). Is there some kind of helper we could implement?
owner Sebastien Buisson · uploader Sebastien Buisson · PS6 uploaded 34d ago · NEW · open in Gerrit ↗
commit message
LU-20390 enc: fix subdir mount of an encrypted directory

When an encrypted directory is used as a subdirectory mount, its
".fscrypt" dir is served from the real fs root via the lu_root_fid
redirect. This exposes three problems addressed by this patch:
- Once 'fscrypt unlock' loads the key, llcrypt encrypts the
".fscrypt" name so it can no longer be looked up. Resolve it by
its plaintext name in ll_prepare_lookup()/ll_setup_filename()
regardless of key state, and drop the now-redundant -ENOENT
handling that only covered the keyless case.
- This consequently prevents the ".fscrypt" dentry from being
invalidated when the key loads, thus avoiding the subtree to detach
from s_root and escape shrink_dcache_for_umount(), which was leaving
inodes pinned whose cl_objects trip lu_device_fini() at umount.
- 'fscrypt lock' wrongly reports busy files because the mount root
inode is pinned for the mount lifetime; skip it in
check_for_busy_inodes().

Investigated with the help of Claude Code + Tools.

Fixes: c12378fba7f0 ("LU-15176 sec: present .fscrypt in subdir mount")
Test-Parameters: mdscount=2 mdtcount=4 osscount=1 ostcount=8 clientcount=2 testlist=sanity-sec clientdistro=ubuntu2604 serverdistro=el8.10 env=ONLY="54"
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: Ib0576f1c31416bc10dc742e5ef330eff4b5ec541
63330 master J ✓B ✓T …R 0/2
LU-19403 llapi: Add device functions for nodemap
reviewing Nikos Papakonstantinou · PS11→PS22 since your +1
L +385 −50
3h
build #131894 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Qian Yingjin, Marc Vef, Andreas Dilger, Sebastien Buisson
patchsets:
+17 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
your previous vote: +1 on PS11 (2026-02-25 23:50) — now at PS22
owner Nikos Papakonstantinou · uploader Nikos Papakonstantinou · PS22 uploaded 8h 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
60112 master J !B ✓T ✗3R 0/2
LU-19167 lnet: add corrupt fault injection
reviewing Manish Regmi · PS6→PS13 since your -1 — your objection was dropped
6 unresolved XL +1037 −11
3h
janitor run: 4 failing config(s), none unique to this patch — janitor results
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-lfsck. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 8 tests. 1 tests failed: lnet-selftest. session
build #131812 SUCCESS · tests all Maloo sessions
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger, Oleg Drokin
patchsets:
+8 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
your previous vote: -1 on PS6 (2026-05-24 14:27) — now at PS13
threads: 5 need your reply · 0 waiting on others · 1 own notes · 0 bot
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-03 12:23 Gerrit AI review for Lustre lnetctl.8:524 — (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
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`.
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 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 · PS13 uploaded 14d 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 an LNet selftest for the corruption feature.

Assisted-By: Codex:5.6-Sol
Test-Parameters: testlist=corrupt-fault
Signed-off-by: Manish Regmi <mregmi@ddn.com>
Change-Id: Ib4972807a48c185043f335d030d266ed3cad7e1e
58298 master J !B ✓T …R 0/2
LU-18774 lnet: SIGSEGV in lnetctl yaml parser
reviewing Frank Sehr · PS2→PS3 since your -1 — your objection was dropped
S +29 −7
11h
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131859 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Cyril Bordage, Manish Regmi, Serguei Smirnov, Chris Horn, Andreas Dilger
patchsets: PS1 03-04 PS2 08-01 PS3 09-16 Manish Regmi
your previous vote: -1 on PS2 (2025-08-06 17:21) — now at PS3
owner Frank Sehr · uploader Manish Regmi · PS3 uploaded 1d 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
Signed-off-by: Frank Sehr <fsehr@whamcloud.com>
Signed-off-by: Manish Regmi <mregmir@ddn.com>
Change-Id: I2633ee0bb5461eec25044f0ca622cfaf18e2e5a1
61340 master J !B ✓T ✓R 0/2
LU-19276 llapi: add llapi_changelog_(de)register
reviewing Andreas Dilger · PS11→PS37 since your +1
10 unresolved XL +892 −419
18h
janitor run: 1 failing config(s), none unique to this patch — janitor results
9 optional test failure(s) — informational
build #131673 SUCCESS · tests all Maloo sessions
no vote yet: Nikos Papakonstantinou, Emoly Liu, Robert Read, Qian Yingjin, Robert Read, Oleg Drokin, Timothy Day
patchsets:
+32 earlier PS1 09-17 PS2 09-26 Emoly Liu PS3 09-26 Janitor Bot PS4 10-24 Emoly Liu PS5 10-27 Emoly Liu PS6 10-27 Emoly Liu PS7 10-28 Emoly Liu PS8 10-29 Emoly Liu PS9 02-19 PS10 03-31 PS11 04-14 PS12 05-15 PS13 05-15 Janitor Bot PS14 05-19 PS15 06-08 PS16 07-08 PS17 07-20 PS18 07-31 PS19 07-31 PS20 07-31 PS21 07-31 PS22 08-01 PS23 08-06 PS24 08-06 PS25 08-07 PS26 08-13 PS27 08-22 PS28 08-23 PS29 08-23 PS30 08-28 PS31 09-03 PS32 09-09
PS33 09-09 PS34 09-09 PS35 09-12 PS36 09-12 PS37 09-13
your previous vote: +1 on PS11 (2026-04-22 13:46) — now at PS37
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS37 2026-09-16 22:42 Andreas Dilger llapi_changelog_clear.3:66 — staged locally
Gerrit AI review for Lustre PS37 · 2026-09-13 19:34
(nit) The same hunk that rewrote the DESCRIPTION to point at lctl-changelog_register(8) drops that entry from SEE ALSO, so the page now cites a man page it no longer lists. Worth putting back on a refresh.
Andreas Dilger PS37 · 2026-09-16 22:42
staged locally
reply PS36 2026-09-13 08:06 Andreas Dilger llapi_changelog_deregister.3:18 — staged in local tree if patch is refreshed
Gerrit AI review for Lustre PS36 · 2026-09-12 17:21
(minor) The quoted argument here carries its own padding spaces and the closing paren ends up bold, so groff renders this as

    (e.g:  lustrefs-MDT0000 ).

llapi_changelog_register.3 writes the same example as plain text, `(e.g. "lustrefs-MDT0000")`, which reads better. Also `e.g:` above wants to be `e.g.`.
Andreas Dilger PS36 · 2026-09-13 08:06
staged in local tree if patch is refreshed
reply PS36 2026-09-13 08:06 Andreas Dilger llapi_changelog_deregister.3:65 — staged in local tree if patch is refreshed.
Gerrit AI review for Lustre PS36 · 2026-09-12 17:21
(minor) Same SEE ALSO ordering as llapi_changelog_register.3 - lustreapi(7) before llapi_changelog_register(3) and lctl-changelog_deregister(8). If the patch is refreshed, the section order used elsewhere in man3 would be llapi_changelog_register(3), lustreapi(7), lctl-changelog_deregister(8).
Andreas Dilger PS36 · 2026-09-13 08:06
staged in local tree if patch is refreshed.
reply PS36 2026-09-13 08:06 Andreas Dilger llapi_changelog_register.3:112 — staged in local tree for future update
Gerrit AI review for Lustre PS36 · 2026-09-12 17:21
(minor) This isn't a bug, but SEE ALSO puts lustreapi(7) ahead of the (3) and (8) entries. The same patch reorders llapi_changelog_clear.3 and llapi_changelog_start.3 so that lustreapi(7) comes last, and this page plus llapi_changelog_deregister.3 are now the only two under Documentation/man3/ whose SEE ALSO isn't ordered by section number. Moving it down to sit between llapi_changelog_start(3) and lctl-changelog_register(8) would match.
Andreas Dilger PS36 · 2026-09-13 08:06
staged in local tree for future update
reply PS37 2026-09-16 22:42 Andreas Dilger llapi_changelog_start.3:206 — staged locally
Gerrit AI review for Lustre PS37 · 2026-09-13 19:34
(nit) lctl-changelog_register(8) is dropped here too, but the DESCRIPTION still refers to it for where the registered MASK comes from. Same fix as llapi_changelog_clear.3.
Andreas Dilger PS37 · 2026-09-16 22:42
staged locally
reply PS37 2026-09-16 22:42 Andreas Dilger llsom_sync.8:75 — staged locally
Gerrit AI review for Lustre PS37 · 2026-09-13 19:34
(minor) Should this one stay a client prompt? llsom_sync reads changelogs through /dev/changelog-MDTNAME, which is created by the client-side mdc module (lustre/mdc/mdc_changelog.c), and it also needs the /mnt/lustre client mount it is passed. The register/deregister examples around it are correctly `mds#`, but this one only works on a node with the filesystem mounted - the same patch keeps that mds#/client# distinction carefully in lfs-changelog.1.
Andreas Dilger PS37 · 2026-09-16 22:42
staged locally
reply PS37 2026-09-16 22:42 Andreas Dilger llsom_sync.8:95 — staged locally
Gerrit AI review for Lustre PS37 · 2026-09-13 19:34
(nit) If the patch is refreshed: the DESCRIPTION and the --user description now both point at lctl-changelog_register(8), but SEE ALSO still lists only lustre(7) and lctl(8).
Andreas Dilger PS37 · 2026-09-16 22:42
staged locally
reply PS37 2026-09-16 22:42 Andreas Dilger lustre_cfg.c:768 — staged locally
Gerrit AI review for Lustre PS37 · 2026-09-13 19:34
(style) Not a bug, but `func` reaches the user raw here. The callers hand do_device() internal tags rather than command names, so this now prints

    mgsioc: no device found for name MGS: Invalid argument
    --device: no device found for name foo: Invalid argument

(the second from jt_opt_device() passing argv[0]). Everything else in obd.c routes the prefix through jt_cmdname().
Andreas Dilger PS37 · 2026-09-16 22:42
staged locally
reply PS36 2026-09-12 17:21 Gerrit AI review for Lustre obd.c:7292 — (nit) The success message here starts lowercase while jt_changelog_register() a few lines up still prints "Registered changelog userid ..."
Gerrit AI review for Lustre PS36 · 2026-09-12 17:21
(nit) The success message here starts lowercase while jt_changelog_register() a few lines up still prints "Registered changelog userid ..." with a capital. Worth making the two sibling commands agree if the patch is refreshed - the man page examples were updated to the lowercase form, so changing the register side would mean touching those too.
reply PS37 2026-09-16 22:42 Andreas Dilger obd.c:7181 — staged locally
Gerrit AI review for Lustre PS37 · 2026-09-13 19:34
(minor) Can this message ever be right? `llapi_changelog_register()` returns -EOVERFLOW from two places, and neither of them is reachable with the buffer this caller passes:

    char regname[CHANGELOG_USER_NAMELEN_FULL];
    ... llapi_changelog_register(..., regname, sizeof(regname));

The `reglen < CHANGELOG_USER_NAMELEN_FULL` check can't trip, and the post-snprintf one is marked "should never happen" (worst case is "cl" + 10 digits + "-" + 15 chars = 29 bytes in a 30-byte buffer). The -EOVERFLOW that does reach here comes from the MDT, where mdd_changelog_user_register() uses it for "max ID is exceeded" when mc_lastuser wraps. So an admin who hits the real condition is told the name is too long.

llapi_changelog_register.3 has the same gap - its ERRORS entry for -EOVERFLOW only describes the regname buffer case.
Andreas Dilger PS37 · 2026-09-16 22:42
staged locally
owner Andreas Dilger · uploader Andreas Dilger · PS37 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-19276 llapi: add llapi_changelog_(de)register

Add llapi_changelog_register() and llapi_changelog_deregister()
to allow them to be used by external applications.

Move CHANGELOG_USER_NAMELEN and CHANGELOG_USER_NAMELEN_FULL to
lustre_user.h since applications need to know the buffer limits
when registering a changelog user.

Man pages llapi_changelog_register/deregister.3 are added and
lctl-changelog_register/deregister.8 are updated to reflect the
new changes. sanity.sh/test_160q is modified to verify this patch.

Move llapi_obdname2devno() and llapi_ioctl_dev() into internal
library functions so that they are more easily usable, but not
yet fully public API functions.

Since llapi_ioctl_dev() requires the OBD device to be registered
in order to call l_ioctl(), have llapi_obdname2devno() call
llapi_register_ioc_dev() internally to ensure it is done instead
of depending on the caller.  Change llapi_register_ioc_dev() so
that it can be called repeatedly without closing and opening the
OBD ioctl device each time.

Rename yaml_get_device_index() to llapi_yaml_get_device_index()
to avoid namespace clash with yaml library. Fix a bug with that
code which returned 'device 1' on error, and leaked resources
on error cleanup paths.

Remove long unused jt_lcfg_device() wrapper function.

Test-Parameters: testlist=sanity serverversion=2.17 env=ONLY=160
Fixes: ba0d5ffc1c ("LU-9680 utils: new llapi_param_display_value().")
Fixes: 0b715b9a53 ("LU-2675 utils: remove loadgen")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Signed-off-by: Emoly Liu <emoly@whamcloud.com>
Change-Id: I732366b9972ba7c2d8ed5b49a405647e2d300c1e
68462 master J !B ✓T ✗1R 1/2
LU-20438 lnet: Implement distance-based PCIe P2PDMA routing
reviewing Shivaji Kant · PS7→PS10 since your +1
1 unresolved M +184 −27
1d
janitor run: 3 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-4 RHEL 9.8 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
build #131772 SUCCESS · tests all Maloo sessions
reviews: Pranjal Shrivastava +1 2026-09-15 16:34
no vote yet: Jinshan Xiong, Yonatan Nachum, Chris Horn, Timothy Day
patchsets:
+5 earlier PS1 08-28 PS2 08-28 PS3 08-29 PS4 08-31 PS5 08-31
PS6 09-01 PS7 09-08 PS8 09-12 PS9 09-14 PS10 09-15
your previous vote: +1 on PS7 (2026-09-08 18:29) — now at PS10
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS10 2026-09-16 09:47 Gerrit AI review for Lustre lib-move.c:1496 — (minor) pci_p2pdma_distance() hands back only the hop count that calc_map_type_and_dist() computes and drops the enum pci_p2pdma_map_type th
Gerrit AI review for Lustre PS10 · 2026-09-16 09:47
(minor) pci_p2pdma_distance() hands back only the hop count that calc_map_type_and_dist() computes and drops the enum pci_p2pdma_map_type that came with it, so the single thing that maps to UINT_MAX here is PCI_P2PDMA_MAP_NOT_SUPPORTED.

On an AMD Zen or newer host cpu_supports_p2pdma() is true (drivers/pci/p2pdma.c, same in v6.1, v6.12 and mainline), so a provider and an HCA on opposite sides of the root complex come back as PCI_P2PDMA_MAP_THRU_HOST_BRIDGE with a finite distance rather than -1; a whitelisted Intel host bridge behaves the same. Every o2ib NI then gets a real ni_dev_prio, so the `ni_dev_prio == UINT_MAX` test further down never fires and lnet_numa_range effectively stops applying to P2P traffic on exactly the platforms this feature targets. The commit message describes the fallback as "when every NI on the net reports UINT_MAX", which on such a host does not happen.

Is the raw hop count the metric you want, or should a path that crosses the host bridge sort below a switch-local one rather than just a few hops further out?
owner Shivaji Kant · uploader Shivaji Kant · PS10 uploaded 2d ago · NEW · open in Gerrit ↗
commit message
LU-20438 lnet: Implement distance-based PCIe P2PDMA routing

This patch completes the P2P hardware distance topology abstraction
by preferring an NI under the same PCIe switch as the memory provider.

By introducing the lnd_get_p2pdma_device callback on the LND, LNet
dynamically queries and evaluates the physical PCIe distance between
the P2PDMA (page) provider and all active Host Channel Adapters (HCAs).
This ensures LNet bounds multi-rail transfers to perfectly matched NICs
collocated beneath the identical PCIe switch, sidestepping NUMA traffic.

If no NIC matches the specific PCIe hierarchy or distance mapping is
unsupported natively by the LND (e.g., EFALND), ni_dev_prio evaluates to
UINT_MAX. When every NI on the net reports UINT_MAX, the flattening is
applied as before, so selection falls back to the existing distance,
credits, and ni_seq order.

Introduces struct lnet_device_id as the primary cross-layer token for
identifying the backing hardware provider of outgoing memory pages,
replacing the previous lnet_get_dev_idx() call with lnet_get_device_id()
in lnet_rdma.h to supply dynamic routing capabilities.

Previously, lnet_get_best_ni() tested LNET_MD_FLAG_P2PDMA on msg->msg_md,
which on a client is the ptlrpc request MD. Because pers.c sets
LNET_MD_P2PDMA_ADDR exclusively on the bulk MD, the test never fired
and device-aware NI selection never ran. lnet_get_first_page() introduces
a new **md_ptr out-parameter that resolves and hands the mapped bulk MD
back to the caller instead, allowing checks to evaluate successfully.

Finally, the Linux kernel does not universally export an API to retrieve
the PCI device provider from a P2PDMA ZONE_DEVICE page, housing it inside
the privately scoped struct pci_p2pdma_pagemap. This explicitly maps
mainline structures across recent unexported kernel shifts, safely
extracting the PCI device natively without resorting to costly iterative
PCIe root bus scanning.

Fixes: 959304eac7ec ("LU-15189 lnet: fix memory mapping.")
Signed-off-by: Shivaji Kant <shivajikant@google.com>
Change-Id: I86e51f55028af7e83b4383f5a2ae3b8bd4051fda
57454 master J !B ✓T ✗2R 0/2
LU-18461 layout: allow to be started from zero offset.
reviewing Alexey Lyashkov · PS11→PS36 since your -1 — your objection was dropped
52 unresolved XL +1039 −39
1d
janitor run: 8 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / 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-lnet. session
build #131731 SUCCESS · tests all Maloo sessions
no vote yet: Alexander Boyko, Andreas Dilger, Mikhail Pershin, Zhenyu Xu
patchsets:
+31 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
your previous vote: -1 on PS11 (2025-07-17 17:15) — now at PS36
threads: 52 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 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 PS36 2026-09-15 22:37 Gerrit AI review for Lustre llapi_layout_pattern_get.3:51 — (minor) `llapi_join_layouts(3)` doesn't exist in the tree, so this is a dangling cross-reference.
Gerrit AI review for Lustre PS36 · 2026-09-15 22:37
(minor) `llapi_join_layouts(3)` doesn't exist in the tree, so this is a dangling cross-reference.
reply PS27 2026-03-09 14:07 Alexander Boyko lustre_user.h:817 — pattern_base is more clear
Alexander Boyko PS27 · 2026-03-09 14:07
pattern_base is more clear
reply PS30 2026-05-21 21:31 Andreas Dilger lustre_user.h:32 — (minor) this should probably have `#ifndef BIT`
Andreas Dilger PS30 · 2026-05-21 21:31
(minor) this should probably have `#ifndef BIT`
reply PS30 2026-05-21 21:31 Andreas Dilger lustre_user.h:117 — (style) unnecessary
Andreas Dilger PS30 · 2026-05-21 21:31
(style) unnecessary
owner Alexey Lyashkov · uploader Alexey Lyashkov · PS36 uploaded 2d 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
63425 master J ✗5B ✓T ✗10R 0/2
LU-18857 mgs: add timeout mechanism for allow_register
reviewing Chakshu Kansal · PS20→PS38 since your +1
5 unique failures 6 unresolved XL +1266 −35
1d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity1@ldiskfs+DNE:test_30aseen in 14 other reviews
conf-sanity2@ldiskfs+DNE:test_35bseen in 30 other reviews
conf-sanity2@ldiskfs+DNE:test_52seen in 24 other reviews
conf-sanity2@ldiskfs+DNE:test_57bseen in 2 other reviews
conf-sanity2@ldiskfs+DNE:test_65seen in 3 other reviews
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-subtest-change failed 3× RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: 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 9.8 / 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 failed 2× RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. 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
build #131715 SUCCESS · tests all Maloo sessions
no vote yet: Chris Hunter, Andreas Dilger, Sebastien Buisson, Mikhail Pershin, Oleg Drokin
patchsets:
+33 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
your previous vote: +1 on PS20 (2026-07-06 13:22) — now at PS38
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS38 2026-09-15 18:57 Gerrit AI review for Lustre COMMIT_MSG:62 — (minor) The 'Also:' list covers the man pages and the six conf-sanity subtests, but not the test-framework.sh and conf-sanity-framework.sh c
Gerrit AI review for Lustre PS38 · 2026-09-15 18:57
(minor) The 'Also:' list covers the man pages and the six conf-sanity subtests, but not the test-framework.sh and conf-sanity-framework.sh changes. Those add reset_allow_register_if_unconfigured(), a $TMP/allow-register-need-arm marker written by load_module(), and a new hook in start() and cleanup_nocli() that fire for every test suite, not just conf-sanity. Could the body mention them, since they change behaviour well outside this feature?
reply PS38 2026-09-15 18:57 Gerrit AI review for Lustre mgs_llog.c:728 — (defect) With allow_register now defaulting to 0, mgs_target_reg() takes the `if (!allow_register)` branch on every registration, so mgs_che
Gerrit AI review for Lustre PS38 · 2026-09-15 18:57
(defect) With allow_register now defaulting to 0, mgs_target_reg() takes the `if (!allow_register)` branch on every registration, so mgs_check_index() is on the default path and this LASSERT() is reachable for the first time.

mti_flags comes straight off the wire and is not sanitised:

    mgs_target_reg()               /* MGS_TARGET_REG handler */
      if (mti->mti_flags & LDD_F_NEED_INDEX)
              mti->mti_flags |= LDD_F_WRITECONF;
      if (!allow_register)
              rc = mgs_check_index(...);   /* LASSERT here */

The MGS still implements LDD_F_NEED_INDEX in mgs_write_log_target() (next_index() below), so it is a flag the MGS expects to receive, and MGS_TARGET_REG carries no privilege requirement. Any peer that can open an MGS connection and set 0x0010 in mti_flags now LBUGs the MGS.

Before this patch the default of 1 kept this branch unused, and the other caller, mgs_check_target(), is protected by the NEED_INDEX -> WRITECONF conversion just above. Could this LASSERT() be turned into a plain check (NEED_INDEX means "new target", so rc = 0 / -EACCES) rather than asserting on network data?
reply PS38 2026-09-15 18:57 Gerrit AI review for Lustre mgs_llog.c:731 — (minor) On the expected first-registration path this prints an error before it succeeds: the first mgs_find_or_make_fsdb() reaches the `exis
Gerrit AI review for Lustre PS38 · 2026-09-15 18:57
(minor) On the expected first-registration path this prints an error before it succeeds: the first mgs_find_or_make_fsdb() reaches the `exists == 0` branch above and logs "New filesystem registration disabled. Use 'lctl set_param allow_register=unlimited' ...: rc = -13", then the arm opens the window and the retry succeeds. An admin doing a normal initial setup sees a registration-disabled error immediately followed by the window-opened warning.

The retry also repeats mgs_fsdb_exists_in_configs(), a full CONFIGS readdir, on every denied registration. Would checking/arming before the CERROR() read better?
reply PS38 2026-09-15 18:57 Gerrit AI review for Lustre class_obd.c:76 — (minor) "the first target that ever registers with a freshly loaded MGS" is a bit stronger than what the code does. The window is only armed
Gerrit AI review for Lustre PS38 · 2026-09-15 18:57
(minor) "the first target that ever registers with a freshly loaded MGS" is a bit stronger than what the code does. The window is only armed when mgs_check_index() gets -EACCES, i.e. for a filesystem with no config log. If the first target to register after a reload belongs to a filesystem the MGS already knows, nothing is armed and the one-shot is still unspent. The man page states this correctly; this comment could match it.
reply PS38 2026-09-15 18:57 Gerrit AI review for Lustre obd_sysfs.c:194 — (minor) The kernel-doc above says the one-shot is "armed via an atomic decrement-and-test", but this is an atomic_cmpxchg(). Worth correctin
Gerrit AI review for Lustre PS38 · 2026-09-15 18:57
(minor) The kernel-doc above says the one-shot is "armed via an atomic decrement-and-test", but this is an atomic_cmpxchg(). Worth correcting if the patch is refreshed.

Also, allow_register_armed starts at 1 meaning "not yet armed" and is set to 0 when it has been armed, which reads backwards against the name. Something like allow_register_arm_pending, or an atomic_t counter named for what it holds, would be easier to follow.
reply PS38 2026-09-15 18:57 Gerrit AI review for Lustre conf-sanity.sh:12436 — (defect) This gate looks like it sits above the tree: LUSTRE-VERSION-GEN reports v2_17_57 here, so MGS_VERSION parses as 2.17.57.<n> and 2.1
Gerrit AI review for Lustre PS38 · 2026-09-15 18:57
(defect) This gate looks like it sits above the tree: LUSTRE-VERSION-GEN reports v2_17_57 here, so MGS_VERSION parses as 2.17.57.<n> and 2.17.58.2 is larger. If that is right, 157a through 157f all skip, including on this change's own CI run, and 157a/157b lose the coverage they had with the old gate.

Version gates are also conventionally 3-component; 2.17.57 would match the current tag. Same value is repeated at the top of 157b through 157f.
owner Chakshu Kansal · uploader Chakshu Kansal · PS38 uploaded 3d 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 units is given)

When a timed value is set, a timer disables registration on expiry.
show() reports remaining time with explicit 's' units.

Timed windows above 7 days are rejected (-EINVAL).
Use 'unlimited' for an open-ended window.

Automatic default window:
 - allow_register defaults to 0 (disabled).
 - the first target ever to register for a brand-new filesystem on a
   freshly loaded MGS automatically opens a one-time 24-hour window,
   unless the admin already set allow_register explicitly (via module
   parameter or lctl set_param). It never re-arms for later filesystems
   or later mounts.
 - suppressing the automatic window entirely requires setting
   allow_register explicitly (e.g. 'options mgs allow_register=0')

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:
  - Documentation/man4/allow_register.4
  - 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->unlimited
  - conf-sanity 157e: mgs module parameter boot-time enforcement
  - conf-sanity 157f: auto-arm 24 hour registration window
  - mutex around timer/value updates in store/show

Signed-off-by: Chakshu Kansal <ckansal@ddn.com>
Change-Id: I8ce969db3e06f82d97da47b11421a2b8833c5656
66253 master J !B ✓T ✓R 0/2
LU-19712 utils: Add only and not-pool options to lfs pool pin
reviewing Nikos Papakonstantinou · PS24→PS25 since your -1 — your objection was dropped
15 unresolved XL +1523 −160
1d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #131711 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Sebastien Buisson
patchsets:
+20 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
your previous vote: -1 on PS24 (2026-09-12 15:01) — now at PS25
threads: 15 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre COMMIT_MSG:24 — "since these are symbols exported from the shared library" looks backwards. lustre/utils/liblustreapi.map globs only `cfs_*`, `llapi_*`, `li
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
"since these are symbols exported from the shared library" looks backwards. lustre/utils/liblustreapi.map globs only `cfs_*`, `llapi_*`, `libcfs_*`, `l_ioctl`, `mdt_hash_name`, `lu_foreign_types`, `Parser_*` and ends with `local: *`, so dump_pin_object() and friends were hidden before this patch. The llapi_ prefix is what makes them match the `llapi_*` wildcard and become part of the library's exported ABI, even though they stay declared only in lustreapi_internal.h and take a `struct cYAML *` that is not public. Is exporting them intended, or should the rationale be restated?
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre COMMIT_MSG:28 — The body covers the two new options, the new llapi entry points and the renames, but the largest hunk in the patch is unmentioned: liblustre
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
The body covers the two new options, the new llapi entry points and the renames, but the largest hunk in the patch is unmentioned: liblustreapi_pcc.c replaces cYAML_build_tree() with a hand-written parser, parse_pin_xattr_advanced(), and rewrites llapi_dump_pin_object() so lustre.pin is now serialised as a single YAML flow sequence, e.g.

    [hsm: 1,pool: [p1,^p2,^any]]

That is a new on-disk encoding for lustre.pin and a new parser for attacker-settable input, so it deserves a paragraph of its own here. Should it be described, or split into its own patch ahead of the option work?
reply PS24 2026-09-05 16:49 Gerrit AI review for Lustre COMMIT_MSG:13 — (minor) The three `lfs pool pin/unpin/pin_info` option parsers also switch from `llint_lqa_name_verify()` to `llint_pool_name_verify()`, whi
Gerrit AI review for Lustre PS24 · 2026-09-05 16:49
(minor) The three `lfs pool pin/unpin/pin_info` option parsers also switch from `llint_lqa_name_verify()` to `llint_pool_name_verify()`, which is a user-visible fix rather than a rename: the LQA form only permits `_` as an extra character, so a pool name containing `-` was previously rejected (with an "LQA" diagnostic). Worth a sentence here so the hunk isn't a surprise.
reply PS24 2026-09-05 16:49 Gerrit AI review for Lustre lfs-pool-pin.1:122 — This reads as though the exclusive set can be grown, and the DESCRIPTION paragraph above only says a new *non-exclusive* pin fails with EPER
Gerrit AI review for Lustre PS24 · 2026-09-05 16:49
This reads as though the exclusive set can be grown, and the DESCRIPTION paragraph above only says a new *non-exclusive* pin fails with EPERM. `llapi_pool_pin_only_fd()` runs `pool_pin_check_constraints()` first, which returns -EPERM whenever an only_pool entry exists and the requested pool is not already among the `pool` entries, so a second `--only` pin is rejected too:

    lfs pool pin --only --pool p1 f   # [pool: [p1,^any]]
    lfs pool pin --only --pool p2 f   # EPERM, p2 is not added

Should adding another exclusive pool be allowed, or should the wording say that once a target is exclusively pinned no further pool can be added at all?
reply PS25 2026-09-15 16:50 Gerrit AI review for Lustre lfs-pool-pin.1:176 — (minor) if the patch is refreshed: every pre-existing form of the command has an example here, but the two new options do not. Something lik
Gerrit AI review for Lustre PS25 · 2026-09-15 16:50
(minor) if the patch is refreshed: every pre-existing form of the command has an example here, but the two new options do not. Something like

    $ lfs pool pin --only --pool scratch /mnt/testfs/file
    $ lfs pool pin --not-pool archive /mnt/testfs/file

would keep the section complete.
reply PS25 2026-09-15 16:50 Gerrit AI review for Lustre lfs-pool-unpin.1:157 — (minor) same as in lfs-pool-pin.1 - no example for the new --not-pool form, e.g. `lfs pool unpin --not-pool archive /mnt/testfs/file`.
Gerrit AI review for Lustre PS25 · 2026-09-15 16:50
(minor) same as in lfs-pool-pin.1 - no example for the new --not-pool form, e.g. `lfs pool unpin --not-pool archive /mnt/testfs/file`.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre lfs.c:11387 — (style) this isn't a bug, but the error string is split across two source lines; the sibling messages in this function keep theirs on one li
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
(style) this isn't a bug, but the error string is split across two source lines; the sibling messages in this function keep theirs on one line even when it runs long.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:973 — (style) this isn't a bug, but `int i;` here, `int j = i + 1; int k;` at 978, and `char *v = val; bool is_num = false;` at 1095 are declarati
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
(style) this isn't a bug, but `int i;` here, `int j = i + 1; int k;` at 978, and `char *v = val; bool is_num = false;` at 1095 are declarations after statements. Kernel/Lustre style keeps declarations at the top of their block; if the block gets too crowded for that, it is usually a sign the value-scanning loop wants to be its own helper.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:997 — Can this write one byte past `buff`?
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
Can this write one byte past `buff`?

In the unbracketed branch `end = len`, and for the last key/value pair no next-key comma is found, so `v_end = end` and `val_end = end`. `llapi_read_pin_xattr_object_fd()` calls this as

    rc = fgetxattr(fd, XATTR_LUSTRE_PIN, buff, sizeof(buff));  /* char buff[XATTR_SIZE_MAX] */
    yaml = parse_pin_xattr_advanced(buff, rc);

so `len` can be exactly XATTR_SIZE_MAX and `buff[val_end]` is `buff[XATTR_SIZE_MAX]`. setxattr() accepts a value of exactly XATTR_SIZE_MAX bytes, and a lustre.pin value that does not start with '[' and end with ']' is reachable via setfattr (sanity.sh sets lustre.pin that way).

The bracketed branch is fine because `end = len - 1`. Would rejecting `len >= XATTR_SIZE_MAX` on line 921, or reserving a byte for the terminator, close it?
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:1188 — (style) `else if` belongs on the same line as the preceding `}`.
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
(style) `else if` belongs on the same line as the preceding `}`.
reply PS22 2026-09-02 19:04 Gerrit AI review for Lustre liblustreapi_pcc.c:1194 — "a lone only_pool key is preserved as-is" does not round-trip. With no pool/deny_pool entry, `have_pool_tokens` is false, so the only_pool n
Gerrit AI review for Lustre PS22 · 2026-09-02 19:04
"a lone only_pool key is preserved as-is" does not round-trip. With no pool/deny_pool entry, `have_pool_tokens` is false, so the only_pool node falls through to the generic emitter and is written as

    [only_pool: name]

but parse_pin_xattr_advanced() rejects a literal only_pool key (`goto invalid` at 1092), so re-reading that attribute fails with EINVAL. It looks unreachable today because only_pool is always created alongside a pool entry and pool_unpin_update_entry() drops it when the last pool entry goes away. Should the comment say that instead, or should the emitter skip a lone only_pool?
reply PS24 2026-09-05 16:49 Gerrit AI review for Lustre liblustreapi_pcc.c:1060 — "^any" shares the same token space as a pool name, so a pool actually named `any` collides with the exclusivity marker. `llapi_pool_deny_fd(
Gerrit AI review for Lustre PS24 · 2026-09-05 16:49
"^any" shares the same token space as a pool name, so a pool actually named `any` collides with the exclusivity marker. `llapi_pool_deny_fd()` accepts it (`llint_pool_name_verify()`/`llapi_pool_name_validate()` both allow `any`, and neither pin path checks that the pool exists), and `llapi_dump_pin_object()` then writes it as a plain `^any` element.

Running the real parser/serialiser over that input:

    lfs pool pin --not-pool any f   ->  writes [pool: ^any]
    re-read of [pool: ^any]         ->  saw_any set, first_pool == NULL -> goto invalid, EINVAL

After that the attribute is unreadable by every later `lfs pool pin`, `lfs pool unpin`, `lfs pool pin_info` and `lfs pcc pin/unpin` on that file, and `lfs pool unpin --not-pool any` cannot undo it either, since it reads through the same parser. Only a raw `setfattr -x lustre.pin` recovers the file.

With other entries already present the deny is instead silently swallowed:

    [pool: [p1,^any]] + deny "any"  ->  writes [pool: [p1,^any,^any]]
    re-read                         ->  {pool=p1} {only_pool=p1}, deny rule gone

and a pre-existing `[pool: [^d1,^any]]` fails to parse outright. Should `any` be rejected as a reserved name in `llapi_pool_deny_fd()` (and documented as such in lfs-pool-pin.1), or should the marker use a spelling that cannot be a valid pool name?
owner Nikos Papakonstantinou · uploader Nikos Papakonstantinou · PS25 uploaded 3d 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, since these are symbols exported from the
shared library and the original unprefixed names were too generic for
that; --only/--not-pool themselves go through the new
llapi_pool_pin_only_fd()/llapi_pool_deny_fd()/llapi_pool_undeny_fd()
entry points instead.

Signed-off-by: Nikos Papakonstantinou <npapakonstantinou@ddn.com>
Change-Id: Icc35bf87444edd74c1fcda927cead5e3b34a0fcd
68412 master J ✗3B ✓T ✓R 0/2
LU-12514 utils: Build a real mount.lustre_tgt in a build tree
reviewing Xiao Yang · PS1→PS6 since your -1 — your objection was dropped
M +60 −14
5d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity3@zfs:test_907seen in 60 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
sanityn@ldiskfs+DNE:test_71aseen in 62 other reviews
build #131611 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+1 earlier PS1 08-26
PS2 09-03 PS3 09-04 PS4 09-08 PS5 09-10 PS6 09-11
your previous vote: -1 on PS1 (2026-08-26 14:39) — now at PS6
owner Xiao Yang · uploader Xiao Yang · PS6 uploaded 6d ago · NEW · open in Gerrit ↗
commit message
LU-12514 utils: Build a real mount.lustre_tgt in a build tree

mount.lustre reads the fstype from argv[0], but in a build tree it
is a libtool wrapper that execs the hard-coded .libs/lt-mount.lustre,
so a mount.lustre_tgt symlink to it quietly mounts with '-t lustre'.
Build a real one for the build tree, under 'if TESTS' since only the
tests use it; keep installing a symlink, from install-data-hook,
which runs after mount.lustre is installed, and remove it from
uninstall-hook.

Update load_modules_local() to point /sbin/mount.lustre_tgt at the
build tree's mount.lustre_tgt, or at mount.lustre when there is
none, unless it points there already. Whatever was there is saved
first, or a .nonex marker left if there was nothing, so that
unload_modules_local() can restore the node. The old cleanup sat in
unload_modules(), which remote nodes never run.

Fixes: 58adf0b4aaf1 ("LU-12514 tests: add testing for lustre_tgt type")
Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: I1ffdfafa0a127ba12b371e61d14a2ce49389f9bf
66739 master J !B ✓T ✓R 1/2
LU-19921 sec: add disable_rootsquash mount option
reviewing wangdi · PS1→PS55 since your -1 — your objection was dropped
L +280 −43
6d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #131215 SUCCESS · tests all Maloo sessions
reviews: Sebastien Buisson +1 2026-09-07 15:34
no vote yet: Andreas Dilger
patchsets:
+50 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
your previous vote: -1 on PS1 (2026-06-18 21:52) — now at PS55
owner wangdi · uploader wangdi · PS55 uploaded 10d 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
66552 master J !B ✓T ✗1R 0/2
LU-1158 general: rename timestamp fields to _ns
reviewing Sohei Koyama · PS5→PS8 since your +1
12 unresolved XL +678 −678
6d
janitor run: 4 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-1 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. session
build #131491 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+3 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
your previous vote: +1 on PS5 (2026-06-23 23:02) — now at PS8
threads: 12 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 PS6 2026-08-03 22:26 Gerrit AI review for Lustre lustre_idl.h:1570 — (minor) This header is installed - autoMakefile.am's install-data-local copies include/uapi/linux/lustre/*.h to $(includedir)/linux/lustre,
Gerrit AI review for Lustre PS6 · 2026-08-03 22:26
(minor) This header is installed - autoMakefile.am's install-data-local copies include/uapi/linux/lustre/*.h to $(includedir)/linux/lustre, and lustre.spec.in ships that directory in lustre-devel. So renaming members of `obdo`, `ost_lvb`, `mdt_body` and the `mdt_rec_*` structs is a source-compatibility break for anything out of tree that includes it. The wire layout is untouched, so this is only a compile-time break, but is it worth a note in the commit message?
reply PS6 2026-08-03 22:26 Gerrit AI review for Lustre lu_object.h:480 — (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_
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.
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 PS8 2026-09-11 13:03 Gerrit AI review for Lustre mdd_device.c:157 — (minor) `MAX_ATIME_DIFF` is the mdd counterpart of `OFD_DEF_ATIME_DIFF`, and it is a nanosecond value too:
Gerrit AI review for Lustre PS8 · 2026-09-11 13:03
(minor) `MAX_ATIME_DIFF` is the mdd counterpart of `OFD_DEF_ATIME_DIFF`, and it is a nanosecond value too:

    mdd_internal.h:581: #define MAX_ATIME_DIFF (60LL * NSEC_PER_SEC)

The ofd constant got `_NS` in this patch, so should this one become `MAX_ATIME_DIFF_NS` as well? Right now the line reads as a seconds constant being assigned to an `_ns` field.
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 PS7 2026-08-17 17:22 Gerrit AI review for Lustre mdd_object.c:726 — (style) This isn't a bug, but the rename pushed the open paren three columns right and the continuation line was left where it was, so it no
Gerrit AI review for Lustre PS7 · 2026-08-17 17:22
(style) This isn't a bug, but the rename pushed the open paren three columns right and the continuation line was left where it was, so it no longer lines up:

    la->la_atime_ns <= (oattr->la_atime_ns +
                     mdd_obj2mdd_dev(obj)->mdd_atime_diff_ns)))

If the patch is refreshed, could this condition be rewrapped with a plain extra tab of indent instead of paren alignment?
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 · PS8 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-1158 general: rename timestamp fields to _ns

Now that the 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 in-memory struct lu_attr and
cl_attr fields, the cached llite inode times, the wire struct
obdo, mdt_body, ost_lvb and mdt_rec_* fields, the lctl obdo dump
helper, and the nanosecond interval tunables (ofd_atime_diff,
OFD_DEF_ATIME_DIFF, ofo_atime_ondisk, mdd_atime_diff and the ldlm
ns_ctime_age_limit).

This patch is a pure rename with no functional change.

struct ost_lvb_v1 keeps its second-based lvb_(a/m/c)time fields for
wire backwards compatibility and is left unchanged.

Assisted-by: ClaudeCode:Fable-5.1
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I41626d75dab0b9735c2a3e33d7f94309afc30510
66551 master J !B ✓T ✗1R 0/2
LU-1158 general: convert timestamps to nanoseconds
reviewing Sohei Koyama · PS6→PS8 since your -1 — your objection was dropped
31 unresolved XL +1296 −384
6d
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 #131490 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
patchsets:
+3 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
your previous vote: -1 on PS6 (2026-08-05 15:42) — now at PS8
threads: 30 need your reply · 0 waiting on others · 1 own notes · 0 bot
reply PS5 2026-07-01 02:34 Sohei Koyama COMMIT_MSG:35 — Yes. The interop support has not been implemented in this series yet. (Sorry, the commit message was wrong)
Andreas Dilger PS5 · 2026-06-30 21:52
I guess based on your other comments that this has *not* been implemented yet?  If that is the case then I don't think this patch can land until the interop code is finished.  Otherwise, this patch will break interop testing for master and there is a risk that the interop patch is not completed before the 2.18.0 release, which would be a major problem for sites trying to upgrade to this release.
Sohei Koyama PS5 · 2026-07-01 02:34
Yes. The interop support has not been implemented in this series yet. (Sorry, the commit message was wrong)

I am currently working on it and testing it, based on the previous compatibility work (https://review.whamcloud.com/c/fs/lustre-release/+/63517 ). However, as I go through the validation, I am finding additional cases that were not sufficiently considered, so I do not yet have a reliable estimate for when it will be complete.

I agree that this patch should not land until the interop code is implemented and tested. Otherwise it could break master interop testing and create problems for sites upgrading to 2.18.0, as you pointed out.
reply PS6 2026-08-03 22:15 Gerrit AI review for Lustre COMMIT_MSG:27 — The ofd_attr_set() hunk keeping `ofo_atime_ondisk` in sync isn't described here, and it isn't a units change - it is an independent fix for
Gerrit AI review for Lustre PS6 · 2026-08-03 22:15
The ofd_attr_set() hunk keeping `ofo_atime_ondisk` in sync isn't described here, and it isn't a units change - it is an independent fix for stale cached atime from 7c9ce8aac9e8 ("LU-13383 ofd: lazy atime update"). Could it be split into its own patch with a Fixes: tag so it can land separately?

The hui_* LASSERTF reordering in both wiretest.c copies is also unexplained; see the comment there.
reply PS6 2026-08-03 22:15 Gerrit AI review for Lustre COMMIT_MSG:33 — (minor) The body doesn't mention `sb->s_time_gran = 1` in client_common_fill_super(). That is a fairly central part of the change - without
Gerrit AI review for Lustre PS6 · 2026-08-03 22:15
(minor) The body doesn't mention `sb->s_time_gran = 1` in client_common_fill_super(). That is a fairly central part of the change - without it current_time() keeps truncating to whole seconds, so nothing the client generates locally would ever carry a sub-second value. Worth a line in the "sinks" bullet.
reply PS7 2026-08-18 13:15 Gerrit AI review for Lustre COMMIT_MSG:37 — This changes the interpretation of several wire fields (ost_lvb, mdt_body, mdt_rec_*), so it should carry a Test-Parameters: line requesting
Gerrit AI review for Lustre PS7 · 2026-08-18 13:15
This changes the interpretation of several wire fields (ost_lvb, mdt_body, mdt_rec_*), so it should carry a Test-Parameters: line requesting interop runs against an older peer, e.g.

    Test-Parameters: clientversion=2.15 testlist=sanity,sanityn
    Test-Parameters: serverversion=2.15 testlist=sanity,sanityn

Without it the mixed-version paths this patch changes are never exercised by the automated test runs.
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre COMMIT_MSG:38 — (minor) s64 nanoseconds since the epoch runs out at 2262-04-11 23:47:16 UTC (S64_MAX / NSEC_PER_SEC = 9223372036 s), not 2292 - this is the
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(minor) s64 nanoseconds since the epoch runs out at 2262-04-11 23:47:16 UTC (S64_MAX / NSEC_PER_SEC = 9223372036 s), not 2292 - this is the usual ktime_t limit. Worth correcting, since that number is the bound on what the new representation can hold.
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre COMMIT_MSG:45 — (minor) The client advertisement is added by this patch: client_common_fill_super() gains OBD_CONNECT_NANOSEC_TIME for both the MDC and the
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(minor) The client advertisement is added by this patch: client_common_fill_super() gains OBD_CONNECT_NANOSEC_TIME for both the MDC and the OSC connect flags. "already advertised by clients" reads as if it came from an earlier change.
reply PS5 2026-06-30 21:52 Andreas Dilger patchset comment — Sohei, there *must* be compatibility between at least old/new clients/servers. This should use the `OBD_CONNECT_NANOSEC_TIME` flag to deter
Sohei Koyama PS5 · 2026-06-30 07:00
Hi Andreas and James,

I’d like to discuss this patch with you.

This patch does not currently include any compatibility support. For example, timestamps will break in configurations such as an ns-unaware MDS/OSS with an ns-aware client, or an ns-aware MDS/OSS with an ns-unaware client.

I’d like to discuss the following two points:

1. Whether a compatibility patch is necessary. For example, couldn't we avoid the need for a compatibility patch by merging this patch right before the release?

2. How far we should go in supporting compatibility. For example, should we also consider communication between an ns-aware MDS and an ns-unaware MDS? If so, the required patch would become quite large.

Best regards,
Sohei
Andreas Dilger PS5 · 2026-06-30 21:52
Sohei, there *must* be compatibility between at least old/new clients/servers.  This should use the `OBD_CONNECT_NANOSEC_TIME` flag to determine if the clients are sending nsec or sec timestamps.  This had been part of the other nanosecond timestamp patches, so I had assumed it is part of this series as well.

Even if the patch was landed right before a release, there is no requirement/guarantee that clients and servers are upgraded together.  We require at least interop between successive LTS releases (e.g. 2.15.latest to 2.18.0), but prefer interop for longer than this if possible (e.g. 2.14.x or earlier).

There does not need to be major version interoperability between different MDS versions because they are typically upgraded together, but if this is practical to implement (i.e. it uses mostly the same code as client interoperability) it would be good to have this as well.
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 PS7 2026-08-18 13:15 Gerrit AI review for Lustre lustre_idl.h:905 — OBD_CONNECT_NANOSEC_TIME is missing from MDT_CONNECT_SUPPORTED here, and from OST_CONNECT_SUPPORTED below.
Gerrit AI review for Lustre PS7 · 2026-08-18 13:15
OBD_CONNECT_NANOSEC_TIME is missing from MDT_CONNECT_SUPPORTED here, and from OST_CONNECT_SUPPORTED below.

The client asks for it in client_common_fill_super(), but both servers unconditionally strip unsupported bits from the reply:

    mdt_connect_internal():  data->ocd_connect_flags &= MDT_CONNECT_SUPPORTED;
    ofd_parse_connect_data(): data->ocd_connect_flags &= OST_CONNECT_SUPPORTED;

so the bit is cleared on every connect and exp_connect_nanosec_time()/imp_connect_nanosec_time() return false even when both peers are new. Should the two masks be extended in this patch, so the follow-on compatibility patch has a flag that can actually be negotiated?
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre cl_object.h:134 — (minor) The matching comments on struct lu_attr's la_mtime/la_atime/la_ctime/la_btime in lustre/include/lu_object.h still read "in seconds s
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(minor) The matching comments on struct lu_attr's la_mtime/la_atime/la_ctime/la_btime in lustre/include/lu_object.h still read "in seconds since Epoch". Those fields change units in this patch too, and the follow-on rename patch leaves the comments alone as well.
reply PS5 2026-06-30 21:52 Andreas Dilger lustre_export.h:405 — I guess I had assumed when seeing these functions checking `OBD_CONNECT_NANOSEC_TIME` that the protocol interop was implemented.
Andreas Dilger PS5 · 2026-06-30 21:52
I guess I had assumed when seeing these functions checking `OBD_CONNECT_NANOSEC_TIME` that the protocol interop was implemented.
reply PS8 2026-09-11 10:39 Gerrit AI review for Lustre obd_class.h:477 — (style) These are defined in obdclass/obdo.c right next to lustre_set_wire_obdo()/lustre_get_wire_obdo(), whose prototypes live in lustre_ob
Gerrit AI review for Lustre PS8 · 2026-09-11 10:39
(style) These are defined in obdclass/obdo.c right next to lustre_set_wire_obdo()/lustre_get_wire_obdo(), whose prototypes live in lustre_obdo.h. Declaring the new pair there would keep the obdo wire helpers together - not a bug, just placement.
owner Sohei Koyama · uploader Sohei Koyama · PS8 uploaded 7d 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 so that current_time() keeps
  the sub-second part for locally generated timestamps.
- sinks: the stat/statx paths convert the s64 nanosecond value
  back to a timespec64 with the standard ns_to_timespec64()
  (and ktime_to_timespec64() for ktime_t sources).
- 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.
- the llog object mtime keeps its once-per-second update filter
  and is stored scaled to nanoseconds.

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 up to year 2292.

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.

Negotiate OBD_CONNECT_NANOSEC_TIME on the MDT and OST connections
(it is already advertised by clients) 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.

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 and the ofd reply handlers).

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-ns.sh, a configuration-aware test suite that verifies
timestamps warm and cold, including near-epoch and boundary values
(pre-1970, y2038), 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.  It is
added to the regression test group.

Assisted-by: ClaudeCode:Fable-5.1
Test-Parameters: testlist=sanity-ns
Test-Parameters: mdscount=2 mdtcount=4 testlist=sanity-ns
Test-Parameters: ostcount=4 testlist=sanity-ns
Test-Parameters: fstype=zfs testlist=sanity-ns
Test-Parameters: fstype=zfs mdscount=2 mdtcount=4 testlist=sanity-ns
Test-Parameters: clientcount=2 testlist=sanity-ns
Test-Parameters: serverversion=2.16 testlist=sanity-ns
Test-Parameters: serverversion=2.15 mdscount=2 mdtcount=4 testlist=sanity-ns
Test-Parameters: clientcount=2 serverversion=2.16 testlist=sanity-ns
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"
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I79570bc5a66e7c15472af90d690d689d3aa36269
66950 master J !B ✓T ✓R 0/2
LU-20434 build: strncpy to strscpy simple cases
reviewing Shaun Tancheff · PS4→PS6 since your +1
6 unresolved M +83 −95
10d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131138 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+1 earlier PS1 06-29
PS2 07-24 PS3 08-18 PS4 08-22 PS5 08-23 PS6 09-05
your previous vote: +1 on PS4 (2026-08-22 16:20) — now at PS6
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-08-22 21:15 Gerrit AI review for Lustre COMMIT_MSG:26 — (minor) The old code here was `strncpy(extraname, lprof->lp_dt, strlen(lprof->lp_dt) + 1)` - a count of strlen(src)+1 copies the terminator,
Gerrit AI review for Lustre PS4 · 2026-08-22 21:15
(minor) The old code here was `strncpy(extraname, lprof->lp_dt, strlen(lprof->lp_dt) + 1)` - a count of strlen(src)+1 copies the terminator, so extraname was already NUL-terminated (and OBD_ALLOC() zeroes the buffer besides). The change that actually matters in that hunk is the new `if (extraname)` guard, which stops a NULL dereference when the allocation fails; that is worth saying instead.

The matching `Fixes: eba2a78067e` follows from the same reasoning: that commit introduced the strncpy() (converting from strcpy()), but the unchecked OBD_ALLOC() it is guarding predates it.
reply PS5 2026-08-23 12:38 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) The description now says the conversions go to strscpy(), but several sites in this patch go to snprintf() instead:
Gerrit AI review for Lustre PS5 · 2026-08-23 12:38
(minor) The description now says the conversions go to strscpy(), but several sites in this patch go to snprintf() instead:

    lib/libcfs/nidstrings.c   libcfs_nid2str_r(), libcfs_nidstr_r()
    lustre_user.h             obd_str2uuid(), obd_uuid2fsname()
    osd-zfs/osd_quota.c       osd_it_acct_rec()

The first two groups are userspace-visible code where strscpy() isn't available, and osd_it_acct_rec() folds a strncpy()+strscpy() pair into one snprintf() - all reasonable, but nothing in the message says so any more, and "why snprintf() and not strscpy()" is the first thing a reader hits in the UAPI header. Could a sentence covering the userspace/UAPI case come back?
reply PS6 2026-09-06 18:29 Gerrit AI review for Lustre COMMIT_MSG:21 — (typo) "treats the value a nul terminated string" - missing "as".
Gerrit AI review for Lustre PS6 · 2026-09-06 18:29
(typo) "treats the value a nul terminated string" - missing "as".
reply PS6 2026-09-06 18:29 Gerrit AI review for Lustre COMMIT_MSG:36 — (minor) Most of these tags look like they mark the commit that introduced the strncpy() rather than a commit that introduced a bug. Walking
Gerrit AI review for Lustre PS6 · 2026-09-06 18:29
(minor) Most of these tags look like they mark the commit that introduced the strncpy() rather than a commit that introduced a bug. Walking the referenced sites:

- e95e4d3227f, f2d44192278 / osd_get_name_n_idx*(): `name` comes from the static `oids[]` table, longest entry "health_check" at 12 chars, and every caller that passes a non-NULL `buf` passes `sizeof(info->oti_str)` or `sizeof(info->oti_buf)`, both 64.
- 0c1ae1cb9c1 / osd_scan_dir(): `za->za_name` is `char[MAXNAMELEN]` and NUL-terminated by zap_cursor_retrieve(); `ozi_name` is `char[MAXNAMELEN]` too - osd_index.c even has `BUILD_BUG_ON(sizeof(za->za_name) > sizeof(it->ozi_name))` and a plain strcpy().
- 7869bb320e7 / upcall_cache_set_upcall(): the function returns -E2BIG for `count >= UC_CACHE_UPCALL_MAXPATH`, and `upcall` is a `count + 1` byte buffer, so `strncpy(uc_upcall, upcall, count + 1)` stayed inside `uc_upcall[UC_CACHE_UPCALL_MAXPATH]` and always copied the terminator.
- 8d828762d18 / check_gssd_socket(): GSS_SOCKET_PATH is the literal "/tmp/svcgssd.socket", 19 bytes into `sun_path[108]`.
- f6819c90c85 / qmt_pool_alloc(): qmt_pool_create() rejects `strnlen(poolname, LOV_MAXPOOLNAME + 1) > LOV_MAXPOOLNAME`, so `pool_name` is at most 15 chars and QPI_MAXNAME is 16.

If none of those could truncate or leave the destination unterminated, should the tags be dropped so this doesn't get pulled into b2_15/b2_16 as a fix for six unrelated tickets?
reply PS5 2026-08-23 12:38 Gerrit AI review for Lustre lu_object.h:1273 — (minor) Is the flat "not a nul terminated string" accurate? Plenty of producers do terminate, and consumers rely on it:
Gerrit AI review for Lustre PS5 · 2026-08-23 12:38
(minor) Is the flat "not a nul terminated string" accurate? Plenty of producers do terminate, and consumers rely on it:

    mdd/mdd_dir.c:4225        strcmp(tname->ln_name, lname->ln_name)
    lfsck/lfsck_namespace.c:1869  dt_lookup(..., (const struct dt_key *)cname->ln_name)
    mdt/mdt_reint.c:2564      CWARN("...%s...", rr->rr_name.ln_name)
    obdecho/echo_client.c:1444    CERROR("...%s\n", lname->ln_name)

As written the comment says those four are all broken, which isn't the intent. Something like "not necessarily NUL terminated - use ln_namelen (DNAME/\"%.*s\") unless the producer is known to terminate" would describe the contract without over-claiming in either direction.
reply PS6 2026-09-06 18:29 Gerrit AI review for Lustre mdt_handler.c:354 — (minor) Carrying forward the request from patchset 2 for a `struct lu_name` comment saying whether `ln_name` is NUL-terminated. A lu_object.
Gerrit AI review for Lustre PS6 · 2026-09-06 18:29
(minor) Carrying forward the request from patchset 2 for a `struct lu_name` comment saying whether `ln_name` is NUL-terminated. A lu_object.h hunk covering that was present in patchsets 3-5 and is gone again in patchset 6, and it isn't in the follow-on change either. Was dropping it deliberate, or should it come back here or in the non-obvious-cases patch?
owner Shaun Tancheff · uploader Shaun Tancheff · PS6 uploaded 11d ago · NEW · open in Gerrit ↗
commit message
LU-20434 build: strncpy to strscpy simple cases

Most users of strncpy want a nul terminated destination.
These case be transformed easily to use strscpy().

In obd_str2uuid() use snprintf() to copy and calculate the
bytes written and number of bytes of padding needed for
memset().

In obd_uuid2str() use memcpy() instead of strncpy()

In obd_uuid2fsname() strncpy can be replaced with snprintf()

In osd_get_name_n_idx_compat() and osd_get_name_n_idx() buf is passed
to zap_lookup() which treats the value a nul terminated string.

In osd_scan_dir() ozi_name is treated as nul terminated string.

In upcall_cache_set_upcall() uc_upcall is passed as a command line
argument and should be nul terminated.

In check_gssd_socket() sun_path should be a nul terminated string.

In qmt_pool_alloc() qpi_name should be a nul terminated string, it is
treated as string in some places.

In server_put_super() extraname must be a nul terminated string.

Test-Parameters: trivial
Fixes: e95e4d3227f ("LU-10186 osd-zfs: move LAST_ID OI mapping out of oi.xx")
Fixes: f2d44192278 ("LU-7898 osd: remove unnecessary declarations")
Fixes: 0c1ae1cb9c1 ("LU-13124 scrub: check for multiple linked file")
Fixes: 7869bb320e7 ("LU-17718 obdclass: potential string overflow upcall_cache.c")
Fixes: 8d828762d18 ("LU-17015 gss: support large kerberos token for rpc sec init")
Fixes: f6819c90c85 ("LU-11023 quota: remove quota pool ID")
Fixes: eba2a78067e ("LU-6600 obdclass: race lustre_profile_list")
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: Id397f4d9a4812d25f530f00926a5f2906d91f06a
66485 master J !B ✓T ✗6R 0/2
LU-15373 llog: rework changelog_remap_rec()
reviewing Etienne AUJAMES · PS4→PS11 since your +1
16 unresolved L +303 −313
12d
janitor run: 6 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-selinux-ssk-part-1 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-5 crashed RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
review-dne-zfs-part-6 RHEL 10.1 / x86_64 ran 4 tests. 1 tests failed: ost-pools. session
review-dne-zfs-part-7 RHEL 9.7 / x86_64 ran 6 tests. 1 tests failed: sanity-ec. session
review-dne-zfs-part-7 RHEL 9.8 / x86_64 ran 6 tests. 1 tests failed: sanity-ec. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 1 tests failed: sanity-lnet. session
build #131025 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Andreas Dilger
patchsets:
+6 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
your previous vote: +1 on PS4 (2026-06-15 13:23) — now at PS11
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 · PS11 uploaded 13d 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
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
66777 master J !B ✓T ✓R 0/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
21d
janitor run: 7 failing config(s), none unique to this patch — janitor results
build #130310 SUCCESS · tests all Maloo sessions
no vote yet: Oleg Drokin, Timothy Day
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 22d 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
68022 master J ✗1B ✓T ✗2R 1/2
LU-20587 lnet: fix NULL pointer deref in lnet_peer_ni_show_dump
reviewing Andrew Perepechko · PS7→PS10 since your -1 — your objection was dropped
1 unique failure 10 unresolved L +350 −107
22d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanityn@zfs+DNE:test_102seen in 1 other review
failed enforced testplatformdetail
review-dne-zfs-part-2 RHEL 9.7 / x86_64 ran 11 tests. 1 tests failed: sanity-lnet. session
review-dne-zfs-part-7 failed 2× RHEL 9.7 / x86_64 ran 6 tests. 1 tests failed: sanity-ec. session
build #130159 SUCCESS · tests all Maloo sessions
reviews: Alexey Lyashkov +1 2026-08-25 15:08
no vote yet: Alexander Zarochentsev
patchsets:
+5 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
your previous vote: -1 on PS7 (2026-08-18 20:12) — now at PS10
threads: 10 need your reply · 0 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 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 PS10 2026-08-25 12:01 Gerrit AI review for Lustre liblnetconfig_netlink.c:519 — (minor) A realloc() failure is swallowed here - yaml_parse_value_list() returns void and neither data->error nor data->errmsg is set, so lne
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) A realloc() failure is swallowed here - yaml_parse_value_list() returns void and neither data->error nor data->errmsg is set, so lnetctl prints a truncated YAML document and still exits 0.

The older grow in yaml_netlink_msg_parse() returns NL_STOP for the same condition. Could this one report the failure too, so a short document isn't mistaken for the full listing?
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre liblnetconfig_netlink.c:812 — (minor) This is the mirror of the accounting fixed a few lines above: data->buffer moves backwards here, so the free space grows and it shou
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) This is the mirror of the accounting fixed a few lines above: data->buffer moves backwards here, so the free space grows and it should be `*size += data->indent + 2;`.

It only fires when a snprintf() returns negative, so it isn't reachable today, but leaving one of the two sites inverted invites the next reader to copy the wrong one.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre sanity-lnet.sh:7529 — (minor) `<= 1` also passes when the header is missing altogether, which is the other way the once-per-dump attribute can go wrong. The dump
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) `<= 1` also passes when the header is missing altogether, which is the other way the once-per-dump attribute can go wrong. The dump promises exactly one, so `((hdrs == 1))` would catch both a lost and a repeated header.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre sanity-lnet.sh:7537 — (minor) The comment above says the check also confirms the retry path doesn't duplicate entries, but grep -q only proves each primary NID ap
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(minor) The comment above says the check also confirms the retry path doesn't duplicate entries, but grep -q only proves each primary NID appears at least once.

Comparing `grep -c "primary nid: " $out` against $num_peers would actually cover the duplicate case.
reply PS10 2026-08-25 12:01 Gerrit AI review for Lustre sanity-lnet.sh:7539 — (style) Not a bug, but the peers and $out are only cleaned up when every assertion passes - any error() above leaves 300 peers (1500 with SL
Gerrit AI review for Lustre PS10 · 2026-08-25 12:01
(style) Not a bug, but the peers and $out are only cleaned up when every assertion passes - any error() above leaves 300 peers (1500 with SLOW=yes) configured and the YAML file in $TMP for the next subtest.

A `stack_trap "rm -f $out"` plus a stack_trap for the peer teardown registered right after the add loop would make the failure path tidy, and would let the del loop drop out of the verification loop.
owner Andrew Perepechko · uploader Andrew Perepechko · PS10 uploaded 23d 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.

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
66647 master J !B ✓T ✓R 0/2
LU-9639 ldlm: Add kernel doc style for LDLM (3)
reviewing Arshad Hussain · PS1→PS3 since your +1
dwg 3 unresolved L +206 −46
22d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #130208 SUCCESS · tests all Maloo sessions
no vote yet: Oleg Drokin, Timothy Day
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 23d 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
66514 master J !B ✓T ✓R 0/2
LU-9639 ldlm: Add kernel doc style for LDLM (9)
reviewing Arshad Hussain · PS1→PS3 since your +1
dwg 2 unresolved M +67 −31
22d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #130206 SUCCESS · tests all Maloo sessions
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 06-07 PS2 08-17 PS3 08-25
your previous vote: +1 on PS1 (2026-07-30 19:00) — now at PS3
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-08-26 03:34 Gerrit AI review for Lustre ldlm_lib.c:286 — (minor) The buffer numbering carried over from the old comment doesn't line up with what the function reads. Buffer 1 ends up in the target
Gerrit AI review for Lustre PS3 · 2026-08-26 03:34
(minor) The buffer numbering carried over from the old comment doesn't line up with what the function reads. Buffer 1 ends up in the target UUID:

    memcpy(cli->cl_target_uuid.uuid, lustre_cfg_buf(lcfg, 1),
           LUSTRE_CFG_BUFLEN(lcfg, 1));

and buffer 2 becomes the connection UUID handed to client_import_add_conn(). The setup line quoted a few lines above in osc_on_mdt() says the same thing - '1:lustre-OST0000_UUID 2:NID' - and lustre_start_mgc() passes LUSTRE_MGS_OBDNAME as buffer 1 and the nid string as buffer 2.

The device/client name is buffer 0. Should 1 read 'target UUID' rather than 'client UUID'?
reply PS3 2026-08-26 03:34 Gerrit AI review for Lustre ldlm_lib.c:3541 — (minor) Wrapping this bullet onto an unindented continuation line breaks the list. contrib/scripts/kernel-doc -rst emits:
Gerrit AI review for Lustre PS3 · 2026-08-26 03:34
(minor) Wrapping this bullet onto an unindented continuation line breaks the list. contrib/scripts/kernel-doc -rst emits:

    * ``negative`` errno for a known LDLM error code, or an unrecognised negative
    code passed through
    * ``-EPROTO`` for an unrecognised positive code

and docutils then warns 'Bullet list ends without a blank line; unexpected unindent' and drops out of the list, so the -EPROTO entry is rendered as part of a plain paragraph instead of a third bullet.

Indenting the continuation to line up under the bullet text keeps all three items in the list, which is also what the rest of the tree does (jobid.c, md_attrs.c, liblustreapi_layout.c):

     * * %negative errno for a known LDLM error code, or an unrecognised
     *   negative code passed through
owner Arshad Hussain · uploader Arshad Hussain · PS3 uploaded 23d 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
66124 master J !B ✓T ✓R 0/2
LU-9653 utils: Add kernel doc style for utils (21)
reviewing Arshad Hussain · PS1→PS2 since your +1
dwg 3 unresolved S +17 −8
22d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #130102 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-08-25 07:01
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 05-25 PS2 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-08-06 19:35) — now at PS2
threads: 3 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:87 — (style) this isn't a bug, but the Return: entries are missing the reST list marker that the rest of the tree uses:
Gerrit AI review for Lustre PS1 · 2026-08-12 16:01
(style) this isn't a bug, but the Return: entries are missing the reST list marker that the rest of the tree uses:

    * Return:
    * * %0 on success
    * * %-errno on error

Without the leading `* ` the two lines render as one run-together paragraph ("0 on success negative on error") instead of a two-item list. These two blocks are the only Return: sections in the tree written without it, against ~1150 that have it (see liblustreapi_swap.c and liblustreapi_hsm.c in this same directory). Same applies to the llapi_ioctl() block below.
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 24d 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
66513 master J !B ✓T ✓R 0/2
LU-9639 ldlm: Add kernel doc style for LDLM (7)
reviewing Arshad Hussain · PS1→PS2 since your +1
dwg 9 unresolved M +80 −17
23d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #130070 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-08-25 08:54
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:02) — 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 COMMIT_MSG:11 — The message says the patch "removes '/**' for comments which is not meant to be a kernel-doc comment", but the diff doesn't remove any. ldlm
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
The message says the patch "removes '/**' for comments which is not meant to be a kernel-doc comment", but the diff doesn't remove any. ldlm_ibits_policy_wire_to_local() still opens its inner comment with '/**' (around line 477 of the patched file), which is exactly that case. Should that hunk be part of this patch, or should the sentence be dropped from the message?
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:45 — Is "conflicting lock queue" right for this parameter? Conflicting locks collected here go to the local bl_ast_list; @work_list only receives
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
Is "conflicting lock queue" right for this parameter? Conflicting locks collected here go to the local bl_ast_list; @work_list only receives the splice for locks that were granted, and the only caller runs it as completion ASTs:

    __ldlm_reprocess_all() -> reprocess(res, &res->lr_waiting, &rpc_list, ...)
    ldlm_run_ast_work(ns, &rpc_list, LDLM_WORK_CP_AST)

Something like "list to collect completion AST work for granted locks" would describe it better.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:55 — This return description doesn't look right. The function returns LDLM_ITER_CONTINUE (1) or LDLM_ITER_STOP (2) - it is an ldlm_reprocessing_p
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
This return description doesn't look right. The function returns LDLM_ITER_CONTINUE (1) or LDLM_ITER_STOP (2) - it is an ldlm_reprocessing_policy, and rc is seeded with LDLM_ITER_CONTINUE and otherwise comes from ldlm_process_inodebits_lock(). 0 only appears if ldlm_run_ast_work() happens to be the last thing to set rc, so "%0 on success" reads backwards. Should this say LDLM_ITER_CONTINUE/LDLM_ITER_STOP, or negative errno on AST failure?
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:156 — The description for this parameter is empty. Rendering the block gives an empty entry for `struct list_head *queue`. Something like "granted
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
The description for this parameter is empty. Rendering the block gives an empty entry for `struct list_head *queue`. Something like "granted or waiting queue to check @req against" would fill it in.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:172 — This list only covers 0 and 1, but the function also returns 2 (granted GROUP lock with a matching li_gid), -EPROTO for a non-DOM GROUP requ
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
This list only covers 0 and 1, but the function also returns 2 (granted GROUP lock with a matching li_gid), -EPROTO for a non-DOM GROUP request, and -EWOULDBLOCK under LDLM_FL_BLOCK_NOWAIT. The caller tests both of those - `if (rc < 0)` and `if (rc != 2)` in ldlm_process_inodebits_lock() - so they're part of the contract. Worth listing them while the block is being rewritten.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:343 — (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_inodebits.c:351 — This isn't a bug, but the doxygen marker survived the conversion here - `\a lock` should be `@lock` like the ones in ldlm_inodebits_compat_q
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
This isn't a bug, but the doxygen marker survived the conversion here - `\a lock` should be `@lock` like the ones in ldlm_inodebits_compat_queue() above. It renders literally as "\a lock".
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:355 — Two things in this block. The function never returns 0 - every exit is RETURN(LDLM_ITER_STOP), RETURN(LDLM_ITER_CONTINUE), or the `out:` lab
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
Two things in this block. The function never returns 0 - every exit is RETURN(LDLM_ITER_STOP), RETURN(LDLM_ITER_CONTINUE), or the `out:` label returning the negative rc from ldlm_inodebits_compat_queue(). Also, the two value lines are missing the list markers the other blocks in this patch use, so they render as one run-on paragraph:

    **Return**
    ``0`` on success ``negative`` on failure

Prefixing each with `* ` gives the same bulleted list as ldlm_inodebits_drop() below.
reply PS1 2026-08-12 05:39 Gerrit AI review for Lustre ldlm_inodebits.c:505 — Can this actually fail? Both exits are RETURN(0) - the unset-bits case warns and returns 0, and the downgrade path returns 0 - and neither c
Gerrit AI review for Lustre PS1 · 2026-08-12 05:39
Can this actually fail? Both exits are RETURN(0) - the unset-bits case warns and returns 0, and the downgrade path returns 0 - and neither caller (mdt_handler.c, ldlm_lockd.c) checks the value. Documenting a negative error return that can't happen may send callers looking for one.
owner Arshad Hussain · uploader Oleg Drokin · PS2 uploaded 24d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (7)

Convert the '/**' comment blocks in ldlm_inodebits.c to kernel-doc
style and drop that marker from the comment inside
ldlm_ibits_policy_wire_to_local(), which is not kernel-doc.

Correct what they say: ldlm_process_inodebits_lock() needs the
resource lock asserted by check_res_locked(), not the namespace lock,
and returns LDLM_ITER_CONTINUE/LDLM_ITER_STOP or a negative errno,
never 0. ldlm_inodebits_compat_queue() also returns 2, -EPROTO and
-EWOULDBLOCK, and ldlm_inodebits_drop() always returns 0.

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: Ibf11ab8dc9fa91645e7e74197c0a2efd946baa63
66775 master J !B ✓T ✓R 0/2
LU-9639 ldlm: Add kernel doc style for LDLM (13)
reviewing Arshad Hussain · PS1→PS5 since your +1
dwg 2 unresolved S +34 −12
23d
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 24d 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
66776 master J !B ✓T ✓R 0/2
LU-9639 ldlm: Add kernel doc style for LDLM (12)
reviewing Arshad Hussain · PS1→PS2 since your +1
dwg 5 unresolved M +27 −26
23d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #130072 SUCCESS · tests all Maloo sessions
no vote yet: Oleg Drokin, Timothy Day
patchsets: PS1 06-22 PS2 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-07-30 19:01) — now at PS2
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-12 15:37 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) The message says the patch also "removes '/**' for comments which is not meant to be a kernel-doc comment", but nothing like that ha
Gerrit AI review for Lustre PS1 · 2026-08-12 15:37
(minor) The message says the patch also "removes '/**' for comments which is not meant to be a kernel-doc comment", but nothing like that happens here. All four /** blocks in ldlm_reclaim.c stay /** and all four are real kernel-doc. Is this line carried over from the earlier patches in the series?
reply PS1 2026-08-12 15:37 Gerrit AI review for Lustre ldlm_reclaim.c:84 — (typo) `ns_rsh_hash` should be `ns_rs_hash` - it is spelled correctly on the @hs line just above, and the field used below is `ns->ns_rs_has
Gerrit AI review for Lustre PS1 · 2026-08-12 15:37
(typo) `ns_rsh_hash` should be `ns_rs_hash` - it is spelled correctly on the @hs line just above, and the field used below is `ns->ns_rs_hash`.
reply PS1 2026-08-12 15:37 Gerrit AI review for Lustre ldlm_reclaim.c:157 — (minor) The old comment documented `count` in both directions and the output half is dropped here:
Gerrit AI review for Lustre PS1 · 2026-08-12 15:37
(minor) The old comment documented `count` in both directions and the output half is dropped here:

    \param[out] count  count of lock still to be revoked

That half is load-bearing - ldlm_reclaim_ns() runs `while (count > 0 && nr_processed < ns_nr)` and depends on `*count -= data.rcd_added` at the end of this function. lustre/llite/file.c already uses the `@it: [in,out] ...` form, so `@count: [in,out] count of locks to be revoked; on return, count still to be revoked` would preserve it.
reply PS1 2026-08-12 15:37 Gerrit AI review for Lustre ldlm_reclaim.c:158 — (minor) Not a bug, but the prose still says 'age' now that the documented parameter has been corrected to `age_ns`, and the unit is not stat
Gerrit AI review for Lustre PS1 · 2026-08-12 15:37
(minor) Not a bug, but the prose still says 'age' now that the documented parameter has been corrected to `age_ns`, and the unit is not stated. Maybe "only revoke locks idle for longer than `age_ns` nanoseconds"?
reply PS1 2026-08-12 15:37 Gerrit AI review for Lustre ldlm_reclaim.c:306 — (typo) This sentence looks garbled: "Return true if it reaches the Check on the total granted locks:" splices the summary line above into th
Gerrit AI review for Lustre PS1 · 2026-08-12 15:37
(typo) This sentence looks garbled: "Return true if it reaches the Check on the total granted locks:" splices the summary line above into the start of the next sentence. The remaining three lines then restate the Return: block that follows.

Something like this keeps the original meaning:

    * ldlm_reclaim_full() - Check on the total granted locks
    *
    * Also triggers lock reclaim if the low watermark
    * (ldlm_reclaim_threshold) is reached.
    *
    * Return:
    * * %true high watermark (ldlm_lock_limit) reached.
    * * %false high watermark not reached.
owner Arshad Hussain · uploader Oleg Drokin · PS2 uploaded 24d ago · NEW · open in Gerrit ↗
commit message
LU-9639 ldlm: Add kernel doc style for LDLM (12)

This patch converts existing functional comments in
lustre/ldlm/ldlm_reclaim.c to kernel doc style comments.

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: I395e2e594d8a6e3b81bc03389c495946cd122762
65199 master J ✗1B ✓T ✗1R 0/2
LU-19768 obdclass: table-driven netlink framework
reviewing Timothy Day · PS1→PS8 since your -1 — your objection was dropped
1 unique failure 17 unresolved L +494 −43
32d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-quota@ldiskfs+DNE:test_80seen in 67 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-4 RHEL 10.1 / x86_64 ran 9 tests. 1 tests failed: sanity-quota. session
build #129426 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn, Andreas Dilger, Minh
patchsets:
+3 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
your previous vote: -1 on PS1 (2026-04-10 19:43) — now at PS8
threads: 15 need your reply · 0 waiting on others · 2 own notes · 0 bot
reply PS8 2026-08-14 23:29 Andreas Dilger COMMIT_MSG:25 — (minor) duplicate `Signed-off-by: Minh`...
Andreas Dilger PS8 · 2026-08-14 23:29
(minor) duplicate `Signed-off-by: Minh`...
reply PS8 2026-08-14 23:29 Andreas Dilger lustre_kernelcomm.h:267 — (style) instead of putting this here, it would be better to `#define GENRADIX_NODE_SIZE PAGE_SIZE` in the compat code and use that instead o
Andreas Dilger PS8 · 2026-08-14 23:29
(style) instead of putting this here, it would be better to `#define GENRADIX_NODE_SIZE PAGE_SIZE` in the compat code and use that instead of `LUSTRE_NL_ENTRY_SIZE_MAX`.
note PS1 2026-04-10 19:43 James Simmons kernelcomm.c:1413 — So the table stuff is meant to obd specific but this is really really generic. The code seems to be a mix of both behaviors of being obd spe
James Simmons PS1 · 2026-04-10 19:43
So the table stuff is meant to obd specific but this is really really generic. The code seems to be a mix of both behaviors of being obd specific and then super generic. I would prefer that it was only obd specific. Its not going to be easy to make dump_one() flexible for all cases. So I'm not sold on a dump function.
note PS1 2026-04-10 19:43 James Simmons kernelcomm.c:1455 — Same here. While its labled as obd specific its really super generic.
James Simmons PS1 · 2026-04-10 19:43
Same here. While its labled as obd specific its really super generic.
reply PS2 2026-07-28 10:31 Gerrit AI review for Lustre kernelcomm.c:1341 — `ops->collect()` is called with `obd_device_lock()` held, and that is `xa_lock(&obd_devs)` -- a spinlock. So a collect callback can't sleep,
Gerrit AI review for Lustre PS2 · 2026-07-28 10:31
`ops->collect()` is called with `obd_device_lock()` held, and that is `xa_lock(&obd_devs)` -- a spinlock. So a collect callback can't sleep, and anything it allocates (the natural implementation is `genradix_ptr_alloc()`, which existing callers such as tgt_mount.c use with GFP_KERNEL) has to be GFP_ATOMIC.

Nothing in the descriptor comment in lustre_kernelcomm.h says this, and the header also doesn't say that `collect` owns updating `ctx->count` and must store entries at 0..count-1 (both the cleanup loop here and `lustre_obd_nl_dump()` assume that). Since there is no in-tree implementation yet to copy from, could the contract be spelled out with the struct?

Holding the spinlock across the whole device scan is also a change in character from the existing handlers -- `lustre_stats_start()` does its scan outside `obd_device_lock()`.
reply PS2 2026-07-28 10:31 Gerrit AI review for Lustre kernelcomm.c:1350 — `cb->min_dump_alloc` is set to a fixed `ops->min_alloc` regardless of how many entries `collect()` gathered. The two existing handlers scale
Gerrit AI review for Lustre PS2 · 2026-07-28 10:31
`cb->min_dump_alloc` is set to a fixed `ops->min_alloc` regardless of how many entries `collect()` gathered. The two existing handlers scale it: `lustre_device_list_start()` uses `class_obd_devs_count() * DEVICE_VALUE_PACKET_SIZE`, and `lustre_stats_start()` accumulates `STATS_MSG_DATASET_SIZE * rc`. With a constant, any node with more devices than the descriptor author assumed overflows the skb -- and per the comment below, that ends the dump with an error rather than continuing. Should this be `ops->min_alloc * ctx->count` plus the key-table size?
reply PS2 2026-08-14 23:29 Andreas Dilger kernelcomm.c:1407 — This looks like a reasonable suggestion?
Gerrit AI review for Lustre PS2 · 2026-07-28 10:31
When the skb fills, this returns -EMSGSIZE and the whole dump is aborted, dropping every entry from `ctx->index` onwards. The usual pattern -- and what `lustre_device_list_dump()` does -- is to stop adding messages and return the byte count so netlink flushes the skb and re-enters the dump:

    return rc < 0 ? rc : msg->len;

`ctx->index` is already carried in the context, so resumption would work; only the return value is missing. Same for the `dump_one()` failure just below, where `rc` may well be -EMSGSIZE too.

No caller exists yet, so this isn't reachable today, but it looks worth fixing before the first command is wired up.
Andreas Dilger PS2 · 2026-08-14 23:29
This looks like a reasonable suggestion?
reply PS3 2026-08-14 23:29 Andreas Dilger kernelcomm.c:1280 — This also seems reasonable
Gerrit AI review for Lustre PS3 · 2026-07-30 06:01
(minor) This is the same loop that is still open-coded in `lustre_stats_dump()` above. The patch adds the `nla_put` return checks to that copy and lands a second, identical copy here, so a future fix to one will miss the other -- which is the opposite of what the commit message says the change does.

Could `lustre_stats_dump()` just call this?

    rc = lustre_nl_put_dataset(msg, stats, LUSTRE_STATS_ATTR_DATASET);
    if (rc)
        GOTO(out_cancel, rc);
Andreas Dilger PS3 · 2026-08-14 23:29
This also seems reasonable
reply PS8 2026-08-15 13:12 Gerrit AI review for Lustre kernelcomm.c:32 — (style) dropping the `static struct genl_family lustre_family;` forward declaration left two blank lines here; one is enough.
Gerrit AI review for Lustre PS8 · 2026-08-15 13:12
(style) dropping the `static struct genl_family lustre_family;` forward declaration left two blank lines here; one is enough.
reply PS8 2026-08-15 13:12 Gerrit AI review for Lustre kernelcomm.c:641 — (style) not a bug, but `stats_dataset_list` becomes a kernel-global symbol here with no subsystem prefix, which is easy to collide with. `lu
Gerrit AI review for Lustre PS8 · 2026-08-15 13:12
(style) not a bug, but `stats_dataset_list` becomes a kernel-global symbol here with no subsystem prefix, which is easy to collide with. `lustre_stats_dataset_list` would match `lustre_family` and `lustre_stats_dump()` alongside it. The extern in lustre_kernelcomm.h would need the same rename.
reply PS8 2026-08-14 23:29 Andreas Dilger kernelcomm.c:841 — (style) doesn't need a whole saga. Just a short comment like `copy by element, struct copy only copies fixed header` or maybe use `unsafe_m
Andreas Dilger PS8 · 2026-08-14 23:29
(style) doesn't need a whole saga.  Just a short comment like `copy by element, struct copy only copies fixed header` or maybe use `unsafe_memcpy()` to avoid the warning.
reply PS8 2026-08-15 13:12 Gerrit AI review for Lustre lprocfs_status.c:1538 — (minor) This repeats the xa_lock()/__xa_alloc()/atomic_inc() sequence from ldebugfs_stats_alloc() verbatim, so the two copies can drift apar
Gerrit AI review for Lustre PS8 · 2026-08-15 13:12
(minor) This repeats the xa_lock()/__xa_alloc()/atomic_inc() sequence from ldebugfs_stats_alloc() verbatim, so the two copies can drift apart.

This was raised on the first revision and still applies: ldebugfs_stats_alloc() could compute its truncated source string and then call ldebugfs_stats_register(), leaving only the debugfs file creation behind and keeping one copy of the xarray insertion.
owner Timothy Day · uploader Minh · PS8 uploaded 33d ago · NEW · open in Gerrit ↗
commit message
LU-19768 obdclass: table-driven netlink framework

Introduce a reusable table-driven netlink handler framework
(lustre_nl_obd_ops / 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, dump_one, and
optional 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
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Change-Id: Ic3267111785fe79761f0673477149f7fca470a35
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
66799 master J !B ✓T ✓R 0/2
LU-20418 build: introduce gen_compat and port early libcfs
reviewing Shaun Tancheff · PS7→PS9 since your +1
5 unresolved L +665 −64
45d
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 47d 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
56526 master J !B ✓T ✗2R 0/2
LU-18076 llite: add $MOUNT/.lustre/uuid
reviewing Emoly Liu · PS1→PS10 since your -1 — your objection was dropped
5 unresolved M +125 −3
49d
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 50d 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
65426 master J ✓B ✓T ✓R 0/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
51d
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 72d 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
S +34 −1
69d
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 99d 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 2 unresolved XS +2 −3
96d
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 97d 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
56783 master J !B ✓T ✗11R 0/2
LU-18400 tests: enable panic_on_warn
reviewing Timothy Day · PS8→PS12 since your +1
3 unresolved M +65 −0
99d
janitor run: 5 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-2 RHEL 8.10 / x86_64 ran 11 tests. 5 tests failed: sanity-pfl, sanity-lnet, pjdfstest, sanity-sec, sanity-lfsck. session
review-dne-part-2 RHEL 9.7 / x86_64 ran 11 tests. 5 tests failed: sanity-pfl, sanity-lnet, pjdfstest, sanity-sec, sanity-lfsck. session
review-dne-part-4 RHEL 8.10 / x86_64 ran 9 tests. 6 tests failed: sanity-quota, sanity-hsm, sanity-flr, sanity-dom, replay-ost-single, mmp. session
review-dne-part-4 RHEL 9.7 / x86_64 ran 9 tests. 6 tests failed: sanity-quota, sanity-hsm, sanity-flr, sanity-dom, replay-ost-single, mmp. session
review-dne-part-7 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-scrub. session
review-dne-part-7 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanity-scrub. session
review-dne-zfs-part-2 RHEL 8.10 / x86_64 ran 11 tests. 2 tests failed: sanity-lnet, sanity-lfsck. session
review-dne-zfs-part-4 RHEL 8.10 / x86_64 ran 9 tests. 1 tests failed: mmp. session
review-dne-zfs-part-7 RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanity-scrub. session
review-ldiskfs RHEL 8.10 / x86_64, RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanity-lnet. session
review-ldiskfs-ubuntu RHEL 8.10 / x86_64, Ubuntu 24.04 / x86_64 ran 6 tests. 2 tests failed: sanity-sec, sanity-lnet. session
29 optional test failure(s) — informational
build #126228 SUCCESS · tests all Maloo sessions
no vote yet: Sergey Cheremencev, Andreas Dilger, Oleg Drokin
patchsets:
+7 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
your previous vote: +1 on PS8 (2025-09-18 18:25) — now at PS12
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
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
owner Timothy Day · uploader Timothy Day · PS12 uploaded 99d 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
63361 master J ✗1B ✓T ✗0R 0/2−
LU-19323 lnet: add IPv6 support to lnet_selftest
reviewing Serguei Smirnov · PS4→PS6 since your -1 — your objection was dropped
1 unique failure stalled 129d 12 unresolved XL +2239 −574
129d
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 184d 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 0/2−
LU-17266 mdt: purge objects via procfs
reviewing Alex Zhuravlev · PS57→PS62 since your -1 — your objection was dropped
stalled 151d 3 unresolved M +124 −3
151d
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 345d 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 195d 8 unresolved XL +643 −2491
195d
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 834d 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 324d XS +5 −0
324d
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 1097d 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 408d XL +1743 −1123
408d
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 2405d 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 408d XL +2713 −2
408d
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 2425d 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 0/2−
LU-11380 utils: split llapi_fid2path() in three functions
reviewing Andreas Dilger · PS11→PS23 since your -1 — your objection was dropped
stalled 408d L +359 −184
408d
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 2353d 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 408d M +31 −23
408d
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 675d 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 0/2−
LU-10973 lnet: Support autotest integration
reviewing Amir Shehata · PS12→PS18 since your +1
stalled 408d XS +1 −0
408d
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 1897d 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 408d S +31 −0
408d
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 1799d 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 0/2−
LU-15979 llite: restore S_NOSEC in ll_update_inode()
reviewing Vladimir Saveliev · PS4→PS6 since your +1
6 unique failures stalled 408d M +54 −8
408d
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 1331d 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 409d S +24 −0
409d
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 862d 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 1/2−
LU-8709 llite: implement parallel asynchronous readahead
reviewing Li Xi · PS10→PS14 since your -1 — your objection was dropped
stalled 409d XL +1467 −1103
409d
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 2813d 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 415d 1 unresolved XS +4 −2
415d
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 972d 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 415d 2 unresolved S +28 −20
415d
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 648d 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

(76)
66784 master J !B ✓T ✓R 2/2
LU-11509 ldlm: scale LFRU sample window from lru_size
reviewing Keguang Xu · CI green — awaiting your review
2 unresolved M +147 −51
31m
janitor run: 1 failing config(s), none unique to this patch — janitor results
reviews: Andreas Dilger +1 2026-08-23 05:41 · Timothy Day +1 2026-09-17 16:58
no vote yet: Qian Yingjin, Alex Zhuravlev, Patrick Farrell
patchsets: PS1 06-22 PS2 06-23 PS3 06-24 PS4 08-23 kg.xu PS5 08-23 kg.xu
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-07-31 12:19 kg.xu patchset comment — Ping, reviewers
kg.xu PS3 · 2026-07-31 12:19
Ping, reviewers
reply PS3 2026-08-19 15:11 Andreas Dilger sanity.sh:17176 — (style) more natural abbreviation would be `priv_thresh`, or just `thresh` to fit into 89 columns below
Andreas Dilger PS3 · 2026-08-19 15:11
(style) more natural abbreviation would be `priv_thresh`, or just `thresh` to fit into 89 columns below
owner Keguang Xu · uploader kg.xu · PS5 uploaded 25d ago · NEW · open in Gerrit ↗
commit message
LU-11509 ldlm: scale LFRU sample window from lru_size

lfru_sample_window_size is the number of lock insertions sampled
before LFRU recomputes priv_score_threshold from max_freq.
It controls how the promotion gate adapts after metadata bursts
without filling the priv list with one-touch locks.

Previously the window was LDLM_DEFAULT_LRU_SIZE / 10 (10 * num_cpus),
set only at namespace creation.  On large clients the sample period
was too long to promote valuable locks before they were displaced; on
small clients it was too short and tending to chased transient churn.
It also ignored the lru_size and was not refreshed at runtime.

This patch addresses the issue by periodically recalculating the
window size based on current lru size, setting it to
ns_nr_unused / 10 and clamping it between 32 and 160, the promotion
gate now dynamically adapts to changing workloads.

Use LDLM_LFRU_PRIV_DEMOTE_THRESH (64) to avoid batch priv demotion
oscillation while the cache is still filling.

And a benchmark is performed, refer #62863 for the code.

30/70 hot/cold access, 800/16000 files, lru_size=2400. Both arms
are LFRU; only the sample window changes. The old window is
10*ncpu (640 on 64 cores). The new window is
clamp(nr_unused/10, 32, 160), i.e. based on LRU size and closer
to the workload. Pin lfru_sample_window_size to 640 vs 160.

Small-CPU mixed runs already show LFRU ~6% ahead of LRU.
On large-CPU boxes the ncpu-based window updates too slowly
and LFRU looks like LRU; sizing from LRU size keeps that lead.

16-CPU, 4 procs, 10 rounds: LRU-sized 160 cut enqueue ~4% vs
ncpu-sized 640:

| Test Run | ncpu-640 | Time | lru-160 | Time | Improvement |
| 1        | 113401   | 116s | 107994  | 113s | 4%          |
| 2        | 113880   | 113s | 107608  | 112s | 5%          |
| 3        | 113507   | 112s | 108381  | 111s | 4%          |

Priv under the LRU-sized window settled near the 30% cap
(~700 of 2400).


sanity/124e/124f/124h, set llite.*.enable_statahead_fname=0 with the
intention to disable `stat()` randomness, to reduce flakiness.

Test-Parameters: testlist=sanity env=ONLY=124e,124f,ONLY_REPEAT=100
Test-Parameters: testlist=sanity env=ONLY=124g,ONLY_REPEAT=200
Test-Parameters: clientdistro=el10.1 serverdistro=el10.1 testlist=sanity env=ONLY=124g,ONLY_REPEAT=200
Signed-off-by: Keguang Xu <kxu@ddn.com>
Change-Id: I2dfdca5a58c71a2d9ab9fe60795c5db60587b4ce
67574 master J ✗1B ✓T ✓R 0/2
LU-19365 nodemap: allow dynamic IPv6 subranges
reviewing Manish Regmi · CI green — awaiting your review
1 unresolved M +88 −17
4h
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanityn@ldiskfs+DNE:test_108aseen in 28 other reviews
no vote yet: Chris Horn, Sebastien Buisson
patchsets:
+2 earlier PS1 07-27 PS2 07-29
PS3 07-29 PS4 08-07 PS5 09-02 PS6 09-15 PS7 09-16
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
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
owner Manish Regmi · uploader Manish Regmi · PS7 uploaded 1d 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
64250 master J !B ✓T ✓R 1/2
LU-19932 osc: allow killing a write waiting on an extent
reviewing Andreas Dilger · CI green — awaiting your review
M +65 −39
21h
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131162 SUCCESS · tests all Maloo sessions
reviews: Vitaliy Kuznetsov +1 2026-09-07 11:46
no vote yet: Jinshan Xiong, Oleg Drokin, Patrick Farrell
patchsets:
+1 earlier PS1 02-26
PS2 03-02 PS3 03-03 PS4 03-06 PS5 09-04 Oleg Drokin PS6 09-05 Vitaliy Kuznetsov
owner Andreas Dilger · uploader Vitaliy Kuznetsov · PS6 uploaded 11d ago · NEW · open in Gerrit ↗
commit message
LU-19932 osc: allow killing a write waiting on an extent

A process writing to a file can block indefinitely in
osc_extent_wait() while an extent it needs is in flight to an
unresponsive server, with no way to kill it.  Make that wait abortable
on the two paths that queue a page, osc_extent_find() and
osc_queue_async_io(), which hand the error back to the writer.

The wait stays uninterruptible wherever the caller goes on to flush,
discard or truncate the pages, which must not happen on top of an
incomplete drain: osc_cache_wait_range() for osc_lock_flush() and the
fsync drain, osc_cache_writeback_range(), osc_object_invalidate(), and
the truncate handshake between osc_extent_release() and
osc_cache_truncate_start(), which has to reach OES_TRUNC before
osc_extent_truncate() asserts on it.  That is what LU-2779 made this
wait uninterruptible for.  osc_queue_dio_pages() stays uninterruptible
for its own reason: returning early would leave its pages counted in
the DIO sync anchor.

The hang reported in LU-19932 is in that fsync drain and is not one of
the ones this makes killable.  Making the drain killable would not fix
it either: the writer returns into filemap_write_and_wait_range(),
which then waits uninterruptibly in folio_wait_writeback() for the
same pages, since cl_page_make_ready() marks every page of a write RPC
PG_writeback.  Measured against an OST stalled with
OBD_FAIL_OST_BRW_PAUSE_BULK, SIGKILL does not free a writer from that
second wait.

Only the second wait becomes abortable, the one entered after the
initial 600s wait has already reported the extent as stalled.  An
ordinary wait for an extent that is merely still in flight must not be
cut short by a SIGALRM or a SIGINT.

An mmap store reaches osc_queue_async_io() through page_mkwrite(),
which maps an interrupted wait to VM_FAULT_SIGBUS.  Use a killable
wait for mkwrite so a caught SIGTERM cannot cause an unexpected
SIGBUS. After the initial 600s timeout, fatal signals can still abort
this wait; caught signals remain pending until the wait completes.
Normal writes retain the abortable wait.  This avoids introducing a
refault, which needs the kernel-mode fault case worked out: a fault
taken from inside a syscall does not dequeue the signal and would
re-execute rather than end the syscall.

Release the current page's dirty-cache reservation if the wait in
osc_queue_async_io() fails.  The page has not joined the extent yet,
so RPC completion cannot release its per-OSC and global dirty-page
accounting.  This also covers the existing RPC-error exit.

osc_extent_wait() returns only 0 or a negative errno.  The leftover
jiffies from wait_event_idle_timeout() must not reach the callers:
osc_queue_async_io() only calls osc_extent_find() when rc is zero, and
on a non-zero rc walks the extent pointer it has just released.

Simplify ldlm_completion_ast() to only call l_wait_event_abortable()
once instead of in two separate branches to avoid code duplication.

Simplify osc_extent::oe_rc usage to only hold 0 (success) or a
negative errno.  Storing the number of pages there isn't used for
anything, and it complicates its usage elsewhere.

Fixes: 26345bee6b04 ("LU-2779 osc: osc_extent_wait() shouldn't be interruptible")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Signed-off-by: Vitaliy Kuznetsov <vkuznetsov@ddn.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I140bdd6cdea3ccd985b457ee4b6bf415a542c669
68775 master J !B ✓T ✓R 0/2
LU-20726 obdclass: reject invalid parameter names in class_set_global()
reviewing Chakshu Kansal · CI green — awaiting your review
5 unresolved S +9 −2
1d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #131495 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-09-11 11:44 Gerrit AI review for Lustre COMMIT_MSG:7 — (style) This isn't a bug, but the subject is 71 characters, above the ~64 the Lustre commit rules ask for. Something like "LU-20726 obdclass
Gerrit AI review for Lustre PS1 · 2026-09-11 11:44
(style) This isn't a bug, but the subject is 71 characters, above the ~64 the Lustre commit rules ask for. Something like "LU-20726 obdclass: validate param name in class_set_global()" (59) would fit, if the patch is refreshed.
reply PS1 2026-09-16 07:32 Andreas Dilger COMMIT_MSG:9 — This commit message would benefit from explaining what code uses `class_set_global()`. Is that during processing of config log parameters?
Andreas Dilger PS1 · 2026-09-16 07:32
This commit message would benefit from explaining what code uses `class_set_global()`.  Is that during processing of config log parameters?  It doesn't explain this in the Jira ticket either.
reply PS1 2026-09-16 07:32 Andreas Dilger COMMIT_MSG:21 — (style) Extra blank line in sign off block
Andreas Dilger PS1 · 2026-09-16 07:32
(style) Extra blank line in sign off block
reply PS1 2026-09-11 11:44 Gerrit AI review for Lustre obd_sysfs.c:842 — (style) Not a bug, but now that `eq` exists this round-trip through `value` is leftover from the old code. `off = eq - param;` says "length
Gerrit AI review for Lustre PS1 · 2026-09-11 11:44
(style) Not a bug, but now that `eq` exists this round-trip through `value` is leftover from the old code. `off = eq - param;` says "length of the name" directly, and could move up next to the declaration.
reply PS1 2026-09-16 07:32 Andreas Dilger obd_sysfs.c:845 — Seems reasonable to fix. I'm don't think that matching the first prefix is something we want to allow.
Gerrit AI review for Lustre PS1 · 2026-09-11 11:44
This guard closes the off == 0 case, but the prefix match itself is untouched, so a truncated name still lands on the wrong attribute. `lctl set_param -P time=10` gives off == 4 and strncmp("timeout", "time=10", 4) == 0, so `timeout` gets set; `at_=5` picks up `at_min` the same way.

That is the same failure the commit describes (zero length is just the degenerate case), and LU-20726 is titled "Fix Invalid Parameter Matching". Would a length check close it for good?

    if (strlen(lustre_attrs[i]->name) == off &&
        !strncmp(lustre_attrs[i]->name, param, off))

Pre-existing since a74b2b5bce71, so not a reason to block this patch - but it seems in scope for the ticket.
Andreas Dilger PS1 · 2026-09-16 07:32
Seems reasonable to fix. I'm don't think that matching the first prefix is something we want to allow.
owner Chakshu Kansal · uploader Chakshu Kansal · PS1 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20726 obdclass: reject invalid parameter names in class_set_global()

class_set_global() assumes that the input parameter contains an '='
and has a non-empty name. When the parameter starts with '=', the
calculated name length is zero, causing strncmp() to always return
a match and select the first attribute in lustre_attrs[].

Additionally, when '=' is missing, strchr() returns NULL, resulting
in invalid pointer arithmetic when calculating the value pointer.

Reject parameters without '=' or with an empty name by returning
-EINVAL.

Fixes: a74b2b5bce71 ("LU-9431 obd: resolve config log sysfs issues")

Signed-off-by: Chakshu Kansal <ckansal@ddn.com>
Change-Id: Ic3b8fe56181f66cff420facb4d1c37925b694dd7
50871 master J !B ✓T ✓R 0/2
LU-9512 llite: O_TMPFILE support
reviewing Arshad Hussain · CI green — awaiting your review
hackathonlug23dd 96 unresolved M +218 −11
2d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131707 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Sebastien Buisson, Andreas Dilger, Oleg Drokin, Timothy Day
patchsets:
+16 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
threads: 96 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS13 2026-08-25 02:21 Gerrit AI review for Lustre COMMIT_MSG:7 — The component tag says `utils`, but nothing in the diff is under lustre/utils/ or lnet/utils/. The bulk of the change is lustre/llite/ (the
Gerrit AI review for Lustre PS13 · 2026-08-25 02:21
The component tag says `utils`, but nothing in the diff is under lustre/utils/ or lnet/utils/. The bulk of the change is lustre/llite/ (the new ll_tmpfile()), plus lustre/mdt/, lustre/mdc/, lustre/lmv/ and the uapi header. Should this be `llite`?

The summary also doesn't name the new symbol, so `git log --grep ll_tmpfile` won't find this later.
reply PS13 2026-08-25 02:21 Gerrit AI review for Lustre COMMIT_MSG:9 — The body is a single line that restates the subject and marks the patch "fortestonly". There's no statement of what the patch does or why, a
Gerrit AI review for Lustre PS13 · 2026-08-25 02:21
The body is a single line that restates the subject and marks the patch "fortestonly". There's no statement of what the patch does or why, and none of the individual changes are accounted for: the new `MDS_NNN` wire value, `LUSTRE_OPC_TMPFILE`, `vol_file_name()`, the LUSTRE_OPC_TMPFILE arms in ll_prep_md_op_data(), the -ENOTDIR relaxation in mdt_finish_open(), and the console-message changes in dcache.c / namei.c / llite_lib.c / lmv_obd.c / mdc_lib.c / mdt_open.c.

As it stands a reader can't tell which hunks are intended and which are development leftovers. Could the body explain the design (why the tmpfile is created as a volatile file, why the server needs to accept O_DIRECTORY) and drop the hunks that aren't part of it?

(typo) "futuree" and "fortestonly".
reply PS13 2026-08-25 02:21 Gerrit AI review for Lustre COMMIT_MSG:11 — `Test-Parameters: trivial` doesn't fit a change that touches both the client VFS path and the MDT open path; the second line already asks fo
Gerrit AI review for Lustre PS13 · 2026-08-25 02:21
`Test-Parameters: trivial` doesn't fit a change that touches both the client VFS path and the MDT open path; the second line already asks for the real test, so the `trivial` line looks like it should go.

This also changes what the client puts on the wire and how mdt_finish_open() reacts to it, so interop coverage would be useful, e.g.

    Test-Parameters: testlist=sanity env=ONLY=63d serverversion=2.15.5
reply PS16 2026-08-27 07:12 Gerrit AI review for Lustre COMMIT_MSG:9 — (defect) The body is a single line and does not describe the change. Nothing here accounts for the new MDS_NNN wire enum value, the MDT-side
Gerrit AI review for Lustre PS16 · 2026-08-27 07:12
(defect) The body is a single line and does not describe the change. Nothing here accounts for the new MDS_NNN wire enum value, the MDT-side relaxation of the O_DIRECTORY check in mdt_finish_open(), the new vol_file_name() helper, the LUSTRE_OPC_TMPFILE plumbing through ll_prep_md_op_data(), or any of the debug logging changes in dcache.c/namei.c/llite_lib.c/lmv_obd.c/mdc_lib.c/mdt_open.c. Each hunk should be explained, and the introductory paragraph should say what the patch accomplishes and why before describing how.

"fortestonly" is also a typo, and it reads as a statement that this revision is not meant to land. If that is the case, marking the change WIP in Gerrit would make it clearer to reviewers.
reply PS16 2026-08-27 07:12 Gerrit AI review for Lustre COMMIT_MSG:11 — (style) "Test-Parameters: trivial" asks for reduced test coverage, which does not fit a change that adds a new VFS method and alters an MDT-
Gerrit AI review for Lustre PS16 · 2026-08-27 07:12
(style) "Test-Parameters: trivial" asks for reduced test coverage, which does not fit a change that adds a new VFS method and alters an MDT-side open check; it also sits oddly next to the testlist line right below. Since the MDT behaviour changes, an interop run against an older server would be worth requesting, e.g. "Test-Parameters: testlist=sanity serverversion=2.15.6".
reply PS18 2026-09-07 23:04 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body is a single line that restates the subject, with "(fortestonly)" suggesting this revision is not meant to land. Several hun
Gerrit AI review for Lustre PS18 · 2026-09-07 23:04
(style) The body is a single line that restates the subject, with "(fortestonly)" suggesting this revision is not meant to land. Several hunks are not accounted for by it: the new MDS_NNN wire enum value, the mdt_finish_open() -ENOTDIR relaxation, and the CDEBUG->CERROR conversions in dcache.c, namei.c, mdc_lib.c, lmv_obd.c and mdt_open.c.

Could the message open with what the patch accomplishes and why, and explain each behaviour-changing hunk? The debug conversions in particular read as leftovers from a working tree rather than something intended for the patch.
reply PS20 2026-09-10 17:07 Gerrit AI review for Lustre COMMIT_MSG:9 — (defect) A one-line body leaves most of the diff unaccounted for. The mdt_finish_open() -ENOTDIR relaxation, the new MDS_NNN wire enum value
Gerrit AI review for Lustre PS20 · 2026-09-10 17:07
(defect) A one-line body leaves most of the diff unaccounted for. The mdt_finish_open() -ENOTDIR relaxation, the new MDS_NNN wire enum value, the CDEBUG->CERROR conversions in ll_intent_release()/ll_intent_lock()/ll_create_it(), and the prints in lmv_locate_tgt() and mdc_*_pack() are all unexplained - are they meant to be part of this patch?

An opening paragraph on what O_TMPFILE gives users and how volatile files are being reused to implement it would help, naming ll_tmpfile() and LUSTRE_OPC_TMPFILE so the change is findable by git log later.

(typo) "fortestonly".
reply PS20 2026-09-10 17:07 Gerrit AI review for Lustre COMMIT_MSG:12 — (minor) This changes what the client puts on the wire at open and adds a matching check on the MDT, so an interop run against a released ser
Gerrit AI review for Lustre PS20 · 2026-09-10 17:07
(minor) This changes what the client puts on the wire at open and adds a matching check on the MDT, so an interop run against a released server would be worth requesting, e.g. `Test-Parameters: testlist=sanity serverversion=2.17 env=ONLY=63d`. As it stands nothing exercises a new client against an older MDT.
reply PS21 2026-09-15 12:07 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body reads as a work-in-progress status note rather than a description of the change: it lists what is done and what is left, bu
Gerrit AI review for Lustre PS21 · 2026-09-15 12:07
(style) The body reads as a work-in-progress status note rather than a description of the change: it lists what is done and what is left, but never says what the patch actually does, how the existing volatile-file mechanism is being reused, or why the server side has to change.

The rule of thumb is that the body describes the change against master and leaves no hunk in the diff unexplained. Nothing here accounts for the new MDS_NNN entry in enum mds_open_flags, the MDS_OPEN_VOLATILE / MDS_OPEN_DIRECTORY rewrite in ll_kernel_to_mds_open_flags(), or the relaxed -ENOTDIR check in mdt_finish_open().
reply PS21 2026-09-15 12:07 Gerrit AI review for Lustre COMMIT_MSG:20 — (minor) `trivial` looks too weak for a patch that adds a value to an on-wire enum and changes mdt_open.c. The second line does not add cover
Gerrit AI review for Lustre PS21 · 2026-09-15 12:07
(minor) `trivial` looks too weak for a patch that adds a value to an on-wire enum and changes mdt_open.c. The second line does not add coverage either - every new or modified subtest is already looped by the default review sessions.

Since the server-side flag handling changes, an interop run against a released major would be worth asking for, e.g. `Test-Parameters: serverversion=2.16`.
reply PS13 2026-08-25 02:21 Gerrit AI review for Lustre lustre_user.h:1866 — `MDS_NNN` isn't referenced anywhere in the tree, and mds_pack_open_flags() only translates a fixed whitelist of flags, so this value never r
Gerrit AI review for Lustre PS13 · 2026-08-25 02:21
`MDS_NNN` isn't referenced anywhere in the tree, and mds_pack_open_flags() only translates a fixed whitelist of flags, so this value never reaches the wire. Should it be dropped until the tmpfile flag is actually wired up, or given its real name now?

If it stays, the rest of `enum mds_open_flags` is covered by wirecheck.c (`CHECK_VALUE_64O`) and by the generated `LASSERTF`s in lustre/utils/wiretest.c and lustre/ptlrpc/wiretest.c; this value isn't added to any of them.
reply PS16 2026-08-27 07:12 Gerrit AI review for Lustre lustre_user.h:1866 — (defect) MDS_NNN is never referenced anywhere in the tree, and mds_pack_open_flags() in lustre/mdc/mdc_lib.c translates a fixed whitelist of
Gerrit AI review for Lustre PS16 · 2026-08-27 07:12
(defect) MDS_NNN is never referenced anywhere in the tree, and mds_pack_open_flags() in lustre/mdc/mdc_lib.c translates a fixed whitelist of flags, so bit 020000000 is dropped and never reaches the wire. As written this adds a permanently dead value to a UAPI enum with a placeholder name.

If a real MDS_TMPFILE flag is wanted later it needs mds_pack_open_flags() taught about it plus matching CHECK_VALUE_64O() in wirecheck.c and regenerated LASSERTF() in both wiretest.c copies. Until then, dropping the entry seems better than landing it.

(typo) "futuree".
tags: hackathon lug23dd
owner Arshad Hussain · uploader Arshad Hussain · PS21 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-9512 llite: O_TMPFILE support

O_TMPFILE support (fortestonly)

What is done till now
- move to d_tmpfile
- works on 4.18, 5.x and 6.x kernel

What is still todo
- cleanup debug statements (required until final)
- Run full maloo. (Still holding back until close to final version)
- AI reviews still left.

Test-Parameters: trivial
Test-Parameters: testlist=sanity env=ONLY=63d
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I74b44bf2e4cfac10fef09d32679b104e83020b36
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
2d
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 3d 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
63400 master J ✗1B ✓T ✓R 2/2
LU-12064 obdclass: auto-scale at_min based on expected clients
reviewing Chakshu Kansal · CI green — awaiting your review
5 unresolved L +339 −38
3d
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 26 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
7 optional test failure(s) — informational
build #131672 SUCCESS · tests all Maloo sessions
reviews: Sebastien Buisson +1 2026-09-14 14:19 · Andreas Dilger +1 2026-09-13 06:55
patchsets:
+13 earlier PS1 01-15 PS2 01-15 PS3 02-09 PS4 02-15 PS5 03-11 PS6 04-13 PS7 06-15 PS8 06-25 PS9 07-09 PS10 07-09 PS11 07-11 PS12 07-16 PS13 07-22
PS14 07-30 PS15 08-04 PS16 09-05 PS17 09-08 PS18 09-13
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS18 2026-09-13 17:49 Gerrit AI review for Lustre at_min.4:34 — (minor) The valid range now starts at 0, but at_min never actually holds 0 after this patch - class_at_min_set() treats it as a reset token
Gerrit AI review for Lustre PS18 · 2026-09-13 17:49
(minor) The valid range now starts at 0, but at_min never actually holds 0 after this patch - class_at_min_set() treats it as a reset token and the resulting value is >= 5 (or the auto-tuned value). The lowest value at_min can be observed at is still 1.

at_max.4 handles the same shape by keeping its Valid Range at at_min..3600 and describing at_max=0 separately in the DESCRIPTION, which this page already does for at_min=0.
reply PS18 2026-09-13 06:55 Andreas Dilger at_min.4:62 — The exact formula doesn't need to be documented in the man page.
Andreas Dilger PS18 · 2026-09-13 06:55
The exact formula doesn't need to be documented in the man page.
reply PS18 2026-09-13 17:49 Gerrit AI review for Lustre obd_class.h:98 — (minor) class_update_at_min_from_clients() is defined in class_obd.c and only called from there and lprocfs_status_server.c, and it has no E
Gerrit AI review for Lustre PS18 · 2026-09-13 17:49
(minor) class_update_at_min_from_clients() is defined in class_obd.c and only called from there and lprocfs_status_server.c, and it has no EXPORT_SYMBOL - so any module outside obdclass that picks it up from this header fails to load with an unknown symbol.

This is the same point raised earlier about at_bounds_lock: an obdclass-internal declaration would be better placed in a new lustre/obdclass/obdclass_internal.h than in the tree-wide header. The lock was made static, but the helper took its place here.
reply PS18 2026-09-13 17:49 Gerrit AI review for Lustre class_obd.c:529 — (minor) Is losing the ability to set at_min=0 on a client-only build intended?
Gerrit AI review for Lustre PS18 · 2026-09-13 17:49
(minor) Is losing the ability to set at_min=0 on a client-only build intended?

Before this patch static_uintvalue_store() and param_set_int() both stored 0 verbatim, and obd_at_get()/obd_at_measure() treat at_min == 0 as "no lower bound on the AT estimate". Now every write path funnels through here, so 0 becomes 5 and at_min can never hold 0 again on either build.

On a server that is the documented unpin behaviour, but on a client there is no auto-tuning to re-enable, so `lctl set_param at_min=0` just silently substitutes a different value than the admin asked for. at_min.4 only describes at_min=0 in the server auto-scaling context.
reply PS18 2026-09-13 17:49 Gerrit AI review for Lustre conf-sanity.sh:12900 — (minor) stack_trap unwinds LIFO, so this at_min=0 runs before the at_min=$orig_at_min registered just above it, and the last thing the test
Gerrit AI review for Lustre PS18 · 2026-09-13 17:49
(minor) stack_trap unwinds LIFO, so this at_min=0 runs before the at_min=$orig_at_min registered just above it, and the last thing the test does is write a non-zero at_min - which re-pins it. mds1 is left with auto-tuning disabled for the rest of the session even though the test's intent was to restore the original (unpinned) state.

Swapping the two registrations, or just registering `set_param at_min=0` after the expected_clients restore, would leave the server back where it started.
owner Chakshu Kansal · uploader Chakshu Kansal · PS18 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-12064 obdclass: auto-scale at_min based on expected clients

On servers, the global at_min default can now be automatically
derived from the expected_clients tunable as the number of connected
clients grows, using the formula
(ilog2(expected_clients+7) - 3) * 5/2, clamped to [5, 60] seconds and
never exceeding at_max.

The expected_clients and global at_min tunables now use
module_param_cb handlers, and the sysfs at_min attribute gets a
matching store callback, so both entry points validate updates and
coordinate automatic tuning through shared helpers.

class_expected_clients_update() gains an allow_lower flag to
distinguish administrator writes from automatic updates: manual
changes may both increase and decrease expected_clients, while
automatic updates from tgt_update_max_clients() only increase it as
the maximum observed client count grows.

If at_min is written manually to a non-zero value, either via
lctl set_param or through the corresponding kernel module parameter,
the value is considered pinned and automatic scaling from
expected_clients no longer updates it. Writing at_min=0 unpins it,
immediately recalculating at_min from the current expected_clients
value. The pin/unpin logic is consolidated in the class_at_min_set()
helper, called from both the sysfs and module parameter write paths.

Signed-off-by: Chakshu Kansal <ckansal@ddn.com>
Change-Id: I5c42da4343c1ca62b2fd20f7f40e997a356e6b4f
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
4d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131645 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-09-13 14:59
no vote yet: Etienne AUJAMES, Andreas Dilger
patchsets:
+8 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
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 · PS13 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: use allowed types for class bucket lookup

The rule list holds every rule of a class head, so a rule match
costs O(N). A policy with many rules spends too much time there.

The allowed classification types give a second path. The TBF
scheduler builds the key of a request from the allowed types and
finds the class bucket by hash. The classification then costs O(1)
for each allowed type. The default rule takes the finest grained
type, which holds every allowed type bit. Without that type the
scheduler gives a request the rate of the default rule.

An "allow=" list makes the type of the default rule the union of
every allowed type. A "change default rate=N" command then gives N
RPC/s to each live tuple of that union. The command no longer gives
N RPC/s to each NID. An administrator who tunes the default rate
must read the allowed type list first.

The key of a class bucket is also its hash key. A write to the key
of a live bucket makes the hash position stale. The removal then
fails, and the LRU shrinker frees a bucket that the table still
holds. The re-match path therefore matches into a local key.

The hash path only helps a policy with many rules. The
"tbf_dyn_rule_thresh" module parameter holds the rule count that
starts it, and the default value is 8.

A start command that fills every allowed type entry and then names a
policy type of its own returns -E2BIG. A free entry lets the command
add the type of the policy to the allowed type list. A plain rule of
that type therefore needs no "allow=" entry. That rule keeps the
behavior of a head with no "allow=" list.

The patch also makes the cleanup of test_77k, test_77kh and
test_77ki reliable.

Add sanityn/test_77t{d,f}, and the -E2BIG case in 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
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
4d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #131644 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-09-13 14:58
no vote yet: Etienne AUJAMES, Andreas Dilger
patchsets:
+7 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
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 · PS12 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: add allowed dynamic classification types for TBF

Add allowed dynamic classification types for NRS TBF scheduler.
It is set during the TBF startup. i.e.
  lctl set_param \
    nrs_policies="tbf nid classify=dynamic allow=nid allow=nid+opcode"

The allowed dynamic classification types can be shown by:
  lctl get_param -n ost.OSS.ost_io.nrs_tbf_allowed_types

The allowed types are sorted in descending order of the type
granularity. The admission test of a rule compares the type of the
rule against each allowed type for exact equality. The test reads no
order and no prefix. A rule of type "nid" therefore needs an
"allow=nid" entry of its own, even under "allow=nid+opcode". The sort
order serves the later class bucket lookup patch.

The function nrs_tbf_parse_cmd() now gives the error code of the
parser to the caller. The function does not force -EINVAL. A bad
"allow=" value then keeps its own error code.

The type to string helper now has a reentrant form that takes a
buffer. The new error message reaches an administrator, so it uses
that form. The per-CPU buffer stays for the debug logs.

Add a test case sanityn/77tc to verify that only rules with
allowed classification types can be added.

Test-Parameters: trivial testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: Ia2705a64f1347485da4159268c8925c20eedcdd6
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
4d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #131643 SUCCESS · tests all Maloo sessions
reviews: Chris Horn +1 2026-09-13 14:58
no vote yet: Etienne AUJAMES, Sohei Koyama, Andreas Dilger
patchsets:
+7 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
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 · PS12 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: add dynamic granularity classifier for TBF

The NRS TBF scheduler uses a static classifier. The policy start
command sets the classifier type, and the type holds until the
policy stops. A rule of another classifier type cannot start.

The dynamic granularity classifier lets the type change for each
rule. The scheduler derives the class type of a rule from the match
conditions of that rule. A dynamic rule can use any classification
field, and the policy does not need to classify on that field first.
The rule dump adds a "type=" field, so a user can read the derived
type.

The head keeps a mask of the types of the live rules. The key of a
dynamic head holds only the fields in that mask.

The rule command now saves the valid type of the command. One head
then does not leak its type into the command of the other head.

The function nrs_tbf_id_cli_set() now zeros each ID field that the
rule does not match. That zeroing also fixes the static classifier.
A "uid" policy reads the uid and the gid of a request, and the key
held both. One uid under two gids then got two class buckets, and
each bucket enforced the whole rule rate. A "gid" policy had the
same defect through the uid.

The rule stop path now takes th_rule_lock around the list removal.
The removal ran with no lock against the list walks of
nrs_tbf_rule_match() and nrs_tbf_rule_dump_all().

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
4d
janitor run: 3 failing config(s), none unique to this patch — janitor results
reviews: Chris Horn +1 2026-09-13 14:58
no vote yet: Etienne AUJAMES, Sohei Koyama, Andreas Dilger
patchsets:
+7 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
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 · PS12 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-20090 nrs: add static and dynamic classify conf for TBF

Add a static classify setting and a dynamic classify setting to the
TBF policy. Under the static strategy, every rule takes the global
classification type of the policy. Under the dynamic strategy, the
scheduler takes the class type of a rule from the conditions of that
rule. The dynamic classifier itself arrives in a later patch.

The administrator sets the strategy at policy start. The strategy
does not change at run time:
  # lctl set_param \
	ost.OSS.ost_io.nrs_policies="tbf nid+opcode classify=dynamic"
  # lctl set_param \
	ost.OSS.ost_create.nrs_policies="tbf uid classify=static"
  # lctl get_param ost.OSS.ost_io.nrs_tbf_classify
  reg_classify:dynamic
  hp_classify:dynamic
  # lctl get_param ost.OSS.ost_create.nrs_tbf_classify
  ost.OSS.ost_create.nrs_tbf_classify=reg_classify:static

A start command now carries the classify key. The maximum length of
a policy argument therefore grows from 16 bytes to 256 bytes.

The command structures lose the TBF prefix. Later patches share them
with a second policy. "struct nrs_tbf_cmd" becomes
"struct nrs_cmd". The field prefixes "tc_" and "ts_" become "nc_"
and "rs_".

The patch also repairs the 77k cleanup paths. A plain EXIT trap and
an undefined trap variable let TBF rules survive into the next test.
The helpers now register with stack_trap, and they tolerate a rule
stop under the fifo policy.

Add sanityn/test_77ta.

Test-Parameters: trivial
Test-Parameters: testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Change-Id: Ia6d4ebc8705e67421b60eabc5cea54f1de23952a
68548 master J !B ✓T ✓R 0/2
LU-20676 llite: hash qstr in ll_iget_for_nfs()
reviewing Emoly Liu · CI green — awaiting your review
M +58 −2
6d
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
no vote yet: Etienne AUJAMES, Qian Yingjin, Andreas Dilger
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 9d 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
67626 master J !B ✓T ✓R 1/2
LU-20513 selftest: page-size agnostic simple check
reviewing Chris Horn · CI green — awaiting your review
2 unresolved M +146 −33
8d
janitor run: 2 failing config(s), none unique to this patch — janitor results
reviews: Andreas Dilger +1 2026-08-16 03:14
no vote yet: Jinshan Xiong, Timothy Day
patchsets: PS1 07-29 PS2 07-29
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-09-02 17:24 Chris Horn lst.c:536 — I don't see why we need or would want to tie the two together. The interface version should be free to move independent of new feature bits.
James Simmons PS2 · 2026-08-25 15:38
LNET_SELFTEST_GENL_VERSION should match the LST_FEATS_MASK? I do agree this change makes sense since the features only matter for the initial session setup.
Chris Horn PS2 · 2026-09-02 17:24
I don't see why we need or would want to tie the two together. The interface version should be free to move independent of new feature bits.

The clean fix is to send the features as an explicit attribute of the session request and reply. That change also lets lst show the feature mask of the console. It needs a kernel-side attribute and a compatibility path, so I prefer to do it in a separate patch.
reply PS2 2026-09-02 17:24 Chris Horn lst.c:738 — The read never gave lst that information. The reply carries the Netlink family version, and not the features.
James Simmons PS2 · 2026-08-25 15:38
The reason for querying the session_features returned was to handle the case of a newer lst being used against a older kernel that lacks a request feature. How will lst know if the kernel doesn't support a feature?
Chris Horn PS2 · 2026-09-02 17:24
The read never gave lst that information. The reply carries the Netlink family version, and not the features.

The console builds the reply with `genlmsg_put(msg, ..., &lst_family, ...)`. That call stamps `hdr->version` with `lst_family.version`, which is `LNET_SELFTEST_GENL_VERSION`. The value is `0x1` for every reply, and it does not depend on the request. `yaml_parser_get_reader_proto_version()` returns
that field. Thus the old code set `session_features` to 1 after each `new_session`, whatever the user asked for.

lst learns of a console that lacks a feature from the error. A mask with an unknown bit fails in `lstcon_session_new()` with `-EINVAL`. lst prints "new session creation failed". The ioctl fallback in `jt_lst_new_session()` sends the same mask in `lstio_ses_feats` and gets the same `-EINVAL`. The console creates no session. Therefore lst cannot run a test with a feature that the console does not know.

lst learns of a test node that lacks a feature at `lst add_group`. The `add_group` path is unchanged. `LSTIO_NODES_ADD` returns the negotiated mask in `lstio_grp_featp`. The console gets that mask from the `mksn` replies in `lstcon_sesnew_stat_reply()`. lst then prints the "compatible mode" warning. For `EPROTO` it prints the message that asks the user to set `LST_FEATURES.`

A session downgrade over Netlink needs a features attribute in the reply. I can add one in a follow-on patch if you prefer a downgrade to an error.
owner Chris Horn · uploader Chris Horn · PS2 uploaded 49d 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
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
9d
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 131d 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
65074 master J !B ✓T ✓R 3/2
LU-20078 osc: call osc_extent_tree_dump() without object lock held
reviewing Qian Yingjin · CI green — awaiting your review
master-next 1 unresolved XS +4 −1
9d
janitor run: 5 failing config(s), none unique to this patch — janitor results
reviews: Marc Vef +1 2026-09-04 20:45 · Andreas Dilger +1 2026-09-04 20:46 · Timothy Day +1 2026-09-04 20:45
no vote yet: Patrick Farrell
patchsets: PS1 04-03 PS2 09-04 Andreas Dilger
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-09-04 20:46 Andreas Dilger osc_cache.c:1761 — (style) can this fit on previous line?
Andreas Dilger PS1 · 2026-09-04 20:46
(style) can this fit on previous line?
owner Qian Yingjin · uploader Andreas Dilger · PS2 uploaded 12d ago · NEW · open in Gerrit ↗
commit message
LU-20078 osc: call osc_extent_tree_dump() without object lock held

The panic of next_extent() in osc_extent_tree_dump() is caused by:
- osc_extent_tree_dump() walks the extent rbtree without holding
  object lock: osc_object_lock().
- LU-19014 added a new debug call to osc_extent_tree_dump() in
  osc_cache_writeback_range() for the IO_PRIO_DIRTY_EXCEEDED path.
- next_extent() assumes the passed exctent is still in the tree
  and asserts on RB_EMPTY_NODE(); This is reasonable for normal
  tree walkers under the object lock, but unsafe for an unlocked
  debug dump.

Fix it by removing osc_extent_tree_dump() added by LU-19014.
Also fix similar osc_extent_tree_dump() call in osc_enter_cache()
by holding the object lock around it.

Fixes: c413d2ede5 ("LU-19014 memcg: fix client hang in balance_dirty_page()")
Signed-off-by: Yingjin Qian <qian@ddn.com>
Change-Id: I7802d951f1c01d92a9240e7b4d395104b52c8969
67492 master J !B ✓T ✓R 1/2
LU-20516 ldlm: fix flock deadlock-detection state races
reviewing Sohei Koyama · CI green — awaiting your review
11 unresolved M +119 −79
10d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #129618 SUCCESS · tests all Maloo sessions
reviews: Yang Sheng +1 2026-09-07 06:23
no vote yet: Andriy Skulysh, Andreas Dilger, Vitaly Fertman, Oleg Drokin, Timothy Day
patchsets: PS1 07-23 PS2 07-27 PS3 08-03 Yang Sheng PS4 08-05 PS5 08-17
threads: 11 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 03:32 Gerrit AI review for Lustre COMMIT_MSG:37 — (minor) The body mentions the test_74 -> test_74a rename, but not that the `MDS1_VERSION < 2.4.93` skip is dropped at the same time. Worth a
Gerrit AI review for Lustre PS2 · 2026-07-28 03:32
(minor) The body mentions the test_74 -> test_74a rename, but not that the `MDS1_VERSION < 2.4.93` skip is dropped at the same time. Worth a few words so the hunk isn't a surprise.
reply PS3 2026-08-03 23:31 Gerrit AI review for Lustre COMMIT_MSG:27 — (minor) The body covers the locking rework, but not two behavior changes that come with it in ldlm_flock_deadlock(): the nid the final owner
Gerrit AI review for Lustre PS3 · 2026-08-03 23:31
(minor) The body covers the locking rework, but not two behavior changes that come with it in ldlm_flock_deadlock(): the nid the final owner/nid comparison uses, and the new exp_flock_hash NULL guard on the co-nid exports. Both change when a client sees -EDEADLK, so a sentence each would help.
reply PS5 2026-08-18 13:16 Gerrit AI review for Lustre cfs_hash.h:668 — (minor) Sitting next to cfs_hash_for_each_cb_t these read as generic walk-control values, but the two iterators do not agree on what a non-z
Gerrit AI review for Lustre PS5 · 2026-08-18 13:16
(minor) Sitting next to cfs_hash_for_each_cb_t these read as generic walk-control values, but the two iterators do not agree on what a non-zero return means.

cfs_hash_for_each_tight() does `goto out` and really stops. cfs_hash_for_each_key() only does `break` on the inner `hlist_for_each`, and cfs_hash_for_each_bd() then continues into bds[1], which is a live bucket while a rehash is in flight.

ldlm_flock_lookup_lock_cb() stays correct only because of its own flcb_found re-entry guard at the top. Could a short comment here say which iterators honour STOP, or could cfs_hash_for_each_key() be made to leave both buckets?

CFS_HASH_WALK_CONTINUE has no users anywhere in the tree.
reply PS5 2026-08-18 13:16 Gerrit AI review for Lustre ldlm_flock.c:260 — (minor) This busy-waits with res->lr_lock held and preemption disabled - ldlm_process_flock_lock() runs under lock_res_and_lock(), and lock_
Gerrit AI review for Lustre PS5 · 2026-08-18 13:16
(minor) This busy-waits with res->lr_lock held and preemption disabled - ldlm_process_flock_lock() runs under lock_res_and_lock(), and lock_res() is a plain spin_lock().

It also sits inside the unbounded `while (1)` chain walk, so the total spin is hops * fail_val ms. sanityn/74b uses fail_val=100, which is harmless for the 2-3 hop chain it builds, but a long wait-for chain or a larger fail_val would hold lr_lock long enough to trip the soft-lockup watchdog.

Would CFS_FAIL_ONCE, or pausing only on the first hop, still give the test the window it needs?
reply PS1 2026-07-26 13:24 Andreas Dilger sanityn.sh:4363 — Since this subtest is being modified and subject to review-dne-subtest-change testing anyway, please fix this version check to use `((... >=
Andreas Dilger PS1 · 2026-07-26 13:24
Since this subtest is being modified and subject to review-dne-subtest-change testing anyway, please fix this version check to use `((... >= ...)) ||` and use the full `git describe` hash for the relevant change.

Or maybe 2.5 is old enough that the version check can just be removed, since we don't really need interop testing before 2.10 anymore (even that is unlikely).
reply PS1 2026-07-26 13:24 Andreas Dilger sanityn.sh:4364 — This should describe why the test is being skipped.
Andreas Dilger PS1 · 2026-07-26 13:24
This should describe why the test is being skipped.
reply PS1 2026-07-26 13:24 Andreas Dilger sanityn.sh:4374 — (minor) describe why this version is needed
Andreas Dilger PS1 · 2026-07-26 13:24
(minor) describe why this version is needed
reply PS2 2026-07-28 03:32 Gerrit AI review for Lustre sanityn.sh:4370 — The tree is at 2.17.54 right now, so a server built with this patch will report 2.17.54 or 2.17.55 and this gate will skip test_74b on exact
Gerrit AI review for Lustre PS2 · 2026-07-28 03:32
The tree is at 2.17.54 right now, so a server built with this patch will report 2.17.54 or 2.17.55 and this gate will skip test_74b on exactly the first builds that carry the fix. Should this be 2.17.55?
reply PS2 2026-07-28 03:32 Gerrit AI review for Lustre sanityn.sh:4383 — (minor) If the MDS is remote and dsh is unavailable, this do_nodes fails silently and the test still runs the flocks_test 4 loop to completi
Gerrit AI review for Lustre PS2 · 2026-07-28 03:32
(minor) If the MDS is remote and dsh is unavailable, this do_nodes fails silently and the test still runs the flocks_test 4 loop to completion without any fault injection, i.e. it passes without exercising the race. Other tests in this suite guard with `remote_mds_nodsh && skip "remote MDS with nodsh"`; checking the return here would also work.
reply PS2 2026-07-28 03:32 Gerrit AI review for Lustre sanityn.sh:4383 — (style) The convention is to name the fault-injection point above the set_param, so a reader doesn't have to look up the hex:
Gerrit AI review for Lustre PS2 · 2026-07-28 03:32
(style) The convention is to name the fault-injection point above the set_param, so a reader doesn't have to look up the hex:

    #define OBD_FAIL_LDLM_FLOCK_DEADLOCK_PAUSE 0x330
reply PS4 2026-08-06 04:12 Gerrit AI review for Lustre sanityn.sh:4397 — (minor) Nothing kills these two churn loops if the test aborts early. `error()` in test-framework.sh does report_error() then exit 1, so a f
Gerrit AI review for Lustre PS4 · 2026-08-06 04:12
(minor) Nothing kills these two churn loops if the test aborts early. `error()` in test-framework.sh does report_error() then exit 1, so a failing `flocks_test 4` skips the `wait $pid1 $pid2` below and both subshells keep spawning `flocks_test 6` on $DIR2 until churn_end, up to ~50s into the following subtests and the suite's $MOUNT2 cleanup.

The rest of the suite registers the kill, e.g. sanityn.sh:1234:

    stack_trap "kill $pid 2> /dev/null" ERR

Something like `stack_trap "kill $pid1 $pid2 2>/dev/null || true"` after pid2 is set would cover it.
owner Sohei Koyama · uploader Sohei Koyama · PS5 uploaded 31d 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
67780 master J !B ✓T ✓R 0/2−
LU-20434 build: Compatibility updates for kernel v7.2
reviewing Timothy Day · CI green — awaiting your review
2 unresolved M +79 −9
10d
janitor run: 9 failing config(s), none unique to this patch — janitor results
build #128758 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Andreas Dilger
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-06 06:32 Gerrit AI review for Lustre security.h:46 — (suggestion) This isn't a bug, but it is the only place in the tree that shadows a kernel symbol name with a macro, and it leaks well beyond
Gerrit AI review for Lustre PS1 · 2026-08-06 06:32
(suggestion) This isn't a bug, but it is the only place in the tree that shadows a kernel symbol name with a macro, and it leaks well beyond llite: osd_internal.h pulls this header in, so every osd-ldiskfs object gets the rename too.

The existing pattern in lustre_compat/linux/fs.h is to give the fallback inline the kernel's own name inside the #ifndef, e.g. d_make_persistent(). Naming this one security_inode_listsecurity() directly and dropping the #define would keep call sites reading naturally while removing the macro entirely.

Alternatively the file's other convention works too: compat_security_file_alloc()/compat_security_file_free() are called by their compat_ names at the call sites rather than being aliased.
reply PS1 2026-08-06 06:32 Gerrit AI review for Lustre xattr_security.c:18 — (style) The lustre_compat include lands between linux/types.h and linux/xattr.h, which splits the kernel include group. Elsewhere in llite t
Gerrit AI review for Lustre PS1 · 2026-08-06 06:32
(style) The lustre_compat include lands between linux/types.h and linux/xattr.h, which splits the kernel include group. Elsewhere in llite the lustre_compat/ headers come after the linux/ block (see file.c, which keeps linux/* together and then lists lustre_compat/linux/uio.h and lustre_compat/linux/dcache.h).
owner Timothy Day · uploader Timothy Day · PS1 uploaded 42d ago · NEW · open in Gerrit ↗
commit message
LU-20434 build: Compatibility updates for kernel v7.2

Linux commit v7.1-rc1-1-gf71ece9712b7
  security,fs,nfs,net: update security_inode_listsecurity() interface
security_inode_listsecurity() now updates the buffer pointer and
remaining size in place and returns 0 or -errno instead of the
copied length. Use the new calling convention in llite and provide
a compat wrapper for older kernels.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I46fb6f3a768f7f5b2fffe67dfcca0c186a6a6964
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
19d
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 104d 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
19d
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 104d 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
19d
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 104d 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>
67149 master J ✗1B ✓T ✓R 1/2
LU-20465 utils: replace random() with getrandom()
reviewing Sebastien Buisson · CI green — awaiting your review
M +60 −22
29d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
replay-single1@ldiskfs+DNE:test_80cseen in 5 other reviews
build #128878 SUCCESS · tests all Maloo sessions
reviews: Timothy Day +1 2026-08-07 19:40
patchsets: PS1 07-09 PS2 08-06 PS3 08-07
owner Sebastien Buisson · uploader Sebastien Buisson · PS3 uploaded 41d ago · NEW · open in Gerrit ↗
commit message
LU-20465 utils: replace random() with getrandom()

Replace random() with getrandom() to avoid the need to seed it first.
For that purpose, add cfs_random() to libcfs/util/string.h, a static
inline wrapper that returns a random 32-bit value and cannot fail.
Values from cfs_random() are suitable for unique file names and group
lock ids, but must not be used for cryptographic purposes.

Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: I6ca164a89a3ef5e9c4e9f55d8a98dc2c1581d798
66199 master J ✓B ✓T ✓R 1/2−
LU-20310 osd-ldiskfs: fix remaining checkpatch.pl warnings
reviewing Timothy Day · CI green — awaiting your review
2 unresolved XL +563 −537
29d
build #128432 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-07-31 05:39
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets: PS1 05-27 PS2 07-14 PS3 07-27 Arshad Hussain PS4 07-30 Arshad Hussain PS5 07-31 Arshad Hussain
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-07-31 12:29 Gerrit AI review for Lustre osd_handler.c:7790 — (typo) Joining the first two fragments here leaves the old double space at the next split point, so the message still prints "dir = %lu/%u,
Gerrit AI review for Lustre PS5 · 2026-07-31 12:29
(typo) Joining the first two fragments here leaves the old double space at the next split point, so the message still prints "dir = %lu/%u,  name = ..." with two spaces.

Dropping the leading space from the following " name = " fragment would fix it, the same way the "i %u,start_blocks" case in osd_io.c was handled earlier in this series.
reply PS5 2026-07-31 12:29 Gerrit AI review for Lustre osd_scrub.c:2069 — (typo) "furtuer" -> "future", while this comment is being re-indented anyway. It is the only occurrence left in the tree.
Gerrit AI review for Lustre PS5 · 2026-07-31 12:29
(typo) "furtuer" -> "future", while this comment is being re-indented anyway. It is the only occurrence left in the tree.
owner Timothy Day · uploader Arshad Hussain · PS5 uploaded 48d ago · NEW · open in Gerrit ↗
commit message
LU-20310 osd-ldiskfs: fix remaining checkpatch.pl warnings

... via checkpatch.pl --fix-inplace.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I003e53c209e56f571f475e9e93081c14f39ce098
66202 master J !B ✓T ✓R 0/2
LU-20310 obdclass: fix remaining checkpatch.pl warnings (1/2)
reviewing Timothy Day · CI green — awaiting your review
2 unresolved XL +602 −573
30d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #129648 SUCCESS · tests all Maloo sessions
no vote yet: Arshad Hussain, Andreas Dilger
patchsets: PS1 05-27 PS2 07-14 PS3 07-27 Arshad Hussain PS4 08-14 Arshad Hussain PS5 08-14 Arshad Hussain
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-08-18 14:31 Gerrit AI review for Lustre cl_object.c:587 — (minor) This is pre-existing and not something the patch introduced, but the loop indexes with `i` while the body always writes element 0, s
Gerrit AI review for Lustre PS5 · 2026-08-18 14:31
(minor) This is pre-existing and not something the patch introduced, but the loop indexes with `i` while the body always writes element 0, so only `cs_pages_state[0]` is ever reset:

    for (i = 0; i < ARRAY_SIZE(s->cs_pages_state); ++i)
            atomic_set(&s->cs_pages_state[0], 0);

It is harmless today because both callers (vvp_device_alloc() and echo_site_init()) get a zeroed struct, so the remaining counters are already 0. Since the loop line is being touched here anyway, `[i]` could be fixed in passing, or split out if this patch should stay purely cosmetic.
reply PS5 2026-08-18 14:31 Gerrit AI review for Lustre llog.c:629 — (style) Not a bug, but the reflow left `cur_offset` dangling on a line of its own. It fits on the next continuation line with the rest of th
Gerrit AI review for Lustre PS5 · 2026-08-18 14:31
(style) Not a bug, but the reflow left `cur_offset` dangling on a line of its own. It fits on the next continuation line with the rest of the arguments:

    CDEBUG(D_OTHER, "cur_offset %llu, chunk_offset %llu, buf_offset %u, rc = %d\n",
           cur_offset, (__u64)chunk_offset, buf_offset, rc);
owner Timothy Day · uploader Arshad Hussain · PS5 uploaded 34d ago · NEW · open in Gerrit ↗
commit message
LU-20310 obdclass: fix remaining checkpatch.pl warnings (1/2)

... via checkpatch.pl --fix-inplace. Covers files cl_io.c
through llog_swab.c.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I792054b46986669d7324c61a424f21b61b5f90be
67778 master J ✗2B ✓T ✓R 0/2−
LU-16518 misc: remove unused uapi header helpers
reviewing Timothy Day · CI green — awaiting your review
3 unresolved S +0 −38
30d
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 43d 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
67825 master J !B ✓T ✓R 0/2
LU-20264 obd: add lustre_current_fsuid/fsgid() helpers
reviewing Timothy Day · CI green — awaiting your review
4 unresolved L +486 −12
36d
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 36d 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
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
40d
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 40d 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
48d
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 534d 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
66215 master J ✗2B ✓T ✓R 1/2
LU-20310 ec: fix remaining checkpatch.pl warnings
reviewing Timothy Day · CI green — awaiting your review
1 unresolved L +223 −221
48d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@ldiskfs+DNE:test_133aseen 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
build #128360 SUCCESS · tests all Maloo sessions
reviews: Arshad Hussain +1 2026-07-31 05:14
no vote yet: Andreas Dilger
patchsets: PS1 05-27 PS2 07-30 Arshad Hussain
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-14 14:45 Timothy Day patchset comment — BUILD
Timothy Day PS1 · 2026-07-14 14:45
BUILD
owner Timothy Day · uploader Arshad Hussain · PS2 uploaded 49d ago · NEW · open in Gerrit ↗
commit message
LU-20310 ec: fix remaining checkpatch.pl warnings

... via checkpatch.pl --fix-inplace.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: If03d70e6c67bbb583274009cfdfd473e4f07516d
67310 master J !B ✓T ✓R 1/2−
LU-20485 mdt: drop ctxt if we have a NULL handle
reviewing Timothy Day · CI green — awaiting your review
4 unresolved S +15 −3
48d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #127684 SUCCESS · tests all Maloo sessions
reviews: Alex Zhuravlev +1 2026-07-23 17:06 · Timothy Day -1 2026-07-30 18:32
no vote yet: Andreas Dilger
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-27 21:17 Gerrit AI review for Lustre COMMIT_MSG:7 — (minor) LU-20485 is titled "Use LLVM automatic reference counting" and is filed as an Improvement. This patch is not ARC adoption, it is a r
Gerrit AI review for Lustre PS1 · 2026-07-27 21:17
(minor) LU-20485 is titled "Use LLVM automatic reference counting" and is filed as an Improvement. This patch is not ARC adoption, it is a refcount-leak fix in the MDT HSM llog paths. Is that the intended ticket, or should a fix like this get its own LU bug so it can be tracked for the maintenance branches?
reply PS1 2026-07-27 21:17 Gerrit AI review for Lustre COMMIT_MSG:11 — (minor) This looks like a bug fix rather than a cleanup, so a Fixes: tag would help decide which maintenance branches need it.
Gerrit AI review for Lustre PS1 · 2026-07-27 21:17
(minor) This looks like a bug fix rather than a cleanup, so a Fixes: tag would help decide which maintenance branches need it.

The leaked loc_refcount is not just memory: llog_cleanup() ends in l_wait_event_abortable(olg->olg_waitq, llog_group_ctxt_null(olg, idx)), and olg_ctxts[idx] is only cleared once __llog_ctxt_put() drops the count to zero. So a thread that raced mdd_hsm_actions_llog_fini() setting loc_handle = NULL can stall MDT teardown.

Suggested:

    Fixes: 612f27788166 ("LU-3339 mdt: HSM on disk actions record")

That covers both mdt_hsm_cdt_actions.c sites. The mdt_hsm_cdt_agent.c one arrived later, in 07f6a59ad713 ("LU-18556 hsm: optimize llog record modification"), if you want a second tag.
reply PS1 2026-07-30 18:32 Timothy Day mdt_hsm_cdt_actions.c:80 — This is true. This looks a bit nicer - I ought to refresh this.
Gerrit AI review for Lustre PS1 · 2026-07-27 21:17
(style) This isn't a bug, but llog_ctxt_put() already returns early when passed NULL, so the check doesn't need splitting in two:

    if (!lctxt || !lctxt->loc_handle) {
        llog_ctxt_put(lctxt);
        RETURN(-ENOENT);
    }

That is the shape sub_updates_write() and sub_declare_updates_write() already use in lustre/target/update_trans.c for the same ctxt/handle pair. Same applies to mdt_hsm_agent_modify_record().
Timothy Day PS1 · 2026-07-30 18:32
This is true. This looks a bit nicer - I ought to refresh this.
reply PS1 2026-07-27 21:17 Gerrit AI review for Lustre mdt_hsm_cdt_actions.c:198 — (minor) mdt_agent_record_add() already has a putctxt: label that does exactly this put, so GOTO(putctxt, rc = -ENOENT) would avoid duplicati
Gerrit AI review for Lustre PS1 · 2026-07-27 21:17
(minor) mdt_agent_record_add() already has a putctxt: label that does exactly this put, so GOTO(putctxt, rc = -ENOENT) would avoid duplicating the cleanup. rc still reaches the return through free:, and the D_TRACE CDEBUG then reports the failure too.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 62d ago · NEW · open in Gerrit ↗
commit message
LU-20485 mdt: drop ctxt if we have a NULL handle

If we have a valid ctxt, but NULL handle - we have to
drop the ctxt before returning an error.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I1c0c11e6f86054631b5192733a8e2b456deaa183
65205 master J ✗1B ✓T ✓R 0/2
LU-19768 quota: add quota genetlink family
reviewing Timothy Day · CI green — awaiting your review
21 unresolved L +804 −5
48d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@ldiskfs+DNE:test_63cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
6 optional test failure(s) — informational
build #128316 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-09 PS2 07-22 PS3 07-29
threads: 21 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 PS2 2026-07-28 10:01 Gerrit AI review for Lustre qmt_netlink.c:134 — class_obd_devs_count() returns the number of registered devices, not the highest index in obd_devs, so indexing 0..count-1 skips devices whe
Gerrit AI review for Lustre PS2 · 2026-07-28 10:01
class_obd_devs_count() returns the number of registered devices, not the highest index in obd_devs, so indexing 0..count-1 skips devices whenever the xarray is sparse. __xa_alloc() in class_register_device() always picks the lowest free slot, so unregistering any device (an OST deactivation, a target unmount, a client mount/unmount on the same node) leaves a hole and drops the tail index out of range. If the QMT happens to be at that index, the dump silently reports no global quota at all.

The idiom used everywhere else, including lustre_obd_nl_start() added earlier in this series, is:

    obd_device_lock();
    obd_device_for_each(idx, obd) { ... }
    obd_device_unlock();
owner Timothy Day · uploader Timothy Day · PS3 uploaded 49d 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
63381 master J !B ✓T ✓R 0/2
LU-18813 osd: setup library to share code
reviewing Timothy Day · CI green — awaiting your review
15 unresolved L +194 −103
51d
janitor run: 3 failing config(s), none unique to this patch — janitor results
10 optional test failure(s) — informational
build #127208 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger, Alex Zhuravlev
patchsets:
+5 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
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 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 PS10 2026-07-28 12:08 Gerrit AI review for Lustre osd.h:52 — These are now global symbols with fairly generic names, in a header on the default include path. osd-zfs already has its own static osd_seq_
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
These are now global symbols with fairly generic names, in a header on the default include path. osd-zfs already has its own static osd_seq_find_locked()/osd_seq_find() with different prototypes (lustre/osd-zfs/osd_oi.c:394 and :406), taking struct osd_seq_list rather than struct osd_obj_map.

Nothing breaks today because osd-zfs doesn't include this header, but osd-zfs is presumably the next consumer, and including <osd.h> there would give "static declaration follows non-static declaration". Would a prefix tied to the type help, e.g. osd_obj_map_seq_find() / osd_obj_map_seq_free()?

Related: osd_ost_fini() reads oddly now that it takes a struct osd_obj_map and there is no matching osd_ost_init() in the library - osd_obj_map_fini() or osd_obj_map_free() would say what it does.
reply PS10 2026-07-28 12:08 Gerrit AI review for Lustre Makefile:15 — The tree already has a mechanism for compiling a shared .c into a module from another directory, without generating files. lnet/libcfs/Makef
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
The tree already has a mechanism for compiling a shared .c into a module from another directory, without generating files. lnet/libcfs/Makefile does:

    include $(src)/../../lustre_compat/Makefile
    libcfs-y += $(patsubst %,../../lustre_compat/%,$(module_objs))

The same shape here would be `osd_ldiskfs-objs += ../osd/osd_lib.o`, with no symlink and no generated source. Any reason to prefer the symlink?

As written the rule leaves an untracked lustre/osd-ldiskfs/osd_lib.c symlink in the source tree after a build. It matches no .gitignore pattern, so `git status` is dirty afterwards, and it is not in clean-files so `make clean` leaves it behind. If the symlink is kept, it should at least be gitignored and cleaned.

Smaller point: `ln -sf ../osd/osd_lib.c $@` hardcodes the link target rather than using `$<`, so the recipe and the prerequisite can drift apart.
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 PS10 2026-07-28 12:08 Gerrit AI review for Lustre Makefile:16 — Same as the osd-ldiskfs copy of this rule: it generates an untracked, un-cleaned symlink in the source tree, and the tree already has a no-s
Gerrit AI review for Lustre PS10 · 2026-07-28 12:08
Same as the osd-ldiskfs copy of this rule: it generates an untracked, un-cleaned symlink in the source tree, and the tree already has a no-symlink pattern for this (lnet/libcfs/Makefile including lustre_compat/Makefile).

Also, nothing in osd-wbcfs calls the osd_lib.c routines yet, so this only adds dead code to osd_wbcfs.ko for now. Is it worth wiring osd-wbcfs up in the same patch, or waiting until the consumer lands?
reply PS8 2026-05-20 20:29 Andreas Dilger osd_lib.c — Would it be better to call this directory `osd-lib` or `osd-shared` or `osd-generic` or similar?
Andreas Dilger PS8 · 2026-05-20 20:29
Would it be better to call this directory `osd-lib` or `osd-shared` or `osd-generic` or similar?
owner Timothy Day · uploader Timothy Day · PS10 uploaded 75d 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
67279 master J !B ✓T ✓R 0/2−
LU-16518 ldlm: remove unused extent rbtree helpers
reviewing Timothy Day · CI green — awaiting your review
1 unresolved S +0 −37
51d
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 63d 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
6 unresolved S +16 −3
56d
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 284d 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
L +321 −183
76d
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 76d 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>
39387 master J !B ✓T ✓R 0/2−
LU-10606 hsm: store HSM xattr as a basic layout
reviewing Qian Yingjin · CI green — awaiting your review
1 unresolved XL +1842 −604
76d
janitor run: 1 failing config(s), none unique to this patch — janitor results
3 optional test failure(s) — informational
build #101544 SUCCESS · tests all Maloo sessions
reviews: Etienne AUJAMES -1 2024-01-24 16:56
no vote yet: Guillaume Courrier, Robert Read, Nikitas Angelinas, Aurelien Degremont, Andreas Dilger, Li Xi, Quentin Bouget
patchsets:
+5 earlier PS12 06-19 PS13 12-27 PS14 12-28 Andreas Dilger PS15 12-28 PS16 12-29
PS17 01-04 PS18 01-04 PS19 01-19 PS20 01-22 PS21 01-22
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS20 2024-01-24 10:18 Etienne AUJAMES test-framework.sh:7374 — Can you explain why this was failing with test_407:
Etienne AUJAMES PS20 · 2024-01-24 10:18
Can you explain why this was failing with test_407:

[ 4409.955942] Lustre: DEBUG MARKER: mdc.lustre-MDT0000-mdc-*.mds_server_uuid in FULL state after 0 sec
[ 4412.609493] LustreError: 334693:0:(lov_object.c:1358:lov_layout_change()) lustre-clilov-ffff992a85a30800: cannot apply new layout on [0x200004a55:0x2ee:0x0] : rc = -22
[ 4412.609837] LustreError: 334694:0:(vvp_io.c:1888:vvp_io_init()) lustre: refresh file layout [0x200004a55:0x2ee:0x0] error -22.
[ 4412.613926] LustreError: 334693:0:(lov_object.c:1358:lov_layout_change()) Skipped 2 previous similar messages
[ 4417.309788] LustreError: 336574:0:(lov_object.c:1358:lov_layout_change()) lustre-clilov-ffff992a85a30800: cannot apply new layout on [0x200004a55:0x2ee:0x0] : rc = -22
[ 4417.312757] LustreError: 336574:0:(lov_object.c:1358:lov_layout_change()) Skipped 1 previous similar message
[ 4417.314686] LustreError: 336574:0:(lcommon_cl.c:196:cl_file_inode_init()) lustre: failed to initialize cl_object [0x200004a55:0x2ee:0x0]: rc = -22
owner Qian Yingjin · uploader Qian Yingjin · PS21 uploaded 969d ago · NEW · open in Gerrit ↗
commit message
LU-10606 hsm: store HSM xattr as a basic layout

A closer coupling between the HSM archive state and Lustre File
Level Redundancy (FLR) can make PCC and HSM management more
consistent with the management of other replicas in the file
system. Stroing HSM as a layout (FLR component of the file) can
obtain the following benefits:
- Consolidate the HSM with PFL/FLR/composite layouts to give a
  flexibility way to combine these features;
- Migration, FLR mirroring resync and HSM data movement all
  could be done through a user-space copytool;
- Allow multiple HSM copies (e.g. Tape, S3, another POSIX copy),
  which would also be useful for file versioning, flexible
  archiving;
- Allow PCC-RW mirror to be kept at the same as regular file
  mirror, by marking the regular file mirror(s) stale instead of
  releasing them;
- Possibly keep partial file components in the HSM, for limiting
  restore extents or for PFL layouts.

This patch implements the basic framework to store HSM xattr as
a basic layout component.

Test-Parameters: clientcount=3 testlist=sanity-pcc,sanity-hsm
Signed-off-by: Qian Yingjin <qian@ddn.com>
Change-Id: Ic48d5bc3c3254e8654c64e615b49ae698638a707
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
2 unresolved L +184 −133
80d
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 83d 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
36625 master J ✓B ✓T ✓R 1/2−
LU-12756 lnet: Refactor lnet_find_route_locked
reviewing Chris Horn · CI green — awaiting your review
M +17 −40
86d
build #11459 SUCCESS
reviews: Chris Horn -1 2022-06-06 20:06 · Alexander Boyko +1 2020-02-04 10:36
no vote yet: Stephen Champion, Alexey Lyashkov, Neil Brown, Serguei Smirnov, Amir Shehata
owner Chris Horn · uploader Chris Horn · PS6 uploaded 2428d ago · NEW · open in Gerrit ↗
commit message
LU-12756 lnet: Refactor lnet_find_route_locked

Return type changed from lnet_route to lnet_peer_ni.
lnet_find_route_locked() has been renamed to
lnet_select_lpni_to_remote_net() to better reflect its purpose in
choosing the best lnet_peer_ni of a router that can forward the
message to the specified remote LNet.

Test-Parameters: trivial
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: I37878e407699e99679868e0d9d83014df2de7de0
64069 master J !B ✓T ✓R 2/2−
LU-19888 libcfs: filter & print ioctl() request with full command
reviewing Arshad Hussain · CI green — awaiting your review
2 unresolved M +123 −33
87d
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 112d 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 1/2−
LU-1158 idl: introduce struct lu_times for timestamp grouping
reviewing Sohei Koyama · CI green — awaiting your review
stalled 100d M +56 −32
100d
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 148d 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 0/2−
LU-15174 utils: use libyaml for llog YAML record parsing
reviewing Sohei Koyama · CI green — awaiting your review
stalled 101d 3 unresolved M +124 −93
101d
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 202d 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
63539 master J !B ✓T ✓R 0/2
LU-19822 lnet: interfaces can be manually disabled
reviewing Timothy Day · CI green — awaiting your review
stalled 118d 4 unresolved L +254 −4
118d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #125377 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
threads: 3 need your reply · 0 waiting on others · 1 own notes · 0 bot
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 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 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 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 · PS4 uploaded 119d ago · NEW · open in Gerrit ↗
commit message
LU-19822 lnet: interfaces can be manually disabled

Implement lnetctl 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.

This patch also implements the needed kernel infrastructure. When
an interface is disabled, sends are routed over the other available
interfaces (if available). recv are dropped outright.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I2387ef98f265b3fa77a5b8a22413a5c29b4c627f
62716 master J !B ✓T ✓R 2/2−
LU-18141 mgs: don't check for NULL before free'ing
reviewing Timothy Day · CI green — awaiting your review
stalled 153d 3 unresolved XS +3 −5
153d
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 295d 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 155d M +42 −17
155d
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 156d 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 0/2−
LU-17000 lnet: refactor lnet_net_show_dump
reviewing Patrick Farrell · CI green — awaiting your review
stalled 202d 1 unresolved L +260 −230
202d
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 248d 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 0/2−
LU-19094 mdt: Use a new generic mti big buffer to get pfid
reviewing Vandana Rungta · CI green — awaiting your review
stalled 202d 10 unresolved M +65 −102
202d
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 307d 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 1/2−
LU-9641 mdt: Add kernel doc style for MDT (4)
reviewing Arshad Hussain · CI green — awaiting your review
dwg stalled 225d 1 unresolved L +158 −148
225d
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 269d 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 245d M +82 −32
245d
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 328d 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 325d M +14 −50
325d
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 328d 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 325d S +19 −0
325d
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 328d 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>
54487 master J –B ✓T ✓R 0/2
LU-10499 pcc: wait for in-progress attaches when remove PCC
reviewing Qian Yingjin · CI green — awaiting your review
stalled 408d M +76 −16
408d
failed enforced testplatformdetail
review-dne-part-8 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
5 optional test failure(s) — informational
build #107928 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS3 uploaded 721d 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.

EX-bug-id: EX-8027
Change-Id: I05b268e75841f9f17e77819ed20c85c78d7c6ad6
Signed-off-by: Qian Yingjin <qian@ddn.com>
10038 master J ✗5B ✓T ✓R 0/2−
LU-4801 ldlm: use mutex instead of spinlock on server side resources
reviewing Oleg Drokin · CI green — awaiting your review
stalled 408d 2 unresolved S +24 −4
408d
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 2623d 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 1/2−
LU-12682 llite: make undeletable property generic
reviewing Bruno Faccini · CI green — awaiting your review
stalled 408d L +358 −180
408d
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 2167d 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 408d M +130 −25
408d
build #81485 SUCCESS · tests all Maloo sessions
no vote yet: Wang Shilong, Andreas Dilger, Hongchao Zhang
owner Lai Siyao · uploader Lai Siyao · PS4 uploaded 1914d 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 408d 4 unresolved M +74 −1
408d
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 1144d 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 0/2−
LU-17022 obdclass: start converting obd flags to a bitmap
reviewing Neil Brown · CI green — awaiting your review
stalled 409d 1 unresolved L +155 −134
409d
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 1028d 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 409d 3 unresolved M +109 −2
409d
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 935d 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 409d 2 unresolved L +242 −115
409d
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 865d 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 2/2−
LU-14315 tests: Increase fsx iteration to improve coverage
reviewing Arshad Hussain · CI green — awaiting your review
stalled 415d XS +4 −3
415d
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 2074d 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
56710 master J !B ✓T ✓R 1/2
LU-18169 llite: wait unstable pages to be committed during umount
reviewing Qian Yingjin · CI green — awaiting your review
stalled 415d S +46 −0
415d
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
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 528d 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
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 469d XS +2 −2
469d
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 470d 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 483d S +8 −4
483d
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 483d 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 489d S +24 −12
489d
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 490d 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 603d L +515 −130
603d
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 609d 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>
54496 master J –B ✓T ✓R 0/2
LU-10499 pcc: abort data copy when clear PCC backend
reviewing Qian Yingjin · CI green — awaiting your review
stalled 628d M +136 −10
628d
5 optional test failure(s) — informational
build #107949 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
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.

Add sanity-pcc/test_108 to verify it.

EX-bug-id: EX-8236
Change-Id: I4e2f3ec8866e9af45f4524a9f45ee418ef4cb5be
Signed-off-by: Qian Yingjin <qian@ddn.com>
54488 master J –B ✓T ✓R 0/2
LU-10499 pcc: add wait option when remove a PCC backend
reviewing Qian Yingjin · CI green — awaiting your review
stalled 628d M +72 −28
628d
8 optional test failure(s) — informational
build #107929 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS3 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
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.

EX-bug-id: EX-8027
Change-Id: Ic8386329087a7129b0583fa823cbb50673893d0d
Signed-off-by: Qian Yingjin <qian@ddn.com>
54492 master J –B ✓T ✓R 1/2
LU-10499 pcc: add --wait option for PCC detach command
reviewing Qian Yingjin · CI green — awaiting your review
stalled 628d M +49 −6
628d
2 optional test failure(s) — informational
build #107943 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-12-28 16:08
no vote yet: Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
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.

EX-bug-id: EX-8027
Change-Id: I63d52d514884b15a7b534d0f03deee441a12d3f1
Signed-off-by: Qian Yingjin <qian@ddn.com>
54493 master J –B ✓T ✓R 0/2
LU-10499 pcc: abort in-progress attach by PCC detach command
reviewing Qian Yingjin · CI green — awaiting your review
stalled 628d M +47 −18
628d
3 optional test failure(s) — informational
build #107946 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d 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.

EX-bug-id: EX-8236
Change-Id: I49fb1c42838f8d7e9728a5c4c6f3d60e959b233b
Signed-off-by: Qian Yingjin <qian@ddn.com>
54491 master J –B ✓T ✓R 1/2
LU-10499 pcc: wait for attach finished for detach command
reviewing Qian Yingjin · CI green — awaiting your review
stalled 628d S +21 −3
628d
7 optional test failure(s) — informational
build #107944 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-12-28 16:04
no vote yet: Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
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_DEATCH_FL_ATTACHING_WAIT). After that, retry
the detach.

EX-bug-id: EX-8027
Change-Id: If85d95be744e3f7d6a07f880e78de5b68b579ed6
Signed-off-by: Qian Yingjin <qian@ddn.com>
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 645d S +35 −9
645d
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 724d 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>
54484 master J –B ✓T ✓R 0/2
LU-10499 pcc: open file for detach O_RDONLY
reviewing Qian Yingjin · CI green — awaiting your review
stalled 720d S +18 −1
720d
failed enforced testplatformdetail
review-dne-part-8 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: replay-dual. session
5 optional test failure(s) — informational
build #107924 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS3 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: open file for detach O_RDONLY

llapi_pcc_detach_file is rdwr, but should just be rdonly.
This means files can be attached but not detached if the
client is mounted rdonly.

The fix is just to open the file in detach with O_RDONLY.

EX-bug-id: EX-7389
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I3e289ab52ff760a8ab84a209b968109517953b52
54481 master J –B ✓T ✓R 0/2
LU-10499 pcc: asynchronous PCCRO attach command support
reviewing Qian Yingjin · CI green — awaiting your review
stalled 720d M +150 −29
720d
6 optional test failure(s) — informational
build #107922 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei, Patrick Farrell
patchsets: PS1 03-21 PS2 09-23 PS3 09-24 PS4 09-25 PS5 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS5 uploaded 721d 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.

Add sanity-pcc/test_{103, 104} to verify that it works correctly.

EX-bug-id: EX-6373
Change-Id: I6f31190c8b9e9b9876b34f8e484c6c8b7f16b6db
Signed-off-by: Qian Yingjin <qian@ddn.com>
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
stalled 720d M +61 −6
720d
build #107925 SUCCESS · tests all Maloo sessions
reviews: Feng Lei +1 2024-09-27 07:07
no vote yet: Andreas Dilger
patchsets: PS1 03-21 PS2 09-25 PS3 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS3 uploaded 721d 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 system cache dropped on client
  later (e.g. 'sysctl -w vm.drop_caches=3'). When file is read,
  file layout version needs to be compared against remote file
  system. And if verion is matching, data will com from PCC.

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

Add sanity-pcc/test_105 to verify it works as expected.

EX-bug-id: EX-7449
Test-Parameters: trivial testlist=sanity-pcc
Change-Id: I1d729bfe550b1bde0e78e8b3ec8217cd598fb64c
Signed-off-by: Qian Yingjin <qian@ddn.com>
54482 master J –B ✓T ✓R 0/2
LU-10499 pcc: add threshold to determine direct I/O during attach
reviewing Qian Yingjin · CI green — awaiting your review
stalled 720d M +139 −49
720d
failed enforced testplatformdetail
review-dne-subtest-change RHEL 9.3/x86_64 ran 3 tests. 1 tests failed: sanity-pcc. session
build #107923 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-24 PS3 09-25 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
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.

EX-6682 build: add json-c-devel into lustre-dkms.spec.in

While installing client DKMS package, json-c-devel package is
required. This patch adds the package requirement into
lustre-dkms.spec.in.
Was-Change-Id: I72f7e23a8c1ec9edecfc69b2e8dda758f215b4e2

EX-6713 doc: man pages for asynchronous PCCRO attachment

This patch updates the man pages for asynchronous PCCRO attachment
for "lfs pcc attach -A" command.
Was-Change-Id: I7757a9d0b66a3586abdc9053b73d69944561ffbd

Test-Parameters: trivial
EX-bug-id: EX-6468 EX-6682 EX-6713
Change-Id: I393d6a06523303e749192ba9978449c3d75886ae
Signed-off-by: Qian Yingjin <qian@ddn.com>
36628 master J ✗1B ✓T ✓R 0/2−
LU-12756 lnet: Restrict lnet_select_pathway to path selection
reviewing Chris Horn · CI green — awaiting your review
stalled 2381d M +68 −56
2381d
janitor flagged test failures unique to this patch — superseded (tests have since passed)
unique failing testhistory
sanity-sec@zfs:test_7seen in 13 other reviews
3 optional test failure(s) — informational
build #9629 SUCCESS
reviews: Amir Shehata -1 2019-12-26 20:25
no vote yet: Stephen Champion, Alexey Lyashkov, Serguei Smirnov, Alexander Boyko, Neil Brown
owner Chris Horn · uploader Chris Horn · PS6 uploaded 2512d ago · NEW · open in Gerrit ↗
commit message
LU-12756 lnet: Restrict lnet_select_pathway to path selection

Remove logic from lnet_select_pathway() that doesn't involve path
selection. This code is moved to lnet_send().

Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: If751e7119e7727ac9bc642ea5c5ca12b0cbf8270
36543 master J ✓B ✓T ✓R 0/2−
LU-12756 lnet: Refactor lnet_select_pathway
reviewing Chris Horn · CI green — awaiting your review
stalled 2381d XL +327 −782
2381d
build #9626 SUCCESS
reviews: Amir Shehata -1 2019-12-26 20:25
no vote yet: Stephen Champion, Alexey Lyashkov, Neil Brown, Serguei Smirnov, Alexander Boyko
owner Chris Horn · uploader Chris Horn · PS8 uploaded 2512d ago · NEW · open in Gerrit ↗
commit message
LU-12756 lnet: Refactor lnet_select_pathway

Refactor code to remove duplication.

Get rid of send_data struct.

A path is comprised of a local network interface (lnet_ni) through
which we will send a message, and a (remote) peer network interface
(lnet_peer_ni) to which we will send the message. The peer NI either
belongs to the final destination or it can belong to a gateway (a.k.a
LNet router). We need to distinguish between these situtions, so this
information is also part of the path definition. As such,
lnet_select_pathway is responsible for defining these three things:
 - The local NI
 - The peer NI
 - Whether the peer NI belongs to a router

The path is recorded in the appropriate fields of the lnet_msg
object.

Test-Parameters: trivial
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: Ie26def4fac0b2cfd67bf134fa7343c3ab5d46587
34881 master J ✓B ✓T ✓R 1/2−
LU-12257 lnet: Add msg pointer address to debug messages
reviewing Chris Horn · CI green — awaiting your review
stalled 2408d M +93 −88
2408d
build #9657 SUCCESS
reviews: Shaun Tancheff +1 2019-11-01 21:53 · Chris Horn -1 2019-11-05 21:43
no vote yet: Neil Brown, Amir Shehata, Olaf Weber
owner Chris Horn · uploader Chris Horn · PS6 uploaded 2511d ago · NEW · open in Gerrit ↗
commit message
LU-12257 lnet: Add msg pointer address to debug messages

Debug and error messages may be more useful in debugging problems
if they include the address of relevant lnet_msg structs. Add this
information to existing debug and error messages.

Test-Parameters: trivial
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: I49dd92c7a173964da792a4a67c5654f69e1d603d

Awaiting review — CI not green yet

(106)
67194 master J !B ✓T ✗0R 0/2
LU-20162 obdclass: pin debugfs entries
reviewing Alex Zhuravlev · awaiting review (CI not green yet)
fortestonly S +30 −4
2h
janitor run: 3 failing config(s), none unique to this patch — janitor results
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 9h 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
66591 master J ✗2B ✓T ✗3R 0/2−
LU-19624 lnetctl: import respects explicit nids
reviewing Cyril Bordage · awaiting review (CI not green yet)
2 unique failures 8 unresolved L +472 −162
2h
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lnet@ldiskfs+DNE:test_164NEW 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_164NEW 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 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity-lnet. session
review-dne-subtest-change RHEL 9.7 / x86_64 ran 3 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
build #131839 SUCCESS · tests all Maloo sessions
no vote yet: Manish Regmi, Xinxia Qu, Serguei Smirnov, Chris Horn, Oleg Drokin, Timothy Day
patchsets:
+3 earlier PS1 06-10 PS2 06-18 PS3 07-01
PS4 07-02 PS5 07-08 PS6 08-03 PS7 09-15 PS8 09-16
threads: 8 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-08-03 19:25 Gerrit AI review for Lustre COMMIT_MSG:9 — (typo) "was ignore" -> "was ignored".
Gerrit AI review for Lustre PS6 · 2026-08-03 19:25
(typo) "was ignore" -> "was ignored".
reply PS5 2026-07-21 03:31 Chris Horn lnetctl.c:2220 — A little `is_nid_intf(intf, flags)` helper would avoid duplicating the logic here and on line 2229.
Chris Horn PS5 · 2026-07-21 03:31
A little `is_nid_intf(intf, flags)` helper would avoid duplicating the logic here and on line 2229.
reply PS5 2026-07-24 08:28 Gerrit AI review for Lustre lnetctl.c:5347 — (defect) lustre_lnet_parse_interfaces() unconditionally does `nw_descr->nw_id = libcfs_str2net(<net after '@'>)`, so parsing the `nid:` valu
Gerrit AI review for Lustre PS5 · 2026-07-24 08:28
(defect) lustre_lnet_parse_interfaces() unconditionally does `nw_descr->nw_id = libcfs_str2net(<net after '@'>)`, so parsing the `nid:` value here overwrites the nw_id already set from `net type:`. For a block like

    net type: tcp1
    nid: X@tcp2

nw_id becomes tcp2, then `net = libcfs_net2str(nw_id)` and yaml_lnet_config_ni() emit `net type: tcp2` with `nid: X@tcp2`. The requested tcp1 is silently discarded and the NI is created on tcp2 rather than the config being rejected.

This also means the new guard in lnet_dyn_add_ni() (api-ni.c:4034, `nid_net != net_id`) can never fire for tool-generated input: because net_id is derived from the same nw_id the nid overwrote, they always match by the time the request reaches the kernel. So the check whose comment says it catches "nid: IP@tcp2 with net type: tcp1" is unreachable for exactly that case. Worth either rejecting the mismatch in the parser or not overwriting nw_id when `net type:` was already given.

(Serguei raised this on an earlier patchset; it still applies to the current revision.)
reply PS6 2026-08-03 19:25 Gerrit AI review for Lustre lnetctl.c:2228 — (defect) nid_intf and real_intf keep only the last matching entry, but nw_intflist can hold the descriptors of several NIs. handle_net_confi
Gerrit AI review for Lustre PS6 · 2026-08-03 19:25
(defect) nid_intf and real_intf keep only the last matching entry, but nw_intflist can hold the descriptors of several NIs. handle_net_config_sequence() only flushes a block when map_depth reaches 0, so every entry of one net's "local NI(s)" sequence accumulates into the same list before yaml_lnet_config_ni() is called once.

For

    net:
    - net type: tcp
      local NI(s):
      -     nid: 192.168.0.1@tcp
            interfaces:
                  0: eth0
      -     nid: 192.168.0.2@tcp
            interfaces:
                  0: eth1

the list is [192.168.0.1@tcp, eth0, 192.168.0.2@tcp, eth1], so nid_intf ends up as 192.168.0.2@tcp and both emitted NIs carry that nid: eth0 is paired with eth1's address, and the second NI repeats the same nid. lnet_inet_select() rejects the first one with -EINVAL because eth0 does not own that address, so the whole import fails.

A block that mixes a nid-only NI with an interfaces-only NI is merged into a single NI request for the same reason.

This is reachable outside import too: `lnetctl net add --nid a@tcp --if eth0,eth1` builds the same list and now emits a@tcp twice.

Since `lnetctl export` (without --backup) prints nid: for every NI and the man page states export output can be fed back to import, a multi-rail net that round-tripped before this patch stops working. Should the nid be paired with the interface of its own "local NI(s)" entry rather than picking one nid for the whole net?
reply PS4 2026-07-08 08:17 Cyril Bordage sanity-lnet.sh:2487 — It is done in https://review.whamcloud.com/c/fs/lustre-release/+/66707 because it was fixed there.
Serguei Smirnov PS4 · 2026-07-07 19:31
I'd recommend to add a test where the "net type" and the net specified in the nid do not match. 
Currently it looks like "net type" may get silently overwritten in lustre_lnet_parse_interfaces(), so the following may get accepted (it should fail):

- net type: tcp1
- nid: 192.168.122.40@tcp2
Cyril Bordage PS4 · 2026-07-08 08:17
It is done in https://review.whamcloud.com/c/fs/lustre-release/+/66707 because it was fixed there.
reply PS5 2026-07-21 03:31 Chris Horn sanity-lnet.sh:2564 — typo net -> nid?
Chris Horn PS5 · 2026-07-21 03:31
typo net -> nid?
reply PS5 2026-07-21 03:31 Chris Horn sanity-lnet.sh:2578 — typo nid. -> nid
Chris Horn PS5 · 2026-07-21 03:31
typo nid. -> nid
reply PS6 2026-08-03 19:25 Gerrit AI review for Lustre sanity-lnet.sh:2551 — (typo) "inteface" -> "interface".
Gerrit AI review for Lustre PS6 · 2026-08-03 19:25
(typo) "inteface" -> "interface".
owner Cyril Bordage · uploader Cyril Bordage · PS8 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-19624 lnetctl: import respects explicit nids

When importing a net config, "nid:" was ignored. Consequently, it was
not possible to mix IPv4 and IPv6 since IP version depended only on
"--large" option from configuration step.
With this patch, lnetctl will consider "nid:" when importing and keep
IP version.

This patch adds some tests to check correct behavior, but also to
check that the imported file is coherent: nid has the right net and
nid represent the right interface.

Assisted-By: Claude Sonnet 4.5 <noreply@anthropic.com>

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I3767f9b46c98864b736c313f90f6afd93f283860
63927 master J !B ✓T ↻R 0/2
LU-19869 ptlrpc: OBD_FREE_LARGE_ATOMIC() in ptlrpc_free_bulk()
reviewing Alex Zhuravlev · awaiting review (CI not green yet)
6 unresolved XS +1 −1
2h
janitor run: 2 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-ldiskfs-arm retesting RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 8 tests. 1 tests failed: lnet-selftest. session
build #131817 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets: PS1 02-10 PS2 02-11 PS3 02-18 PS4 09-16
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-02-11 07:59 Alexey Lyashkov client.c:1791 — why don't use a list_move ?
Alexey Lyashkov PS2 · 2026-02-11 07:59
why don't use a list_move ?
reply PS3 2026-02-20 10:58 Andreas Dilger client.c:1571 — (style) I'm not sure why this is being declared the line before the function itself?
wc-checkpatch PS3 · 2026-02-18 06:56
(style)  externs should be avoided in .c files
Andreas Dilger PS3 · 2026-02-20 10:58
(style) I'm not sure why this is being declared the line before the function itself?
reply PS3 2026-02-20 10:58 Andreas Dilger client.c:3156 — (style) `ptlrpc_request_addref()`
Andreas Dilger PS3 · 2026-02-20 10:58
(style) `ptlrpc_request_addref()`
reply PS3 2026-02-20 10:58 Andreas Dilger client.c:3160 — (style) consistent `{ ... }` on both branches of if-else block
Andreas Dilger PS3 · 2026-02-20 10:58
(style) consistent `{ ... }` on both branches of if-else block
reply PS3 2026-02-20 10:58 Andreas Dilger client.c:3197 — (style) `ptlrpc_request_addref()`
Andreas Dilger PS3 · 2026-02-20 10:58
(style) `ptlrpc_request_addref()`
reply PS3 2026-02-20 10:58 Andreas Dilger client.c:3200 — (style) consistent `{...}` on both branches
Andreas Dilger PS3 · 2026-02-20 10:58
(style) consistent `{...}` on both branches
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS4 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-19869 ptlrpc: OBD_FREE_LARGE_ATOMIC() in ptlrpc_free_bulk()

ptlrpc_free_request() may result in vfree() which must not
be called with a spinlock held as it can sleep - use
OBD_FREE_LARGE_ATOMIC() instead.

Test-Parameters: fortestonly
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I7260f68974184e4b3061911ea670dd152a8355b8
66936 master J !B ✓T ✗3R 2/2
LU-20433 utils: fix 'lfs find ! -m MDTIDX' negation
reviewing Sohei Koyama · awaiting review (CI not green yet)
S +35 −1
3h
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-5 failed 2× RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 8 tests. 1 tests failed: lnet-selftest. session
6 optional test failure(s) — informational
build #131813 SUCCESS · tests all Maloo sessions
reviews: Xiao Yang +1 2026-09-14 03:54 · Andreas Dilger +1 2026-09-16 14:48
patchsets: PS1 06-29 PS2 06-29 PS3 09-13 Andreas Dilger PS4 09-13 Andreas Dilger PS5 09-14
owner Sohei Koyama · uploader Sohei Koyama · PS5 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-20433 utils: fix 'lfs find ! -m MDTIDX' negation

LU-16622 unified the handling of the lfs-find -m/-i/-O options into
a single case, but in doing so it dropped the
'param.fp_exclude_mdt = !!neg_opt;' assignment that used to live
inside the 'if (c == "m")' block.

The MDT matcher in check_mdt_match() (liblustreapi_pfind.c) still
reads fp_exclude_mdt, so with it always 0 a negated MDT-index query
loses its negation: 'lfs find ! -m MDTIDX' returns the files ON <idx>
instead of those NOT on it (exactly what 'lfs find -m MDTIDX'
returns). The -i and -O paths use fp_exclude_obd and are unaffected.

Restore the fp_exclude_mdt assignment to the MDT block and move
'param.fp_exclude_obd' to the else block for OSTs so that they can
be set independently. Add sanity test_56vb to exercise the negation
on a DNE filesystem.

Fixes: 70d8107c48ab ("LU-16622 utils: 'lfs find --ost' supports index range")
Assisted-by: ClaudeCode:Fable-5.1
Signed-off-by: Sohei Koyama <skoyama@ddn.com>
Change-Id: I80ff23f5678c3a9cffe7648db1c873c918647110
41689 master J !B ✓T ✗4R 0/2
LU-14407 osd-zfs: add basic direct IO support
reviewing Brian Behlendorf · awaiting review (CI not green yet)
31 unresolved L +465 −42
3h
janitor run: 3 failing config(s), none unique to this patch — janitor results
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 10.1 / x86_64 ran 3 tests. 1 tests failed: sanity. session
review-dne-zfs-part-2 RHEL 9.8 / x86_64 ran 11 tests. 1 tests failed: sanity-sec. session
review-zfs RHEL 8.10 / x86_64 ran 8 tests. 1 tests failed: sanity-quota. session
build #131809 SUCCESS · tests all Maloo sessions
no vote yet: Olaf Faaland, Migeljan Imeri, Brian Atkinson, Timothy Day, Patrick Farrell (personal), Alex Zhuravlev
patchsets:
+3 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
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 · PS10 uploaded 1d 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()

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: MigeljanImeri <mimeri@lanl.gov>
Change-Id: I5a651a196f716feac671b71010733ea129543d38
35302 master J !B ✓T …R 0/2
LU-13428 llite: correct sync_file_range arguments
reviewing Patrick Farrell · awaiting review (CI not green yet)
S +18 −12
11h
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #131851 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Andriy Skulysh, Zhenyu Xu, Andreas Dilger, Mikhail Pershin, Oleg Drokin, Li Xi
patchsets: PS5 09-10 PS6 09-14 PS7 09-16 patrick bot PS8 09-16 patrick bot
owner Patrick Farrell · uploader patrick bot · PS8 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-13428 llite: correct sync_file_range arguments

OBD_OBJECT_EOF is a 64 bit unsigned value, but loff_t used
for fsync is a signed value, so LLONG_MAX is actually the
maximum allowed size for fsync/cl_sync_file_range.

Several callers passed OBD_OBJECT_EOF as the end of a
whole-file sync, which is -1 once stored in the signed
loff_t of cl_fsync_io.  The OSC only copes with that because
osc_io_fsync_start() maps the value back to CL_PAGE_EOF and
osc_cache_writeback_range() special-cases the wrapped end.
The -1 also goes out on the wire unchanged: osc_fsync_ost()
copies it into o_blocks, and the OST hands it to
vfs_fsync_range() as the end offset, where an end below the
start means nothing is synced.

Correct all cl_sync_file_range() callers to use LLONG_MAX
instead of OBD_OBJECT_EOF, reject a negative start or end
with an error message so a caller cannot silently
reintroduce the same mistake, and drop the OBD_OBJECT_EOF
mapping in osc_io_fsync_start(), which nothing can reach any
more.

Test-Parameters: envdefinitions=SLOW=yes,ENABLE_QUOTA=yes clientcount=2 osscount=1 ostcount=8 mdscount=2 mdtcount=4 fstype=zfs testlist=racer,racer,racer
Test-Parameters: envdefinitions=SLOW=yes,ENABLE_QUOTA=yes clientcount=2 osscount=1 ostcount=7 mdscount=1 mdtcount=1 fstype=zfs testlist=racer,racer,racer
Assisted-by: ClaudeCode:claude-fable-5-1
Assisted-by: ClaudeCode:claude-opus-5
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I71175d92f71c2f7e9f0b3df855e60db921b8acc3
66707 master J !B ✓T …R 0/2
LU-20000 lnetctl: bad CPTs/tunables during import
reviewing Cyril Bordage · awaiting review (CI not green yet)
4 unresolved L +410 −125
16h
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131840 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Manish Regmi, Xinxia Qu, Serguei Smirnov, Chris Horn, Timothy Day
patchsets:
+2 earlier PS1 06-18 PS2 06-18
PS3 07-01 PS4 07-02 PS5 09-15 PS6 09-16 PS7 09-16
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2026-09-16 11:34 Gerrit AI review for Lustre COMMIT_MSG:15 — (minor) The body doesn't mention that the accepted input shape for a 'net:' block gets stricter: 'local NI(s):' is now mandatory, and 'inter
Gerrit AI review for Lustre PS5 · 2026-09-16 11:34
(minor) The body doesn't mention that the accepted input shape for a 'net:' block gets stricter: 'local NI(s):' is now mandatory, and 'interfaces:'/'nid:' directly under 'net type:' are rejected instead of accepted. That is a user-visible change to what an existing hand-written yaml file may contain, so it would be good to state it here.
reply PS5 2026-09-16 11:34 Gerrit AI review for Lustre liblnetconfig.h:99 — (style) This isn't a bug, but the rename drops the per-struct prefix that `ip2nets_net`/`ip2nets_ip_ranges` had; `net` and `ip_ranges` are g
Gerrit AI review for Lustre PS5 · 2026-09-16 11:34
(style) This isn't a bug, but the rename drops the per-struct prefix that `ip2nets_net`/`ip2nets_ip_ranges` had; `net` and `ip_ranges` are generic enough that a grep for either is not very useful. Something like `l2n_net`/`l2n_ip_ranges` would keep the convention while still being shorter than before.
reply PS5 2026-09-16 11:34 Gerrit AI review for Lustre lnetctl.c:5224 — (style) Not a bug, but the continuation is still aligned for the old, shorter `init_ip2nets_tunables(` name; it no longer lines up with the
Gerrit AI review for Lustre PS5 · 2026-09-16 11:34
(style) Not a bug, but the continuation is still aligned for the old, shorter `init_ip2nets_tunables(` name; it no longer lines up with the open paren. Same for the caller-side wrapping if the patch is refreshed.
reply PS5 2026-09-16 11:34 Gerrit AI review for Lustre lnetctl.c:5716 — (defect) cur_ni is only ever allocated in the MAPPING_START branch guarded by !is_ip2nets_sequence, so for an ip2nets sequence it is always
Gerrit AI review for Lustre PS5 · 2026-09-16 11:34
(defect) cur_ni is only ever allocated in the MAPPING_START branch guarded by !is_ip2nets_sequence, so for an ip2nets sequence it is always NULL and every rule that lists interfaces now fails here with -EINVAL.

    ip2nets:
      - net-spec: tcp
        interfaces:
            0: eth0      <- "'interfaces' only valid inside 'local NI(s):'"
        ip-range:
            0: "*.*.*.*"

That is the form documented in the header comment just above the function (unchanged by this patch), the form lustre_lnet_match_ip_to_intf() expects, and the form the new test_172 uses, so `lnetctl import` of an ip2nets file looks like it now just errors out.

Should the guard be restricted to the net: path, with ip2nets still parsing into net_config.net.nw_intflist? e.g.

    if (!cur_ni && !is_ip2nets_sequence)
        ... reject ...
    list = cur_ni ? &cur_ni->nie_descr.nw_intflist :
                    &net_config.net.nw_intflist;
owner Cyril Bordage · uploader Cyril Bordage · PS7 uploaded 1d ago · NEW · open in Gerrit ↗
commit message
LU-20000 lnetctl: bad CPTs/tunables during 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
68289 master J ✓B ✗T –R 2/2
LU-18681 target: extend recovery stats to all phases
reviewing Jinshan Xiong · awaiting review (CI not green yet)
1 unresolved XL +749 −381
1d
build #131681 FAILURE
reviews: Andreas Dilger +1 2026-09-13 22:30 · Alex Zhuravlev +1 2026-09-16 12:11
patchsets: PS1 08-25 PS2 08-25 PS3 09-13
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-09-08 23:49 Andreas Dilger mdt.recovery_histogram.4:90 — (suggestion?) It would be easier to parse this from scripts if the delays were named differently, rather than always `delay_sec:`, like `rec
Andreas Dilger PS2 · 2026-09-08 23:49
(suggestion?) It would be easier to parse this from scripts if the delays were named differently, rather than always `delay_sec:`, like `reconnect_sec:` and `replay_req_sec:` and `replay_lock_sec:`.  However, if that is worse for the YAML consumer to parse then it's OK to leave as-is.
owner Jinshan Xiong · uploader Jinshan Xiong · PS3 uploaded 3d ago · NEW · open in Gerrit ↗
commit message
LU-18681 target: extend recovery stats to all phases

Commit 9fa50dbba6 measured only the reconnect phase of target
recovery. Extend the same counters to req_replay and lock_replay so
that a slow recovery can be attributed to the phase that caused it.

Widen the existing parameters rather than adding a parallel set per
phase, and drop the now-inaccurate phase from their names:

  recovery_reconnect_histogram  -> recovery_histogram
  recovery_reconnect_top        -> recovery_top
  exports/<nid>/reconnect_delay -> exports/<nid>/recovery_delay
  recovery_reconnect_top_n      -> recovery_top_n (module parameter)

Each now reports all three phases. target_recovery_thread() stamps the
req_replay and lock_replay transitions, and target_recovery_phase_tally()
records the client's delay behind the same filesystem-client gate used
before, so server-to-server connections stay out of the statistics.
Delays are measured from the start of recovery, so a later phase
includes the time spent in the earlier ones, and the difference between
two of them is the time the client spent in between.

Rename the man pages to match, and add replay-ost-single.sh test_13 to
cover the OST side.

Test result:
```
obdfilter.lustre-OST0000.recovery_histogram=
recovery_start:    1787621490
req_replay_start:  1787621532
lock_replay_start: 1787621533
recovery_finish:   1787621533
recovery_time:     43
reconnect_delay_seconds_samples: 4
client_reconnect_histogram:
- { phase_sec:   1, clients:    3, pct:  75, cum_pct:  75 }
- { phase_sec:  64, clients:    1, pct:  25, cum_pct: 100 }
req_replay_delay_seconds_samples: 4
client_req_replay_histogram:
- { phase_sec:   1, clients:    4, pct: 100, cum_pct: 100 }
lock_replay_delay_seconds_samples: 4
client_lock_replay_histogram:
- { phase_sec:   1, clients:    4, pct: 100, cum_pct: 100 }
```

Signed-off-by: Jinshan Xiong <jinshan.xiong@gmail.com>
Change-Id: I5a8e2374c4754d5a7c090143f65d6db0a376a150
68684 master J –B ✓T ✗1R 0/2
LU-20704 build: Fix O2IBDIR path matching
reviewing Xiao Yang · awaiting review (CI not green yet)
S +8 −8
1d
failed enforced testplatformdetail
full-dkms failed 4× RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #131670 SUCCESS · tests all Maloo sessions
no vote yet: Minh, Jian Yu
patchsets: PS1 09-07 PS2 09-08 PS3 09-10 PS4 09-11 PS5 09-13
owner Xiao Yang · uploader Xiao Yang · PS5 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-20704 build: Fix O2IBDIR path matching

The "$" in "${O2IBDIR}$" applies only to the last pattern, so
"/ofa_kernel" matched as a plain substring and could select a
wrong path such as /usr/src/ofa_kernel-<version>, an unconfigured
source tree.  EXTRA_OFED_CONFIG then pointed there and the OpenIB
gen2 compile test failed.

Match /ofa_kernel and /openib only as complete path components,
i.e. followed by "/" or the end of the line.

dkms.mkconf and debian/dkms.conf.in open-code the same detection,
so sync them, including the /usr/src/ofa_kernel fallback and -d
check from commit 6c93398e6e3d: without it paths comes out empty
and dkms.conf would register in-kernel-o2iblnd instead of o2iblnd.

Fixes: 3a7930e63c15 ("LU-16050 build: replace ofed_info with dpkg/rpm")
Test-Parameters: trivial testgroup=full-dkms
Signed-off-by: Xiao Yang <xyang@ddn.com>
Change-Id: Iff704e84818f1e4e3a398c9addacf0fe1a71194b
68523 master J !B ✓T ✗2R 0/2
LU-20595 lnet: cYAML_get_object_item() back to shallow search
reviewing Xiyang Wang · awaiting review (CI not green yet)
10 unresolved M +45 −14
2d
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
review-ldiskfs-arm RHEL 8.10 / x86_64, Rocky 9.8 / aarch64 ran 6 tests. 1 tests failed: sanity. session
build #131708 SUCCESS · tests all Maloo sessions
patchsets: PS1 08-31 PS2 09-04 PS3 09-06 PS4 09-13 PS5 09-14
threads: 10 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-09-13 18:39 Andreas Dilger COMMIT_MSG:11 — These references should all be `Fixes:` lines.
Andreas Dilger PS4 · 2026-09-13 18:39
These references should all be `Fixes:` lines.
reply PS4 2026-09-13 18:39 Andreas Dilger COMMIT_MSG:23 — Same
Andreas Dilger PS4 · 2026-09-13 18:39
Same
reply PS4 2026-09-13 21:57 Gerrit AI review for Lustre COMMIT_MSG:31 — (minor) The body presents the shallow search as the whole solution, but the patch also changes the failed: path in cYAML_build_error() to cl
Gerrit AI review for Lustre PS4 · 2026-09-13 21:57
(minor) The body presents the shallow search as the whole solution, but the patch also changes the failed: path in cYAML_build_error() to clear *root instead of the local r. That is the part that actually stops the caller from touching the freed tree - the shallow search only removes one way of reaching failed:, and an allocation failure in the cYAML_create_object()/create_number()/create_string() calls below still gets there. Worth a sentence so the hunk isn't a surprise to a reader.
reply PS5 2026-09-15 16:33 Gerrit AI review for Lustre COMMIT_MSG:44 — (minor) test_171 imports one net entry containing two `local NI(s)` entries, not several net entries. The lookup that used to stray is done
Gerrit AI review for Lustre PS5 · 2026-09-15 16:33
(minor) test_171 imports one net entry containing two `local NI(s)` entries, not several net entries. The lookup that used to stray is done on the local-NI sequence item:

    while (cYAML_get_next_seq_item(local_nis, &local_ni) != NULL) {
        intf = cYAML_get_object_item(local_ni, "interfaces");

so the neighbour whose value got picked up is the next NI under the same net, not the following net entry. The failure description near the top says "the following net entry" too. Since the test was reworked to the local-NI form, could the wording follow it?
reply PS5 2026-09-15 16:33 Gerrit AI review for Lustre COMMIT_MSG:48 — (minor) The cYAML_build_error() hunk fixes a second, independent bug. `r` is just a local copy of `*root`, so `cYAML_free_tree(r); r = NULL;
Gerrit AI review for Lustre PS5 · 2026-09-15 16:33
(minor) The cYAML_build_error() hunk fixes a second, independent bug. `r` is just a local copy of `*root`, so `cYAML_free_tree(r); r = NULL;` has always left the caller holding a freed tree - jt_import() then does cYAML_print_tree2file(stderr, err_rc) plus cYAML_free_tree(err_rc) at `err:`, and llapi_pcc_yaml_cb_helper() does the same. That is reachable from any of the cYAML_create_object()/create_number()/create_string() failures below, not only from the `goto failed` the recursive lookup could reach, and it did not come from c906ab9c88ef. A second trailer would point at where it started:

    Fixes: 0f753ead66cb ("LU-2456 lnet: DLC user space Configuration library")

This was asked for on patchset 4 (on the line that then carried the LU-20479 reference); the reference was dropped instead of being turned into a Fixes: line.
reply PS4 2026-09-13 18:39 Andreas Dilger cyaml.c:726 — This long AI-generated comment is unnecessary. There is no value to describing how the code used to be broken, but is no longer that way.
Andreas Dilger PS4 · 2026-09-13 18:39
This long AI-generated comment is unnecessary. There is no value to describing how the code used to be broken, but is no longer that way.

Comments should describe the existing code and non-obvious issues or requirements, so something like:

    Only search the direct children of the parent to avoid matching
    unrelated nested nodes with the same name.

or similar.
reply PS4 2026-09-13 21:57 Gerrit AI review for Lustre cyaml.h:121 — (minor) "the current level" reads as the parent's sibling chain, which is precisely what this patch stops searching. Since pinning the seman
Gerrit AI review for Lustre PS4 · 2026-09-13 21:57
(minor) "the current level" reads as the parent's sibling chain, which is precisely what this patch stops searching. Since pinning the semantics down is the point of the change, something like "searches the parent node itself and its direct children" leaves no room for that reading.
reply PS4 2026-09-13 18:39 Andreas Dilger sanity-lnet.sh:2724 — Similarly, it isn't useful to document in the code/test how it used to be broken, that can stay in the commit message. If we don't keep the
Andreas Dilger PS4 · 2026-09-13 18:39
Similarly, it isn't useful to document in the code/test how it used to be broken, that can stay in the commit message.  If we don't keep the AI comments under control the code will eventually be 10 lines of comment for every line of code and filled with useless old trivia instead of being helpful to the reader.
reply PS4 2026-09-13 21:57 Gerrit AI review for Lustre sanity-lnet.sh:2735 — (minor) The * lands in the filename instead of acting as a glob: assignment doesn't expand it, and by the time cat > $yfile runs there is no
Gerrit AI review for Lustre PS4 · 2026-09-13 21:57
(minor) The * lands in the filename instead of acting as a glob: assignment doesn't expand it, and by the time cat > $yfile runs there is nothing to match, so the file is created literally as $TMP/sanity-lnet-171-*.yaml. It also becomes an "ambiguous redirect" the moment a second file matches the pattern. $TMP/sanity-lnet-$testnum.yaml would do what's intended and is still covered by cleanup_testsuite().
reply PS4 2026-09-13 21:57 Gerrit AI review for Lustre sanity-lnet.sh:2759 — (defect) -eq isn't an arithmetic operator, so this is a syntax error rather than a comparison:
Gerrit AI review for Lustre PS4 · 2026-09-13 21:57
(defect) -eq isn't an arithmetic operator, so this is a syntax error rather than a comparison:

    $ nids=1; (( $nids -eq 1 )) || echo fail
    bash: ((: 1 -eq 1 : arithmetic syntax error (error token is "1 ")
    fail

(( )) returns non-zero on the error, so error "expected exactly 1 NI ..." fires on every run and test_171 fails with or without the cyaml.c fix - which also means the fix has no working regression coverage. (( nids == 1 )) is the form used elsewhere in the suite.
owner Xiyang Wang · uploader Xiyang Wang · PS5 uploaded 3d 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
67100 master J ✗1B ✓T ✗1R 0/2
LU-18687 misc: use bound workqueues
reviewing Timothy Day · awaiting review (CI not green yet)
1 unique failure 11 unresolved M +96 −95
5d
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 6d 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
68043 master J !B ✓T ✗1R 0/2
LU-20601 utils: make Lustre headers c++ compatible
reviewing Etienne AUJAMES · awaiting review (CI not green yet)
9 unresolved M +89 −53
5d
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
build #131529 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Sebastien Buisson, Timothy Day
patchsets:
+2 earlier PS1 08-17 PS2 08-21
PS3 08-21 PS4 08-21 PS5 08-24 PS6 08-26 PS7 09-10
threads: 9 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-08-28 00:46 Gerrit AI review for Lustre lustre_idl.h:3146 — (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 th
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"?
reply PS7 2026-09-12 03:09 Gerrit AI review for Lustre lustre_idl.h:3152 — (typo) pre-existing, but since this line is being touched anyway: "for_sizezof_only" should be "for sizeof() only".
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".
reply PS5 2026-08-25 08:46 Gerrit AI review for Lustre lustre_user.h:2651 — Adding evidence to the open question above about dropping the flexible array under C++.
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?
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 PS3 2026-08-21 10:19 Misc Code Checks Robot (Gatekeeper helper) wiretest.c:5363 — warn: lustre_assert_wire_constants():argument 4 to %lld specifier is cast from pointer
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-08-21 10:19
warn: lustre_assert_wire_constants():argument 4 to %lld specifier is cast from pointer
reply PS4 2026-08-21 10:36 Misc Code Checks Robot (Gatekeeper helper) wiretest.c:5363 — warn: lustre_assert_wire_constants():argument 4 to %lld specifier is cast from pointer
Misc Code Checks Robot (Gatekeeper helper) PS4 · 2026-08-21 10:36
warn: lustre_assert_wire_constants():argument 4 to %lld specifier is cast from pointer
reply PS7 2026-09-12 03:09 Gerrit AI review for Lustre sanity.sh:32730 — (nit) the subtest description still says only "packaged headers can be compiled", which no longer says what the test now covers. Something l
Gerrit AI review for Lustre PS7 · 2026-09-12 03:09
(nit) the subtest description still says only "packaged headers can be compiled", which no longer says what the test now covers. Something like "packaged headers can be compiled as C and C++" would show the added coverage in the test output.
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS7 uploaded 7d 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
65737 master J ✗1B ✓T ✗2R 0/2−
LU-10026 csdc: set compress component for file
reviewing Marc Vef · awaiting review (CI not green yet)
1 unique failure csdc 17 unresolved XL +1081 −10
6d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
runtests-ssk@ldiskfs+SharedKey:test_1seen in 100 other reviews
failed enforced testplatformdetail
custom-1001 failed 2× RHEL 9.7 / x86_64 ran 1 tests. 1 tests failed: node-provisioning. %% NODE-PROVISIONING FAILED MULTIPLE TIMES FOR custom %% http session
review-dne-selinux-ssk-part-2 failed 2× RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity-sec. session
build #129910 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Artem Blagodarenko, Zhenyu Xu
patchsets:
+9 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
threads: 17 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS14 2026-09-11 07:12 Roman Bolshakov COMMIT_MSG:17 — The concern is accurate with regards to both `lod_use_defined_striping()` and `lod_parse_striping()`. Both do their work of decoding fields
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) The description here is inverted with respect to the code. lod_parse_striping() and lod_use_defined_striping() gate the compress-field copy on LOV_PATTERN_COMPRESS in lmm_pattern, not on LCME_FL_COMPRESS, and lod_generate_lovea() already serialised llc_compr_* before this patch - what it gains here is setting LCME_FL_COMPRESS. Worth rewording so the flag is described as an output of these paths rather than the input condition.
Roman Bolshakov PS14 · 2026-09-11 07:12
The concern is accurate with regards to both `lod_use_defined_striping()` and `lod_parse_striping()`. Both do their work of decoding fields only if LOV_PATTERN_COMPRESS is set. I've amended the commit message to reflect that.
reply PS14 2026-09-11 07:12 Roman Bolshakov COMMIT_MSG:25 — COMPR_CHUNK_MAX_BITS comes from the next Change-Id: Ic36946738c3463fd862aeca4ee2e2c2ed85eff84. In order to avoid unexpected churn, the decis
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) lod_adjust_compr_chunk_size() has no RPC-size check and no clamp: it only decrements lum_bits until the chunk fits in and divides the stripe size. There is also no COMPR_CHUNK_MAX_BITS anywhere in the tree.
Roman Bolshakov PS14 · 2026-09-11 07:12
COMPR_CHUNK_MAX_BITS comes from the next Change-Id: Ic36946738c3463fd862aeca4ee2e2c2ed85eff84. In order to avoid unexpected churn, the decision is to keep the shape of the series in the same order as it was originally made. It will only be a bit reworded in the commit message.
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre COMMIT_MSG:30 — (defect) This inheritance claim does not match lfs.c. Each -E runs comp_args_to_layout() and then setstripe_args_init_inherit(), which prese
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(defect) This inheritance claim does not match lfs.c. Each -E runs comp_args_to_layout() and then setstripe_args_init_inherit(), which preserves only stripe_size, stripe_count, pool_name, mirror_count and first_comp - lsa_compr_type/lsa_compr_lvl/lsa_compr_chunk_size are reset by the setstripe_args_init() call inside it. So

    lfs setstripe -E 1M -Z lz4 -E eof file

compresses only the first component. Either the inheritance needs implementing in setstripe_args_init_inherit(), or this sentence and the matching text in lfs-setstripe.1 should be dropped.
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre COMMIT_MSG:39 — (defect) There is no LL_COMPR_TYPE_UNCHANGED in the patch. What lustre_user.h actually gains is the whole enum ll_compr_type (NONE..ZSTD plu
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(defect) There is no LL_COMPR_TYPE_UNCHANGED in the patch. What lustre_user.h actually gains is the whole enum ll_compr_type (NONE..ZSTD plus MAX) and '#define COMPR_LEVEL_MAX 31', neither of which is mentioned.

A couple of other hunks are also unaccounted for: the new compress block in lod_declare_layout_add() (the 'lfs setstripe --component-add' path) and the LL_COMPR_TYPE_NONE change in lod_declare_layout_set().
reply PS14 2026-09-11 07:12 Roman Bolshakov COMMIT_MSG:48 — Ack. Will fold
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(style) This block repeats the 'lfs getstripe' description already given above and reads like a second commit message that got appended. Could it be folded into the earlier bullet?
Roman Bolshakov PS14 · 2026-09-11 07:12
Ack. Will fold
reply PS14 2026-09-03 18:13 Andreas Dilger COMMIT_MSG:67 — Prefer `serverversion=2.17` to minimize unrelated interop failures.
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) There is no 'interop' suite under lustre/tests/, and this is the only 'testlist=interop' in the tree's history. Since lod_generate_lovea() now persists LCME_FL_COMPRESS in lcme_flags, an interop run against an older server seems worth requesting explicitly, e.g. 'Test-Parameters: testlist=sanity-pfl serverversion=2.16.0'.
Andreas Dilger PS14 · 2026-09-03 18:13
Prefer `serverversion=2.17` to minimize unrelated interop failures.
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 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 lfs-setstripe.1:248 — (defect) setstripe has no --compress-type/--compr-type or --compress-level/--compr-level. Its long_opts only gain 'compress'/'compr' (-Z) an
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(defect) setstripe has no --compress-type/--compr-type or --compress-level/--compr-level. Its long_opts only gain 'compress'/'compr' (-Z) and 'compress-chunk'; --compress-type and --compress-level are getstripe options and take no argument there. As written these two entries send the reader to 'lfs setstripe: unrecognized option'.
reply PS14 2026-08-22 12:47 Gerrit AI review for Lustre lfs-setstripe.1:262 — (minor) --compr-chunk is not accepted by setstripe either - only 'compress-chunk' is in the long_opts table. Conversely -Z's real alias --co
Gerrit AI review for Lustre PS14 · 2026-08-22 12:47
(minor) --compr-chunk is not accepted by setstripe either - only 'compress-chunk' is in the long_opts table. Conversely -Z's real alias --compr isn't documented above.
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 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?
tags: csdc
owner Marc Vef · uploader Artem Blagodarenko · PS14 uploaded 27d 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 LCME_FL_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 LCME_FL_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).

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.
- 'lfs getstripe' gains --compress-type, --compress-level, and
  --compress-chunk options to print individual compress parameters.
- 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:
- New LL_COMPR_TYPE_UNCHANGED enum value in the uapi header plus
  corresponding wirecheck.c/wiretest.c entries.
- 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.

  Example:
	$ lfs setstripe -Eeof -Z lz4:5 --compress-chunk=512 <file>

* 'lfs getstripe' to show compress component parameters
  Display component's compression parameters if possible.

  --compress-type|--compr-type
  Print only the compress type if possible.

  --compress-level|--compr-level
  Print only the compress level if possible.

  --compress-chunk|--compr-chunk
  Print only the compress chunk size in KiB if possible.

  Example:
	$ lfs getstripe <file>
    lcme_compr_type:     lz4
    lcme_compr_lvl:      5
    lcme_compr_chunk_kb: 512
      lmm_pattern:       raid0,compress

Test-Parameters: testlist=interop
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: Ife0382469cbc5099e0c6dc96534bb169ddeff61e
68661 master J !B ✓T ✗1R 0/2
LU-18687 build: move aops compat code into fs.h
reviewing Shaun Tancheff · awaiting review (CI not green yet)
4 unresolved L +271 −219
7d
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 8d 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 · awaiting review (CI not green yet)
lug23ddhackathon 4 unresolved S +8 −9
13d
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 14d 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
54478 master J !B ✗T –R 0/2−
LU-10499 pcc: Add dio support for data copy during attach
reviewing Qian Yingjin · awaiting review (CI not green yet)
XL +1022 −60
13d
janitor run: build failed — no tests ran — janitor results
build #130184 FAILURE
no vote yet: Andreas Dilger, Feng Lei, Patrick Farrell
patchsets: PS1 03-21 PS2 09-23 PS3 09-24 PS4 09-26 PS5 08-25 Andreas Dilger
owner Qian Yingjin · uploader Andreas Dilger · PS5 uploaded 23d 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.

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.

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.
---
EX-5014 pcc: avoid deadlock during DIO open attach on rhel7

The Maloo testing fails with sanity-pcc/45 due to the following
deadlock on rhel7 kernel:

    ll_fid_path_cop D ffff9a32db5eb180     0 10783  10782 0x00000080
    Call Trace:
    schedule_preempt_disabled+0x29/0x70
    __mutex_lock_slowpath+0xc7/0x1d0
    mutex_lock+0x1f/0x2f
    lookup_slow+0x33/0xa7
    link_path_walk+0x80f/0x8b0
    path_openat+0xae/0x5a0
    do_filp_open+0x4d/0xb0
    do_sys_open+0x124/0x220
    SyS_open+0x1e/0x20

    dd              D ffff9a32fb5b6300     0 10779  10755 0x00000080
    Call Trace:
    wait_for_completion+0xfd/0x140
    call_usermodehelper_exec+0x179/0x1a0
    call_usermodehelper+0x40/0x60
    pcc_copy_data_dio+0x267/0x340 [lustre]
    pcc_attach_data_archive+0x6ff/0xe80 [lustre]
    pcc_readonly_attach+0x3d2/0xad0 [lustre]
    pcc_readonly_attach_sync+0x205/0x260 [lustre]
    pcc_file_open+0x798/0xdd0 [lustre]
    ll_atomic_open+0xd80/0x1780 [lustre]
    do_last+0xa53/0x1340
    path_openat+0xcd/0x5a0
    do_filp_open+0x4d/0xb0
    do_sys_open+0x124/0x220
    SyS_open+0x1e/0x20

This only happened on el7 kernel which uses mutex for inode locking.
During ->ll_atomic_open(), the kernel will take this mutex on the
parent inode. However, when copy data via the user space helper
program ll_fid_path_copy, it will also try to obtain this mutex
lock on the parent inode during lookup, resulting in deadlock.

Was-Change-Id: I384c7b1979d93183b86bbde311d29a50346a8d56

EX-5014 pcc: minor fixes for parameter checks

Improve console message when out-of-range pcc_dio_attach_size_mb
values are supplied.

Fix sanity-pcc test_49b to allow future limit changes

Was-Change-Id: I2bf7d0bf564c954318980f7a09d8713a70f37db9

EX-6193 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.
In this path, it fixes this bug by falling back from direct I/O to
buffered I/O mode when copy the tail non-blksize-aligned file
part.

Was-Change-Id: I5287563029269032a91397c0094e2ccede73b9b1

EX-6399 pcc: add tunable parameter for PCC attach thread

Currently the max number of kernel threads doing asynchronous
attach is a hard code value (1024 by default).
In this patch, we make it a tunable parameter:
	llite.*.pcc_max_attach_thread_num

Was-Change-Id: Ic59c15af935dd8dff586fa6be3939d4322c136d5

EX-8236 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

Test-Parameters: clientdistro=el8.9 mdscount=2 mdtcount=4 testlist=sanity-pcc env=ONLY=45,ONLY_REPEAT=10
EX-bug-id: EX-5014 EX-6399 EX-6193 EX-8236
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Signed-off-by: Qian Yingjin <qian@ddn.com>
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Change-Id: Idb2a12296c3e4778763c9b576bbb0ecd2570a458
53169 master J !B ✓T ✗1R 0/2−
LU-17295 llite: parallel creates via d_lookup_done
reviewing Qian Yingjin · awaiting review (CI not green yet)
9 unresolved S +16 −0
20d
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 115d 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
67385 master J –B ✓T ✗1R 0/2
LU-20232 build: dkms-deb should only build dkms packages
reviewing Timothy Day · awaiting review (CI not green yet)
6 unresolved S +10 −10
20d
failed enforced testplatformdetail
full-dkms failed 2× RHEL 8.10 / x86_64 ran 2 tests. 1 tests failed: lustre-initialization. session
build #130290 SUCCESS · tests all Maloo sessions
no vote yet: Shaun Tancheff, Minh
patchsets: PS1 07-20 PS2 08-25 Minh
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-27 21:19 Gerrit AI review for Lustre COMMIT_MSG:18 — (minor) The body covers the Architecture change, the -g flag, the configure-stamp dependencies, the install-data-local switch and the mv lis
Gerrit AI review for Lustre PS1 · 2026-07-27 21:19
(minor) The body covers the Architecture change, the -g flag, the configure-stamp dependencies, the install-data-local switch and the mv list, but not the new `rm -rf $(CURDIR)/debian/$(DKMS_PKG)/lib` in the DKMS rule. Worth a sentence saying it undoes the module-install side effect of install-data-local, otherwise it reads as an unrelated hunk.
reply PS1 2026-07-27 21:19 Gerrit AI review for Lustre COMMIT_MSG:22 — (minor) This second Fixes: tag looks like it points at the wrong commit. 4ff30bece1 touched no file under debian/, and its config/Makefile.d
Gerrit AI review for Lustre PS1 · 2026-07-27 21:19
(minor) This second Fixes: tag looks like it points at the wrong commit. 4ff30bece1 touched no file under debian/, and its config/Makefile.dkms-deb is a verbatim move of the dkms-debs recipe out of autoMakefile.am - the dpkg-buildpackage line and the mv list are byte-identical to what was in autoMakefile.am before it. None of the four things this patch changes (control.main Architecture, -g, the configure-stamp dependencies, install-data-local) live in code that 4ff30bece1 introduced.

The header install had already been broken before it: `AC_CONFIG_FILES` never generated an `include/Makefile`, so `$(MAKE) install -C include` could not work from the moment 9bb1727422 ("LU-18687 build: sync header location") collapsed the two `-C lustre/include` / `-C lnet/include` calls into it. If a second tag is wanted, that is probably the one:

    Fixes: 9bb1727422 ("LU-18687 build: sync header location")

The first tag (8cf1563a7c) does check out - it removed lustre/include/Makefile.am and so broke `install -C lustre/include`.
reply PS2 2026-08-27 00:36 Gerrit AI review for Lustre COMMIT_MSG:24 — (minor) After the rebase described just above, does this patch still fix anything these two tags point at? The body says 377ce8531a already
Gerrit AI review for Lustre PS2 · 2026-08-27 00:36
(minor) After the rebase described just above, does this patch still fix anything these two tags point at? The body says 377ce8531a already landed the header-installation fix and that this revision no longer touches it, and nothing in the diff is header related any more.

What is left is a change to which packages `make dkms-debs` emits and to the `Architecture:` field of `lustre-client-modules-dkms`. That target produced working DKMS packages before this patch, so this reads as a build-scope/packaging cleanup rather than a fix for a breakage either referenced commit introduced.

If that is right, both Fixes: lines can be dropped. If one is still meant to apply, it would help to say in the body what remains broken.
reply PS1 2026-07-27 21:19 Gerrit AI review for Lustre rules:498 — (suggestion) install-data-local is an automake hook, and in autoMakefile.am it is not headers-only - the `if MODULES` half creates $(modulef
Gerrit AI review for Lustre PS1 · 2026-07-27 21:19
(suggestion) install-data-local is an automake hook, and in autoMakefile.am it is not headers-only - the `if MODULES` half creates $(modulefsdir)/$(modulenetdir) and copies every .ko found under lustre/, ldiskfs/ and lnet/ into them. Modules are enabled here (configure runs with --with-linux), so a `./configure && make && make dkms-debs` tree will have the whole module set copied into the staging dir just to be deleted again two lines below.

A small dedicated target in autoMakefile.am (say install-headers, holding just the three header loops) would decouple the DKMS package from whatever else install-data-local grows later.
reply PS1 2026-07-27 21:19 Gerrit AI review for Lustre rules:500 — (minor) This cleanup silently depends on modulefsdir/modulenetdir starting with /lib - they are derived from `moduledir="/lib/modules/${LINU
Gerrit AI review for Lustre PS1 · 2026-07-27 21:19
(minor) This cleanup silently depends on modulefsdir/modulenetdir starting with /lib - they are derived from `moduledir="/lib/modules/${LINUXRELEASE}/${KMP_MODDIR}"` in config/lustre-build-linux.m4. That holds today, but if that path ever moves under /usr/lib the stale .ko files would ship inside the DKMS package instead. A comment naming the reason would help, or better, don't create them in the first place (see the note above).
reply PS2 2026-08-27 00:36 Gerrit AI review for Lustre rules:486 — (minor) With build-indep reduced to configure-stamp, nothing is compiled during the build phase of a `-g` run any more, so this rule's `$(MA
Gerrit AI review for Lustre PS2 · 2026-08-27 00:36
(minor) With build-indep reduced to configure-stamp, nothing is compiled during the build phase of a `-g` run any more, so this rule's `$(MAKE) install DESTDIR=.../_tmp_` a few lines down becomes the first thing that compiles the tree. automake resolves `install` through `install-am: all-am`, so lib/, lnet/utils/, lustre/utils/ and lustre/tests/ all get built right there.

Two side effects of that move:

- build-stamp used `$(MAKE) -C $(BUILDDIR) $(PMAKEARGS)`; this call has no `$(PMAKEARGS)`, so the whole userspace build is now single-threaded.
- dpkg-buildpackage runs binary-indep under fakeroot (no Rules-Requires-Root in debian/control), so the compile now happens under fakeroot too, whereas before it ran in the plain build phase.

Would it be cleaner to give build-indep its own stamp that does the `$(MAKE) $(PMAKEARGS)` and leave this rule to just stage and package?
owner Timothy Day · uploader Minh · PS2 uploaded 22d 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: pass -g to dpkg-buildpackage, depend
on configure-stamp instead of build-stamp for build-indep and
the source/DKMS binary rules. Trim the mv list to the packages
that are actually produced.

Rebased on top of 377ce8531a ("LU-20232 dkms: restore dkms-debs
target"), which already fixes DKMS header installation via a
different mechanism; this patch no longer touches that part.

Test-Parameters: trivial testgroup=full-dkms
Fixes: 8cf1563a7c ("LU-18876 build: remove Lustre header autoMakefiles")
Fixes: 4ff30bece1 ("LU-18687 build: refactor the top-level Makefile")
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I287da7cff8e743b84e7e5d7f1344bdcee325db1c
53190 master J !B ✓T ✗1R 0/2
LU-15372 mdd: Add projid in Changelog
reviewing Arshad Hussain · awaiting review (CI not green yet)
26 unresolved L +400 −52
23d
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 27d 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
65762 master J ✗1B ✓T ✗1R 0/2
LU-10026 csdc: prefer uncompressed mirror for read and write
reviewing Marc Vef · awaiting review (CI not green yet)
1 unique failure csdc 4 unresolved L +213 −47
26d
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 27d 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 · awaiting review (CI not green yet)
csdc 4 unresolved L +270 −58
26d
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 27d 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 · awaiting review (CI not green yet)
csdc 9 unresolved L +715 −67
26d
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 27d 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
67498 master J !B ✓T ✗1R 0/2−
LU-19805 llite: unregister client BDI on pre-5.11 kernels
reviewing Oleg Drokin · awaiting review (CI not green yet)
6 unresolved M +48 −5
26d
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 50d 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
67518 master J –B ✗T –R 0/2−
LU-18687 build: normalize C flags in kernel Makefiles
reviewing Timothy Day · awaiting review (CI not green yet)
S +17 −8
29d
build #128067 FAILURE
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets: PS1 07-24 PS2 07-24
owner Timothy Day · uploader Timothy Day · PS2 uploaded 55d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: normalize C flags in kernel Makefiles

Kernel code should only be allowed to #include code that
it needs. Restrict the #include paths to the greatest
degree possible.

Correct the order of include flags.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I8b35b99767f7ea41cc3c590bf35089fb81a1bf2c
64942 master J –B ✗T –R 0/2
LU-17916 dbg: force build with in-kernel crypto
reviewing Sebastien Buisson · awaiting review (CI not green yet)
fortestonly 1 unresolved XS +1 −1
29d
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 157d 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 0/2−
LU-11433 lnet: move wire constant checks into wiretest.c
reviewing Sonia Sharma · awaiting review (CI not green yet)
L +472 −288
46d
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 92d 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
65203 master J !B ✓T ✗1R 0/2
LU-19768 ldlm: add LDLM genetlink family
reviewing Timothy Day · awaiting review (CI not green yet)
12 unresolved L +311 −2
49d
janitor run: 9 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-5 RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
7 optional test failure(s) — informational
build #128311 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-09 PS2 07-22 PS3 07-29
threads: 12 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 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 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 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.
reply PS2 2026-07-28 10:14 Gerrit AI review for Lustre ldlm_netlink.c:117 — (style) This isn't a bug, but ldlm_release(), ldlm_collect(), ldlm_dump_one(), ldlm_list, ldlm_keys, ldlm_ops and struct ldlm_entry are very
Gerrit AI review for Lustre PS2 · 2026-07-28 10:14
(style) This isn't a bug, but ldlm_release(), ldlm_collect(), ldlm_dump_one(), ldlm_list, ldlm_keys, ldlm_ops and struct ldlm_entry are very generic for the ldlm namespace - ldlm_release() in particular reads like a lock-release helper. If the patch is refreshed, an ldlm_nl_ prefix would also make them consistent with the lustre_ldlm_* handlers further down, which use a different prefix within the same file.
reply PS2 2026-07-28 10:14 Gerrit AI review for Lustre ldlm_netlink.c:151 — (defect) This reports ns_max_age in seconds, but the long-standing ldlm.namespaces.*.lru_max_age parameter is milliseconds - lru_max_age_sho
Gerrit AI review for Lustre PS2 · 2026-07-28 10:14
(defect) This reports ns_max_age in seconds, but the long-standing ldlm.namespaces.*.lru_max_age parameter is milliseconds - lru_max_age_show() uses ktime_to_ms() and lru_max_age_store() scales a bare number by NSEC_PER_MSEC. Same name, 1000x different value, and any setting below one second reports 0 here. Should this use ktime_to_ms() so the two agree? The kernel-doc for LUSTRE_LDLM_ATTR_LRU_MAX_AGE says "seconds" as well.
reply PS2 2026-07-28 10:14 Gerrit AI review for Lustre ldlm_netlink.c:158 — (defect) lustre_nl_put_dataset() allocates one attribute per non-zero counter (`nla_nest_start(msg, base_attr + cnt++)`), and ns_stats holds
Gerrit AI review for Lustre PS2 · 2026-07-28 10:14
(defect) lustre_nl_put_dataset() allocates one attribute per non-zero counter (`nla_nest_start(msg, base_attr + cnt++)`), and ns_stats holds three counters - LDLM_NSS_LOCKS, LDLM_NSS_LRU_PRIV_HITS, LDLM_NSS_LRU_HITS - so this can emit attribute types 11, 12 and 13.

The key table only describes 11: ldlm_list.lkl_maxattr is LUSTRE_LDLM_ATTR_MAX, and lnet_genl_parse_list() walks 1..lkl_maxattr consuming one entry of ldlm_keys[] per NLA_NESTED key, so only LUSTRE_LDLM_ATTR_LOCK_STATS gets a name and only one &stats_dataset_list is sent. Types 12 and 13 fall outside the advertised table, so everything past the first counter can't be mapped back to a key on the receiving side.

The obdclass stats path handles this by growing the table (LUSTRE_STATS_ATTR_MAX + stats->ls_num + 1 keys, with one &stats_dataset_list per counter). LDLM_NSS_LAST is fixed at 3 here, so could the table just declare LOCK_STATS, +1 and +2 and list &stats_dataset_list three times?
owner Timothy Day · uploader Timothy Day · PS3 uploaded 49d 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
65201 master J !B ✗T –R 0/2
LU-19768 target: add netlink stats
reviewing Timothy Day · awaiting review (CI not green yet)
27 unresolved XL +1641 −21
49d
janitor run: 9 failing config(s), none unique to this patch — janitor results
build #128313 FAILURE
patchsets: PS1 04-09 PS2 07-22 PS3 07-29 PS4 07-29
threads: 27 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 · PS4 uploaded 49d 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
65204 master J !B ✓T ✗1R 0/2
LU-19768 mdd: add MDD/changelog genetlink family
reviewing Timothy Day · awaiting review (CI not green yet)
13 unresolved L +551 −2
49d
janitor run: 13 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-zfs-part-1 RHEL 9.7 / x86_64 ran 3 tests. 1 tests failed: sanity. session
7 optional test failure(s) — informational
build #128314 SUCCESS · tests all Maloo sessions
patchsets: PS1 04-09 PS2 07-22 PS3 07-29
threads: 13 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre COMMIT_MSG:10 — The message says the state is exposed "via the table-driven netlink framework", but this file does not use it - there is no lustre_nl_obd_op
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
The message says the state is exposed "via the table-driven netlink framework", but this file does not use it - there is no lustre_nl_obd_ops descriptor and .start/.dumpit/.done are hand-rolled rather than routed through lustre_obd_nl_start()/lustre_obd_nl_dump()/lustre_obd_nl_done(). ldlm_netlink.c in the preceding patch does use the framework, so the wording is confusing here.

If the reason is that the framework calls ops->collect() under obd_device_lock() and collection here has to sleep in llog_cat_process(), that is worth saying explicitly in the message.
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 Makefile:15 — (style) The object list is otherwise alphabetical; kernelcomm.o reads better ahead of mdd_acl.o than between mdd_lproc.o and mdd_object.o.
Gerrit AI review for Lustre PS3 · 2026-07-30 09:42
(style) The object list is otherwise alphabetical; kernelcomm.o reads better ahead of mdd_acl.o than between mdd_lproc.o and mdd_object.o.
reply PS3 2026-07-29 21:39 Misc Code Checks Robot (Gatekeeper helper) kernelcomm.c:128 — error: changelog_nl_collect():'mdd' dereferencing possible ERR_PTR()
Misc Code Checks Robot (Gatekeeper helper) PS3 · 2026-07-29 21:39
error: changelog_nl_collect():'mdd' dereferencing possible ERR_PTR()
reply PS3 2026-07-30 09:42 Gerrit AI review for Lustre kernelcomm.c:335 — (defect) Can userspace decode more than one user per MDT here? The nested attributes are emitted at `LUSTRE_CHANGELOG_ATTR_USERS + u`, i.e.
Gerrit AI review for Lustre PS3 · 2026-07-30 09:42
(defect) Can userspace decode more than one user per MDT here? The nested attributes are emitted at `LUSTRE_CHANGELOG_ATTR_USERS + u`, i.e. 4, 5, 6 ..., but `changelog_list.lkl_maxattr` is `LUSTRE_CHANGELOG_ATTR_MAX` (4), so the key table sent by lnet_genl_send_scalar_list() only describes attributes 1..4.

lnet_genl_parse_list() emits props for `count = 1; count <= lkl_maxattr` only, and the reader side walks `for (i = 1; i < keys.lkl_maxattr; i++)` over the table it was given (liblnetconfig_netlink.c). Attribute 5 onwards has no key entry, so the second and later users of an MDT are dropped.

lustre_stats_dump() hits the same problem with `LUSTRE_STATS_ATTR_DATASET + i` and solves it by building an extended key list at dump time:

    count = LUSTRE_STATS_ATTR_MAX + stats->ls_num;
    start->lkl_maxattr += stats->ls_num - 1;
    for (i = LUSTRE_STATS_ATTR_MAX + 1; i <= start->lkl_maxattr; i++)
            start->lkl_list[i] = ...DATASET props...;

Should the changelog key table be grown the same way, sized from the largest `cne_num_users` collected?

Separately, `LUSTRE_CHANGELOG_ATTR_USERS + u` is unbounded, and nla_nest_start() ORs in NLA_F_NESTED - past 0x3fff the index runs into the nla type flag bits.
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 PS3 2026-07-30 09:42 Gerrit AI review for Lustre kernelcomm.h:6 — (style) This isn't a bug, but the header has no `#ifndef _MDD_KERNELCOMM_H`/`#define`/`#endif` guard - mdd_internal.h and every other privat
Gerrit AI review for Lustre PS3 · 2026-07-30 09:42
(style) This isn't a bug, but the header has no `#ifndef _MDD_KERNELCOMM_H`/`#define`/`#endif` guard - mdd_internal.h and every other private mdd header has one, and a second include of this file would be a redefinition error.

It is also not self-contained: `GENRADIX` comes from <linux/generic-radix-tree.h> and `MAX_OBD_NAME` from obd.h, both of which only happen to be reachable today because obd_class.h -> lustre_net.h -> lib-types.h pulls them in first.
reply PS3 2026-07-30 09:42 Gerrit AI review for Lustre mdd_internal.h:453 — (typo) There is no mdd_netlink.c - these live in kernelcomm.c.
Gerrit AI review for Lustre PS3 · 2026-07-30 09:42
(typo) There is no mdd_netlink.c - these live in kernelcomm.c.
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre mdd_netlink.c:97 — Can this loop miss devices? `obd_devs` is a DEFINE_XARRAY_ALLOC and class_unregister_device() does __xa_erase() plus atomic_dec(&obd_devs_co
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
Can this loop miss devices? `obd_devs` is a DEFINE_XARRAY_ALLOC and class_unregister_device() does __xa_erase() plus atomic_dec(&obd_devs_count), so populated indices are not guaranteed to be dense in [0, class_obd_devs_count()).

Concretely, with two MDTs on one node: MDT0's devices take indices 0..N and MDT1's take N+1..M. After `umount` of MDT0, the count drops back to roughly N but MDT1's mdd device still sits above it, so class_num2obd(i) returns NULL for every i in range and the dump reports nothing.

obd_device_for_each()/obd_device_for_each_start() (xa_for_each) is what the rest of obdclass uses for exactly this reason.
reply PS2 2026-07-28 10:07 Gerrit AI review for Lustre mdd_netlink.c:98 — class_num2obd() is a bare `xa_load(&obd_devs, dev_no)` - it takes no lock and returns no reference. Every other iteration site holds obd_dev
Gerrit AI review for Lustre PS2 · 2026-07-28 10:07
class_num2obd() is a bare `xa_load(&obd_devs, dev_no)` - it takes no lock and returns no reference. Every other iteration site holds obd_device_lock() (see class_name2obd(), lustre_obd_nl_start()@lustre/obdclass/kernelcomm.c:1320, lustre_health_dump()@:1187), and ldlm_collect() additionally does class_incref() before letting go of the lock.

Here the obd is dereferenced (obd_flags, obd_type->typ_name, obd_lu_dev, obd_name) and then handed to llog_get_context()/llog_cat_process(), which sleeps on llog I/O, with no reference held. A concurrent `lctl cleanup`/umount reaches class_free_dev() -> obd_device_free(), which is an immediate slab free with no RCU grace period, so this looks like a use-after-free rather than just a stale read.

The pattern in lustre_health_dump() applies: take obd_device_lock(), class_incref(), drop the lock, do the sleeping work, class_decref().
reply PS2 2026-07-22 21:22 Misc Code Checks Robot (Gatekeeper helper) mdd_netlink.c:127 — error: changelog_nl_collect():'mdd' dereferencing possible ERR_PTR()
Misc Code Checks Robot (Gatekeeper helper) PS2 · 2026-07-22 21:22
error: changelog_nl_collect():'mdd' dereferencing possible ERR_PTR()
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 Timothy Day · PS3 uploaded 49d 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) through genradix arrays.

TLC-bug-id: TLU-56
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I3ae11dc2a992bc5cd9911e51fec8148cfb1dcfed
67050 master J !B ✓T ✗2R 1/2
LU-20450 llog: out-of-bounds read in llog_osd_next_block()
reviewing Timothy Day · awaiting review (CI not green yet)
4 unresolved S +10 −0
50d
janitor run: 5 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-5 crashed RHEL 8.10 / x86_64 ran 5 tests. 1 tests failed: sanityn. %% THIS TEST SESSION CRASHED %% session
8 optional test failure(s) — informational
build #127211 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2026-07-04 05:36
no vote yet: Alex Zhuravlev
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-27 19:07 Gerrit AI review for Lustre COMMIT_MSG:46 — (style) The body is the KASAN splat plus this paragraph, and it never states what the bug actually is or what the patch does. Something like
Gerrit AI review for Lustre PS1 · 2026-07-27 19:07
(style) The body is the KASAN splat plus this paragraph, and it never states what the bug actually is or what the patch does. Something like: `tail_len` is read from disk and is only bounded by `chunk_size`, but `dt_read()` can return fewer than `chunk_size` bytes, so `last_rec = tail - tail_len + sizeof(*tail)` can land before `buf`.

Also, "error handling path" doesn't quite fit - the faulting computation is in the normal last-record-of-block parsing, not in error handling.
reply PS1 2026-07-27 19:07 Gerrit AI review for Lustre COMMIT_MSG:49 — (defect) This fixes a real out-of-bounds read, so it should carry a Fixes: tag. The unbounded computation dates back to the original OSD llo
Gerrit AI review for Lustre PS1 · 2026-07-27 19:07
(defect) This fixes a real out-of-bounds read, so it should carry a Fixes: tag. The unbounded computation dates back to the original OSD llog implementation, which had `last_rec = (char *)buf + rc - le32_to_cpu(tail->lrt_len)` with no bound on `lrt_len` at all:

    Fixes: 0d43b8d1b0d6 ("LU-1302 llog: llog over OSD primitives")

If you'd rather point at the current shape of the code, 8047d75a5b66 ("LU-18218 llog: catalog lgh_lock refactoring") is the commit that introduced `tail_len` and bounded it against `chunk_size` only, which is what leaves the short-read case unprotected.
reply PS1 2026-07-27 19:07 Gerrit AI review for Lustre llog_osd.c:1239 — (minor) Should this bound be `LLOG_MIN_REC_SIZE` rather than `sizeof(*last_rec)`? The rest of the llog code treats 24 bytes as the smallest
Gerrit AI review for Lustre PS1 · 2026-07-27 19:07
(minor) Should this bound be `LLOG_MIN_REC_SIZE` rather than `sizeof(*last_rec)`? The rest of the llog code treats 24 bytes as the smallest possible record footprint - `llog_verify_record()` rejects `lrh_len < LLOG_MIN_REC_SIZE`, and `llog_process_thread()` stops its loop at `buf + chunk_size - LLOG_MIN_REC_SIZE`. As written, a `tail_len` of 0..15 leaves `last_rec` pointing at something that cannot be a record but still passes.

Related: the check covers the 16-byte header, but `lustre_swab_llog_rec(last_rec)` on the next line goes well beyond it - for CHANGELOG_REC/CHANGELOG_USER_REC/UPDATE_REC it locates the record tail as `(char *)rec + rec->lrh_len - sizeof(*tail)` and swabs it, and `lrh_len` here is unvalidated on-disk data. Validating `tail_len` itself (>= LLOG_MIN_REC_SIZE, and no larger than `(char *)tail + sizeof(*tail) - (char *)buf`) would bound the whole record instead of just its header.
reply PS1 2026-07-04 05:36 Andreas Dilger llog_osd.c:1246 — Should this just go to the next llog block instead aborting processing?
Andreas Dilger PS1 · 2026-07-04 05:36
Should this just go to the next llog block instead aborting processing?
owner Timothy Day · uploader Timothy Day · PS1 uploaded 75d ago · NEW · open in Gerrit ↗
commit message
LU-20450 llog: out-of-bounds read in llog_osd_next_block()

When running llog kunit test subtest 12 on osd-wbcfs, I see
the following KASAN warning:

BUG: KASAN: slab-out-of-bounds in llog_osd_next_block+0x1368/0x3080 [obdclass]
Read of size 4 at addr ffff88811c54b036 by task lctl/1349
Call Trace:
 dump_stack_lvl+0x52/0x80
 print_address_description+0x77/0x1f0
 print_report+0x58/0x70
 ? llog_osd_next_block+0x1368/0x3080 [obdclass]
 kasan_report+0xa2/0xd0
 ? llog_osd_next_block+0x1368/0x3080 [obdclass]
 llog_osd_next_block+0x1368/0x3080 [obdclass]
 llog_process_thread+0xdd7/0x4f70 [obdclass]
 ? entry_SYSCALL_64_after_hwframe+0x4b/0x53
 ? task_work_add+0x177/0x210
 llog_process_or_fork+0x656/0xc90 [obdclass]
 ? llog_cat_process+0x30/0x30 [obdclass]
 llog_cat_process_or_fork+0x780/0xdb0 [obdclass]
 ? llog_cat_process+0x30/0x30 [obdclass]
 ? llog_cancel_rec_cb+0x450/0x450 [llog_test]
 llog_cat_process+0x24/0x30 [obdclass]
 llog_test_12+0x13ee/0x2d90 [llog_test]
 llog_run_tests+0x443a/0x5ad0 [llog_test]
 ? get_random_u32+0x51/0x470
 llog_test_device_init+0x6e8/0xa20 [llog_test]
 obd_setup+0x54d/0x950 [obdclass]
 class_setup+0xc7d/0x10e0 [obdclass]
 class_process_config+0x2edb/0x7cb0 [obdclass]
 class_handle_ioctl+0x1f4d/0x3440 [obdclass]
 obd_class_ioctl+0x1f6/0x3c0 [obdclass]
 __x64_sys_ioctl+0x961/0xe00
 ? _copy_to_user+0x3d/0x60
 ? __x64_sys_rt_sigaction+0x107/0x140
 do_syscall_64+0xcf/0x3a0
 entry_SYSCALL_64_after_hwframe+0x4b/0x53

While this is likely due to a gap in the osd-wbcfs implementation,
this appears to surface a real bug in the error handling path
in the llog code.

Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I00fdd7395ee32634b59a3b630b4807ff7830a987
58637 master J !B ✓T ✗1R 0/2
LU-18813 osd-wbcfs: store and pin OST objects in MemFS
reviewing Qian Yingjin · awaiting review (CI not green yet)
8 unresolved L +557 −5
51d
janitor run: 4 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 #127210 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Timothy Day
patchsets:
+5 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
threads: 8 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 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 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.
owner Qian Yingjin · uploader Timothy Day · PS10 uploaded 75d 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 ✗1R 0/2
LU-17848 osd: deduplicate osd_map_remote_to_local()
reviewing Timothy Day · awaiting review (CI not green yet)
osd-mem 6 unresolved M +55 −87
51d
janitor run: 4 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 #127209 SUCCESS · tests all Maloo sessions
no vote yet: Qian Yingjin, Andreas Dilger, Alex Zhuravlev
patchsets:
+3 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
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
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 · PS8 uploaded 75d 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
65197 master J ✗40B ✓T ✗11R 0/2
LU-20108 sec: updates for in-kernel crypto
reviewing Shaun Tancheff · awaiting review (CI not green yet)
40 unique failures 11 unresolved L +424 −28
51d
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 79d 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 · awaiting review (CI not green yet)
8 unresolved S +19 −3
51d
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 61d 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 · awaiting review (CI not green yet)
S +18 −12
51d
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 1198d 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 0/2−
LU-20461 acl: Add a prefix for posix_acl_to_xattr
reviewing Yang Sheng · awaiting review (CI not green yet)
1 unique failure 4 unresolved S +11 −10
51d
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 71d 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
66738 master J ✗4B ✓T ✗3R 0/2−
LU-20412 ksocklnd: move lib-socket and acceptor to the LND
reviewing Timothy Day · awaiting review (CI not green yet)
4 unique failures 2 unresolved L +248 −298
55d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
recovery-small@zfs:test_115bseen in 23 other reviews
recovery-small@zfs:test_120seen in 14 other reviews
sanity-lnet@zfs:test_290NEW 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_291seen in 1 other review
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 5 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs-dne RHEL 9.7 / x86_64 ran 5 tests. 2 tests failed: sanity-lnet, sanity. session
review-ldiskfs-dne-arm RHEL 8.10 / x86_64, Rocky 9.5 / aarch64 ran 5 tests. 2 tests failed: sanity-lnet, sanity. session
1 optional test failure(s) — informational
build #126724 SUCCESS · tests all Maloo sessions
reviews: Chris Horn -1 2026-06-22 14:20
no vote yet: Jinshan Xiong
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
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
owner Timothy Day · uploader Timothy Day · PS1 uploaded 90d 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
63307 master J ✓B ✓T ✗1R 0/2−
LU-19769 lnet: simplify lnet_net_show_dump
reviewing Oleg Drokin · awaiting review (CI not green yet)
3 unresolved L +354 −229
68d
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 249d 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>
54552 master J !B ✓T ✗2R 0/2
LU-17671 libcfs: track each OBD_ALLOC()
reviewing Alex Zhuravlev · awaiting review (CI not green yet)
M +188 −13
80d
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
9 optional test failure(s) — informational
build #127045 SUCCESS · tests all Maloo sessions
no vote yet: Neil Brown, Timothy Day
patchsets:
+38 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
owner Alex Zhuravlev · uploader Alex Zhuravlev · PS43 uploaded 81d 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
46326 master J !B ✓T ✗1R 0/2−
LU-15485 lprocfs: preallocate all lprocfs_stats
reviewing Chris Horn · awaiting review (CI not green yet)
XS +4 −2
86d
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 1689d 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 0/2−
LU-19410 utils: lnetdump
reviewing Timothy Day · awaiting review (CI not green yet)
1 unresolved XL +2630 −7
86d
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 348d 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 0/2−
LU-16897 lnet: sparse read optimization (SRO)
reviewing Cyril Bordage · awaiting review (CI not green yet)
12 unresolved XL +1107 −79
87d
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 159d 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 1/2−
LU-16246 osd-ldiskfs: ensure r/w ordering of do_index_ops
reviewing liuqinfei · awaiting review (CI not green yet)
1 unresolved S +25 −0
93d
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 230d 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 · awaiting review (CI not green yet)
stalled 110d XS +1 −1
110d
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 112d 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 0/2−
LU-18318 lnet: Add lnet routing between IPv6 tcp and o2ib
reviewing Xinxia Qu · awaiting review (CI not green yet)
stalled 111d 7 unresolved L +288 −70
111d
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 242d 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 · awaiting review (CI not green yet)
28 unique failures stalled 117d XS +0 −1
117d
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 329d 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 · awaiting review (CI not green yet)
stalled 148d S +11 −1
148d
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 3717d 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 1/2−
LU-15069 llite: Clean up bit shift for assert
reviewing Patrick Farrell · awaiting review (CI not green yet)
stalled 151d S +6 −7
151d
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 1716d 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 0/2−
LU-8330 wiretest: Add IOCTL checking to wiretest
reviewing Nathaniel Clark · awaiting review (CI not green yet)
stalled 163d XL +765 −322
163d
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 2730d 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>
64705 master J ✗5B ✓T ✗6R 0/2−
LU-19412 libcfs: DNS multi-address name resolution
reviewing Louis-Marie Nicolas · awaiting review (CI not green yet)
5 unique failures stalled 168d 7 unresolved L +328 −41
168d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
conf-sanity4@ldiskfs+DNE:test_153bseen in 1 other review
conf-sanity4@ldiskfs+DNE:test_161bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity4@ldiskfs+DNE:test_162NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity4@zfs:test_161bNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
conf-sanity4@zfs:test_162NEW 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 3 tests. 1 tests failed: conf-sanity. 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.5 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-part-3 RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
review-dne-zfs-subtest-change RHEL 8.10 / x86_64 ran 3 tests. 1 tests failed: conf-sanity. session
6 optional test failure(s) — informational
build #122732 SUCCESS · tests all Maloo sessions
no vote yet: Etienne AUJAMES
patchsets: PS1 03-19 PS2 03-19 Janitor Bot
threads: 7 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-03-25 11:41 Andreas Dilger COMMIT_MSG:18 — (typo) "libcfs"
Andreas Dilger PS2 · 2026-03-25 11:41
(typo) "libcfs"
reply PS2 2026-04-01 23:30 Andreas Dilger nidstrings.c:251 — (style) align continued lines after first '(' on previous line, so that the conditionals are visually separated from the code
Andreas Dilger PS2 · 2026-04-01 23:30
(style) align continued lines after first '(' on previous line, so that the conditionals are visually separated from the code
reply PS2 2026-04-01 23:30 Andreas Dilger nidstrings.c:252 — (style) checks should be packed on as few lines as possible
Andreas Dilger PS2 · 2026-04-01 23:30
(style) checks should be packed on as few lines as possible
reply PS2 2026-03-25 11:41 Andreas Dilger conf-sanity.sh:12328 — (minor) please rename this subtest like `test_161a() # was test_161`, otherwise "test_161" and "test_161b" cannot be run independently of ea
Andreas Dilger PS2 · 2026-03-25 11:41
(minor) please rename this subtest like `test_161a() # was test_161`, otherwise "test_161" and "test_161b" cannot be run independently of each other.
reply PS2 2026-03-25 11:41 Andreas Dilger conf-sanity.sh:12408 — It would be useful if this tested 8 or 16 NIDs, which is common in production systems (4 failover hosts, 2 or 4 NIDs each)
Andreas Dilger PS2 · 2026-03-25 11:41
It would be useful if this tested 8 or 16 NIDs, which is common in production systems (4 failover hosts, 2 or 4 NIDs each)
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 PS2 2026-04-01 23:30 Andreas Dilger conf-sanity.sh:12428 — It would also be useful to confirm that mounting with `mgsname@nettype:/fsname` results in `mgsname` automatically being shown in the `/proc
Andreas Dilger PS2 · 2026-04-01 23:30
It would also be useful to confirm that mounting with `mgsname@nettype:/fsname` results in `mgsname` automatically being shown in the `/proc/mounts` output in the multi-DNS case.  That was added in patch https://review.whamcloud.com/59934 ("LU-16738 utils: add mgsname mount option for custom hostname display"), and _should_ allow `mount` and `df` to list the symbolic hostname for the MGS instead of a list of NIDs, which make the output much cleaner and easier to understand.
owner Louis-Marie Nicolas · uploader Janitor Bot · PS2 uploaded 182d ago · NEW · open in Gerrit ↗
commit message
LU-19412 libcfs: DNS multi-address name resolution

When mount.lustre is doing DNS name resolution (e.g. "mount -t lustre
mgsnode@tcp:/testfs /mnt/testfs") the mgsnode hostname is looked up
via DNS (or other service) and may return multiple NIDs to the caller.

However, mount.lustre only uses the first IP address returned.
It would be useful to use all of the NIDs returned from the DNS
hostname lookup to locate the MGS, as if they were all listed on the
command-line.

To do so, we added a new function lbcfs_strnids alongside the old
libcfs_strnid in nidstr.h

    int libcfs_strnid(struct lnet_nid *nid, const char *str);
    int libcfs_strnids(struct lnet_nid *nids, int alen, int *nr,
				int *nf, const char *str);

The new libcfs_strnids function makes use of the addition of two new
function pointers to netstrfns:

    int	(*nf_str2addrs)(const char *str, int nob, __u32 *addrs,
				int alen, int *nr, int *nf);
    int	(*nf_str2addrs_size)(const char *str, int nob,
				__be32 *addrs, size_t *addr_size,
				size_t asize, int *nr, int *nf);

For an illustration of the result, see the following example:

> getent ahostsv4 rocky9
192.168.105.20  STREAM rocky9
192.168.105.20  DGRAM
192.168.105.20  RAW
192.168.105.30  STREAM
192.168.105.30  DGRAM
192.168.105.30  RAW
> mount -t lustre rocky9@tcp:/lustre /mnt/lustre
> lctl get_param mgc.MGC192.168.105.20@tcp.import
mgc.MGC192.168.105.20@tcp.import=
import:
    name: MGC192.168.105.20@tcp
    target: MGS
    state: FULL
    connect_flags: [ version, mgs_nidlist, barrier,
adaptive_timeouts, full20, imp_recov, bulk_mbits, second_flags,
reply_mbits, large_nid ]
    connect_data:
       flags: 0xa000011001002060
       instance: 0
       target_version: 2.17.50.192
    import_flags: [ pingable, connect_tried ]
    connection:
       failover_nids: [ "0@lo", "192.168.105.30@tcp" ]
       nids_stats:
          "0@lo": { connects: 1, replied: 1, uptodate: uptodate,
sec_ago: 29146 }
          "192.168.105.30@tcp": { connects: 0, replied: 0,
uptodate: unknown, sec_ago: never }
       current_connection: "0@lo"
       connection_attempts: 1
       generation: 1
       in-progress_invalidations: 0
       idle: 3 sec

Test-Parameters: testlist=conf-sanity env=ONLY=161b,ONLY_REPEAT=20
Signed-off-by: Louis-Marie Nicolas <lnicolas@ddn.com>
Change-Id: Icf09a7bcf4b4eae399525c01a31f710d04bd2015
64263 master J !B ✗T –R 0/2−
LU-19938 lnet: CONFIG_MEM_ALLOC_PROFILING support
reviewing Timothy Day · awaiting review (CI not green yet)
stalled 198d S +11 −5
198d
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 202d 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
59272 master J !B ✓T ✗2R 0/2−
LU-19025 ldlm: ldlm_completion_ast() may never timeout
reviewing Timothy Day · awaiting review (CI not green yet)
stalled 202d 4 unresolved M +50 −27
202d
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 476d 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 0/2−
LU-18741 lnet: Alternative Names Policy interface names
reviewing Frank Sehr · awaiting review (CI not green yet)
4 unique failures stalled 289d L +428 −36
289d
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 370d 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 0/2−
LU-19223 shrinkers: Add nr_scanned to all shrinkers
reviewing Patrick Farrell · awaiting review (CI not green yet)
stalled 324d M +36 −15
324d
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 410d 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 · awaiting review (CI not green yet)
4 unique failures stalled 327d S +32 −10
327d
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 329d 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 · awaiting review (CI not green yet)
stalled 351d XL +861 −923
351d
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 2740d 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 · awaiting review (CI not green yet)
5 unique failures stalled 365d M +94 −141
365d
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 819d 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 0/2−
LU-1158 general: support nanosecond timestamps
reviewing Feng Lei · awaiting review (CI not green yet)
stalled 401d 12 unresolved XL +1749 −1110
401d
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 419d 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 · awaiting review (CI not green yet)
stalled 408d 1 unresolved M +151 −76
408d
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 756d 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 1/2−
LU-18615 mdt: setup protocal for super hide
reviewing Zanhua Huang · awaiting review (CI not green yet)
stalled 408d 1 unresolved S +20 −2
408d
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 612d 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 1/2−
LU-4801 ldlm: Do not call ldlm_reprocess_all from enqueue
reviewing Oleg Drokin · awaiting review (CI not green yet)
stalled 408d XS +1 −5
408d
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 4440d 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 0/2−
LU-6657 mgs: eviction notifier
reviewing Hiroya Nozaki · awaiting review (CI not green yet)
stalled 408d L +459 −39
408d
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 4129d 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 1/2−
LU-7722 build: add --no-initramfs to weak-modules
reviewing Li Xi · awaiting review (CI not green yet)
stalled 408d M +58 −13
408d
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 3885d 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 · awaiting review (CI not green yet)
stalled 408d M +52 −0
408d
no vote yet: Oleg Drokin
owner Gu Zheng · uploader Gu Zheng · PS1 uploaded 3776d 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 0/2−
LU-8192 nodemap: modify lctl to allow non-contiguous nm ranges
reviewing Kit Westneat · awaiting review (CI not green yet)
stalled 408d L +313 −263
408d
reviews: Andreas Dilger -1 2017-04-03 16:56
no vote yet: Sebastien Buisson
owner Kit Westneat · uploader Kit Westneat · PS1 uploaded 3461d 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 · awaiting review (CI not green yet)
stalled 408d M +93 −13
408d
reviews: Amir Shehata +1 2018-01-08 20:06
no vote yet: Sonia Sharma
owner Olaf Weber · uploader Olaf Weber · PS2 uploaded 3173d 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 · awaiting review (CI not green yet)
stalled 408d L +163 −169
408d
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 2785d 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 · awaiting review (CI not green yet)
stalled 408d S +43 −1
408d
build #521 SUCCESS
no vote yet: Patrick Farrell, Andreas Dilger
owner Jinshan Xiong · uploader Jinshan Xiong · PS3 uploaded 2932d 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 408d S +30 −13
408d
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 2847d 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 · awaiting review (CI not green yet)
stalled 408d XS +0 −2
408d
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 2662d 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 · awaiting review (CI not green yet)
1 unique failure stalled 408d L +351 −30
408d
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 2038d 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 0/2−
LU-12421 lfs: fix ladvise range
reviewing Patrick Farrell · awaiting review (CI not green yet)
stalled 408d M +162 −24
408d
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 2623d 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
35441 master J !B ✓T ✗1R 0/2
LU-0000 test: testing LST on el8
reviewing Minh Diep · awaiting review (CI not green yet)
stalled 408d S +12 −2
408d
failed enforced testplatformdetail
custom-101 CentOS 7.0/x86_64, RHEL 8.0/x86_64 ran 3 tests. 1 tests failed: lnet-selftest. session
build #66681 SUCCESS
no vote yet: Amir Shehata, Andreas Dilger
owner Minh Diep · uploader Amir Shehata · PS3 uploaded 2619d ago · NEW · open in Gerrit ↗
commit message
LU-0000 test: testing LST on el8

Test potential fix

Test-Parameters: fortestonly testlist=lnet-selftest clientdistro=el8 serverdistro=el7.6

Change-Id: I346145d22e8268e5dc6f580ac0f8cf479093101c
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
36229 master J !B ✗T –R 0/2
LU-12782 llite: Convert attr lock to rwlock
reviewing Patrick Farrell · awaiting review (CI not green yet)
stalled 408d L +146 −109
408d
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 1186d 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 0/2−
LU-10968 hsm: encapsulate copyaction_private
reviewing Ben Evans · awaiting review (CI not green yet)
stalled 408d L +531 −200
408d
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 2388d 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 · awaiting review (CI not green yet)
34 unique failures stalled 408d L +463 −22
408d
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 2307d 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 1/2−
LU-12991 lnet: remove rspt zombie list
reviewing Amir Shehata · awaiting review (CI not green yet)
2 unique failures stalled 408d M +65 −132
408d
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 2434d 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 · awaiting review (CI not green yet)
2 unique failures stalled 408d S +9 −1
408d
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 2387d 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 · awaiting review (CI not green yet)
1 unique failure stalled 408d M +39 −38
408d
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 2297d 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 · awaiting review (CI not green yet)
stalled 408d XL +1477 −7
408d
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 1758d 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 · awaiting review (CI not green yet)
2 unique failures stalled 408d L +614 −65
408d
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 662d 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 0/2−
LU-13638 ptlrpc: addition change for callback discard
reviewing Yang Sheng · awaiting review (CI not green yet)
stalled 408d S +15 −9
408d
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 2017d 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 408d XS +1 −0
408d
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 1507d 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 0/2−
LU-16663 tests: add yaml testing wrappers for utils
reviewing Timothy Day · awaiting review (CI not green yet)
stalled 409d 1 unresolved S +33 −9
409d
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 1273d 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 · awaiting review (CI not green yet)
stalled 409d M +43 −26
409d
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 1045d 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 0/2−
LU-17327 tests: add test case for online MDT/OST addition
reviewing Jian Yu · awaiting review (CI not green yet)
2 unique failures stalled 409d M +189 −5
409d
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 894d 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 0/2−
LU-17391 rust: simple OBD API bindings
reviewing Timothy Day · awaiting review (CI not green yet)
stalled 409d L +350 −1
409d
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 988d 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 0/2−
LU-4801 ldlm: use mutex for resource locks for flock resources
reviewing Oleg Drokin · awaiting review (CI not green yet)
2 unique failures stalled 409d S +22 −7
409d
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 2528d 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 0/2−
LU-13108 lustre: Improve ptlrpc_async_args union
reviewing Arshad Hussain · awaiting review (CI not green yet)
stalled 415d S +20 −2
415d
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 2448d 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
51271 master J !B ✓T ✗5R 1/2−
LU-4959 parser: make help work like git
reviewing Timothy Day · awaiting review (CI not green yet)
stalled 415d 3 unresolved M +111 −1
415d
janitor run: 1 failing config(s), none unique to this patch — janitor results
failed enforced testplatformdetail
review-dne-part-1 RHEL 9.3/x86_64 ran 4 tests. 1 tests failed: sanity. session
review-dne-selinux-ssk-part-1 RHEL 8.9/x86_64 ran 3 tests. 1 tests failed: sanity. session
review-ldiskfs RHEL 8.9/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, RHEL 9.3/x86_64 ran 5 tests. 1 tests failed: sanity. session
3 optional test failure(s) — informational
build #104745 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-05-13 04:20 · Timothy Day -1 2025-04-06 17:01
no vote yet: Patrick Farrell
patchsets:
+3 earlier PS1 06-11 PS2 06-11 PS3 06-11
PS4 06-12 PS5 10-08 PS6 11-21 PS7 12-09 PS8 05-13
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS5 2023-11-21 16:20 Timothy Day parser.c:561 — It works. For example:
Andreas Dilger PS5 · 2023-10-09 10:37
Is the LUSTRE environment variable also inherited by the system() command that is run?  At first I was thinking "you can't just use '$LUSTRE' in the string!" but since the system command is executed by the shell it should work OK?

Alternately, since this is already calling getenv() it could save the returned pointer and print it into the cmd string directly.
Timothy Day PS5 · 2023-11-21 16:20
It works. For example:

 [centos@ip-172-31-20-187 lustre-release]$ LUSTRE=fizzbuzz ./lustre/utils/lfs help migrate
 man: fizzbuzz/doc/lfs-migrate.*: No such file or directory
 No manual entry for fizzbuzz/doc/lfs-migrate.*

You can do the same thing in python, which is super helpful for integrating with shell scripts.
reply PS5 2023-11-21 16:20 Timothy Day parser.c:626 — This code is only invoked when you run the `help` command, so it shouldn't interfere with shell completion.
Andreas Dilger PS5 · 2023-10-09 10:37
Does this interfere with tab completion of commands?
Timothy Day PS5 · 2023-11-21 16:20
This code is only invoked when you run the `help` command, so it shouldn't interfere with shell completion.
reply PS8 2025-04-06 17:01 Timothy Day parser.c:558 — This block doesn't seem to work, causing sanity.sh to fail. Even locally, this seems wrong. Also, this will need to be updated once the man
Timothy Day PS8 · 2025-04-06 17:01
This block doesn't seem to work, causing sanity.sh to fail. Even locally, this seems wrong. Also, this will need to be updated once the man pages are relocated.
owner Timothy Day · uploader Timothy Day · PS8 uploaded 857d ago · NEW · open in Gerrit ↗
commit message
LU-4959 parser: make help work like git

The git help subcommand displays the man page for
the given subcommand. Currently, the Lustre tools
(lfs, lctl, lnetctl, lst) that use the parser in
libcfs only return a small help text.

This patch changes the parser to first make an
attempt to display a related man page before
falling back to the old help text.

The implementation is inspired by git, but differs
in a few ways. It is best-effort, it assumes that
the user has 'man' available, and has some Lustre
specific parsing.

Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I912e7c7e8439a822da0fb2e82f160adb9eaac589
53487 master J –B ✗T ✗3R 0/2
LU-17373 tests: Improve do_nodes() to use no_dsh for local nodes
reviewing Arshad Hussain · awaiting review (CI not green yet)
stalled 415d M +58 −6
415d
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 987d 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 · awaiting review (CI not green yet)
stalled 415d 1 unresolved XS +1 −1
415d
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 770d 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 · awaiting review (CI not green yet)
3 unique failures stalled 415d S +22 −0
415d
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 727d 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
54499 master J –B ✓T ✗1R 0/2
LU-10499 pcc: add lctl pcc abort command to abort attaches
reviewing Qian Yingjin · awaiting review (CI not green yet)
stalled 628d L +275 −37
628d
failed enforced testplatformdetail
review-dne-zfs-part-7 failed 2× RHEL 8.9/x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
6 optional test failure(s) — informational
build #107948 SUCCESS · tests all Maloo sessions
no vote yet: Andreas Dilger, Feng Lei
patchsets: PS1 03-21 PS2 09-26 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: add lctl pcc abort command to abort attaches

This patch adds a new PCC command "lctl pcc abort [--wait|-w]
[--detach|-d] <$LUSTRE_MNTPT> [$PCCROOT]".
--wait|-w: wait all in-flight attaches aborted.
--detach|-d: detach the PCC copies when scan the PCC backend.

It can be used to abort in-progress attaches for a given PCC
backend. It does not remove the PCC backend from a client.

Add sanity-pcc/test_109 to verify it.

EX-bug-id: EX-8971
Change-Id: Ib7152f7418aa1beb840919e98bf8de53c99b5c54
Signed-off-by: Qian Yingjin <qian@ddn.com>
54489 master J –B ✓T ✗1R 1/2
LU-10499 pcc: parallel data copy for attach
reviewing Qian Yingjin · awaiting review (CI not green yet)
stalled 628d L +283 −76
628d
failed enforced testplatformdetail
review-dne-zfs-part-7 RHEL 8.9/x86_64 ran 4 tests. 1 tests failed: sanity-pcc. session
4 optional test failure(s) — informational
build #107942 SUCCESS · tests all Maloo sessions
reviews: Andreas Dilger +1 2024-12-28 16:01
no vote yet: Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
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.

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.

EX-bug-id: EX-7585
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: Iffbb3892cfb5b2e71afe15d03f9aec9c84975092
41747 master J ✗5B ✓T ✗4R 0/2
LU-14041 lnet: display CPT timing from lnetctl
reviewing Cyril Bordage · awaiting review (CI not green yet)
5 unique failures stalled 1559d L +333 −1
1559d
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 1559d 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 · awaiting review (CI not green yet)
4 unique failures stalled 1587d L +692 −4
1587d
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 2289d 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 · awaiting review (CI not green yet)
82 unique failures stalled 1741d XS +1 −1
1741d
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 1959d 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 1825d XL +719 −384
1825d
build #81637 SUCCESS
no vote yet: Amir Shehata
owner Serguei Smirnov · uploader Amir Shehata · PS46 uploaded 1904d 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 · awaiting review (CI not green yet)
6 unique failures stalled 2036d L +390 −7
2036d
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 retesting 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 2038d 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 0/2−
LU-12890 hsm: perform mirror sync through HSM
reviewing Ben Evans · awaiting review (CI not green yet)
stalled 2292d L +503 −189
2292d
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 2519d 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 2418d L +714 −68
2418d
build #11636 SUCCESS
no vote yet: Neil Brown, Patrick Farrell, Sebastien Buisson, Andreas Dilger
owner Anna Fuchs · uploader Anna Fuchs · PS6 uploaded 2420d 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 2423d M +130 −0
2423d
build #11531 SUCCESS
no vote yet: Patrick Farrell, Neil Brown, Andreas Dilger, Sebastien Buisson
owner Anna Fuchs · uploader Anna Fuchs · PS4 uploaded 2423d 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 · awaiting review (CI not green yet)
stalled 2435d L +712 −110
2435d
build #11214 FAILURE
no vote yet: Patrick Farrell, Sebastien Buisson, Andreas Dilger, Neil Brown
owner Anna Fuchs · uploader Anna Fuchs · PS2 uploaded 2435d 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 2729d XL +1095 −0
2729d
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 2729d 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 · awaiting review (CI not green yet)
stalled 3703d S +10 −6
3703d
reviews: Bob Glossman +1 2016-07-27 13:07
no vote yet: Oleg Drokin
owner Yang Sheng · uploader Yang Sheng · PS7 uploaded 3704d 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

(95)
57776 master J ✗2B ✓T ✓R 3/2−
LU-10026 lustre: add lz4 and lz4hc kernel modules
reviewing Artem Blagodarenko · you voted +1 on current PS
csdc 5 unresolved XL +4422 −2
1h
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 122d 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
58613 master J –B ✓T ✓R 0/2−
LU-18876 build: copy-builtin
reviewing Timothy Day · you voted -1 on current PS
copy-builtin 37 unresolved L +760 −54
1d
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: 9 need your reply · 17 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 5d 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
67923 master J ✗2B ✓T ✓R 2/2
LU-16518 llite: fix -Wunused-but-set-variable warning
reviewing Timothy Day · you voted +1 on current PS
XS +2 −5
1d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity2@ldiskfs+DNE:test_160gseen in 3 other reviews
sanity-slow@ldiskfs+DNE:test_255cseen in 4 other reviews
build #130073 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-24 17:40 · Arshad Hussain +1 2026-09-14 11:00
no vote yet: Jinshan Xiong, Andreas Dilger, Oleg Drokin, Minh
patchsets: PS1 08-11 PS2 08-24 Oleg Drokin
your previous vote: +1 on PS1 (2026-08-13 19:56) — now at PS2
owner Timothy Day · uploader Oleg Drokin · PS2 uploaded 24d ago · NEW · open in Gerrit ↗
commit message
LU-16518 llite: fix -Wunused-but-set-variable warning

In ll_lookup_it(), lsi is only used in the CONFIG_LL_ENCRYPTION
branch, so it is set but unused otherwise. Drop the local and
dereference s2lsi() at the point of use, mirroring the
HAVE_LUSTRE_CRYPTO branch below it.

Test-Parameters: trivial
Fixes: 09c558d16f0a ("LU-14677 sec: migrate/extend/split on encrypted file")
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I6dfc06abb0bafd1f9a63063e8564a2426a6a6964
67978 master J ✓B ✓T ✓R 3/2
LU-20411 lnet: fix unlock without lock in drop_rule_match
reviewing Timothy Day · you voted +1 on current PS
XS +1 −0
1d
build #131422 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-09 17:09 · Serguei Smirnov +1 2026-09-15 22:22 · Chris Horn +1 2026-09-11 17:07
patchsets: PS1 08-13 PS2 09-09
owner Timothy Day · uploader Timothy Day · PS2 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-20411 lnet: fix unlock without lock in drop_rule_match

The da_drop_all path jumps to drop_matched without taking dr_lock,
but that path updates rule->dr_stat and unconditionally releases
dr_lock afterwards. Take the lock before the goto.

Found by CONFIG_WARN_CONTEXT_ANALYSIS.

Test-Parameters: trivial
Fixes: deb31c2ffa ("LU-11470 lnet: drop all rule")
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ia13f219c31a8a9cfb469c69635d1c62a6a6a6964
67438 master J !B ✓T –R 2/2
LU-20501 osd-zfs: fix stale FID on generated ".." entries
reviewing Oleg Drokin · you voted +1 on current PS
5 unresolved M +138 −2
3d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #131078 SUCCESS
reviews: James Simmons +1 2026-09-14 15:31 · Andreas Dilger +1 2026-09-14 15:08
no vote yet: Alex Zhuravlev
patchsets:
+2 earlier PS1 07-22 PS2 08-03
PS3 08-03 PS4 08-04 PS5 08-05 PS6 08-06 PS7 09-04
your previous vote: +1 on PS1 (2026-07-22 18:14) — now at PS7
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-09-14 15:08 Andreas Dilger COMMIT_MSG:85 — It wouldn't be bad to make osd-ldiskfs report a consistent value as well.
Gerrit AI review for Lustre PS6 · 2026-08-07 11:15
(minor) Same underlying point as above: osd-ldiskfs does not agree between the two paths either. osd_ea_lookup_rec() has no equivalent of filldir's local-root substitution, so it falls through to osd_ea_fid_get() and answers the OSD root, while the iterator answers /ROOT itself.
Andreas Dilger PS6 · 2026-09-14 15:08
Done
Andreas Dilger PS6 · 2026-09-14 15:08
It wouldn't be bad to make osd-ldiskfs report a consistent value as well.
reply PS7 2026-09-14 15:08 Andreas Dilger COMMIT_MSG:126 — This whole paragraph about the version check is unnecessary.
Andreas Dilger PS7 · 2026-09-14 15:08
This whole paragraph about the version check is unnecessary.
reply PS7 2026-09-14 15:08 Andreas Dilger COMMIT_MSG:131 — If test_102 fails regularly without this patch, do we need a new test case for it?
Andreas Dilger PS7 · 2026-09-14 15:08
If test_102 fails regularly without this patch, do we need a new test case for it?
reply PS7 2026-09-14 15:08 Andreas Dilger dirent_ino.c:13 — Wouldn't `ls -li` work just as well?
Andreas Dilger PS7 · 2026-09-14 15:08
Wouldn't `ls -li` work just as well?
reply PS7 2026-09-14 15:08 Andreas Dilger sanity.sh:38065 — Would it be better to make this value consistent between ZFS and ldiskfs (and WBC) rather than fixing the stale value but leaving it returni
Andreas Dilger PS7 · 2026-09-14 15:08
Would it be better to make this value consistent between ZFS and ldiskfs (and WBC) rather than fixing the stale value but leaving it returning a different value?
reply PS7 2026-09-14 15:08 Andreas Dilger sanity.sh:38071 — (style) this can use the bash built-in enumeration `{1..10}` instead of calling an external function
Andreas Dilger PS7 · 2026-09-14 15:08
(style) this can use the bash built-in enumeration `{1..10}` instead of calling an external function
owner Oleg Drokin · uploader Oleg Drokin · PS7 uploaded 12d ago · NEW · open in Gerrit ↗
commit message
LU-20501 osd-zfs: fix stale FID on generated ".." entries

ZFS does not store "." and ".." on disk, so osd-zfs generates them in
osd_dir_it_rec() and gets the ".." FID from osd_find_parent_fid(): from
the directory's linkEA, or failing that from the FID of the dnode named
by SA_ZPL_PARENT.  For the objects created directly under the OSD root
neither works.  They have no linkEA, and their SA_ZPL_PARENT does not
name the OSD root even though osd_dir_insert() writes it there when it
adds "..": osd_object_create() leaves oo_parent at the OI ZAP that
indexes the object when the creation hint carries no parent, and the
late SA init replaces the whole attribute set, oo_parent included, at
the end of the same transaction.  The OI ZAP carries no LMA, so
osd_get_fid_by_oid() returns -ENOENT for it.  On a freshly formatted MDT
here the ROOT directory is dnode 525, its SA_ZPL_PARENT is 24 (an oi.N
ZAP), and the OSD root is dnode 34.

That branch only skipped setting LUDA_FID and left lde_fid untouched, so
".." kept whatever the recycled dirent page happened to contain.
Instrumenting the value showed it varying between the correct FID, zero,
wild values such as [0xfcaae7467e00fcaa:0xc834a400:0x450008], and real
FIDs of unrelated objects.  That is how LU-20501 handed ll_get_name() a
".." entry whose FID matched the child being looked up.

Report the OSD root.  It is the real parent -- ROOT and update_log_dir
are entries in its ZAP -- and it is what osd-ldiskfs answers for the same
objects through dt_lookup(), where osd_ea_lookup_rec() falls through to
osd_iget_fid() and that maps the LMA-less root inode to
lu_local_obj_fid(OSD_FS_ROOT_OID).  That FID is in FID_SEQ_LOCAL_FILE, so
lfsck_find_mdt_idx_by_fid() always resolves it to the local target and
the LFSCK takes the idx == lfsck_dev_idx() path, where ".." is a no-op.

osd-ldiskfs does not give one answer here, so there is no single
behaviour to match: its iterator disagrees with its own lookup.
do_osd_ldiskfs_filldir() substitutes the directory's own FID whenever a
dirent points at the ldiskfs superblock root, so through readdir /ROOT's
".." reads back as /ROOT itself, and osd_ea_fid_get() is never reached
for it.  A client therefore sees a different ".." inode number at the
mount root on zfs than on ldiskfs.  That divergence is accepted: the OSD
root is where these objects actually live, and both values are local, so
the LFSCK behaves identically either way.

osd_dir_lookup() is left alone, so on zfs dt_lookup(dir, "..") still
answers -ENODATA for these objects while the iterator now answers.  No
current consumer hits that: mdd_is_parent() short-circuits on
mdd_is_root(), and the LFSCK's dt_lookup_dir(child, dotdot) tolerates
-ENODATA.  Making the lookup answer would feed the LFSCK a parent FID
where it currently gets nothing, which wants its own patch and its own
validation.

Tracing every -ENOENT through a full sanity-lfsck run on a 2-MDT DNE
filesystem finds exactly three objects reaching this branch, all direct
children of the OSD root:

  lustre-MDT0000  [0x200000007:0x1:0x0]  FID_SEQ_ROOT, the fs root
  lustre-MDT0000  [0x20000000a:0x0:0x0]  FID_SEQ_UPDATE_LOG_DIR
  lustre-MDT0001  [0x20000000a:0x1:0x0]  FID_SEQ_UPDATE_LOG_DIR

.lustre/fid reaches it too, but only through a client readdir: the LFSCK
never opens it, since FID_SEQ_DOT_LUSTRE is below FID_SEQ_NORMAL and
lfsck_master_oit_engine() drops objects that are neither norm nor igif.

Gate that answer on the iterated object's own FID, not on the parent
dnode: SA_ZPL_PARENT does not name the OSD root for these objects, it
names the OI ZAP that indexes them, so testing the dnode against
osd->od_root never matches.  osd_find_parent_fid() returns -ENOENT for
any object whose linkEA is unreadable and whose SA_ZPL_PARENT names an
LMA-less dnode, which also covers DNE remote directories and striped
shards; the OSD root is not their parent, so only ROOT and
update_log_dir take that arm.

Everything else reaching this branch reports the object itself.  That is
not a claim about the parent; it is the value that leaks nothing, asserts
nothing false, and stays local, so lfsck_find_mdt_idx_by_fid() resolves
to this target and the LFSCK dotdot check is a no-op.  It is marked
LUDA_UNKNOWN to document that, the same way the sibling
osd_get_fid_by_oid() failure below is marked.  The flag is documentation
only: readdir does not gate on it -- ll_dir_read() builds the d_ino from
lde_fid whatever the flags say, and mdd_dir_page_build() only consults
LUDA_FID to spot .lustre and packs the entry either way -- and the LFSCK
reads lde_fid regardless of any flag, which is why the value has to be
sane and local rather than merely unmarked.

Zeroing lde_fid is not usable here.  A zero FID on ".." is a defined
value: lfsck_namespace_assistant_handler_p1() reads it as "parent
unknown" and flags LNTF_CHECK_PARENT.  The fs root is scanned by the
namespace LFSCK -- lfsck_master_oit_engine() lets li_global_root_fid
through the filter that drops purely local objects -- so a zeroing
scheme would raise that flag on the root on every scan.

The sibling case is left alone: when osd_get_fid_by_oid() fails for an
ordinary entry further down, lde_fid is likewise left unwritten under
LUDA_UNKNOWN.  Neither a stale FID nor a zero one is benign for the
LFSCK there -- it can misrepair either way, adding a link naming an
unrelated object or taking the dangling path -- so choosing a value for
it wants its own patch.  The companion llite patch covers that path from
the client side, by ignoring any entry without LUDA_FID.  For the ".."
entries this branch produces the same client guard is never reached:
do_nfs_get_name_filldir() drops "." and ".." by name before it looks at
the flags.

sanity test_913 covers it: it reads the ".." d_ino of the mount root
through getdents64() ten times over dropped caches and requires a stable,
non-zero value.  On zfs it also requires that value to differ from ".",
so a gate that stopped matching the root and let it fall to the self-FID
arm would be caught too; that half is not checked on ldiskfs, where the
filldir substitution above makes the root its own parent by design.  On
an unpatched ZFS MDT the value is 0 half the time and
5188147320583553024 the rest; with the patch it is 144115188092633101
every time.  The new dirent_ino helper is needed because stat(2) -- and
so ls(1), find(1) and $LFS path2fid -- resolves ".." through the VFS,
which at a mount root answers with the mountpoint's parent instead of
what the OSD put in the entry.

Its version gate names 2.17.58, the newest tag: a build carrying this
patch reports 2.17.58_N and runs the test, while every older MDS -- the
2.17.55 and 2.17.56 ZFS servers where the value is 0 about half the time
included -- skips it.  The gate cannot tell an unpatched 2.17.58_N server
from a patched one, so an interop run pinned to an older build of this
same branch would still run it; the release branches interop normally
pins to are all below 2.17.58.

Validated on a ZFS DNE cluster (2 MDT, 2 OST) with the companion llite
patches, tracing both arms of the gate: the fs root and both
update_log_dir objects take the OSD root, .lustre/fid reports itself, and
no zero FID is emitted.  sanityn test_102a fails 5/30 without the patches;
with them full sanity-lfsck passes 73/73, sanity test_154f passes, and
test_102a passes 29/30 -- the one failure being the unrelated "stat data
mismatch" (LU-15842), not an ESTALE.

Fixes: 0780fde4d415 ("LU-3573 osd-zfs: Only advance zap cursor as needed")
Test-Parameters: fstype=zfs mdscount=2 mdtcount=4 testlist=sanityn env=ONLY=102a,ONLY_REPEAT=200
Test-Parameters: mdsfilesystemtype=zfs mdtfilesystemtype=zfs ostfilesystemtype=zfs testlist=sanity,sanity-lfsck
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I0e999b877991e3c784d3f38a8d43ada0d99e7c44
67696 master J ✗1B ✓T ✓R 3/2
LU-20501 llite: do not derive the dirent from the emitted name
reviewing Oleg Drokin · you voted +1 on current PS
master-next 2 unresolved M +61 −21
3d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity-slow@zfs:test_255cseen in 2 other reviews
build #131077 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-14 15:28 · Arshad Hussain +1 2026-09-14 10:34 · Andreas Dilger +1 2026-09-12 12:18
patchsets:
+2 earlier PS1 08-03 PS2 08-03
PS3 08-04 PS4 08-05 PS5 08-19 PS6 08-30 PS7 09-04
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-08-03 18:48 Gerrit AI review for Lustre COMMIT_MSG:7 — (minor) LU-20501 is filed as "sanityn test_102: ZFS check_fhandle_syscalls d102.sanityn.stripe/subdir fail, open_by_handle_at error: Stale f
Gerrit AI review for Lustre PS2 · 2026-08-03 18:48
(minor) LU-20501 is filed as "sanityn test_102: ZFS check_fhandle_syscalls d102.sanityn.stripe/subdir fail, open_by_handle_at error: Stale file handle", and this change only alters behaviour under IS_ENCRYPTED(inode) - for a plain directory the emitted name is ent->lde_name, so container_of() already produced exactly the entry this patch now passes down.

So the failure the ticket describes is unaffected. The body notes that test_102 uses unencrypted directories, but never says outright that this does not fix the reported failure. Worth stating that explicitly, or filing this under its own ticket, so LU-20501 isn't read as resolved.
reply PS2 2026-08-03 18:48 Gerrit AI review for Lustre COMMIT_MSG:39 — (minor) "the listed suites" doesn't have an antecedent - there is no Test-Parameters: line in this message and no suites are named anywhere
Gerrit AI review for Lustre PS2 · 2026-08-03 18:48
(minor) "the listed suites" doesn't have an antecedent - there is no Test-Parameters: line in this message and no suites are named anywhere in it. Was a Test-Parameters: line meant to be added here (sanity-sec, sanityn), or should the sentence just say the readdir change is covered by the normal review suites?
owner Oleg Drokin · uploader Oleg Drokin · PS7 uploaded 12d ago · NEW · open in Gerrit ↗
commit message
LU-20501 llite: do not derive the dirent from the emitted name

ll_get_name() recovers the directory entry it is examining with
container_of() on the name pointer its filldir gets, which is only valid
while that name points into the lu_dirent.  ll_dir_read() has not
guaranteed that since encrypted directories were added: for those it
emits the name out of the separate llcrypt_fname_alloc_buffer()
allocation, so the derived "lu_dirent" starts 32 bytes before an
unrelated slab object and lde_fid is read out of bounds.

Tracing the two pointers on an encrypted directory shows the derived
entry landing at name - 0x20 for every entry, with the FID read back out
of the neighbouring allocation -- in one run
[0xffff998306137fe0:0x6137fe0:0xffff9983], a kernel pointer being
compared as a FID.  A plain directory in the same mount never diverges.

Pass the lu_dirent being emitted down from ll_dir_read() so the filldir
works from the entry itself rather than from pointer arithmetic on a name
it does not own.  The whole entry rather than just its FID, because the
companion llite patch also has to read lde_attrs to tell whether lde_fid
means anything.  The pointer is live only for the duration of the
dir_emit() call, which is where its only consumer runs; the folio holding
it is unmapped once ll_dir_read()'s loop is done.

Drop the (filldir_t) cast on .ctx.actor while here:
ll_nfs_get_name_filldir() already has that prototype under both
FILLDIR_TYPE variants, so the cast only hid the type check, and no other
.actor assignment in the tree casts.

This does not fix the failure LU-20501 was filed for.  ll_dir_read()
emits ent->lde_name for a plain directory, so container_of() already
recovered exactly the entry this patch passes down; only the
IS_ENCRYPTED() path changes behaviour, and sanityn test_102 (the existing
open-by-handle test) uses unencrypted directories.  This fixes the
out-of-bounds read only.

NFS export of an encrypted directory works after this only when the
parent inode is already warm on the mount doing the reconnect.
ll_get_name() calls ll_dir_read() without llcrypt_prepare_readdir(),
which ll_iterate() does before the same call, so the crypt info has to
have been loaded by something else -- search_inode_for_lustre() starts
with an ilookup5() and llcrypt_setup_filename() loads the info for every
lookup inside the directory.  Measured on a dummy-encrypted mount: with
the parent walked first, check_fhandle_syscalls passes 3/3; with
drop_caches and the LDLM LRU cleared so the inode is instantiated cold,
0/3, because ll_fname_disk_to_usr() then emits the no-key base64 form
that reconnect_path()'s lookup_one_len() cannot resolve.  Adding
llcrypt_prepare_readdir() there returns -ENODATA on a cold
NFS-instantiated inode, so the cold case needs its own fix.

sanityn test_102b covers it: it remounts both clients with
test_dummy_encryption, walks the directory on the second mount so the
parent's crypt info is loaded, and resolves a handle for a subdirectory
inside it.  It fails without this patch ("check_fhandle_syscalls on an
encrypted dir failed") and passes with it.  The cold-inode case is left
uncovered on purpose, since it still fails for the reason above.

The new test goes in beside a bare test_102 rather than renaming that one
to test_102a here, so that autotest's review-*-subtest-change groups do
not put test_102 -- which fails on ZFS DNE roughly one session in ten on
master, the failure this ticket is about -- into a 30-minute repeat loop
against a patch that does not fix it.  The companion llite patch, which
does fix it, carries the rename.

Fixes: 4d38566a004f ("LU-13717 sec: filename encryption")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Ic0380a640740ced90acd41004f8ff9652f25b8bd
67404 master J ✗1B ✓T ✓R 2/2
LU-20501 llite: skip dot/dotdot in NFS get_name
reviewing Oleg Drokin · you voted +1 on current PS
testfix master-next 3 unresolved S +27 −2
3d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanityn@zfs:test_43kNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #131076 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-14 15:28 · Andreas Dilger +1 2026-09-09 00:10
no vote yet: Lai Siyao
patchsets:
+6 earlier PS1 07-21 PS2 07-21 PS3 07-21 PS4 07-24 PS5 08-03 PS6 08-03
PS7 08-04 PS8 08-05 PS9 08-19 PS10 08-30 PS11 09-04
your previous vote: +1 on PS4 (2026-07-24 18:16) — now at PS11
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS6 2026-08-03 18:25 Gerrit AI review for Lustre COMMIT_MSG:59 — (minor) "covers all three" looks a bit strong for the lu_dirent_type_get() case. The loop advances with lu_dirent_next(), i.e. by lde_reclen
Gerrit AI review for Lustre PS6 · 2026-08-03 18:25
(minor) "covers all three" looks a bit strong for the lu_dirent_type_get() case. The loop advances with lu_dirent_next(), i.e. by lde_reclen, which is equally server-supplied and is not validated against the end of the folio, so the type word can still be read past the page even when namelen <= NAME_MAX. The other two consumers do look covered.
reply PS6 2026-08-03 18:25 Gerrit AI review for Lustre COMMIT_MSG:74 — (suggestion) The ll_dir_read() hunk affects every readdir, not just ZFS. Since the encoded-name path is ldiskfs-only, a run with fstype=ldis
Gerrit AI review for Lustre PS6 · 2026-08-03 18:25
(suggestion) The ll_dir_read() hunk affects every readdir, not just ZFS. Since the encoded-name path is ldiskfs-only, a run with fstype=ldiskfs testlist=sanity-sec would exercise it. And now that get_name() keys off a server-set LUDA_FID, an interop run against an older server build (serverjob/serverbuildno) would cover the mixed-version case the last paragraph describes.
reply PS6 2026-08-03 18:25 Gerrit AI review for Lustre dir.c:237 — (defect) For an encrypted directory, lde_namelen on the wire is the critically-encoded ciphertext length, not the length of the name that ge
Gerrit AI review for Lustre PS6 · 2026-08-03 18:25
(defect) For an encrypted directory, lde_namelen on the wire is the critically-encoded ciphertext length, not the length of the name that gets emitted, so it can legitimately exceed NAME_MAX and those entries then vanish from readdir.

osd_ldiskfs_filldir() encodes the on-disk name whenever the directory has LUSTRE_ENCRYPT_FL (osd_handler.c:7358), and critical_encode() escapes 6 of the 256 byte values, so a 255-byte ciphertext name arrives at roughly 261 bytes. llcrypt caps the ciphertext at max_namelen = NAME_MAX (llite/crypto.c:659), so 255 is a normal, reachable length.

ll_fname_disk_to_usr() critical_decode()s before decrypting, so the presented name still fits the NAME_MAX buffer today. Should the bound apply to the emitted name (the !IS_ENCRYPTED branch, or the decoded length) rather than to the raw wire length?

sanity-sec test_46 creates 255-byte names in an encrypted directory on ldiskfs, then runs

    stat $scrambleddir/*
    rm -rf $scrambleddir/*

With this check those entries never reach filldir, so the glob matches nothing and the following rmdir fails on ENOTEMPTY.

For the do_nfs_get_name_filldir() memcpy(), the check could live there instead, where the NAME_MAX + 1 buffer actually is.
tags: testfix
owner Oleg Drokin · uploader Oleg Drokin · PS11 uploaded 12d ago · NEW · open in Gerrit ↗
commit message
LU-20501 llite: skip dot/dotdot in NFS get_name

sanityn test_102a intermittently fails on ZFS DNE with a spurious ESTALE
from open_by_handle_at() of a striped subdirectory:

  open_by_handle_at(subdir) error: Stale file handle

The handle decodes fine.  The ESTALE comes out of the NFS reconnect:
reconnect_one() finds the disconnected dentry's parent, calls
exportfs_get_name() (ll_get_name()) to get the child's name in that
parent, then lookup_one() on it.  ll_get_name() returned "..", so
lookup_one("..") failed -EACCES, and exportfs_decode_fh() converts any
decode error into -ESTALE.

ll_get_name() walks the parent's dirents with do_nfs_get_name_filldir(),
matching each lde_fid against the child FID.  It matches "." and ".."
like any other name, and it does not check LUDA_FID, which is what tells
it whether lde_fid is meaningful at all.

On ZFS the ".." entry of the filesystem root has no dependable FID:
osd-zfs osd_dir_it_rec() computes it with osd_find_parent_fid(), which
returns -ENOENT at the root, and that path left lde_fid untouched, so it
kept whatever the recycled dirent page held.  Instrumenting the root's
".." FID showed it varying per run between the correct root FID, zero,
wild values such as [0xfcaae7467e00fcaa:0xc834a400:0x450008], and real
FIDs of unrelated objects -- and when it happened to equal the child FID
being searched, ll_get_name() returned "..".

Skip "." and ".." outright.  A child is never reached through those
names, so they are never a valid answer here regardless of what lde_fid
holds.  The generic get_name() has the same guards and hit the same bug:
filldir_one() in fs/exportfs/expfs.c has long bounded the name at
NAME_MAX, and 9473c4450e9c ("exportfs: fix the fallback implementation
of the get_name export operation") added the dot/dotdot skip for exactly
this reason -- matching "." or ".." makes the following lookup fail.  It
is absent from the 6.8 tree here and present in 6.12.

Also skip any entry the server did not mark LUDA_FID.  lde_fid is only
defined when that flag is set, and mdd_dir_page_build() already tests it
before reading the field.  osd-zfs has a second path that leaves lde_fid
unwritten for an ordinary name: when osd_get_fid_by_oid() fails it marks
the entry LUDA_UNKNOWN and returns without setting the FID.  The name
check above does not cover that one, and matching its stale FID would
return a name the child does not have.  Skipping is the safe failure --
ll_get_name() reports "not found" rather than a wrong name.

Bound the name length while here.  do_nfs_get_name_filldir() memcpy()s
namelen bytes into lgd_name, which is ll_get_name()'s caller buffer --
exportfs_decode_fh_raw()'s char nbuf[NAME_MAX + 1] -- and lde_namelen
comes straight off the wire with nothing on the client bounding it, since
mdc_adjust_dirpages() only rewrites lde_reclen.  ll_getname_data gains
lgd_sbi so the report can name the device, as console messages are
expected to.

The check belongs here rather than in ll_dir_read().  There, namelen is
lde_namelen for every entry, and for an encrypted directory that is the
critically-encoded ciphertext length, which legitimately exceeds NAME_MAX
(osd_ldiskfs_filldir() stores critical_chars() of the name, and llcrypt
caps the ciphertext itself at NAME_MAX); bounding it at the source drops
those entries from readdir entirely.  By the time the filldir runs the
encrypted name has been decoded into a NAME_MAX buffer, so this branch
can only fire for a plain directory -- which is exactly the case where
nothing has bounded the value.

The server side is fixed separately by the companion osd-zfs patch,
which reports the OSD root instead of leaving lde_fid unwritten.  These
guards are worth keeping regardless: neither depends on the FID value,
so they also protect a new client talking to an unfixed server.

The existing open-by-handle test is renamed test_102a here, where the
parent patch added test_102b beside it.  It belongs in this patch rather
than that one: renaming a subtest is what makes autotest's
review-*-subtest-change groups run it in a repeat loop, and test_102 is
the test this failure is about -- it fails on ZFS DNE in roughly one
master session in ten, so a loop against a patch that does not fix it
only produces a Verified-1.  Here the loop runs against the fix.

Validated on a ZFS DNE cluster (2 MDT, 2 OST) together with the osd-zfs
patch: sanityn test_102a fails 5/30 without the two patches and
passes 30/30 with them; full sanity-lfsck passes 73/73; sanity test_154f
passes.

Fixes: 96a5daa0c08d ("LU-163 MDS returns 32/64-bit dir name hash according to client type")
Test-Parameters: optional fstype=zfs mdscount=2 mdtcount=4 testlist=sanityn env=ONLY=102a,ONLY_REPEAT=200
Test-Parameters: optional serverversion=2.16 testlist=sanityn env=ONLY=102a,ONLY_REPEAT=30
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I0b9854525a165780e505db977a89f91c6d11b705
68716 master J !B ✓T ✓R 3/2
LU-17000 tests: make leak_finder see OBD_FREE_LARGE
reviewing Oleg Drokin · you voted +1 on current PS
XS +4 −4
3d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #131363 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-10 16:33 · Andreas Dilger +1 2026-09-11 10:37 · Alex Zhuravlev +1 2026-09-14 08:10
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-17000 tests: make leak_finder see OBD_FREE_LARGE

OBD_FREE_LARGE() tags its D_MALLOC line "kvfree", which the
leak_finder.pl regexp cannot split into a known prefix and verb:
"kv" is not an accepted prefix and no accepted verb starts with
"v".  The "couldn't parse" fallback only fires when the verb is
preceded by a separator, so the line is dropped with no diagnostic
at all and every OBD_FREE_LARGE() free (over 150 call sites)
leaves its allocation unpaired and reported as a leak by
conf-sanity test_39.

Accept a "kv" prefix and rename the tag to "kvfreed" to match
kfreed/vfreed/slab-freed; the regexp still parses "kvfree" from
older Lustre builds.  Also let the fallback report an unknown tag
glued to its verb, rather than dropping the line silently.

Test-Parameters: trivial
Fixes: 94b21a46bfa1 ("LU-18687 obd: don't always use vfree_atomic")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: If037cf0f7c6f13a644610b03e081d4cece908fc3
68717 master J ✓B ✓T ✓R 3/2
LU-17000 lnet: fix arg order in cfs_expr_list_values() error
reviewing Oleg Drokin · you voted +1 on current PS
XS +1 −1
3d
build #131435 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-13 22:09 · Arshad Hussain +1 2026-09-10 03:53 · Andreas Dilger +1 2026-09-09 16:13
patchsets: PS1 09-09 PS2 09-09
owner Oleg Drokin · uploader Oleg Drokin · PS2 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-17000 lnet: fix arg order in cfs_expr_list_values() error

cfs_expr_list_values() prints "Number of values %d exceeds max
allowed %d" with (max, count), so the two numbers come out the wrong
way round: a two-value CPT list on a single-CPT node reports "Number
of values 1 exceeds max allowed 2".  Pass them as declared.

Fixes: 19ec037c0a94 ("LU-56 libcfs: move range expression parser to libcfs")
Test-Parameters: trivial
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: Id7c66d1707bd6db41a19130ac14542ee71f92821
67824 master J !B ✓T ✓R 3/2
LU-20264 llite: use inode_owner_or_capable()
reviewing Timothy Day · you voted +1 on current PS
2 unresolved XS +1 −2
4d
janitor run: 14 failing config(s), none unique to this patch — janitor results
build #128912 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-07 19:40 · Andreas Dilger +1 2026-09-13 06:26 · Sebastien Buisson +1 2026-09-11 07:38
no vote yet: Shuichi Ihara
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-08 06:32 Gerrit AI review for Lustre COMMIT_MSG:10 — (minor) The two tests are not quite the same. capable(CAP_FOWNER) evaluates the capability against init_user_ns, whereas inode_owner_or_capa
Gerrit AI review for Lustre PS1 · 2026-08-08 06:32
(minor) The two tests are not quite the same. capable(CAP_FOWNER) evaluates the capability against init_user_ns, whereas inode_owner_or_capable() uses ns_capable(current_user_ns(), CAP_FOWNER) and additionally requires the owner uid to be mapped in that namespace:

    ns = current_user_ns();
    if (vfsuid_has_mapping(ns, vfsuid) && ns_capable(ns, CAP_FOWNER))
            return true;

So a task holding CAP_FOWNER only inside a non-init user namespace can now set explicit timestamps on a file it does not own, as long as the owner uid is mapped into that namespace; previously that returned -EPERM here. It also matches what setattr_prepare() already allowed, so the net effect is that llite stops being stricter than the VFS. That seems like the intent, but could the message state the behavior change instead of describing the test as identical?
reply PS1 2026-09-12 18:33 Timothy Day llite_lib.c:2463 — Yeah, I believe so.
Gerrit AI review for Lustre PS1 · 2026-08-08 06:32
(minor) nop_mnt_idmap is the "ignore any idmapping" sentinel, so this call is not idmap-aware yet - it always checks the raw inode uid.

The real idmap is available one frame up: ll_setattr() takes struct mnt_idmap *map and already feeds it to setattr_prepare(map, de, attr), then drops it in ll_setattr_raw(de, attr, xvalid, false). ll_xattr_set_common() already passes its map straight into inode_owner_or_capable().

Given the ticket, would it be better for ll_setattr_raw() to take the mnt_idmap and pass it here, with the two direct callers in file.c (ll_hsm_import(), ll_file_futimes_3()) supplying &nop_mnt_idmap?
James Simmons PS1 · 2026-09-12 15:11
Is this done in a latter patch?
Timothy Day PS1 · 2026-09-12 18:33
Yeah, I believe so.
owner Timothy Day · uploader Timothy Day · PS1 uploaded 40d ago · NEW · open in Gerrit ↗
commit message
LU-20264 llite: use inode_owner_or_capable()

Replace the open-coded fsuid + CAP_FOWNER check in ll_setattr_raw()
with inode_owner_or_capable(), which performs the same test and is
idmap-aware.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: I021f8c379b46678ec01a142b027b146f86a013fd
66621 master J !B ✓T ✓R 2/2
LU-20357 obdclass: clear idle NID statistics on server
reviewing Jinshan Xiong · you voted +1 on current PS
4 unresolved L +774 −105
5d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #131480 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-12 15:04 · Andreas Dilger +1 2026-09-10 06:06
no vote yet: Robert Read, Alex Zhuravlev, Timothy Day
patchsets:
+26 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
your previous vote: -1 on PS30 (2026-09-09 17:42) — now at PS31
threads: 3 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS31 2026-09-11 09:06 Gerrit AI review for Lustre COMMIT_MSG:47 — (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
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.
reply PS31 2026-09-11 09:06 Gerrit AI review for Lustre mdt.nid_stats_idle_time.4:42 — (minor) The GC pass only runs every PET_GC_PERIOD (60s) in ping_evictor_main(), so reclaim actually happens somewhere in [TIMEOUT, TIMEOUT +
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.
reply PS31 2026-09-11 09:06 Gerrit AI review for Lustre lprocfs_status_server.c:432 — (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
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.
owner Jinshan Xiong · uploader Jinshan Xiong · PS31 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20357 obdclass: clear idle NID statistics on server

Introduce configurable nid_stats_idle_time per target device to
automatically garbage collect stale NID statistics structures that
remain idle with no active exports, preventing memory and debugfs
bloat in high-churn cloud environments.

High-Level Design:
- **Idle NID Stats Tracking**: When a client disconnects, its export
  is cleaned up. If no other exports are using the same NID, the
  corresponding NID statistics structure (`nid_stat`) is marked as
  "idle" and moved to an idle list.
- **Background Purging**: The ping evictor thread
  (ping_evictor_main()) periodically scans the idle list. The thread's
  wait loop is converted from wait_event_idle() to a 60-second timed
  wait to trigger periodic scans. If an entry has been idle for longer
  than the configurable `nid_stats_idle_time` timeout, it is evicted
  from the hash table and freed, along with its associated debugfs
  files.

Key Implementation Details:
- Added `obt_nid_stats_idle_time` configuration parameter per target.
- Added `nid_last_idle` timestamp to `struct nid_stat` to track idle
  duration.
- Idle entries are moved to `obd_nid_stats_idle` list during export
  cleanup.
- Target devices are marked in `obd_devs` xarray for efficient
  scanning by the ping evictor thread.
- Reimplemented the `exports.clear` debugfs interface to clear active
  stats and immediately evict idle stats.
- Added `idle_seconds` output to `exports/*/export` debugfs files to
  show how long the NID has been idle.
- Renamed `obd_nid_stats_get()/obd_nid_stats_put()` to
  `obd_nid_stats_insert()/obd_nid_stats_remove()` to better reflect
  their hash table operations.
- Fixed a potential Use-After-Free by moving NID stats hash
  destruction from class_cleanup() to class_free_dev().
- Fixed a race causing EEXIST on debugfs creation by destroying the
  debugfs entry before removing the nid_stat from the hash table in
  obd_nid_stats_remove().
- Fixed a bug where obd_nid_stats_insert() could sleep under RCU read
  lock when retrying by releasing the RCU lock before sleeping.
- Free `nid_stat` with OBD_FREE_RCU(), as entries are now freed while
  clients may be traversing the hash table, and a reader must not walk
  into reclaimed memory.
- Added `mdt.exports.clear`/`obdfilter.exports.clear` man pages for
  the pre-existing `exports.clear` interface reimplemented here.

Signed-off-by: Jinshan Xiong <jinshanx@google.com>
Change-Id: I511de0c1205105708e9aa89fe9f1cff915dbe2b8
58097 master J !B ✓T ✓R 2/2
LU-17916 clio: switch to struct folio
reviewing Shaun Tancheff · you voted +1 on current PS
6 unresolved XL +931 −936
5d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #131305 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-08 16:02 · Andreas Dilger +1 2026-09-12 09:13
no vote yet: Qian Yingjin, Patrick Farrell, Timothy Day
patchsets:
+50 earlier PS1 02-17 PS2 02-17 PS3 02-18 PS4 02-18 PS5 02-18 PS6 02-21 PS7 02-21 PS8 02-26 PS9 03-18 PS10 03-29 PS11 04-08 PS12 04-08 PS13 04-08 PS14 05-26 PS15 06-18 PS16 06-18 PS17 06-22 PS18 08-10 PS19 09-09 PS20 09-29 PS21 10-02 PS22 10-06 PS23 10-07 PS24 11-18 PS25 01-31 PS26 01-31 PS27 01-31 PS28 03-08 PS29 03-10 PS30 03-14 PS31 03-15 PS32 04-04 PS33 05-07 PS34 05-09 PS35 05-17 PS36 05-30 PS37 06-17 PS38 06-17 PS39 07-22 James Simmons PS40 07-22 James Simmons PS41 07-22 James Simmons PS42 07-23 James Simmons PS43 08-02 PS44 08-02 PS45 08-06 PS46 08-13 PS47 08-16 PS48 08-17 PS49 08-21 PS50 08-28
PS51 09-03 James Simmons PS52 09-04 PS53 09-04 PS54 09-07 PS55 09-08
threads: 6 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS49 2026-08-22 17:04 Gerrit AI review for Lustre COMMIT_MSG:12 — (minor) "Allocate order 0 folios on the buffered I/O path" doesn't seem to have code behind it. ll_read_ahead_page(), ll_io_zero_page() and
Gerrit AI review for Lustre PS49 · 2026-08-22 17:04
(minor) "Allocate order 0 folios on the buffered I/O path" doesn't seem to have code behind it. ll_read_ahead_page(), ll_io_zero_page() and ll_write_begin() all take whatever order __filemap_get_folio() defaults to, which was already 0 before this patch; no call site passes an explicit order and fgf_set_order()/FGF_GET_ORDER never appear in the tree.

Would "keep allocating order 0 folios" (or dropping the sentence) describe the change more accurately?
reply PS55 2026-09-10 04:51 Gerrit AI review for Lustre cl_object.h:755 — (typo) The reworded sentence lost a word: "cp_folio is not a held in system cache".
Gerrit AI review for Lustre PS55 · 2026-09-10 04:51
(typo) The reworded sentence lost a word: "cp_folio is not a held in system cache".

Maybe "is not held in the system cache"?
reply PS55 2026-09-10 04:51 Gerrit AI review for Lustre rw.c:2115 — (minor) Both arms of this `#if` produce the same call - `page_folio(page)` is `#define page_folio(page) (page)` in the !HAVE___FILEMAP_GET_F
Gerrit AI review for Lustre PS55 · 2026-09-10 04:51
(minor) Both arms of this `#if` produce the same call - `page_folio(page)` is `#define page_folio(page) (page)` in the !HAVE___FILEMAP_GET_FOLIO arm of lustre_compat/linux/folio.h.

If the patch is refreshed, `return do_read_folio(file, page_folio(page));` on its own would do.
reply PS55 2026-09-10 04:51 Gerrit AI review for Lustre rw26.c:796 — (typo) There is no vmpage in this function any more; the variable being put here is `folio`.
Gerrit AI review for Lustre PS55 · 2026-09-10 04:51
(typo) There is no vmpage in this function any more; the variable being put here is `folio`.
reply PS55 2026-09-10 04:51 Gerrit AI review for Lustre vvp_page.c:86 — (typo) The parameter became `struct folio *folio`, but the kernel-doc still documents `@vmpage: struct page that has error`, and the `@inode
Gerrit AI review for Lustre PS55 · 2026-09-10 04:51
(typo) The parameter became `struct folio *folio`, but the kernel-doc still documents `@vmpage: struct page that has error`, and the `@inode` line and the sentence below still refer to vmpage. kernel-doc will warn that the documented name is not a parameter.

Other kernel-doc blocks in this patch (cl_page_find(), cl_page_alloc()) were updated, so this one looks like it was just missed.
reply PS55 2026-09-10 04:51 Gerrit AI review for Lustre cl_io.c:1536 — (typo) `cdp_pages` is the old field name; it became `cdp_folios` in this patch. This is the last mention of the old name left in the tree.
Gerrit AI review for Lustre PS55 · 2026-09-10 04:51
(typo) `cdp_pages` is the old field name; it became `cdp_folios` in this patch. This is the last mention of the old name left in the tree.
owner Shaun Tancheff · uploader Shaun Tancheff · PS55 uploaded 9d ago · NEW · open in Gerrit ↗
commit message
LU-17916 clio: switch to struct folio

Switch cl_page from struct page and page based API to
struct folio and the folio API.

Allocate order 0 folios on the buffered I/O path and for the
DIO bounce buffer.

User pages used for DIO can be embedded in large folios so
add support for identifying and tracking the page number inside
a large folio from user pages.

Introduce cl_page_batch* and clarify oti_cl_batch as pending
cl_page objects available for cl_commit_cbt to release additional
grant space in osc_queue_async_io(), other users of oti_fbatch
are moved to their respective local stack.

HPE-bug-id: LUS-12384
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: I2c2554d3f5feaf7ec205f4b239bebf688140d874
67791 master J ✗1B ✓T ✓R 2/2
LU-17916 osd-ldiskfs: prefer jbd2_journal_invalidate_folio()
reviewing Shaun Tancheff · you voted +1 on current PS
2 unresolved M +50 −38
5d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity1@zfs:test_56abseen in 12 other reviews
failed enforced testplatformdetail
review-dne-zfs-part-5 failed 2× RHEL 9.7 / x86_64 ran 5 tests. 1 tests failed: sanityn. session
build #131370 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-09 17:09 · Andreas Dilger +1 2026-09-12 09:14
no vote yet: Alex Zhuravlev, Timothy Day, Patrick Farrell
patchsets:
+4 earlier PS1 08-06 PS2 08-13 PS3 08-17 PS4 08-21
PS5 08-28 PS6 09-04 PS7 09-04 PS8 09-07 James Simmons PS9 09-09
your previous vote: +1 on PS8 (2026-09-08 16:19) — now at PS9
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS4 2026-08-22 16:39 Gerrit AI review for Lustre COMMIT_MSG:16 — (minor) This paragraph describes the new code but not the bug. The old osd_invalidate_partial_page() looked up i_size_read(inode) >> PAGE_SH
Gerrit AI review for Lustre PS4 · 2026-08-22 16:39
(minor) This paragraph describes the new code but not the bug. The old osd_invalidate_partial_page() looked up i_size_read(inode) >> PAGE_SHIFT rather than the @offset it was handed, which only matched for the osd_execute_truncate() caller; osd_execute_fallocate() passes old_size, so on a growing fallocate the wrong folio was invalidated and the old-EOF jbd buffers were left behind.

Since the patch carries a Fixes: tag, could the body name the affected caller and the consequence? As written the reader cannot connect the tag ("llog to continue if broken") to anything in the diff.
reply PS4 2026-08-22 16:39 Gerrit AI review for Lustre folio.h:151 — (defect) This shim only lands in the !HAVE___FILEMAP_GET_FOLIO arm, but filemap_lock_folio() and __filemap_get_folio() did not arrive togeth
Gerrit AI review for Lustre PS4 · 2026-08-22 16:39
(defect) This shim only lands in the !HAVE___FILEMAP_GET_FOLIO arm, but filemap_lock_folio() and __filemap_get_folio() did not arrive together.

    v5.16 pagemap.h: __filemap_get_folio(), filemap_get_folio()
    v5.17 pagemap.h: same - still no filemap_lock_folio()
    v5.18 pagemap.h: filemap_lock_folio() added

LC_HAVE___FILEMAP_GET_FOLIO keys off the v5.16 commit (3f0c6a07fee6), so on v5.16/v5.17 the shim is compiled out and the kernel has no filemap_lock_folio() either. osd_drop_preallocated_space() and osd_invalidate_partial_folio() then hit an implicit declaration and an int-to-pointer assignment.

That window is not hypothetical for this file: lustre-build-ldiskfs.m4 maps any mainline release in [5.10, 6.1) to 5.10.0-ml.series, so osd-ldiskfs does build there, and the !HAVE_INVALIDATE_FOLIO arm of osd_jbd_invalidate_folio() with fpgptr() exists precisely for real-folio kernels below v5.18.

A dedicated LC_HAVE_FILEMAP_LOCK_FOLIO test would also be more robust than HAVE___FILEMAP_GET_FOLIO against vendor kernels that backport the folio API piecemeal.
owner Shaun Tancheff · uploader Shaun Tancheff · PS9 uploaded 8d ago · NEW · open in Gerrit ↗
commit message
LU-17916 osd-ldiskfs: prefer jbd2_journal_invalidate_folio()

Use folio API to interact with jbd2 in kernels which support
struct folio.

This also drops folio alloc when getting cache pages, since
there is nothing to truncate when the folio is not in the
system cache.

In osd_invalidate_partial_folio() the offset containing the page
to be invalidated is passed, use it to find and lock the folio
containing the PAGE_SIZE hole that will be invalidated.

Previously i_size() was being used to find the folio and the
identified offset was ignored.

Fixes: 63ee4af3bb0 ("LU-19620 obdclass: llog to continue if broken")
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: Iae187e3acbf2ebf3a2b99768d09916928c5c62ce
68655 master J !B ✓T ✓R 2/2
LU-20695 utils: fix mount.lustre_tgt fallback
reviewing Andreas Dilger · you voted +1 on current PS
3 unresolved S +15 −13
6d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131471 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-10 20:34 · Arshad Hussain +1 2026-09-10 03:55
patchsets: PS1 09-05 PS2 09-09
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-09-11 03:06 Gerrit AI review for Lustre super25.c:148 — (style) Not a bug, but '{/usr}' is a third notation for the same path in this patch - obd_mount.c uses /usr/sbin/mount.lustre[_tgt] and the
Gerrit AI review for Lustre PS2 · 2026-09-11 03:06
(style) Not a bug, but '{/usr}' is a third notation for the same path in this patch - obd_mount.c uses /usr/sbin/mount.lustre[_tgt] and the commit message uses [/usr]/sbin. Worth settling on the bracket form.

Also, "or install" reads as an alternative to "use '-t lustre_tgt'", but installing the helper on its own changes nothing here - this warning only fires for a '-t lustre' mount. Something like "use '-t lustre_tgt' (needs [/usr]/sbin/mount.lustre_tgt installed)" states the dependency instead.
reply PS2 2026-09-11 03:06 Gerrit AI review for Lustre obd_mount.c:1355 — (minor) The helper is installed into $(rootsbindir), which config/lustre-core.m4 hard-codes to /sbin, and lustre.spec.in ships it as /sbin/m
Gerrit AI review for Lustre PS2 · 2026-09-11 03:06
(minor) The helper is installed into $(rootsbindir), which config/lustre-core.m4 hard-codes to /sbin, and lustre.spec.in ships it as /sbin/mount.lustre[_tgt]. So /usr/sbin/ only resolves on usr-merged systems; on a split-/usr distro there is nothing at that path and the admin is sent to look in the wrong place.

The commit message itself writes it as [/usr]/sbin - could the messages use that same form? Same for the new text on 1617, and 1361 mixes both ("/sbin/mount.lustre" then "/usr/sbin/mount.lustre[_tgt]") inside one string.
reply PS2 2026-09-11 03:06 Gerrit AI review for Lustre obd_mount.c:1356 — (minor) This also flips the return from -EINVAL to -ENODEV, which the commit message doesn't mention - is that deliberate, or just fallout f
Gerrit AI review for Lustre PS2 · 2026-09-11 03:06
(minor) This also flips the return from -EINVAL to -ENODEV, which the commit message doesn't mention - is that deliberate, or just fallout from matching the -ENODEV on the !devname path?

It is reachable from `mount -t lustre_tgt dev mnt` with no helper installed and no -o options, and mount(8) turns ENODEV into "unknown filesystem type 'lustre_tgt'". That reads as if the type isn't registered, when it plainly is (we got here from its parse_monolithic). EINVAL made mount(8) print "... missing codepage or helper program ...", which is closer to what this message is trying to say.
owner Andreas Dilger · uploader Andreas Dilger · PS2 uploaded 7d ago · NEW · open in Gerrit ↗
commit message
LU-20695 utils: fix mount.lustre_tgt fallback

If target filesystem is mounted with `mount -t lustre_tgt` but the
kernel does not support the `lustre_tgt` fstype, or the mount helper
[/usr]/sbin/mount.lustre_tgt is not installed, fall back to using
the `lustre` fstype for the mount.

Fix deprecation check to work before 2.20.53 instead of the reverse.

Fix `update_mtab_entry()` to record actual fstype that was used.

Improve error messages related to /sbin/mount.lustre_tgt usage.

Test-Parameters: trivial
Fixes: d3ea87a17f ("LU-16738 utils: fix auto mgsname= mount option")
Fixes: 4b2eca7095 ("LU-12514 utils: try lustre_tgt filesystem for mount")
Signed-off-by: Andreas Dilger <adilger@thelustrecollective.com>
Change-Id: I37914d70668899ec1fd3bdb2f45724b827b0ff18
68647 master J ✓B ✓T ✓R 3/2
LU-17916 osd: restore get_page stats for compatibility
reviewing Oleg Drokin · you voted +1 on current PS
1 unresolved S +27 −4
6d
build #131070 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-10 16:29 · Shaun Tancheff +1 2026-09-05 11:01 · Andreas Dilger +1 2026-09-09 07:29
no vote yet: Timothy Day
threads: 1 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-09-09 07:29 Andreas Dilger osd_lproc.c:91 — probably worthwhile to avoid adding new code that we need to remove anyway?
Gerrit AI review for Lustre PS1 · 2026-09-06 02:53
(suggestion) Nothing under lustre/osd-zfs/ ever calls lprocfs_counter_add() with LPROC_OSD_GET_PAGE or LPROC_OSD_NO_PAGE, and lprocfs_stats_seq_show() returns early for any counter whose lc_count is still 0, so these two can never show up in osd-zfs.*.stats. The commit message says the same thing.

Given nothing was ever lost on the zfs side, is there a reason to register them here rather than leave the osd-zfs hunks out? They are two dead enum slots plus the per-CPU counter space for them. This isn't a bug, so only worth doing if the patch is refreshed anyway.
Andreas Dilger PS1 · 2026-09-09 07:29
probably worthwhile to avoid adding new code that we need to remove anyway?
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 12d 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 and osd-zfs.*.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
66905 master J !B ✓T ✓R 2/2
LU-18687 build: shrinker_debugfs_path to compat shrinker.h
reviewing Shaun Tancheff · you voted +1 on current PS
M +42 −28
6d
janitor run: 4 failing config(s), none unique to this patch — janitor results
reviews: James Simmons +1 2026-09-03 14:09 · Timothy Day +1 2026-09-10 19:27
no vote yet: Arshad Hussain, Andreas Dilger
patchsets: PS1 06-27 PS2 09-01 James Simmons PS3 09-01 James Simmons PS4 09-02
your previous vote: +1 on PS3 (2026-09-01 21:16) — now at PS4
owner Shaun Tancheff · uploader Shaun Tancheff · PS4 uploaded 15d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: shrinker_debugfs_path to compat shrinker.h

Prepare shrinker_debugfs_path() callers to deal with a NULL path

Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun@tancheff.com>
Change-Id: Ia68eb073989d4e45d926b52c32b43540a85a6db0
68241 master J !B ✓T ✓R 3/2
LU-18687 uapi: keep OBD_IOC_GETNAME_OLD visible to userspace
reviewing Oleg Drokin · you voted +1 on current PS
2 unresolved S +8 −2
7d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #130083 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-10 16:32 · Andreas Dilger +1 2026-08-24 15:12 · Timothy Day +1 2026-09-10 13:56
threads: 1 need your reply · 1 waiting on others · 0 own notes · 0 bot
reply PS1 2026-08-24 05:45 Oleg Drokin patchset comment — I am not so sure about the version ifdef gate, normally I hate those, but what do you think otherwise?
Oleg Drokin PS1 · 2026-08-24 05:45
I am not so sure about the version ifdef gate, normally I hate those, but what do you think otherwise?
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 24d ago · NEW · open in Gerrit ↗
commit message
LU-18687 uapi: keep OBD_IOC_GETNAME_OLD visible to userspace

llapi_ioctl() retries with OBD_IOC_GETNAME_OLD when a pre-2.14.52
client module answers ENOTTY, but the macro lives in a kernel-only
header that lustre/utils stopped including, so the case compiled out
and the fallback silently disappeared.  Split the define the way the
neighbouring compat opcodes are, so userspace sees it until 2.18.53.

Test-Parameters: trivial
Fixes: 9bb172742291 ("LU-18687 build: sync header location")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I7530a317dbfb37aab7b5f68f94ed03e950aef864
66732 master J !B ✓T ✓R 2/2
LU-20315 obdclass: fix up __init and __exit
reviewing Timothy Day · you voted +1 on current PS
4 unresolved S +22 −22
7d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #129076 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-13 20:01 · Arshad Hussain +1 2026-08-18 06:46
no vote yet: Andreas Dilger
patchsets: PS1 06-18 PS2 07-18 PS3 08-10
threads: 4 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 05:39 Gerrit AI review for Lustre COMMIT_MSG:7 — (minor) The subject promises "__init and __exit", but nothing in this diff adds, removes or changes an __exit annotation.
Gerrit AI review for Lustre PS2 · 2026-07-28 05:39
(minor) The subject promises "__init and __exit", but nothing in this diff adds, removes or changes an __exit annotation.

That looks deliberate: every fini in obdclass (cl_global_fini(), lu_global_fini(), class_procfs_clean(), obd_zombie_impexp_stop(), ...) is reachable from the error unwind inside obdclass_init(), so marking any of them __exit would create an .init.text -> .exit.text reference. Worth either dropping "and __exit" from the subject, or saying in the body why none of the cleanup functions can take it.

The body could also stand to say what the change buys (the annotated text is discarded once the module finishes loading) and, per the house rules, name at least a couple of the functions so the change is findable via git log later.
reply PS3 2026-09-10 13:50 Timothy Day patchset comment — Omitting the exit annotations is fine, IMHO. We can update the commit message to reflect that we are only adding init annotations.
Oleg Drokin PS3 · 2026-08-24 02:37
ugh, so I have claude look at this to make an alternative patch and it devcided that we actually cannot add __exit annotation because obdclass_init calls them all on error exit path and call to .exit.text from .init.text is not really allowed?

I wonder if we should change something in that area?

HEre's the full proposed commit message that should give you an idea of the extent of changes:

    LU-20315 obdclass: add missing __init annotations
    
    Annotate the obdclass startup helpers and their prototypes __init so
    the kernel discards their text once the module is loaded:
    lu_global_init(), cl_global_init(), obd_init_caches() and most of the
    rest of the obdclass_init() sequence. obd_pool_init() is left alone,
    it is EXPORT_SYMBOL'ed.
    
    No fini can take __exit: obdclass_init() calls all of them from its
    error unwind, which would make an .init.text to .exit.text reference.

Wht's the thinking here? accept that reworked code, drop it at all or make some deeper rework?
Timothy Day PS3 · 2026-09-10 13:50
Omitting the exit annotations is fine, IMHO. We can update the commit message to reflect that we are only adding init annotations.

I think we should add annotations that reflect the reality of the code as it exists today. I don't think we should refactor stuff just to add annotations.
reply PS2 2026-07-28 05:39 Gerrit AI review for Lustre cl_object.c:986 — (suggestion) cl_env_percpu_init() has exactly one caller, cl_global_init() at line 1189, which this patch just made __init. Since the patch
Gerrit AI review for Lustre PS2 · 2026-07-28 05:39
(suggestion) cl_env_percpu_init() has exactly one caller, cl_global_init() at line 1189, which this patch just made __init. Since the patch is sweeping obdclass for missing annotations, this static helper could take __init as well.
reply PS2 2026-07-30 18:16 Timothy Day cl_object.c:1172 — I should fix this.
Gerrit AI review for Lustre PS2 · 2026-07-28 05:39
(style) The definition gets __init here, but the prototype in lustre/include/cl_object.h:2695 keeps the bare declaration. Same for the other ten:

    dt_global_init()          dt_object.h:2643
    obd_zombie_impexp_init()  obd_class.h:143
    cfs_hash_init()           obd_class.h:176
    obd_init_caches()         obd_class.h:2007
    class_procfs_init()       obd_class.h:2101
    lu_global_init()          lu_object.h:1480
    lu_ucred_global_init()    md_object.h:711
    libcfs_kkuc_init()        lustre_kernelcomm.h:213
    class_handle_init()       lustre_handles.h:51
    llog_info_init()          llog_internal.h:62

include/linux/init.h asks for the annotation on the prototype too, and the libcfs half of this ticket already follows that (llcrypt_private.h carries "extern int __init llcrypt_init_keyring(void);"). Without it a new caller in another translation unit gets no signal at the call site and only trips a modpost section mismatch at link time.
James Simmons PS2 · 2026-07-30 18:16
Fair complaint.
Timothy Day PS2 · 2026-07-30 18:16
I should fix this.
owner Timothy Day · uploader Timothy Day · PS3 uploaded 37d ago · NEW · open in Gerrit ↗
commit message
LU-20315 obdclass: fix up __init and __exit

... to functions that need these annotations.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: Ifdf0e4df0d2ca107defdbf11fd7fcf7db725115b
65198 master J ✗2B ✓T ✓R 2/2
LU-20104 lnet: fix selftest session teardown and BRW bugs
reviewing Robert Read · you voted +1 on current PS
3 unresolved XL +1028 −63
7d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
conf-sanity2@zfs:test_50hseen in 2 other reviews
sanity-quota@zfs+DNE:test_1kseen in 10 other reviews
build #131042 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-05 15:32 · Chris Horn +1 2026-09-06 16:26
no vote yet: Jinshan Xiong, Serguei Smirnov, Oleg Drokin, Timothy Day
patchsets:
+17 earlier PS1 04-09 PS2 04-09 PS3 05-08 PS4 05-18 PS5 05-27 PS6 05-29 PS7 05-29 PS8 05-30 PS9 06-02 James Simmons PS10 06-04 PS11 06-10 PS12 06-11 PS13 06-11 PS14 07-09 PS15 07-31 PS16 08-12 PS17 08-13
PS18 08-14 PS19 08-20 PS20 08-21 PS21 08-31 PS22 09-04
your previous vote: +1 on PS21 (2026-09-01 21:19) — now at PS22
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS22 2026-09-09 19:46 Robert Read patchset comment — test_228 has failed the same way on master:
Oleg Drokin PS22 · 2026-09-06 20:05
master-next testing flagged this as sanity lnet test 228 and subsequent test failures https://testing.whamcloud.com/test_sets/cd0ac3f1-3391-4a88-b775-017f35e65e83

test_228 loads lnet_selftest and drives it through $LSTSH; it fails first with LST returned non-zero rc = 254. 230/231/232 then fail with lnetctl lnet unconfigure failed 240 — i.e. LNet cannot be torn down because the selftest session was left behind. The delta contains 9cd74ef309 LU-20104 lnet: fix selftest session teardown and BRW bugs, which rewrites lnet/selftest/{framework,console,conrpc,rpc,brw_test}.c — exactly the code test_228 exercises and exactly the teardown 230–232 trip over


Test 230 failure with unconfigure did happen once in the past in regular master, but the lst rc 254 is still unexplained.

Somebody please take a look into this, marking as verified -1 until then.
Robert Read PS22 · 2026-09-09 19:46
test_228 has failed the same way on master:

https://testing.whamcloud.com/sub_tests/791c5c0b-c57c-4daa-ad41-1ef24b33880c
2026-08-26, lustre-master #4752, rev 9db228beb24a, clients 2.17.57.79 / RHEL 9.7 against 2.16.1.2 servers — a tree with no LU-20104 in any patchset (65198 is still open against master). Identical signature:

Run batch RPC failed on 0-1000200@<27:61450>: Unknown error -110
sanity-lnet test_228: @@@@@@ FAIL: LST returned non-zero rc = 254

Same mechanism too, not just the same message. From that run's debug logs, all within 1 ms — console 10.240.22.132@tcp, routers 10.240.28.145 and 10.240.30.63:

console:  ksocknal_process_transmit()) Host 10.240.28.145 reset our connection while we were sending
          ksocknal_process_transmit()) Host 10.240.30.63  reset our connection while we were sending
          srpc_lnet_ev_handler()) LNet event status -5 type 5, RPC errors 1..8
router:   ksocknal_launch_packet())  No usable routes to 12345-10.240.22.132@tcp
          lnet_health_check())       ...28.145@tcp->...22.132@tcp: PUT: REMOTE_ERROR
          lnet_peer_ni_add_to_recoveryq_locked()) ...22.132@tcp added to recovery queue ... health: 900
          lnet_notify())             ...28.145@tcp notifying ...22.132@tcp: down

On that run the hostname sort made both routers the 2.16.1 nodes and both LST endpoints unpatched master clients, so the selftest traffic never touched a node carrying this change in any form. Both routers reset the console simultaneously, which is why it has no peer not alive drops — the console had no path left at all.

Two more, both master-next: #1006 on 08-29 (PS20) and #1012 on 09-05 (PS21, the one you reported). Same message, same 30 s Start→Stop LST gap = LST_TRANS_TIMEOUT.

What happens, from the #1012 logs. The selftest layer completed cleanly on both sides — vm33 (2.16.1, unpatched) finished the batch-run RPC and sent its reply (Server RPC ... service batch service ... status SWI_STATE_DONE:0). Router 10.240.42.74 took that reply as a routed PUT and dropped it:

ksocknal_launch_packet()) No usable routes to 12345-10.240.42.72@tcp
lnet_health_check()) ...74@tcp->...72@tcp: PUT: REMOTE_ERROR    (status -113)
lnet_notify()) ...74@tcp notifying ...72@tcp: down
lnet_post_send_locked()) Dropping message for 12345-...72@tcp: peer not alive

ksocknal_launch_packet() only reaches that CNETERR when the peer_ni has no conn and no conn_cb that could make one. The router's peer for the console was created by an inbound connection (source port 1023), so once that TCP connection died there was nothing to reconnect with: the send failed -EHOSTUNREACH immediately instead of queueing. The console then timed out at LST_TRANS_TIMEOUT and lst returned -2 → 254. What tore down the TCP connection isn't in the logs at the captured debug mask.

230/231/232 "unconfigure failed 240" is fallout, not a second bug: error() in test_228 skips cleanup_router_test, the only thing that rmmods lnet_selftest, so LNet stays referenced and unconfigure returns -EBU
reply PS22 2026-09-06 02:48 Gerrit AI review for Lustre conrpc.c:1395 — (minor) This exit is also taken on a pending fatal signal, not only on the deadline, but the message always reports the full bound.
Gerrit AI review for Lustre PS22 · 2026-09-06 02:48
(minor) This exit is also taken on a pending fatal signal, not only on the deadline, but the message always reports the full bound.

    timeout -k 10 $(lst_end_session_timeout) $LST end_session

in the new teardown tests ends in SIGKILL, so giving up after a couple of seconds gets logged as "gave up after 100s". The ses_rpc_counter wait below has the same wording. If the patch is refreshed, worth telling the two exits apart.
reply PS22 2026-09-06 02:48 Gerrit AI review for Lustre console.c:1765 — (minor) lstcon_rpc_trans_postwait() already ends with lstcon_rpc_trans_stat(trans, lstcon_trans_stat()), and that function memsets the stat
Gerrit AI review for Lustre PS22 · 2026-09-06 02:48
(minor) lstcon_rpc_trans_postwait() already ends with lstcon_rpc_trans_stat(trans, lstcon_trans_stat()), and that function memsets the stat and recomputes it from the same tas_rpcs_list. ses_mutex is held across both, so nothing in between can change the result.

Is the second call needed, or is it a leftover? lstcon_batch_stop() reads the counters straight after postwait without repeating it.
owner Robert Read · uploader Robert Read · PS22 uploaded 13d ago · NEW · open in Gerrit ↗
commit message
LU-20104 lnet: fix selftest session teardown and BRW bugs

Split the server srpc_ev into srpc_bulkev and srpc_replyev.  The
shared event was reused for the bulk MD and then the reply MD, so
a late bulk UNLINK landed on the rewritten reply event and
double-completed a recycled RPC, causing the list_add corruption
reported by James Simmons.  Server bulk-PUT and reply completions
now advance only on the final (unlinked) event.

Order teardown so client-side batches drain before the session is
deactivated.  Set ses_shutdown before the batch-stop loop, where
lstcon_rpc_trans_postwait() first drops ses_mutex, or a concurrent
end_session frees the batches the loop is walking.

Post test RPCs under tsi_lock.  sfw_run_test() dropped it between
publishing the RPC on tsi_active_rpcs and posting it, so
sfw_stop_batch() could abort it in between and trip
srpc_post_rpc()'s !crpc_aborted assertion.

Bound the console teardown drain, which waited forever under
ses_mutex in an uninterruptible sleep.  On expiry the session is
left inert rather than half-destroyed, and the failure now reaches
the caller.  lst show_session reports an inert session instead of
dumping it as healthy.  The bound clears the LND as well as
rpc_timeout: LNetMDUnlink() only flags an MD the LND still holds, so
a bound below the LND timeout gives up on a drain that was about to
complete and leaves the session inert for no reason.

Derive the node-side drain bound from lnet_get_lnd_timeout() rather
than rpc_timeout: LNetMDUnlink() only flags a busy MD, so an
aborted RPC holding in-flight bulk is not reclaimed until the LND
gives up.  SESEND gets a matching bound so the console stops
abandoning nodes that are still quiescing.  A node that still
fails to drain in time now reports ETIMEDOUT to end_session
instead of being silently deactivated.  Module unload keeps an
unbounded drain.

Drop the lstcon_session_end() call on the session-create failure
path.  On -EEXIST it tore down the live session the caller had
declined to force-end; on any other failure ses_state is still
LST_SESSION_NONE, which lstcon_session_end() asserts against.

Fix BRW wire validation in brw_client_init(): reject an offset
outside the first page instead of silently masking it, allocate
bulk with off+len, and reject off+len > LNET_MTU.  Separately,
reject len == 0 and a zero or oversized v0 blk_npg, either of
which reached srpc_alloc_bulk() and tripped
LASSERT(bulk_npg > 0 && bulk_npg <= LNET_MAX_IOV).

Add lnet-selftest.sh tests for teardown stress, BRW offset edge
cases and the workqueue race.  They are reproducers: a node without
this fix does not survive the teardown they drive, so they skip
unless every node in the session carries it.  Guarding the console
alone is not enough - the crash lands on the peer.

They also join the existing LU-19364 exclusion under FORCE_LARGE_NID.
lst add_group rejects IPv6 NIDs, which is why smoke was already
excluded there, so any test that builds a session fails setup.

Test-Parameters: testlist=lnet-selftest,sanity-lnet
Fixes: e502638050a6 ("LU-16011 lnet: use preallocate bulk for server")
Fixes: efcef00cb304 ("LU-5718 lnet: add offset for selftest brw")
Signed-off-by: Robert Read <rread@thelustrecollective.com>
Change-Id: I8025abd76528f96e3b1835c6119a7b677b9fb677
68645 master J !B ✓T ✓R 3/2
LU-10499 pcc: fix attach thread limit debug and man page
reviewing Oleg Drokin · you voted +1 on current PS
master-next 2 unresolved S +28 −14
8d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131068 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-08 18:30 · Andreas Dilger +1 2026-09-06 17:22 · Patrick Farrell +1 2026-09-04 21:50
threads: 2 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-09-06 00:07 Gerrit AI review for Lustre llite.pcc_attach_thread_max.4:47 — (minor) This new sentence is right - the background threads only exist for the automatic PCC-RO attach done from ll_file_open()->pcc_file_op
Gerrit AI review for Lustre PS1 · 2026-09-06 00:07
(minor) This new sentence is right - the background threads only exist for the automatic PCC-RO attach done from ll_file_open()->pcc_file_open()->pcc_try_readonly_open_attach()->pcc_do_readonly_attach().

But it now sits under the paragraph's opening sentence, which says the copy threads are started "to perform the lfs-pcc-attach(1) operation". An explicit `lfs pcc attach` goes LL_IOC_PCC_ATTACH->pcc_ioctl_attach()->pcc_readonly_attach_sync(), which never starts a thread and never touches pccs_attach_thread, so this tunable has no effect on it.

The wrong attribution is pre-existing (it came in with the page), but since this patch is making the DESCRIPTION accurate, would it be worth saying the threads are used for automatic PCC-RO attach at open(2) time rather than for lfs-pcc-attach(1)?
reply PS1 2026-09-06 00:07 Gerrit AI review for Lustre pcc.c:3827 — (nit) %zd is the right conversion for the ssize_t now, but `ret` is only an errno when it is negative - on success it is the number of bytes
Gerrit AI review for Lustre PS1 · 2026-09-06 00:07
(nit) %zd is the right conversion for the ssize_t now, but `ret` is only an errno when it is negative - on success it is the number of bytes copied by pcc_copy_data(), so "rc = 268435456" reads oddly. If the patch is refreshed anyway, something like "copied %zd bytes" or splitting the success/error wording would match what is actually being printed.
owner Oleg Drokin · uploader Oleg Drokin · PS1 uploaded 12d ago · NEW · open in Gerrit ↗
commit message
LU-10499 pcc: fix attach thread limit debug and man page

The CDEBUG that reports the attach thread limit forcing a
synchronous attach sits in the file-size branch of
pcc_do_readonly_attach(), so it prints for every file below
pccs_async_threshold and never for the case it describes.  Move
it into the thread-limit branch, which is the one an admin needs
to see when an attach silently becomes synchronous inside open(),
and print the active attach count next to the limit, since the
count can legitimately run past the limit by the number of
threads attaching concurrently.

pcc_attach_data_archive() prints the ssize_t returned by
pcc_copy_data() with %llu, so an error return renders as a huge
unsigned value instead of the negative errno.  Use %zd.

In llite.pcc_attach_thread_max.4, give the first example its
missing .EX, correct the second example to set
pcc_attach_thread_max rather than enable_setstripe_gid, resolve
the "Added in commit" placeholder, and say that the limit is
advisory and that attaches past it run synchronously inside
open().  Also align the continuation lines of the
pcc_attach_thread_max sysfs handlers with the open parenthesis.

Test-Parameters: trivial
Fixes: 91063238818f ("LU-10499 pcc: Limit attach queue depth")
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Change-Id: I8144474943d581a4061d4741c703cdda4aae974a
68167 master J !B –T –R 2/2
LU-20612 lnet: "peer set --state" keeps peer
reviewing Cyril Bordage · you voted +1 on current PS
master-next S +36 −1
8d
janitor run: 4 failing config(s), none unique to this patch — janitor results
reviews: James Simmons +1 2026-09-08 14:21 · Chris Horn +1 2026-09-08 14:21
patchsets: PS1 08-20 PS2 08-20 PS3 09-03 PS4 09-08
your previous vote: +1 on PS3 (2026-09-05 16:14) — now at PS4
owner Cyril Bordage · uploader Cyril Bordage · PS4 uploaded 9d ago · NEW · open in Gerrit ↗
commit message
LU-20612 lnet: "peer set --state" keeps peer

An "lnetctl peer set --nid <nid> --state <state>" is treated as an
implicit "peer del" since no "peer ni" nor health was sent.

A simple way to reproduce that is:
    lnetctl peer show --nid $nid
    lnetctl peer set --nid $nid --state $state
    lnetctl peer show --nid $nid # empty

This is fixed by letting NLM_F_REPLACE case exclude peer deletion (as
it was for NLM_F_CREATE).

Fixes: 8a0fdfa0b281 ("LU-10391 lnet: migrate peer NI control to Netlink")
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Cyril Bordage <cbordage@whamcloud.com>
Change-Id: I35903d6adee2290e72db5ddd2cf068abd6e432b0
64359 master J !B ✓T ✓R 3/2
LU-19536 osc: remove dead DIO handling from sync path
reviewing Patrick Farrell · you voted +1 on current PS
LU-19536-dio-fixes master-next 3 unresolved S +17 −32
9d
janitor run: 3 failing config(s), none unique to this patch — janitor results
build #130778 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-09-02 12:55 · Marc Vef +1 2026-09-02 12:58 · Vitaliy Kuznetsov +1 2026-09-02 12:56
no vote yet: Qian Yingjin, Andreas Dilger
patchsets:
+10 earlier PS1 03-04 PS2 03-04 PS3 03-04 PS4 03-04 PS5 03-04 PS6 03-04 PS7 07-29 Vitaliy Kuznetsov PS8 07-29 Vitaliy Kuznetsov PS9 07-30 Vitaliy Kuznetsov PS10 08-03 Vitaliy Kuznetsov
PS11 08-03 Vitaliy Kuznetsov PS12 08-21 James Simmons PS13 08-24 Vitaliy Kuznetsov PS14 08-25 Vitaliy Kuznetsov PS15 09-01 Marc Vef
your previous vote: +1 on PS12 (2026-08-22 16:18) — now at PS15
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS12 2026-08-22 23:01 Gerrit AI review for Lustre COMMIT_MSG:7 — (suggestion) Is LU-19536 the right ticket for this one? That ticket is "fault_in_iov_iter_readable() with a spinlock held" and its descripti
Gerrit AI review for Lustre PS12 · 2026-08-22 23:01
(suggestion) Is LU-19536 the right ticket for this one? That ticket is "fault_in_iov_iter_readable() with a spinlock held" and its description is about ll_direct_IO() faulting in the user iovec while holding csd_lock, which this patch doesn't touch. This is a pure dead-code removal in the LOV/OSC submit paths, so a separate cleanup ticket (or a note in LU-19536 explaining the link) would make it easier to find later.
reply PS11 2026-08-22 04:56 Andreas Dilger lov_io.c:1661 — Should be cleaned up in a later patch
Gerrit AI review for Lustre PS11 · 2026-08-04 00:25
(suggestion) This is the last DIO assumption left in lov_io_submit(), and the patch's own premise says it can no longer hold: every page that reaches here now comes from a cl_page_list, and the only CPT_TRANSIENT pages in the tree are built by ll_direct_rw_pages() into a cl_dio_pages, which goes to lov_dio_submit() instead. So an empty page arriving here would be CPT_CACHEABLE and this would LBUG.

In practice the branch looks unreachable too - lov_page_init_empty() does SetPageUptodate(), and all four submit paths (ll_readpage(), ll_read_ahead_page(), ll_prepare_partial_page(), ll_io_zero_page()) skip uptodate pages before queueing. If so the whole block is dead and could go with the rest of the DIO leftovers.

The comment is stale either way: cl_page_prep() here was removed by 169f076ae0 ("LU-13814 clio: remove cl_page_prep for transients").
Andreas Dilger PS11 · 2026-08-22 04:56
Should be cleaned up in a later patch
reply PS11 2026-08-22 04:56 Andreas Dilger osc_cache.c:3044 — Should be done in a separate path
Gerrit AI review for Lustre PS11 · 2026-08-04 00:25
(minor) Not a bug, but with `dio` dropped the only remaining value in this message is `ext->oe_srvlock`, and the enclosing condition is `dlmlock == NULL && !ext->oe_srvlock` - so it always prints `srvlock: 0`. If the patch is refreshed, either drop that field or print something that varies, e.g. `oe_rw`.
Andreas Dilger PS11 · 2026-08-22 04:56
Should be done in a separate path
owner Patrick Farrell · uploader Marc Vef · PS15 uploaded 16d ago · NEW · open in Gerrit ↗
commit message
LU-19536 osc: remove dead DIO handling from sync path

Since LU-13814 routed DIO through cio_dio_submit() and cl_dio_pages,
DIO pages no longer reach lov_io_submit(), osc_io_submit(), or
osc_queue_sync_pages(). The DIO-specific branches left in the
ordinary page-list path are therefore dead.

Remove the stale DIO handling from the LOV submit path, so that it
always groups pages by stripe, and drop the sync_io anchor setup
from osc_queue_sync_pages(), whose oe_csd is only consumed for
unaligned DIO writes.

The branch in osc_io_submit() is not DIO-specific: it tests for
cp_type == CPT_TRANSIENT. Transient pages have no page cache state
and are never owned by an io, so they must not be passed to
cl_page_prep(), and osc_prep_async_page() has already set their
async flags. Keep that handling and rename the local from "dio" to
"transient" to say what it tests, and keep deriving oe_dio from
OBD_BRW_NOCACHE so that transient extents stay out of overlapping
RPC merges.

Assisted-by: ClaudeCode:Opus-5 llm_code_and_review_tools
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Signed-off-by: Vitaliy Kuznetsov <vkuznetsov@ddn.com>
Signed-off-by: Marc Vef <mvef@whamcloud.com>
Change-Id: I63711a7f3bc3699680e1c09d3349291ccebb75ec
56435 master J !B ✗T –R 0/2−
LU-18231 odb: add a TODO to remove the spinlock for odb_flags
reviewing Ronnie Sahlberg · you voted -1 on current PS
XS +3 −1
13d
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 716d 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
67235 master J ✗1B ✓T ✓R 1/2
LU-20479 utils: fix use-after-free in cYAML_build_error
reviewing Chris Horn · you voted +1 on current PS
S +25 −6
14d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanityn@zfs+DNE:test_102NEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #129419 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-31 14:06
no vote yet: Serguei Smirnov, Andreas Dilger, Timothy Day
patchsets: PS1 07-14 PS2 08-11 PS3 08-14
owner Chris Horn · uploader Chris Horn · PS3 uploaded 33d ago · NEW · open in Gerrit ↗
commit message
LU-20479 utils: fix use-after-free in cYAML_build_error

cYAML_build_error() locates the command node with
cYAML_get_object_item(), which searches the tree recursively. The
commands are direct children of the error root, but the entities
below them are not, so the recursive search can return an entity
that happens to share a name with the command being looked up. It
then finds a node that is not a sequence and takes the failure
path, which frees the error tree, reports "fatal: out of memory"
and leaves the caller's pointer dangling, because that path clears
a local variable rather than *root. The caller goes on to build
further errors into, and finally print, freed memory.

The error trees built by the liblnetconfig YAML handlers are long
lived enough to hit this. lnetctl uses those handlers whenever the
Netlink API is bypassed - "lnetctl import --old-api", which
sanity-lnet test_170 relies on, and the fallbacks taken when the
Netlink socket cannot be allocated or its parser cannot be
initialized.

Importing a config whose conns_per_peer is out of range trips it.
handle_yaml_config_ni() rejects the value and builds a "ni" command
holding an "add" entity. The "global" section that follows is then
configured with the "add" command, so the recursive lookup finds
the "add" entity of the earlier "ni" error rather than a command,
and lnetctl frees the error tree and then segfaults while reporting
the settings it applied.

That pair is not the only way in. "net", "peer" and "set" are each
used as both a command and an entity name, and the interfaces error
in handle_yaml_config_ni() builds the same "ni"/"add" shape, so
this was reachable before the conns_per_peer check was added.

Look the command up among the direct children of the error root,
and clear the caller's pointer when the tree is freed.

Fixes: c906ab9c88ef ("LU-7734 lnet: configuration fixes")
Assisted-by: Claude:claude-opus-4.8
Test-Parameters: trivial
Signed-off-by: Chris Horn <chorn@ddn.com>
Change-Id: Ibcaffcd7227accd233b299392f983575d9c6bad4
68247 master J !B ✓T ✓R 1/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
15d
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 24d 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
68338 master J !B ✓T ✓R 0/2−
LU-19404 lnet: retry netlink dump on ENOBUFS
reviewing Minh · you voted -1 on current PS
5 unresolved M +107 −3
22d
janitor run: 5 failing config(s), none unique to this patch — janitor results
reviews: James Simmons -1 2026-08-25 15:42
no vote yet: Alexey Lyashkov, Serguei Smirnov, Andreas Dilger
patchsets: PS1 08-25 PS2 08-25
threads: 0 need your reply · 0 waiting on others · 5 own notes · 0 bot
note PS2 2026-08-25 16:11 James Simmons liblnetconfig_netlink.c:891 — Which is better? The error messages of libnl or the error messages of strerror(). I went with the libnl ones.
James Simmons PS2 · 2026-08-25 16:11
Which is better? The error messages of libnl or the error messages of strerror(). I went with the libnl ones.
note PS2 2026-08-25 16:11 James Simmons liblnetconfig_netlink.c:1009 — We could set data->error = -errno;
James Simmons PS2 · 2026-08-25 16:11
We could set data->error = -errno;
note PS2 2026-08-25 16:11 James Simmons liblnetconfig_netlink.c:1016 — According to libnl library code nl_syserr2nlerr() maps NLE_NOMEM to ENOBUFS. So if rc is a -NLE_* error then the correct thing to do is
James Simmons PS2 · 2026-08-25 16:11
According to libnl library code nl_syserr2nlerr() maps NLE_NOMEM to ENOBUFS. So if rc is a -NLE_* error then the correct thing to do is

data->errmsg = nl_geterror(rc);
data->error = -errno;

NLE_NOMEM is broken for you?
note PS2 2026-08-25 16:11 James Simmons liblnetconfig_netlink.c:1019 — Yes I never set data->error :-(
James Simmons PS2 · 2026-08-25 16:11
Yes I never set data->error :-(
note PS2 2026-08-25 16:13 James Simmons lnetctl.c:2431 — we need to allocate large cb->min_dump_alloc. Otherwise we get this retry loops. Ugh what a mess.
James Simmons PS2 · 2026-08-25 16:11
This is why I told Alexey
James Simmons PS2 · 2026-08-25 16:13
we need to allocate large cb->min_dump_alloc. Otherwise we get this retry loops. Ugh what a mess.
owner Minh · uploader Minh · PS2 uploaded 23d 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
claiming "errno: 0" / "Out of memory" on a host with plenty of
free memory. A rerun succeeds.

lnet_net_show_start() sets cb->min_dump_alloc = U16_MAX, requiring
an order-5 alloc_skb() per dump chunk. Above
PAGE_ALLOC_COSTLY_ORDER this fails under memory fragmentation
regardless of available memory, stalling the dump with ENOBUFS.
libnl reports this as NLE_NOMEM ("Out of memory"), and the read
handler never records an errno for it, hence "errno: 0". The
dump is unrecoverable on that socket; only a fresh request
recovers.

Retry the whole request on a fresh socket, bounded with
exponential backoff, when a dump-mode request fails with
ENOBUFS/ENOMEM. Report the real errno instead of libnl's
conflating NLE_NOMEM text.

Adds sanity-lnet test_306, which reproduces the failure reliably
under concurrent `lnetctl net show -v` plus discovery churn.

Fixes: fff650726b2b ("LU-13642 lnet: Allow dynamic IP specification")
TLC-bug-id: TLU-226
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Change-Id: I6906afe6cca3f80b556152a94ed627d6b75631e9
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
22d
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 24d 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
23d
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 24d 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
23d
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 24d 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
24d
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 24d 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
66204 master J !B ✓T ✓R 2/2−
LU-20310 mdt: fix remaining checkpatch.pl warnings
reviewing Timothy Day · you voted +1 on current PS
5 unresolved L +158 −118
28d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #127562 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-06 19:54 · Arshad Hussain +1 2026-07-21 04:26 · Oleg Drokin -1 2026-08-18 21:49
no vote yet: Andreas Dilger
patchsets: PS1 05-27 PS2 07-14
threads: 5 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS2 2026-07-28 08:33 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) The body is a sentence fragment continuing the subject; the house rules ask for an opening paragraph stating what the patch accompli
Gerrit AI review for Lustre PS2 · 2026-07-28 08:33
(style) The body is a sentence fragment continuing the subject; the house rules ask for an opening paragraph stating what the patch accomplishes before saying how.

It also no longer covers the whole diff: the comment rewording in mdt_hsm_cdt_start() is a hand edit, not something --fix-inplace produces. Worth a line saying that some of checkpatch's automatic fixes were adjusted by hand.
reply PS1 2026-06-22 09:53 Arshad Hussain mdt_coordinator.c:1289 — This should not be removed, IMO.
Arshad Hussain PS1 · 2026-06-22 09:53
This should not be removed, IMO.

OR

to avoid deadlock when start is made through sysfs,
whose entries are created by the coordinator thread

Just pausing +1 for this.
reply PS2 2026-08-18 21:49 Oleg Drokin mdt_handler.c:2014 — ugh, I think this is a pretty valid complaint. (and all the other ones below)
Gerrit AI review for Lustre PS2 · 2026-07-28 08:33
(minor) checkpatch's repeated-word check fires on kernel-doc `\param <name> <description>` whenever the description opens with the parameter name, and the automatic fix drops the description word rather than the duplicate name. Here "parent parent object" becomes "parent object", so `parent` is now documented only as "object".

The same auto-fix already had to be reverted by hand in mdt_hsm_cdt_start(), where it deleted a whole comment line. Can this one be restored too?
Oleg Drokin PS2 · 2026-08-18 21:49
ugh, I think this is a pretty valid complaint. (and all the other ones below)
reply PS2 2026-07-28 08:33 Gerrit AI review for Lustre mdt_handler.c:8436 — (minor) Same repeated-word auto-fix on kernel-doc: "mdt mdt device" became "mdt device", so the description for `mdt` is now just "device".
Gerrit AI review for Lustre PS2 · 2026-07-28 08:33
(minor) Same repeated-word auto-fix on kernel-doc: "mdt mdt device" became "mdt device", so the description for `mdt` is now just "device". Restoring "mdt device" keeps the doc intact and does not reintroduce a real warning.
reply PS2 2026-07-28 08:33 Gerrit AI review for Lustre mdt_handler.c:8460 — (minor) Same as in mdt_enable_cos() just above - the `mdt` description lost its leading word to the repeated-word auto-fix.
Gerrit AI review for Lustre PS2 · 2026-07-28 08:33
(minor) Same as in mdt_enable_cos() just above - the `mdt` description lost its leading word to the repeated-word auto-fix.
owner Timothy Day · uploader Timothy Day · PS2 uploaded 65d 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
66209 master J !B ✓T ✓R 2/2−
LU-20310 lod: fix remaining checkpatch.pl warnings
reviewing Timothy Day · you voted +1 on current PS
3 unresolved M +151 −67
29d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #127565 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2026-08-06 19:50 · Arshad Hussain +1 2026-07-15 05:05
no vote yet: Andreas Dilger
patchsets: PS1 05-27 PS2 07-14 PS3 07-14
threads: 3 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-07-28 08:27 Gerrit AI review for Lustre lod_lov.c:2367 — (style) Another partially merged string - "(component size)\n" is still on its own line. Not a bug, just incomplete; a second --fix-inplace
Gerrit AI review for Lustre PS3 · 2026-07-28 08:27
(style) Another partially merged string - "(component size)\n" is still on its own line. Not a bug, just incomplete; a second --fix-inplace pass joins it.
reply PS3 2026-07-28 08:27 Gerrit AI review for Lustre lod_object.c:940 — (style) This isn't a bug, but the string is still split: only the first two fragments got merged, leaving DFID stranded at the start of a co
Gerrit AI review for Lustre PS3 · 2026-07-28 08:27
(style) This isn't a bug, but the string is still split: only the first two fragments got merged, leaving DFID stranded at the start of a continuation line. Same half-merge at lines 7312 and 7713. A second --fix-inplace pass coalesces the rest (it merges one adjacent pair per run).
reply PS3 2026-07-28 08:27 Gerrit AI review for Lustre lod_object.c:7748 — (typo) While this string is being rewritten anyway: "does not covers" -> "does not cover".
Gerrit AI review for Lustre PS3 · 2026-07-28 08:27
(typo) While this string is being rewritten anyway: "does not covers" -> "does not cover".

The trailing DEXT is also left alone on the next line; folding it in reads better.
owner Timothy Day · uploader Timothy Day · PS3 uploaded 65d 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
65830 master J ✓B ✓T ✗1R 2/2
LU-20246 tests: handle small test nodes with ncpt < 2
reviewing Shaun Tancheff · you voted +1 on current PS
XS +4 −2
33d
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 38d 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
66902 master J ✗1B ✓T ✓R 2/2−
LU-18687 build: Move LL_BDI_CAP_FLAGS compat backing-dev.h
reviewing Shaun Tancheff · you voted -1 on current PS
5 unresolved M +33 −18
43d
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 82d 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
67519 master J ✗1B ✓T ✗1R 0/2−
LU-18687 build: normalize lustre_compat headers
reviewing Timothy Day · you voted -1 on current PS
1 unique failure 12 unresolved L +264 −401
48d
janitor flagged test failures unique to this patch — full janitor results
unique failing testhistory
sanity-lfsck@ldiskfs+DNE:test_18cseen in 5 other reviews
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 8.10 / x86_64 ran 7 tests. 1 tests failed: sanity. session
build #128069 SUCCESS · tests all Maloo sessions
reviews: James Simmons -1 2026-07-24 18:22
no vote yet: Shaun Tancheff, Andreas Dilger
patchsets: PS1 07-24 PS2 07-24 PS3 07-24
threads: 12 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre COMMIT_MSG:11 — The body only describes the #include_next shadowing, but a fair number of hunks do something else and aren't mentioned:
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
The body only describes the #include_next shadowing, but a fair number of hunks do something else and aren't mentioned:

- the `iov_iter_is_pipe()` guards deleted from `ll_hybrid_bio_dio_switch_check()`, `ll_file_io_generic()` and `ll_direct_IO()`
- `iov_iter_is_aligned()` replaced by `iov_iter_alignment()` in `ll_iov_iter_is_unaligned()`
- `ll_xa_insert()` replaced by `xa_insert()` in nrs_orr.c
- `LASSERT(!mmap_write_trylock())` replaced by `mmap_assert_write_locked()` in `our_vma()`
- dropping `HAVE_GENL_DUMPIT_INFO_FAMILY` / `compat_genl_info` and using `&lustre_family` directly
- moving `VFS_MKDIR_DELEGATE()`/`ll_vfs_mkdir()`/`ll_vfs_getattr()` into lustre_compat.h, and the new `DTTOIF()` and `PROC_OWNER()` definitions

Could these be called out, and the behaviour-changing ones split into separate patches? The `build:` component tag also doesn't really fit hunks that change llite I/O and ptlrpc NRS behaviour.
reply PS1 2026-07-24 16:17 Timothy Day patchset comment — This is how I think lustre_compat headers should be used.
Timothy Day PS1 · 2026-07-24 16:17
This is how I think lustre_compat headers should be used.
reply PS3 2026-07-30 18:44 Timothy Day lustre-libcfs.m4:148 — I'm split this change off into another patch.
James Simmons PS3 · 2026-07-24 18:22
Please don't remove this
Timothy Day PS3 · 2026-07-24 18:23
Why?
Timothy Day PS3 · 2026-07-30 18:44
I'm split this change off into another patch.
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre inetdevice.h:8 — This file is now a pure pass-through to the kernel header - as is include/lustre_compat/linux/xarray.h. Worth deleting both and letting call
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
This file is now a pure pass-through to the kernel header - as is include/lustre_compat/linux/xarray.h. Worth deleting both and letting callers include the real headers?

In the same vein, the patch removes LIBCFS_GENL_DUMPIT_INFO_FAMILY but leaves behind autoconf tests whose macros no longer have a single user: HAVE_IN_DEV_FOR_EACH_IFA_RTNL (config/lustre-lnet.m4), HAVE_ENUM_ITER_PIPE and HAVE_IOV_ITER_IS_ALIGNED (config/lustre-core.m4).
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre mmap_lock.h:12 — The `#include_next` is unconditional, so on a kernel that predates `<linux/mmap_lock.h>` (v5.8) preprocessing fails here and the `#ifndef HA
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
The `#include_next` is unconditional, so on a kernel that predates `<linux/mmap_lock.h>` (v5.8) preprocessing fails here and the `#ifndef HAVE_MMAP_LOCK` block below can never be compiled. Either the fallback is dead and can go, or the include needs guarding the way net/netdev_lock.h does it.

Related: `our_vma()` in lustre/llite/llite_mmap.c now calls `mmap_assert_write_locked()`, which also only exists from v5.8, so it depends on the same assumption. Note that unlike the old `LASSERT()`, `mmap_assert_write_locked()` is a no-op unless CONFIG_DEBUG_VM is set.
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre lprocfs_status.h:41 — In an out-of-tree build `<linux/proc_fs.h>` a few lines above always resolves to the lustre_compat shim, which defines `PROC_OWNER` in both
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
In an out-of-tree build `<linux/proc_fs.h>` a few lines above always resolves to the lustre_compat shim, which defines `PROC_OWNER` in both arms of its `#ifdef HAVE_PROC_OPS`. So this `#ifndef` can never fire, and the comment's "builds that do not see the shim" case doesn't exist in this tree.

If it ever did fire on a pre-5.6 kernel it would be worse than dead code: `PROC_OWNER(THIS_MODULE)` at line 867 would silently expand to nothing, dropping `.owner` from the `file_operations` and letting the module unload while a /proc file is open. Could this just be dropped (or made an `#error`) rather than a silent no-op?
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre lustre_compat.h:81 — This duplicates the `DTTOIF()` already in include/lustre_compat/linux/fs.h, which this file pulls in via `<linux/fs.h>` at the top - so the
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
This duplicates the `DTTOIF()` already in include/lustre_compat/linux/fs.h, which this file pulls in via `<linux/fs.h>` at the top - so the `#ifndef` is always false. It also depends on `S_DT_SHIFT`, which only that same shim defines. One home for the macro would be less confusing.
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre file.c:2017 — Dropping the pipe check here changes behaviour on every kernel before v6.4, where ITER_PIPE still exists (RHEL8/RHEL9, SLES15, and mainline
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
Dropping the pipe check here changes behaviour on every kernel before v6.4, where ITER_PIPE still exists (RHEL8/RHEL9, SLES15, and mainline < 6.4 are all in that set).

`pcc_file_splice_read()` -> `generic_file_splice_read()` builds an ITER_PIPE iterator and calls `->read_iter`, so `ll_file_read_iter()` does get a pipe iterator here. Once `count` reaches `ll_hybrid_io_read_threshold_bytes` the switch now sets IOCB_DIRECT on it, which is exactly what the removed check was preventing.

If the intent is that ITER_PIPE no longer matters, could the compat `iov_iter_is_pipe()` be kept (it was three lines under `#ifndef HAVE_ENUM_ITER_PIPE`) until the pre-6.4 kernels are dropped?
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre file.c:2101 — Same concern as the hybrid-switch hunk: parallel DIO was explicitly disabled for pipe iterators because that path returns -EIOCBQUEUED, and
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
Same concern as the hybrid-switch hunk: parallel DIO was explicitly disabled for pipe iterators because that path returns -EIOCBQUEUED, and `is_parallel_dio = !is_aio` now enables it for them on pre-6.4 kernels.
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre rw26.c:434 — Both comment blocks here now describe code that no longer exists - there is no pipe rejection left, and nothing "returns 0 here". They read
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
Both comment blocks here now describe code that no longer exists - there is no pipe rejection left, and nothing "returns 0 here". They read as if they belong to the `if (unaligned && ...)` below them, which they don't.

More importantly, with the `iov_iter_is_pipe(iter)` early return gone, a splice/sendfile read from an O_DIRECT file on a kernel that still has ITER_PIPE reaches `ll_direct_rw_pages()` and `iov_iter_get_pages_alloc2()` instead of falling back to buffered I/O - which is what the comment says must not happen.
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre rw26.c:578 — `generic_file_splice_read()` uses a synchronous kiocb, so returning -EIOCBQUEUED to it surfaces as an error to `splice()`/`sendfile()` rathe
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
`generic_file_splice_read()` uses a synchronous kiocb, so returning -EIOCBQUEUED to it surfaces as an error to `splice()`/`sendfile()` rather than being completed later. The `!iov_iter_is_pipe(iter)` term that used to guard this was the reason the pipe case returned 0 further up.
reply PS3 2026-07-27 20:20 Gerrit AI review for Lustre nrs_orr.c:940 — `ll_xa_insert()` existed only to fold -EEXIST into -EBUSY for kernels older than v5.0 (fd9dc93e3623 "XArray: Change xa_insert to return -EBU
Gerrit AI review for Lustre PS3 · 2026-07-27 20:20
`ll_xa_insert()` existed only to fold -EEXIST into -EBUSY for kernels older than v5.0 (fd9dc93e3623 "XArray: Change xa_insert to return -EBUSY"). The retry below still only tests for -EBUSY.

On any supported kernel whose `xa_insert()` still returns -EEXIST, a lost insert race no longer does `goto try_again` - it frees `orro` and returns the error, `nrs_resource_get()` turns that into NULL, and the request silently falls back to the FIFO policy instead of TRR. Has that been confirmed impossible on the oldest supported kernel (the RHEL8 XArray backport)? If so, the commit message is the place to say it.

Unrelated nit: the continuation line is no longer aligned with the open paren after the rename.
owner Timothy Day · uploader Timothy Day · PS3 uploaded 55d ago · NEW · open in Gerrit ↗
commit message
LU-18687 build: normalize lustre_compat headers

lustre_compat headers should not appear in core kernel
code. Instead, they should shadow native linux headers
using #include_next.

Test-Parameters: trivial
Signed-off-by: Timothy Day <timday@thelustrecollective.com>
Change-Id: If39a50a1fd663875d51c73cd7313fccf965620e2
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
L +272 −503
54d
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 83d 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 · you voted +1 on current PS
2 unresolved L +236 −399
68d
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 83d 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
66818 master J –B ✓T ✓R 3/2
LU-20418 build: Move libcfs early checks to ksym checks
reviewing Shaun Tancheff · you voted +1 on current PS
1 unresolved M +42 −59
68d
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 83d 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
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
M +84 −140
76d
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 83d 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
L +204 −350
76d
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 83d 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
L +220 −382
76d
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 83d 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
L +321 −562
76d
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 83d 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
63234 master J !B ✓T ✓R 0/2−
LU-9642 osc: Add kernel doc style for OSC (2)
reviewing Arshad Hussain · you voted -1 on current PS
dwg 1 unresolved M +111 −23
86d
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 115d 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
65122 master J !B ✓T ✓R 0/2−
LU-20085 llite: client vfs rename hang
reviewing Alexander Zarochentsev · you voted -1 on current PS
5 unresolved S +45 −0
87d
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 160d 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 3/2−
LU-9646 lov: Add kernel doc style for LOV (3)
reviewing Arshad Hussain · you voted +1 on current PS
dwg stalled 101d M +95 −75
101d
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 113d 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 2/2−
LU-9650 mdc: Add kernel doc style for MDC (2)
reviewing Arshad Hussain · you voted +1 on current PS
dwg stalled 110d M +52 −30
110d
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 115d 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 111d M +192 −34
111d
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 299d 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 111d S +9 −2
111d
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 252d 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 0/2−
LU-13903 build: Always include OpenSFS UAPI headers
reviewing Neil Brown · you voted -1 on current PS
stalled 112d XS +2 −2
112d
build #16077 SUCCESS
reviews: James Simmons -1 2020-08-12 13:14
owner Neil Brown · uploader Neil Brown · PS1 uploaded 2227d 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 1/2−
LU-20101 osp: release procfs entries early
reviewing Alex Zhuravlev · you voted +1 on current PS
stalled 116d XS +1 −0
116d
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 134d 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 126d L +149 −145
126d
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 244d 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 126d M +88 −98
126d
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 244d 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 126d M +52 −45
126d
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 244d 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 126d L +142 −157
126d
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 244d 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 133d XS +1 −1
133d
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 155d 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 2/2−
LU-19922 mdc: free procfs entries early
reviewing Alex Zhuravlev · you voted +1 on current PS
stalled 170d XS +1 −1
170d
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 171d 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 0/2−
LU-19918 lnet: fix lnetctl import segfault with NID ranges
reviewing Stephane Thiell · you voted -1 on current PS
2 unique failures stalled 171d M +169 −1
171d
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 173d 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 198d S +24 −20
198d
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 719d 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 271d S +40 −2
271d
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 776d 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 272d M +171 −22
272d
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 272d 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 · you voted +1 on current PS
stalled 295d S +12 −12
295d
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 295d 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 325d S +44 −0
325d
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 328d 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 1/2−
LU-14295 o2iblnd: update default peer_credits value
reviewing Amir Shehata · you voted +1 on current PS
stalled 393d XS +2 −2
393d
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 884d 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 0/2−
LU-19080 shrinker: make ll_shrinker_create() compilable
reviewing Vladimir Saveliev · you voted -1 on current PS
stalled 400d XS +2 −2
400d
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 472d 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 0/2−
LU-14408 llite: add a Lustre inode cache shrinker
reviewing Etienne AUJAMES · you voted -1 on current PS
stalled 408d 1 unresolved L +474 −28
408d
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 751d 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
57546 master J !B ✓T ✓R 3/2
LU-16565 llite: Remove ldlm is,set,clear macros
reviewing Timothy Day · you voted +1 on current PS
ldlm_flags_remove stalled 408d S +8 −6
408d
janitor run: 9 failing config(s), none unique to this patch — janitor results
1 optional test failure(s) — informational
build #109861 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2025-03-02 00:30 · Arshad Hussain +1 2025-03-02 08:18 · Shaun Tancheff +1 2025-03-02 06:57
no vote yet: Andreas Dilger, Oleg Drokin
owner Timothy Day · uploader Timothy Day · PS1 uploaded 636d ago · NEW · open in Gerrit ↗
commit message
LU-16565 llite: 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: I7a3c639c1c961e8e7a36049dd945e228310c81bd
13342 master J –B ✓T ✓R 0/2−
LU-5570 lnet: check router aliveness timestamp
reviewing Liang Zhen · you voted -1 on current PS
stalled 408d M +122 −84
408d
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 4266d 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 0/2−
LU-10003 tests: replace lctl with lnetctl for lnet
reviewing Amir Shehata · you voted -1 on current PS
stalled 408d M +35 −18
408d
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 2864d 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 3/2−
LU-10669 lnet: do not assert in lnet_msg_detach_md()
reviewing Amir Shehata · you voted +1 on current PS
stalled 408d S +19 −0
408d
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 3136d 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 0/2−
LU-11735 lnd: clean up fmr/FastReg condition
reviewing Amir Shehata · you voted -1 on current PS
stalled 408d M +55 −26
408d
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 2828d 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 · you voted +1 on current PS
stalled 408d M +42 −47
408d
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 2027d 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 0/2−
EXA-4252 debian: remove mpi dependency in debs
reviewing Louis Douriez · you voted -1 on current PS
stalled 408d S +6 −6
408d
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 1707d 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 0/2−
LU-15501 obdclass: cli access in obd_set_max_rpcs_in_flight racy
reviewing Oleg Drokin · you voted -1 on current PS
1 unique failure stalled 408d S +26 −3
408d
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 1692d 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 0/2−
LU-16053 build: osd-zfs use parallel configure macros
reviewing Brian Behlendorf · you voted -1 on current PS
stalled 408d L +550 −355
408d
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 1134d 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 2/2−
LU-13642 lnet: Allow static IP specification
reviewing Frank Sehr · you voted -1 on current PS
stalled 408d 1 unresolved L +266 −20
408d
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 1295d 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
51162 master J !B ✓T ✓R 3/2
LU-16858 build: remove flock config option
reviewing Patrick Farrell · you voted +1 on current PS
stalled 409d S +0 −19
409d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #95180 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-05-31 19:43 · Sebastien Buisson +1 2023-05-31 08:46 · Andreas Dilger +1 2023-05-30 21:34
owner Patrick Farrell · uploader Patrick Farrell · PS1 uploaded 1205d ago · NEW · open in Gerrit ↗
commit message
LU-16858 build: remove flock config option

flock'ing can be turned on and off at mount time, so a
configure option to change the default behavior is rather
odd and is not actually used.  So let's remove it.

Note despite the slightly confusing phrasing in the code,
flock is *on* by default and this lets you change the
mount time default to off.  So this patch is not changing
the 'normal' runtime flock behavior.

test-parameters: trivial

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: If2706506135264f501c6cbc6243ed449f9792605
51163 master J !B ✓T ✓R 3/2
LU-16858 build: Remove checksum config option
reviewing Patrick Farrell · you voted +1 on current PS
stalled 409d S +0 −21
409d
janitor run: 2 failing config(s), none unique to this patch — janitor results
build #95181 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2023-05-31 19:43 · Sebastien Buisson +1 2023-05-31 08:47 · Andreas Dilger +1 2023-05-30 21:33
owner Patrick Farrell · uploader Patrick Farrell · PS1 uploaded 1205d ago · NEW · open in Gerrit ↗
commit message
LU-16858 build: Remove checksum config option

Lustre is never built without checksum support and it can
be disabled at runtime if needed.  Remove the config
option.

Unlike some of the config removals, this one required
almost no changes, so I've marked it trivial.

test-parameters: trivial

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I04ea24a8a8ae1d41e70113438b8a7abaa6826231
51165 master J !B ✓T ✗4R 2/2
LU-14639 build: Remove disable-lru-resize config
reviewing Patrick Farrell · you voted +1 on current PS
stalled 409d 1 unresolved M +2 −126
409d
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 1205d 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 1/2−
LU-17022 obdclass: rename obd_dev_lock to obd_devs_lock
reviewing Neil Brown · you voted -1 on current PS
stalled 409d M +88 −89
409d
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 1135d 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 2/2−
LU-11824 build: Optionally package LNDs in their own RPM
reviewing Sebastien Piechurski · you voted -1 on current PS
stalled 409d S +40 −2
409d
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 2274d 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 0/2−
LU-18227 ldiskfs: refresh Ubuntu 22.04 5.15
reviewing Shaun Tancheff · you voted -1 on current PS
stalled 415d XL +1784 −8
415d
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 527d 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 612d XS +7 −2
612d
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 1554d 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>
54495 master J –B ✓T ✓R 2/2
LU-10499 tests: use smaller files in sanity-pcc/103+104
reviewing Qian Yingjin · you voted +1 on current PS
stalled 646d M +56 −25
646d
build #107947 SUCCESS · tests all Maloo sessions
reviews: James Simmons +1 2024-12-10 01:01 · Andreas Dilger +1 2024-09-27 03:07
no vote yet: Feng Lei
patchsets: PS1 03-21 PS2 09-25 PS3 09-26 PS4 09-26
owner Qian Yingjin · uploader Qian Yingjin · PS4 uploaded 721d ago · NEW · open in Gerrit ↗
commit message
LU-10499 tests: use smaller files in sanity-pcc/103+104

Running fallocate is fast, but the actual PCC data copy may be slow.
Use smaller test files for sanity-pcc test_103 and test_104 to speed
up testing, and also wait longer in case the copy is slow.

Add some extra debugging on failure so we can see the file attach
state on failure, in case there is something wrong with the parsing.

EX-8466 tests: limit 'cmp' output in sanity-pcc.sh

Limit the number of lines printed by 'cmp' when there is an error
comparing two files.  Often the files are multiple MB in size, and
printing 1-32M lines of output when the test fails is not useful.

Instead, print the first 66000 lines of output by default, which is
enough to see a full 64KiB plus some lines to see if more than 64KiB
of data is incorrect.  This is controlled by the CMP_LINES variable.
Was-Change-Id: I80f4d5d3460d531ab63788185a2c88e79415a801

EX-bug-id: EX-8671 EX-8466
Test-Parameters: trivial testlist=sanity-pcc
Test-Parameters: testlist=sanity-pcc env=ONLY=103,ONLY_REPEAT=100
Test-Parameters: testlist=sanity-pcc env=ONLY=104,ONLY_REPEAT=100
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Change-Id: I09f159810a778b8ef2bab93d0e2869237a3ebbe5
55199 b2_15 J ✗1B –T –R 1/1
LU-9839 clio: lov active ios accounting fix
reviewing Andreas Dilger · you voted +1 on current PS
1 unique failure LTS15 stalled 667d S +16 −8
667d
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 681d 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 759d M +36 −15
759d
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 824d 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 759d XL +642 −688
759d
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 790d 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 0/2−
LU-17022 obdclass: convert recovery flags to bit ops
reviewing Neil Brown · you voted -1 on current PS
stalled 1026d 1 unresolved M +95 −94
1026d
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 1028d 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 1037d M +16 −43
1037d
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 1106d 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 1160d 1 unresolved M +42 −34
1160d
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 1164d 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 1166d L +630 −366
1166d
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 1170d 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 1176d M +47 −9
1176d
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 1186d 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 1507d S +22 −0
1507d
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 1583d 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
36627 master J ✓B ✓T ✓R 2/2−
LU-12756 lnet: Refactor lnet_handle_lo_send
reviewing Chris Horn · you voted +1 on current PS
stalled 1563d S +4 −7
1563d
build #11461 SUCCESS
reviews: James Simmons +1 2020-01-24 16:14 · Chris Horn -1 2022-06-06 20:06 · Neil Brown +1 2020-01-24 16:14
no vote yet: Serguei Smirnov, Amir Shehata
your previous vote: +1 on PS6 (2019-11-25 21:15) — now at PS8
owner Chris Horn · uploader Chris Horn · PS8 uploaded 2428d ago · NEW · open in Gerrit ↗
commit message
LU-12756 lnet: Refactor lnet_handle_lo_send

Replace the send_data argument.

Rename the function to lnet_prep_msg_for_lolnd to better reflect what
is accomplished by this routine.

Test-Parameters: trivial
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: I56de8ae8f6bb5802e35362a7e3c0bdd6e7a1c4f3
36626 master J ✓B ✓T ✓R 2/2−
LU-12756 lnet: Switch lnet_handle_lo_send to void function
reviewing Chris Horn · you voted +1 on current PS
stalled 1563d S +9 −9
1563d
build #11460 SUCCESS
reviews: James Simmons +1 2020-01-24 16:14 · Chris Horn -1 2022-06-06 20:06 · Neil Brown +1 2020-01-24 16:14
no vote yet: Serguei Smirnov, Amir Shehata
your previous vote: +1 on PS4 (2019-11-25 21:14) — now at PS6
owner Chris Horn · uploader Chris Horn · PS6 uploaded 2428d ago · NEW · open in Gerrit ↗
commit message
LU-12756 lnet: Switch lnet_handle_lo_send to void function

This function only returns LNET_CREDIT_OK. Switch it to void and
adjust callers.

Test-Parameters: trivial
Signed-off-by: Chris Horn <hornc@cray.com>
Change-Id: I17d3cff0d70bd347c3b6cb76dcf1f0f9f8aac75c
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 1570d XS +2 −2
1570d
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 1582d 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)
66069 master J !B ✓T …R 0/2
LU-18461 llapi: replace pattern with bitmask
cc Alexey Lyashkov ·
21 unresolved L +165 −86
44m
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #131730 SUCCESS · tests all Maloo sessions · test queue
no vote yet: Andrew Perepechko, Alexander Boyko, Andreas Dilger, Artem Blagodarenko, Patrick Farrell
patchsets:
+2 earlier PS1 05-21 PS2 05-25
PS3 05-26 PS4 06-02 PS5 08-20 PS6 08-25 PS7 09-14
threads: 20 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 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.
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.
reply PS5 2026-08-21 00:57 Gerrit AI review for Lustre lustre_user.h:32 — (defect) This is an installed public header, so an unconditional BIT() definition lands in the namespace of every application that includes
Gerrit AI review for Lustre PS5 · 2026-08-21 00:57
(defect) This is an installed public header, so an unconditional BIT() definition lands in the namespace of every application that includes it, and collides with any application (or other kernel-uapi header) that defines its own. lustreapi_internal.h already guards its copy with `#ifndef BIT`, which is what the earlier review asked for here too and is still not done.

BIT() also doesn't appear anywhere in this header - is the definition needed at all in this patch?
reply PS5 2026-08-21 00:57 Gerrit AI review for Lustre lustre_user.h:823 — (defect?) These three helpers don't just get rewritten in bitmask form, they get more permissive, and nothing in the commit message covers i
Gerrit AI review for Lustre PS5 · 2026-08-21 00:57
(defect?) These three helpers don't just get rewritten in bitmask form, they get more permissive, and nothing in the commit message covers it.

lov_pattern_supported()/lov_pattern_available() previously accepted exactly RAID0, RAID0|OVERSTRIPING, RAID0|PARITY, RAID0|COMPRESS and MDT. Masking with LOV_PATTERN_RAID0_VALID now also lets through RAID0|OVERSTRIPING|PARITY, RAID0|COMPRESS|PARITY, RAID0|COMPRESS|OVERSTRIPING and all three at once. Given the comment above says "current client IO only understand these patterns", is client IO actually able to handle overstriped EC, for instance?

lov_pattern_supported_normal_comp() (line 859) picks up LOV_PATTERN_COMPRESS via LOV_PATTERN_RAID0_VALID_NORM, which it never accepted before. That changes lod_fix_desc_pattern()/lov_fix_desc_pattern() so a filesystem-wide default pattern of RAID0|COMPRESS is now accepted with no compression parameters attached, and changes lfsck_layout_verify_header() so compressed components stop returning -EOPNOTSUPP. Both may well be the right thing, but they look like separate changes from the llapi rework.
reply PS1 2026-05-21 21:58 Andreas Dilger lustreapi.h:1031 — I would assume that the old `LLAPI_LAYOUT_RAID0 = 0` value would also be accepted? Otherwise, this will introduce a compatibility issue. E
Andreas Dilger PS1 · 2026-05-21 21:58
I would assume that the old `LLAPI_LAYOUT_RAID0 = 0` value would also be accepted?  Otherwise, this will introduce a compatibility issue.  Even so, this means that applications using the new library would break with ones compiled using the old headers.

Maybe a better option would be to add `LLAPI_LAYOUT_RAID0_SET = 0x0000040ULL` that can be set and checked in the code, but still keep the `LLAPI_LAYOUT_RAID0 = 0` value for compatibility for a few years.
reply PS1 2026-05-21 21:58 Andreas Dilger lustre_user.h:32 — (style) should use `#ifndef BIT`
Andreas Dilger PS1 · 2026-05-21 21:58
(style) should use `#ifndef BIT`
reply PS1 2026-05-21 21:58 Andreas Dilger lustre_user.h:117 — (style) spurious blank line
Andreas Dilger PS1 · 2026-05-21 21:58
(style) spurious blank line
reply PS5 2026-08-21 00:57 Gerrit AI review for Lustre lov_ea.c:781 — (style) `layout %x layout_gen %u` is missing the comma separator that every other field in this format string has, and has a doubled space.
Gerrit AI review for Lustre PS5 · 2026-08-21 00:57
(style) `layout %x  layout_gen %u` is missing the comma separator that every other field in this format string has, and has a doubled space.
owner Alexey Lyashkov · uploader Alexey Lyashkov · PS7 uploaded 2d 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
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
2d
janitor run: 5 failing config(s), none unique to this patch — janitor results
build #131647 SUCCESS · tests all Maloo sessions
no vote yet: Chris Horn, Andreas Dilger
patchsets:
+8 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
owner Qian Yingjin · uploader Chris Horn · PS13 uploaded 4d ago · NEW · open in Gerrit ↗
commit message
LU-20184 nrs: extend TBF rate to support bandwidth (BPS) mode

The NRS TBF scheduler enforces a rate in IOPS alone. On an OSS with
variable I/O sizes, IOPS is a poor proxy for the resource of a
class. 100 writes of 4 KiB cost much less than 100 writes of 4 MiB.

Extend TBF with a bandwidth mode (BPS). A rule can name its rate in
bytes per second. The enforcement reads the I/O size of each read
request and write request. The default unit is MiB/s:
  nrs_tbf_rule="start r1 projid={100} bps=5MB/s"
  nrs_tbf_rule="start r1 projid={100} bps=5"
  nrs_tbf_rule="start r1 projid={100} rate=5MiB/s"

The "iops=" key sets an IOPS rate. A rule can limit both dimensions:
nrs_tbf_rule="start r1 projid={100} iops=1000 bps=5MB/s"

The rule dump appends a "bps=" field for a BPS rule. The prefix of
the line does not change, so a reader of an IOPS rule keeps its
behavior.

A start command that pairs "realtime=" with "bps=" returns
-EOPNOTSUPP. A change command with "rate=" on a BPS rule replaces
the byte rate with an IOPS rate. A rate of zero, or a rate at or
above LPROCFS_NRS_RATE_MAX, now returns -ERANGE instead of -EINVAL.

Add sanityn/test_77u{a,b,c,d}.

e.g. the rules below limit the read BPS to 5 MiB/s and write BPS to
15 MiB/s.
  nrs_tbf_rule="start nidrd nid={0@lo}&opcode={ost_read} bps=5"
  nrs_tbf_rule="start nidwr nid={0@lo}&opcode={ost_write} bps=15"

With I/O size varying from 4KiB to 1MiB, the performance is shown as
follows (The unit is 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

Test-Parameters: trivial testlist=sanityn env=ONLY=77
Signed-off-by: Yingjin Qian <qian@ddn.com>
Assisted-by: ClaudeCode:Opus-5
Change-Id: I359e23faedd2a09d3249c1a36038396d9780293a
68846 master J –B ✓T ✗0R 3/2
LU-20742 scripts: don't read stdin when given input files
cc Minh ·
S +25 −9
5d
reviews: Robert Read +1 2026-09-12 14:32 · Chris Horn +1 2026-09-12 15:23 · Andreas Dilger +1 2026-09-12 08:42
patchsets: PS1 09-11 PS2 09-11
owner Minh · uploader Minh · PS2 uploaded 5d ago · NEW · open in Gerrit ↗
commit message
LU-20742 scripts: don't read stdin when given input files

lnet_legacy2yaml falls through to sys.stdin.read() whenever no inline
positional argument is present, even when -i/-r/-n/-m supplied the
input.  The comment above the check states the intended condition
("no inline and no files") but the code only tests args.inline.

Interactively this is harmless: isatty() is true and the read is
skipped.  Under a test harness stdin is an inherited pipe whose write
end is never closed, so the read never sees EOF and the script hangs
forever.  sanity-lnet test_606 blocked in pipe_read() for over four
hours; nine further tests in that suite (615, 616, 617, 618, 619, 620,
621, 622, 626) pass file flags without a positional argument and wedge
the same way, so the suite never completes.

Gate the stdin read on the absence of file sources.  All four file
options are declared action='append', so each is None when unused.
The file sources are consumed before this block and accumulate into
the same lists, so gating only the stdin read cannot lose
file-supplied data.

Correct the man page and the script's usage block to match.  Both
described input as "any combination" of inline argument, file options
and stdin, which no longer holds once stdin is a fallback:

  lnet_legacy2yaml -i ip.rules < extra.conf

now ignores extra.conf instead of appending it.  A hang is strictly
worse than an ignored redirect, and a pipe with data pending is not
reliably distinguishable from a pipe nobody will ever write to, but
the documented contract should say which one wins.

TLC-bug-id: TLU-260

Test-Parameters: trivial
Fixes: f82fd8a83dfe ("LU-19502 scripts: add lnet_legacy2yaml conversion utility")
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Change-Id: I0799be811a6b1da1565706efc765ca6654362301
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
67570 master J !B ✓T ✓R 0/2
LU-20443 llite: fix statahead race conditions
cc Etienne AUJAMES ·
21 unresolved XL +551 −530
5d
janitor run: 1 failing config(s), none unique to this patch — janitor results
build #131608 SUCCESS · tests all Maloo sessions
patchsets:
+13 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
threads: 21 need your reply · 0 waiting on others · 0 own notes · 0 bot
reply PS1 2026-07-28 05:33 Gerrit AI review for Lustre COMMIT_MSG:17 — (style) A few hunks aren't accounted for by the description. Could the body also cover:
Gerrit AI review for Lustre PS1 · 2026-07-28 05:33
(style) A few hunks aren't accounted for by the description. Could the body also cover:

- the new `lfd_sa_started` bit and the ll_ioctl_ahead()/ll_deauthorize_statahead_advise() race it closes (the text only names start_statahead_thread() and ll_deauthorize_statahead())
- moving kthread_create_on_node() above the pattern/ctx setup in both start_statahead_thread() and ll_ioctl_ahead(), and the new out_stop/out_free/out_put labels
- pulling `lli_sa_enabled = 1` inside lli_sa_lock in ll_statahead_enter()
- the change in how long the thread lingers after the scan finishes (see the comment on the wait loop in ll_statahead_thread())

As it stands a reader can't tell which of these are intentional.
reply PS1 2026-07-28 05:33 Gerrit AI review for Lustre COMMIT_MSG:18 — (defect) This is described as fixing race conditions, so it should carry a Fixes: trailer. The sai_task/smp_store_release() protocol being r
Gerrit AI review for Lustre PS1 · 2026-07-28 05:33
(defect) This is described as fixing race conditions, so it should carry a Fixes: trailer. The sai_task/smp_store_release() protocol being replaced here came in with:

    Fixes: b977caa2dc7d ("LU-15660 statahead: statahead thread doesn't stop")

Worth confirming that is the right target before adding it.
reply PS15 2026-08-22 16:19 Gerrit AI review for Lustre COMMIT_MSG:20 — (typo) "This cleanups the way" reads oddly - "This cleans up ...". Same paragraph: "It avoids to handle" -> "It avoids handling". Further do
Gerrit AI review for Lustre PS15 · 2026-08-22 16:19
(typo) "This cleanups the way" reads oddly - "This cleans up ...". Same paragraph: "It avoids to handle" -> "It avoids handling". Further down, "races in stataheads threads" should be "statahead threads", and `sa_get` should be `sa_get()` per the commit-comment convention for function references.
reply PS15 2026-08-22 16:19 Gerrit AI review for Lustre COMMIT_MSG:36 — (minor) A few hunks aren't accounted for by the message, and it's not obvious which are deliberate:
Gerrit AI review for Lustre PS15 · 2026-08-22 16:19
(minor) A few hunks aren't accounted for by the message, and it's not obvious which are deliberate:

- sa_pattern_list_detect() gains an `if (*first < 0) return false;` check. is_first_dirent() can return -errno, so this is an independent bug fix worth naming (or splitting out).
- sa_pattern_fname_detect() gains an early `dname->len >= sizeof_field(...)` bail.
- The `lfd_sa_started` bit and the ll_statahead_started()/__debug_agl_hint() split.
- start_statahead_thread() drops the "once we start statahead thread failed, disable statahead" block at the out: label (see the inline comment there).
- The "LIST => FNAME no wakeup" CERROR in ll_statahead_thread() is removed.
reply PS16 2026-08-27 16:31 Gerrit AI review for Lustre COMMIT_MSG:9 — (style) This isn't a bug, but the body starts straight in on the implementation and never says what goes wrong today. The ticket describes o
Gerrit AI review for Lustre PS16 · 2026-08-27 16:31
(style) This isn't a bug, but the body starts straight in on the implementation and never says what goes wrong today. The ticket describes orphan statahead threads that keep the dentry/inode pinned and hang umount, and none of that appears here.

Could the first paragraph state the symptom and the race that produces it, before the list of new helpers? As written the message reads as a changelog of the refactor rather than a description of the bug being fixed, which makes it hard to judge later whether a given branch needs the backport.
reply PS6 2026-07-30 13:05 Etienne AUJAMES patchset comment — @adilger@thelustrecollective.com I don't have a specific reproducer for master, I can try to mess up lli_sa_enabled or play with SHARED but
Andreas Dilger PS6 · 2026-07-29 17:07
@green@whamcloud.com has also been working on fixing this code under LU-18838 and LU-20359.  Do you have a reliable reproducer for statahead issues that you could test against his patches?
Etienne AUJAMES PS6 · 2026-07-30 13:05
@adilger@thelustrecollective.com I don't have a specific reproducer for master, I can try to mess up lli_sa_enabled or play with SHARED but these is more complex
reply PS6 2026-07-30 05:34 Gerrit AI review for Lustre llite_internal.h:1146 — (minor) lfd_sa_started is written under lli_sa_lock, but it shares an unsigned int with lfd_hsm_agent_registered, which ll_ioctl_hsm_ct_star
Gerrit AI review for Lustre PS6 · 2026-07-30 05:34
(minor) lfd_sa_started is written under lli_sa_lock, but it shares an unsigned int with lfd_hsm_agent_registered, which ll_ioctl_hsm_ct_start() sets with no lock held:

    lustre/llite/dir.c:  lfd->lfd_hsm_agent_registered = !(lk->lk_flags & LK_FLG_STOP);

Both are dir-fd ioctls on the same lfd, so a compiler-generated read-modify-write of that word from the HSM path can drop the lfd_sa_started store. That is the store the new -EALREADY guard in ll_ioctl_ahead() depends on to stop a second LU_LADVISE_AHEAD from overwriting lfd->fd_sai and leaking the first sai reference.

Giving the flag its own storage (or bringing the HSM write under the same lock) would make the lock actually protect it.
reply PS6 2026-07-30 05:34 Gerrit AI review for Lustre statahead.c:668 — (suggestion) The "one sax reference per sai" rule this relies on is not recorded anywhere in struct ll_statahead_info - it is inferred from
Gerrit AI review for Lustre PS6 · 2026-07-30 05:34
(suggestion) The "one sax reference per sai" rule this relies on is not recorded anywhere in struct ll_statahead_info - it is inferred from lli->lli_sax at put time. That makes the contract easy to break: a sai put before its ctx is published silently drops nothing, and one put after lli_sax has been replaced would drop a stranger's reference. It also means the error paths in start_statahead_thread()/ll_ioctl_ahead() must use ll_sai_free() rather than ll_sai_put(), which is only enforced by convention.

Storing the ctx in the sai (sai_ctx) and putting that instead would make the ownership explicit and let ll_sai_put() work regardless of what lli_sax currently points at.
reply PS12 2026-08-12 07:22 Gerrit AI review for Lustre statahead.c:617 — This now clears lli_opendir_key for every pattern; before it was only cleared for ADVISE/FNAME. For a LIST statahead that ends before closed
Gerrit AI review for Lustre PS12 · 2026-08-12 07:22
This now clears lli_opendir_key for every pattern; before it was only cleared for ADVISE/FNAME. For a LIST statahead that ends before closedir() this desynchronizes the key from the still-open handle, and the new `lli_opendir_key != key` guard in ll_deauthorize_statahead() then makes close() a no-op.

Concretely, with `ls -l` on an open dir:

    ll_statahead_by_list() -> sa_low_hit() -> rc = -EFAULT
    ll_statahead_thread() -> ll_sai_put() -> ll_sax_put()
      sax_refcount 1 -> 0, lli_sax = NULL, lli_opendir_key = NULL,
      lli_stat_pid = 0, lli_sa_pattern = NONE
      (LIST is not in the ADVISE|FNAME test above, so lli_sa_enabled stays 1)

The dir is still open, lli_sa_enabled is still 1 and lli_sax is NULL, so the next stat() goes through sa_pattern_fname_detect() and starts a second (FNAME) thread. At close(), ll_file_release() sees neither `lli_opendir_key == lfd` nor `lfd->fd_sai`, so ll_deauthorize_statahead() is not called at all, and nothing ever sets SA_THR_STOPPING for that thread.

It then only exits when its window fills and ll_sa_thread_wait_event() times out (ll_sa_timeout, 30s), holding dget(sai_dentry) and the ctx's igrab(dir) and keeping ll_sa_running non-zero the whole time - which is what ll_put_super() waits on. Pre-patch, ll_sax_put() kept lli_opendir_key for LIST, so close() reached ll_deauthorize_statahead(), cleared lli_sa_enabled, and every scan loop dropped out on its next iteration.

Would keeping the old conditional here (or letting ll_deauthorize_statahead() fall through to ll_sa_reset_locked() when lli_opendir_key is already NULL) restore the pairing?
reply PS12 2026-08-12 07:22 Gerrit AI review for Lustre statahead.c:689 — This isn't a bug, but the name reads as the counterpart of ll_sax_get(dir) while it silently only returns the sai owned by `current`. Caller
Gerrit AI review for Lustre PS12 · 2026-08-12 07:22
This isn't a bug, but the name reads as the counterpart of ll_sax_get(dir) while it silently only returns the sai owned by `current`. Callers like ll_revalidate_statahead() and __debug_agl_hint() depend on that filter, so something like ll_sai_get_current() (or a pid argument) would make the contract visible at the call site.
reply PS12 2026-08-12 07:22 Gerrit AI review for Lustre statahead.c:2571 — This isn't a bug, but the lock no longer buys anything here: ctx is only used as a boolean after the unlock, so the value can change the mom
Gerrit AI review for Lustre PS12 · 2026-08-12 07:22
This isn't a bug, but the lock no longer buys anything here: ctx is only used as a boolean after the unlock, so the value can change the moment the lock is dropped, and the pointer itself is left stale. debug_agl_hint() does its own lookup under the lock anyway, so a plain read would say the same thing more honestly.
reply PS15 2026-08-22 16:19 Gerrit AI review for Lustre statahead.c:2535 — (style) This isn't a bug, but `func` and `line` are never used in the body - either drop them from the prototype and the debug_agl_hint() ma
Gerrit AI review for Lustre PS15 · 2026-08-22 16:19
(style) This isn't a bug, but `func` and `line` are never used in the body - either drop them from the prototype and the debug_agl_hint() macro, or print them in the CDEBUG.
owner Etienne AUJAMES · uploader Etienne AUJAMES · PS18 uploaded 6d 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() 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 lfd_sa_started flag to prevent duplicate statahead hints
- 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.

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
68608 master J –B ✓T ✓R 3/2
LU-20688 scripts: Make llmountcleanup.sh also remove ec.ko
cc Arshad Hussain ·
pt_ecro XS +1 −1
7d
build #131306 SUCCESS · tests all Maloo sessions
reviews: Keguang Xu +1 2026-09-08 08:08 · Marc Vef +1 2026-09-08 08:08 · Timothy Day +1 2026-09-10 15:54
no vote yet: Andreas Dilger, Robert Read
patchsets: PS1 09-03 PS2 09-03 PS3 09-04 PS4 09-08
tags: pt_ecro
owner Arshad Hussain · uploader Arshad Hussain · PS4 uploaded 9d ago · NEW · open in Gerrit ↗
commit message
LU-20688 scripts: Make llmountcleanup.sh also remove ec.ko

After llmountcleanup.sh is called all loaded and
'dependent' modules should be removed. However,
ec.ko since it not dependent was not touched and
left un-removed. This patch makes llmountcleanup.sh
removes ec.ko also. Note that ec.ko is a recent
feature in Lustre. If modified lustre_rmmod is
called on older version which do not have ec.ko this
operation turns no-op and is harmless.

Also, note, that  llmountcleanup.sh is not touched by
this patch - the change is in lustre/scripts/lustre_rmmod,
which llmountcleanup.sh reaches indirectly via
cleanupall -> unload_modules -> unload_modules_local.

Testing steps:
--------------
$ llmount.sh
...
$ llmountcleanup.sh

Verification Before patch:
--------------------------
$ lsmod | grep -wE "libcfs|ec|lustre|ldiskfs"
ec                     81920  0

Verification After patch:
-------------------------
$ lsmod | grep -wcE "libcfs|ec|lustre|ldiskfs"
0

Test-Parameters: trivial
Fixes: 047347170b8a ("LU-12189 ec: code to add support for M to N parity")
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: Ia9eeeb90204b342f0b53415dbec497f2de8d68cf
68019 master J ✗4B ✗T –R 0/2−
LU-20591 target: iterate objects on OST and MDT
cc Jinshan Xiong ·
4 unique failures 13 unresolved XL +2173 −7
16d
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 34d 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
17d
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 24d 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
17d
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 24d 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
68263 master J !B ✓T ✓R 1/2
LU-20628 lnet: size selftest bulk to cover the offset
cc Oleg Drokin ·
2 unresolved M +50 −18
21d
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 24d 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
67823 master J !B ✓T ✓R 1/2
LU-20559 target: keep client bitmap updates out of assertions
cc Oleg Drokin ·
1 unresolved S +10 −7
21d
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
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 38d 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
65861 master J !B ✓T ✗19R 0/2
LU-20253 llite: remove d_compare() for overlayfs support
cc Timothy Day ·
13 unresolved M +14 −53
41d
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 42d 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
66816 master J ✗1B ✓T ✗1R 0/2
LU-20422 obdclass: allow cfs_hash locks to specify subclass
cc Timothy Day ·
1 unique failure 1 unresolved M +85 −12
44d
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 86d 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
59826 master J ✗4B ✓T ✗17R 0/2
LU-19061 debug: restore --enable-pgstate-track
cc Shaun Tancheff ·
4 unique failures 1 unresolved M +93 −36
48d
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 452d 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
63382 master J !B ✓T ✓R 0/2
LU-18813 osd-wbcfs: remove calls to alloc_file_pseudo()
cc Timothy Day ·
8 unresolved M +37 −68
51d
janitor run: 4 failing config(s), none unique to this patch — janitor results
build #127213 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
threads: 8 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 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 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 · PS4 uploaded 75d 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
47013 master J ✓B ✓T ✓R 0/2
LU-13847 test: add sanity test_64f() to ALWAYS_EXCEPT
cc John Hammond ·
XS +2 −0
57d
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 1595d 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 0/2−
LU-19692 test: track portal leak
cc Mikhail Pershin ·
2 unique failures S +32 −13
68d
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 257d 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
62461 master J !B ✓T ✓R 1/2
LU-19584 lraft: import Raft code
cc Hongchao Zhang ·
stalled 203d 1 unresolved XL +3412 −0
203d
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-02-18 18:15
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 210d 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
29117 master J –B ✓T ✗0R 0/2−
LU-10013 llite: Atomic usage cleanups
cc Patrick Farrell ·
stalled 244d 5 unresolved M +76 −88
244d
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 3283d 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 0/2−
LU-19162 lnet: implement simple LNet block driver
cc Timothy Day ·
stalled 321d L +703 −2
321d
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 434d 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 396d S +16 −0
396d
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 398d 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 407d M +95 −12
407d
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 408d 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 ·
stalled 408d L +254 −81
408d
janitor run: build failed — no tests ran — janitor results
build #115548 FAILURE
owner Patrick Farrell · uploader Patrick Farrell · PS1 uploaded 408d 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
57550 master J ✗1B ✓T ✗1R 0/2
LU-16565 ldlm: [3] Remove ldlm is,set,clear macros
cc Timothy Day ·
1 unique failure ldlm_flags_remove stalled 408d M +76 −76
408d
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
failed enforced testplatformdetail
review-ldiskfs-dne RHEL 9.3 / x86_64 ran 5 tests. 1 tests failed: sanity. session
build #109865 SUCCESS · tests all Maloo sessions
owner Timothy Day · uploader Timothy Day · PS1 uploaded 636d 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 ·
4 unique failures IPv6 stalled 409d M +119 −41
409d
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 1234d 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
50561 master J !B ✓T ✓R 0/2−
LU-16374 ldiskfs: implement backup/restore of enc files
cc Sebastien Buisson ·
stalled 409d XL +1336 −249
409d
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 1137d 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
51895 master J ✗2B ✓T ✓R 0/2−
LU-16763 obdclass: crash Lustre with OBD devices
cc Timothy Day ·
stalled 409d S +29 −0
409d
janitor flagged test failures unique to this patch — superseded (tests have since passed) — full janitor results
unique failing testhistory
sanity1@ldiskfs+DNE:test_55cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
sanity1@zfs:test_55cNEW unique failure for this branch in the last 30 days, and was seen 0 times across 0 other branches 0 reviews
build #104486 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
owner Timothy Day · uploader Timothy Day · PS4 uploaded 871d 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=55c
Signed-off-by: Timothy Day <timday@amazon.com>
Change-Id: I58e59b13c37e7935c0b24d19c8637cd6462e4282
58698 master J !B ✓T ✗3R 0/2
LU-18813 osd-wbcfs: store/pin LAST_ID and local files into MemFS
cc Qian Yingjin ·
stalled 525d 1 unresolved L +426 −28
525d
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 527d 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 815d L +182 −184
815d
no vote yet: Serguei Smirnov, Chris Horn, Andreas Dilger
owner Amir Shehata · uploader Amir Shehata · PS3 uploaded 3477d 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 ·
1 unique failure IPv6 stalled 968d L +212 −456
968d
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 971d 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 2/2−
LU-10973 lnet: api_check_route works if no route
cc Cyril Bordage ·
stalled 1268d S +9 −6
1268d
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 2018d 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

(4)
57860 master J –B ✓T ✓R 3/2+2
LU-18664 target: set proper kthread state
mine
rocky8 janitor9x 4 unresolved S +23 −11
13d
reviews: Shaun Tancheff +1 2026-09-03 06:44 · Alex Zhuravlev +1 2026-09-03 06:44 · Oleg Drokin +2 2026-09-03 06:44
patchsets:
+17 earlier PS1 01-22 PS2 02-22 Andreas Dilger PS3 02-22 PS4 05-02 PS5 08-21 Andreas Dilger PS6 08-21 Andreas Dilger PS7 08-21 Andreas Dilger PS8 09-09 Andreas Dilger PS9 05-29 Shaun Tancheff PS10 05-30 Shaun Tancheff PS11 06-04 Shaun Tancheff PS12 06-04 Shaun Tancheff PS13 06-07 Shaun Tancheff PS14 06-08 Shaun Tancheff PS15 06-20 Andreas Dilger PS16 07-19 PS17 08-10 Shaun Tancheff
PS18 08-10 Shaun Tancheff PS19 08-19 PS20 08-19 PS21 08-23 PS22 08-27
your previous vote: -1 on PS12 (2026-06-05 13:46) — now at PS23
tags: janitor9x
owner James Simmons · uploader Oleg Drokin · PS23 uploaded 14d ago · MERGED · open in Gerrit ↗
commit message
LU-18664 target: set proper kthread state

The function distribute_txn_commit_batchid_update() reports a
__might_sleep() issue due to distribute_txn_commit_thread()
potentially calling it while in an idle state.

Get the current state before distribute_txn_commit_batchid_update(),
switch to TASK_RUNNING, and restore the state [likely TASK_IDLE]
to avoid skipping the subsequent schedule() and allowing other
threads to proceed.

In the case where distribute_txn_commit_batchid_update() failed
it will retry when the kernel scheduler runs the thread again. To
ensure the task is rescheduled use an increasing timeout, max at 30s.

Test-Parameters: testlist=sanity env=ONLY=60g,ONLY_MINUTES=30
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: If9ae5ac47ec4eb24f87bc2a6bf78d3134136be6f
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/57860
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Shaun Tancheff <shaun@tancheff.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
68016 master J –B ✓T ✓R 3/2+2
LU-8066 quota: fix invalid YAML format
mine
XS +1 −1
17d
reviews: Arshad Hussain +1 2026-08-30 16:58 · Andreas Dilger +1 2026-08-30 16:58 · Oleg Drokin +2 2026-08-30 16:58
patchsets: PS1 08-14 PS2 08-17 Andreas Dilger PS3 08-19
owner James Simmons · uploader Oleg Drokin · PS4 uploaded 18d ago · MERGED · open in Gerrit ↗
commit message
LU-8066 quota: fix invalid YAML format

The quota seq file displays information in YAML format but that
format is invalid. It's a simple fix for the first entry to be
a proper YAML mapping.

Test-Parameters: trivial
Fixes: 294aa9cb666c ("LU-1842 quota: add quotactl support on qmt")
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ia10a9a877d6fc21fcb0d43a95ef935f294efd609
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/68016
Reviewed-by: Andreas Dilger <adilger@thelustrecollective.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
67917 master J –B ✓T ✓R 3/2+2
LU-18687 build: cleanup compat_** usage
mine
upstream M +99 −80
17d
reviews: Arshad Hussain +1 2026-08-30 16:57 · Andreas Dilger +1 2026-08-30 16:57 · Oleg Drokin +2 2026-08-30 16:57
patchsets:
+10 earlier PS1 08-11 PS2 08-11 PS3 08-11 PS4 08-11 PS5 08-11 PS6 08-11 PS7 08-11 PS8 08-12 PS9 08-12 PS10 08-12
PS11 08-13 PS12 08-14 PS13 08-19 PS14 08-20 PS15 08-23
owner James Simmons · uploader Oleg Drokin · PS16 uploaded 18d ago · MERGED · open in Gerrit ↗
commit message
LU-18687 build: cleanup compat_** usage

We create compat_** wrappers to support Lustre with newer kernel
changes. We can rework this so the Lustre core code can drop
compat_* and use the standard kernel function name. With kallsyms
we have to be careful so compat_* is not seen as the same as the
function we attempting to manually export. Without COMPAT_BUILD
the export symbols were not handled properly.

For two exception this is not the case. One is for module_init()
and module_exit() we keep the compat_* handling. The second is
for struct genl_info which didn't have a genl_family field
until later kernels. In the cleanup move NUM_CACHEPAGES macro
from libcfs.h to lustre_net.h since only lustre code uses it.

Test-Parameters: trivial
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I59dbd2fab9f857981fc067794a095f084c26630d
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/67917
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Andreas Dilger <adilger@thelustrecollective.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
66409 master J –B ✓T ✓R 3/2+2
LU-18876 build: changes needed for dropping into kernel tree
mine
upstream 3 unresolved L +196 −297
28d
reviews: Arshad Hussain +1 2026-08-19 01:09 · Oleg Drokin +2 2026-08-19 01:09 · Timothy Day +1 2026-08-19 01:09
patchsets:
+17 earlier PS1 06-01 PS2 06-02 PS3 06-03 PS4 06-04 PS5 06-08 PS6 06-08 PS7 06-15 PS8 06-16 PS9 07-07 PS10 07-10 PS11 07-10 PS12 07-24 PS13 07-30 PS14 07-30 PS15 07-30 PS16 08-02 PS17 08-03
PS18 08-04 PS19 08-07 PS20 08-07 PS21 08-09 PS22 08-09
owner James Simmons · uploader Oleg Drokin · PS23 uploaded 29d ago · MERGED · open in Gerrit ↗
commit message
LU-18876 build: changes needed for dropping into kernel tree

Update the code so we can drop into the Linux kernel tree and
it should be buildable. Tested against a 5.9+ kernel.
Some of the changes needed for this:

1) cleanup simple configure options that behave similar to Kconfig
   We can do the same thing with mount options and tunables.
   Leave the pinger handling since it more complicated and
   should be handled in another patch. In the process cleanup
   left over ENABLE_LU_REF which is gone.

2) Break up linux-misc.h into matching kernel headers.

3) move cfs_time_seconds() to libcfs.h which is needed when
   copying to kernel tree without compat layer.

4) Rename LNET_DUMP_ON_PANIC to CONFIG_LNET_DUMP_ON_PANIC
   for upstreaming efforts.

5) Update lctl tool for debug handling for libcfs module move.

6) CPT module handling was in compat which is missing for
   the native Linux build except for whats in LNet lib-cpt.c.
   lib-cpt.c is optional code (CONFIG_SMP) which means
   certain expected items could go missing. Move all the
   CPT hard requirements back to libcfs core code.

7) Changes needed for native 5.9 kernel support.
   a) Support debugfs_lookup_and_remove()
   b) bring back task macros.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: Ie3abc1cc279f368993f0b3ff5d13e81591525921
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/66409
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Timothy Day <timday@thelustrecollective.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>