| unique failing test | history |
|---|---|
| recovery-small@ldiskfs:test_155 | seen in 7 other reviews |
(minor) Can a cached read really mark a DIO folio uptodate? A PagePrivate2 folio is allocated by folio_alloc() in osd_get_page() and never inserted into inode->i_mapping, so get_folio_create()/get_folio_lock() can never return it, and osd_get_page() calls folio_clear_uptodate() on every DIO folio just before handing it out. The only other places osd-ldiskfs sets PG_uptodate are dio_complete_routine() and osd_write_commit(), both of which run in an earlier RPC and are undone by that folio_clear_uptodate(). That leaves the OBD_FAIL_OST_FAKE_RW SetPageUptodate() two lines above the cache-hit test as the only in-tree way to reach this branch with a DIO folio. If there is another path, it would be good to name it here, because in that case skipping the read is itself wrong (see the comment on osd_io.c).
We can just remove that sentence instead...
(minor) This reproducer does not seem to match the mechanism above. Neither sanity test_155g nor test_63a sets fail_loc=0x238, and read_cache_enable=0 on its own only selects the DIO path - it does not make a DIO folio uptodate. LU-19778 is filed as "sanity test_428: osd_write_commit() ASSERTION( PageLocked(lnb[i].lnb_page) ) failed".
A sequence that does hold together, and matches the ticket:
test_399b (test_fake_rw read) truncates $tfile to up to 1GB.
fsize > od_readcache_max_filesize (default totalram/64), so
osd_bufs_get() picks cache=false and every lnb gets a DIO folio.
fail_loc=0x238 then makes every folio uptodate, so all of them take
the cache-hit branch and get unlocked; iobuf->dr_npages stays 0 so
the guarded early-release loop never runs.
test_428 later writes 128MB files (also over the filesize limit) on
the same service thread and trips the write-side LASSERT.
That also explains why this survived since LU-13309: it needs fail_loc=0x238 *and* the non-cached path, and test_399a/399b only take the non-cached path when the test file exceeds readcache_max_filesize.
Again, too much LLM-generated explanation is just causing more issues than it solves.
LU-19778 osd-ldiskfs: don't unlock DIO folios in osd_read_prep cache-hit path
DIO folios (PagePrivate2) are per-thread state kept locked in
oti_dio_folios[] for their lifetime. osd_get_page() only calls
folio_lock() on first allocation; reused slots skip the lock.
When any path marks a DIO folio uptodate before osd_read_prep() sees
it — e.g. OBD_FAIL_OST_FAKE_RW (0x238) calling SetPageUptodate(), or
a cached read hitting the same folio — the cache-hit branch fires and
unlock_page() is called on a folio that must remain locked.
On the next RPC the same thread reuses the (now unlocked) folio without
re-locking it. Two crash sites follow:
- Read path: if the file offset maps to a sparse region, osd_do_bio()
submits no bio, the early-release loop runs, and
LASSERT(PageLocked(page)) panics the server.
- Write path: if a subsequent write RPC obtains the same DIO folio,
osd_write_commit() hits LASSERT(PageLocked(lnb[i].lnb_page)).
This is the scenario reproduced by toggling read_cache_enable=0
while concurrent writes are in flight (test_155g + test_63a).
Guard the unlock_page() call with !PagePrivate2(), mirroring the
identical guard already present in the early-release loop below.
Fixes: e790df5fa38d ("LU-13309 osd-ldiskfs: speedup osd_bufs_get/put")
TLC-bug-id: TLU-184
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I58cecf2cdf89f41a01fdeb14e2e304e9b6588f94
| failed enforced test | platform | detail | |
|---|---|---|---|
| full-dkms failed 2× | RHEL 8.10 / x86_64 | ran 2 tests. 1 tests failed: lustre-initialization. | session |
(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.
(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`.
(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.
(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.
(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).
(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?
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
Which is better? The error messages of libnl or the error messages of strerror(). I went with the libnl ones.
We could set data->error = -errno;
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?
Yes I never set data->error :-(
This is why I told Alexey
we need to allocate large cb->min_dump_alloc. Otherwise we get this retry loops. Ugh what a mess.
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
(style) This isn't a bug, but a bare string on the right of `=~` is compiled as a regex, so the `*` quantifies the preceding `/` rather than standing in for the parameter name. It does happen to cover both dictionary spellings (`man4 page` and `man4/ page`), which `m{/man4/? page}` would state outright. As written, an entry later worded `Documentation/man4/<param>.4 page` would silently stop matching and turn the block back off.
(defect) The two-argument macro forms never reach the parameter name here.
In the real macro names `_SEQ_FOPS_` is followed by `RO_`/`RW_`, so the `TYPE\(\s*\w+,\s*` branch cannot match and `\w*\(` wins instead, capturing the first argument. That argument is the module prefix, not the parameter: lprocfs_status.h:795 expands `_RO_TYPE(name, type)` to `LDEBUGFS_SEQ_FOPS_RO(name##_##type)`, and the page is named `<name>.<type>.4`. `_WR_ONLY(name, type)` has no branch of its own and takes the same path.
The trailing `_` also excludes the bare `LPROC_SEQ_FOPS(name)` form, which spelling.txt:208 does nag on (lustre/quota/qsd_lib.c:179).
Checked against this commit with both `Documentation/man4/at_max.4` and `mdt.at_max.4` on disk:
+LDEBUGFS_SEQ_FOPS_RW_TYPE(mdt, at_max);
WARNING:TYPO_SPELLING: ... 'create Documentation/man4/ page for this parameter'?
`LUSTRE_RW_ATTR(at_max)` in the same patch is quiet, so the escape hatch works only for the single-argument forms. Since `_RO_TYPE`/`_RW_TYPE` are most of the `LDEBUGFS_SEQ_FOPS_*` uses in the tree, the commit message's claim to cover the `LDEBUGFS_SEQ_FOPS_` entries doesn't hold for them.
Would `_SEQ_FOPS(?:_(?:\w+_TYPE|WR_ONLY)\(\s*\w+,\s*|_?\w*\()` catch all the forms? That captures `at_max`/`force_reint`/`qsd_enabled` on the cases above, and the existing `{,*.}$param.4` glob then finds both the plain and the dotted page name.
LU-20560 build: quiet checkpatch spelling nags
LUSTRE_{RO,RW,WO}_ATTR, MODULE_PARM_DESC, and LDEBUGFS_SEQ_FOPS_
spelling.txt entries nag for each new sysfs parameter to add a
Documentation/man4/ page, but complain even if the patch adds
or modifies the relevant man4/ page. Suppress this warning if
Documentation/man4/<PARAM>.4 exists or is added by the patch.
Also exempt the spelling dictionaries from their own typo scan.
An addition to the spelling file would trip its own entry. Do not
generate a warning when adding a new entry to these files. Match
via a "scripts/spelling" regexp so that it works with both the
Lustre and in-kernel spelling files to facilitate upstream merge.
TLC-bug-id: TLU-208
Fixes: 1792d49a9660 ("LU-17231 doc: Create script to generate man pages")
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Change-Id: I5d4fe5e7a2e2474dfa98e992034a54ff92f1f2c3
| unique failing test | history |
|---|---|
| sanity-quota@ldiskfs+DNE:test_80 | seen in 67 other reviews |
| failed enforced test | platform | detail | |
|---|---|---|---|
| review-dne-zfs-part-4 | RHEL 10.1 / x86_64 | ran 9 tests. 1 tests failed: sanity-quota. | session |
(minor) duplicate `Signed-off-by: Minh`...
(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`.
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.
Same here. While its labled as obd specific its really super generic.
`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()`.
`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?
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.
This looks like a reasonable suggestion?
(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);
This also seems reasonable
(style) dropping the `static struct genl_family lustre_family;` forward declaration left two blank lines here; one is enough.
(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.
(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.
(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.
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>
LU-10478 build: use ZOL rpms to build lustre not for review Test-Parameters: forbuildonly Change-Id: I1f956c4878a8fa6586e28c5575ef851bf64ac9c0 Signed-off-by: Minh Diep <minh.diep@intel.com>
| failed enforced test | platform | detail | |
|---|---|---|---|
| custom-101 | CentOS 7.0/x86_64, RHEL 8.0/x86_64 | ran 3 tests. 1 tests failed: lnet-selftest. | session |
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>
LU-12269 build: patch zfs for rhel8 We need to patch zfs to build rhel8 * https://github.com/zfsonlinux/zfs/pull/8851 * https://github.com/zfsonlinux/zfs/pull/9310 Test-Parameters: trivial \ envdefinitions=SANITY_EXCEPT="421a 817" \ clientdistro=el8 serverdistro=el8 fstype=zfs \ testlist=sanity Change-Id: I791c3a985b52a1a4f0740b7880dee852042da016 Signed-off-by: Minh Diep <mdiep@whamcloud.com>
LU-16095 build: fix lbuild not depending on installed kernel-devel Move the find-require/find-provide in lbuild-distro for more customizable control Test-Parameters: trivial clientdistro=sles12sp5 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Test-Parameters: trivial clientdistro=sles15sp3 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Test-Parameters: trivial clientdistro=el7.9 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Test-Parameters: trivial clientdistro=el8.6 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Change-Id: Icd990dc83f9968e814b12c6b1abf614649db4d41 Signed-off-by: Minh Diep <mdiep@whamcloud.com>
LU-0000 build: include IB_OPTIONS in configure step Test-Parameters: forbuildonly Change-Id: I479ee851ec595241ff1d2b9153168c40c9f48f36 Signed-off-by: Minh Diep <mdiep@whamcloud.com>
LU-0000 build: save and reuse cached file Test-Parameters: forbuildonly Change-Id: I5b869d16818a59d3b3b1a404353ba29c3838323c Signed-off-by: Minh Diep <mdiep@whamcloud.com>
| failed enforced test | platform | detail | |
|---|---|---|---|
| custom-1002 | RHEL 8.8/x86_64 | ran 3 tests. 1 tests failed: sanity-quota. | session |
| review-ldiskfs-dne-arm | RHEL 8.7/aarch64, RHEL 8.8/x86_64 | ran 5 tests. 1 tests failed: sanity-lnet. | session |
LU-15129 tests: sanity-quota_75_dom fix oflag=sync causes dd to write page by page instead of sending several pages in RPC. Furthermore, when granted space becomes closer to soft_limit(i.e. over 9MB if soft_limit is 10MB), OST can not preacquire space anymore. Also OST could acquire only requested amount of space - see qmt_alloc_expand. Thus OST has to send quota acquire request at MDT for each BRW request from the client. Sometimes 20 seconds is not enough to write 10MB. Change oflag=sync with conv=fsync to reduce the number of RPCs between the client and OST and between QSDs and QMT. One fsync at close should help to avoid timeout failure. Lustre-change: https://review.whamcloud.com/50164 Lustre-commit: 7d05a687ee5d4f4b95585244a7f60394475fe0ba Test-Parameters: trivial testlist=sanity-quota Test-Parameters: testlist=sanity-quota env=ONLY=75,ONLY_REPEAT=50 Signed-off-by: Sergey Cheremencev <scherementsev@ddn.com> Change-Id: Iad363fdc8a0984861055c295ea9cc3f23110fd9f Reviewed-by: Andreas Dilger <adilger@whamcloud.com> Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com> (cherry picked from commit 7d05a687ee5d4f4b95585244a7f60394475fe0ba)
| failed enforced test | platform | detail | |
|---|---|---|---|
| review-dne-zfs-part-4 | CentOS 7.0/x86_64 | ran 10 tests. 1 tests failed: sanity-quota. | session |
LU-11803 obd: replace class_uuid with linux kernel version. We can replace the lustre custom class_uuid_t with the linux kernels uuid handling. Lustre-change: https://review.whamcloud.com/33916 Lustre-commit: 604c266a175b72500ef99793652b64ed4f842b2c Change-Id: I9a59b0b6027ccb95994a87f3a5dcdf80a8a56480 Signed-off-by: James Simmons <uja.ornl@yahoo.com> Reviewed-by: Petros Koutoupis <pkoutoupis@cray.com> Reviewed-by: Ben Evans <bevans@cray.com> Reviewed-by: Yang Sheng <ys@whamcloud.com> Reviewed-by: Gu Zheng <gzheng@ddn.com>
LU-10478 build: use ZOL rpms to build lustre not for review Test-Parameters: forbuildonly Change-Id: I1f956c4878a8fa6586e28c5575ef851bf64ac9c0 Signed-off-by: Minh Diep <minh.diep@intel.com>
| failed enforced test | platform | detail | |
|---|---|---|---|
| custom-101 | CentOS 7.0/x86_64, RHEL 8.0/x86_64 | ran 3 tests. 1 tests failed: lnet-selftest. | session |
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>
LU-16095 build: fix lbuild not depending on installed kernel-devel Move the find-require/find-provide in lbuild-distro for more customizable control Test-Parameters: trivial clientdistro=sles12sp5 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Test-Parameters: trivial clientdistro=sles15sp3 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Test-Parameters: trivial clientdistro=el7.9 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Test-Parameters: trivial clientdistro=el8.6 \ env=SANITY_EXCEPT="56oc 430c 817" testlist=sanity Change-Id: Icd990dc83f9968e814b12c6b1abf614649db4d41 Signed-off-by: Minh Diep <mdiep@whamcloud.com>
LU-0000 build: include IB_OPTIONS in configure step Test-Parameters: forbuildonly Change-Id: I479ee851ec595241ff1d2b9153168c40c9f48f36 Signed-off-by: Minh Diep <mdiep@whamcloud.com>
| failed enforced test | platform | detail | |
|---|---|---|---|
| custom-1002 | RHEL 8.8/x86_64 | ran 3 tests. 1 tests failed: sanity-quota. | session |
| review-ldiskfs-dne-arm | RHEL 8.7/aarch64, RHEL 8.8/x86_64 | ran 5 tests. 1 tests failed: sanity-lnet. | session |
LU-15129 tests: sanity-quota_75_dom fix oflag=sync causes dd to write page by page instead of sending several pages in RPC. Furthermore, when granted space becomes closer to soft_limit(i.e. over 9MB if soft_limit is 10MB), OST can not preacquire space anymore. Also OST could acquire only requested amount of space - see qmt_alloc_expand. Thus OST has to send quota acquire request at MDT for each BRW request from the client. Sometimes 20 seconds is not enough to write 10MB. Change oflag=sync with conv=fsync to reduce the number of RPCs between the client and OST and between QSDs and QMT. One fsync at close should help to avoid timeout failure. Lustre-change: https://review.whamcloud.com/50164 Lustre-commit: 7d05a687ee5d4f4b95585244a7f60394475fe0ba Test-Parameters: trivial testlist=sanity-quota Test-Parameters: testlist=sanity-quota env=ONLY=75,ONLY_REPEAT=50 Signed-off-by: Sergey Cheremencev <scherementsev@ddn.com> Change-Id: Iad363fdc8a0984861055c295ea9cc3f23110fd9f Reviewed-by: Andreas Dilger <adilger@whamcloud.com> Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com> (cherry picked from commit 7d05a687ee5d4f4b95585244a7f60394475fe0ba)
| failed enforced test | platform | detail | |
|---|---|---|---|
| review-dne-zfs-part-4 | CentOS 7.0/x86_64 | ran 10 tests. 1 tests failed: sanity-quota. | session |
LU-11803 obd: replace class_uuid with linux kernel version. We can replace the lustre custom class_uuid_t with the linux kernels uuid handling. Lustre-change: https://review.whamcloud.com/33916 Lustre-commit: 604c266a175b72500ef99793652b64ed4f842b2c Change-Id: I9a59b0b6027ccb95994a87f3a5dcdf80a8a56480 Signed-off-by: James Simmons <uja.ornl@yahoo.com> Reviewed-by: Petros Koutoupis <pkoutoupis@cray.com> Reviewed-by: Ben Evans <bevans@cray.com> Reviewed-by: Yang Sheng <ys@whamcloud.com> Reviewed-by: Gu Zheng <gzheng@ddn.com>
LU-12269 build: patch zfs for rhel8 We need to patch zfs to build rhel8 * https://github.com/zfsonlinux/zfs/pull/8851 * https://github.com/zfsonlinux/zfs/pull/9310 Test-Parameters: trivial \ envdefinitions=SANITY_EXCEPT="421a 817" \ clientdistro=el8 serverdistro=el8 fstype=zfs \ testlist=sanity Change-Id: I791c3a985b52a1a4f0740b7880dee852042da016 Signed-off-by: Minh Diep <mdiep@whamcloud.com>
LU-0000 build: save and reuse cached file Test-Parameters: forbuildonly Change-Id: I5b869d16818a59d3b3b1a404353ba29c3838323c Signed-off-by: Minh Diep <mdiep@whamcloud.com>
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>
| unique failing test | history |
|---|---|
| recovery-small@ldiskfs:test_155 | seen in 7 other reviews |
(minor) Can a cached read really mark a DIO folio uptodate? A PagePrivate2 folio is allocated by folio_alloc() in osd_get_page() and never inserted into inode->i_mapping, so get_folio_create()/get_folio_lock() can never return it, and osd_get_page() calls folio_clear_uptodate() on every DIO folio just before handing it out. The only other places osd-ldiskfs sets PG_uptodate are dio_complete_routine() and osd_write_commit(), both of which run in an earlier RPC and are undone by that folio_clear_uptodate(). That leaves the OBD_FAIL_OST_FAKE_RW SetPageUptodate() two lines above the cache-hit test as the only in-tree way to reach this branch with a DIO folio. If there is another path, it would be good to name it here, because in that case skipping the read is itself wrong (see the comment on osd_io.c).
We can just remove that sentence instead...
(minor) This reproducer does not seem to match the mechanism above. Neither sanity test_155g nor test_63a sets fail_loc=0x238, and read_cache_enable=0 on its own only selects the DIO path - it does not make a DIO folio uptodate. LU-19778 is filed as "sanity test_428: osd_write_commit() ASSERTION( PageLocked(lnb[i].lnb_page) ) failed".
A sequence that does hold together, and matches the ticket:
test_399b (test_fake_rw read) truncates $tfile to up to 1GB.
fsize > od_readcache_max_filesize (default totalram/64), so
osd_bufs_get() picks cache=false and every lnb gets a DIO folio.
fail_loc=0x238 then makes every folio uptodate, so all of them take
the cache-hit branch and get unlocked; iobuf->dr_npages stays 0 so
the guarded early-release loop never runs.
test_428 later writes 128MB files (also over the filesize limit) on
the same service thread and trips the write-side LASSERT.
That also explains why this survived since LU-13309: it needs fail_loc=0x238 *and* the non-cached path, and test_399a/399b only take the non-cached path when the test file exceeds readcache_max_filesize.
Again, too much LLM-generated explanation is just causing more issues than it solves.
LU-19778 osd-ldiskfs: don't unlock DIO folios in osd_read_prep cache-hit path
DIO folios (PagePrivate2) are per-thread state kept locked in
oti_dio_folios[] for their lifetime. osd_get_page() only calls
folio_lock() on first allocation; reused slots skip the lock.
When any path marks a DIO folio uptodate before osd_read_prep() sees
it — e.g. OBD_FAIL_OST_FAKE_RW (0x238) calling SetPageUptodate(), or
a cached read hitting the same folio — the cache-hit branch fires and
unlock_page() is called on a folio that must remain locked.
On the next RPC the same thread reuses the (now unlocked) folio without
re-locking it. Two crash sites follow:
- Read path: if the file offset maps to a sparse region, osd_do_bio()
submits no bio, the early-release loop runs, and
LASSERT(PageLocked(page)) panics the server.
- Write path: if a subsequent write RPC obtains the same DIO folio,
osd_write_commit() hits LASSERT(PageLocked(lnb[i].lnb_page)).
This is the scenario reproduced by toggling read_cache_enable=0
while concurrent writes are in flight (test_155g + test_63a).
Guard the unlock_page() call with !PagePrivate2(), mirroring the
identical guard already present in the early-release loop below.
Fixes: e790df5fa38d ("LU-13309 osd-ldiskfs: speedup osd_bufs_get/put")
TLC-bug-id: TLU-184
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Assisted-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I58cecf2cdf89f41a01fdeb14e2e304e9b6588f94
| failed enforced test | platform | detail | |
|---|---|---|---|
| full-dkms failed 2× | RHEL 8.10 / x86_64 | ran 2 tests. 1 tests failed: lustre-initialization. | session |
(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.
(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`.
(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.
(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.
(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).
(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?
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
| unique failing test | history |
|---|---|
| sanity-quota@ldiskfs+DNE:test_80 | seen in 67 other reviews |
| failed enforced test | platform | detail | |
|---|---|---|---|
| review-dne-zfs-part-4 | RHEL 10.1 / x86_64 | ran 9 tests. 1 tests failed: sanity-quota. | session |
(minor) duplicate `Signed-off-by: Minh`...
(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`.
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.
Same here. While its labled as obd specific its really super generic.
`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()`.
`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?
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.
This looks like a reasonable suggestion?
(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);
This also seems reasonable
(style) dropping the `static struct genl_family lustre_family;` forward declaration left two blank lines here; one is enough.
(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.
(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.
(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.
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>
Which is better? The error messages of libnl or the error messages of strerror(). I went with the libnl ones.
We could set data->error = -errno;
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?
Yes I never set data->error :-(
This is why I told Alexey
we need to allocate large cb->min_dump_alloc. Otherwise we get this retry loops. Ugh what a mess.
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
(style) This isn't a bug, but a bare string on the right of `=~` is compiled as a regex, so the `*` quantifies the preceding `/` rather than standing in for the parameter name. It does happen to cover both dictionary spellings (`man4 page` and `man4/ page`), which `m{/man4/? page}` would state outright. As written, an entry later worded `Documentation/man4/<param>.4 page` would silently stop matching and turn the block back off.
(defect) The two-argument macro forms never reach the parameter name here.
In the real macro names `_SEQ_FOPS_` is followed by `RO_`/`RW_`, so the `TYPE\(\s*\w+,\s*` branch cannot match and `\w*\(` wins instead, capturing the first argument. That argument is the module prefix, not the parameter: lprocfs_status.h:795 expands `_RO_TYPE(name, type)` to `LDEBUGFS_SEQ_FOPS_RO(name##_##type)`, and the page is named `<name>.<type>.4`. `_WR_ONLY(name, type)` has no branch of its own and takes the same path.
The trailing `_` also excludes the bare `LPROC_SEQ_FOPS(name)` form, which spelling.txt:208 does nag on (lustre/quota/qsd_lib.c:179).
Checked against this commit with both `Documentation/man4/at_max.4` and `mdt.at_max.4` on disk:
+LDEBUGFS_SEQ_FOPS_RW_TYPE(mdt, at_max);
WARNING:TYPO_SPELLING: ... 'create Documentation/man4/ page for this parameter'?
`LUSTRE_RW_ATTR(at_max)` in the same patch is quiet, so the escape hatch works only for the single-argument forms. Since `_RO_TYPE`/`_RW_TYPE` are most of the `LDEBUGFS_SEQ_FOPS_*` uses in the tree, the commit message's claim to cover the `LDEBUGFS_SEQ_FOPS_` entries doesn't hold for them.
Would `_SEQ_FOPS(?:_(?:\w+_TYPE|WR_ONLY)\(\s*\w+,\s*|_?\w*\()` catch all the forms? That captures `at_max`/`force_reint`/`qsd_enabled` on the cases above, and the existing `{,*.}$param.4` glob then finds both the plain and the dotted page name.
LU-20560 build: quiet checkpatch spelling nags
LUSTRE_{RO,RW,WO}_ATTR, MODULE_PARM_DESC, and LDEBUGFS_SEQ_FOPS_
spelling.txt entries nag for each new sysfs parameter to add a
Documentation/man4/ page, but complain even if the patch adds
or modifies the relevant man4/ page. Suppress this warning if
Documentation/man4/<PARAM>.4 exists or is added by the patch.
Also exempt the spelling dictionaries from their own typo scan.
An addition to the spelling file would trip its own entry. Do not
generate a warning when adding a new entry to these files. Match
via a "scripts/spelling" regexp so that it works with both the
Lustre and in-kernel spelling files to facilitate upstream merge.
TLC-bug-id: TLU-208
Fixes: 1792d49a9660 ("LU-17231 doc: Create script to generate man pages")
Signed-off-by: Minh Diep <mdiep@thelustrecollective.com>
Change-Id: I5d4fe5e7a2e2474dfa98e992034a54ff92f1f2c3
LU-12864 test: enable unstable check accounting in test Enable unstable check accounting in sanity-benchmark test_iozone to verify whether unstable check accounting could prohibit client pinning too much memory for writing. Test-Parameters: fortestonly testlist=sanity-benchmark envdefinitions=ONLY=iozone Signed-off-by: Bobi Jam <bobijam@whamcloud.com> Change-Id: I4cc7cfead8709380ad01c90bc0be9108dbe8b3f0
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
LU-13936 contrib: automate commit message updates When porting a large number of patches from one branch to another there are a set of conventions which need to be followed. It is possible to automate the modification of the commit messages. This speeds up the porting process and reduces the potential of human error. Test-Parameters: trivial Signed-off-by: Amir Shehata <ashehata@whamcloud.com> Change-Id: I7b3648c36938aef964233ae803c2814ad27188c9
LU-16059 build: Installation of dkms server builds
The linux-zfs-dkms package is passing the wrong paths
for zfs [and spl] causing the dkms build to fail.
ZFS_VERSION is not parsed correctly from 'dkms status'.
The splver and zfsver check can match against the wrong
package(s).
lustre-zfs-dkms provides: kmod-lustre-osd-zfs, and
lustre-osd-zfs-mount
lustre-ldiskfs-dkms provides: kmod-lustre-osd-ldiskfs and
lustre-osd-ldiskfs-mount
In the case of multiple zfs versions installed, build lustre
osd against the highest version number.
Lustre-change: https://review.whamcloud.com/48083
Lustre-commit: c3dc67b2c5bf1974d792b3701d932bd04c756bd8
HPE-bug-id: LUS-11113
Test-Parameters: trivial
Signed-off-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Change-Id: Ic154ca045427bf26cb7e6a44b8c467675e987aad
LU-15875 kernel: kernel update RHEL7.9 [3.10.0-1160.66.1.el7] Update RHEL7.9 kernel to 3.10.0-1160.66.1.el7. Test-Parameters: trivial clientdistro=el7.9 serverdistro=el7.9 Change-Id: I9e8ab33edd6cacbbf895399962027827a1befd5b Signed-off-by: Jian Yu <yujian@whamcloud.com>
LU-15795 kernel: RHEL 8.6 server support This patch makes changes to support RHEL 8.6 release with kernel 4.18.0-372.9.1.el8 for Lustre server. Test-Parameters: trivial fstype=ldiskfs \ clientdistro=el8.6 serverdistro=el8.6 testlist=sanity Test-Parameters: trivial fstype=zfs \ clientdistro=el8.6 serverdistro=el8.6 testlist=sanity Change-Id: I86407171b40d40a05379085444eee79e2ac272b3 Signed-off-by: Jian Yu <yujian@whamcloud.com>
LU-13059 kernel: kernel update RHEL7.7 [3.10.0-1062.9.1.el7] Update RHEL7.7 kernel to 3.10.0-1062.9.1.el7 for Lustre client. Test-Parameters: trivial clientdistro=el7.7 Change-Id: I11fc7a2c382a5c234698bfb30a38a08ed29fef03 Signed-off-by: Jian Yu <yujian@whamcloud.com>
| failed enforced test | platform | detail | |
|---|---|---|---|
| review-dne-part-4 | RHEL 8.10 / x86_64 | ran 9 tests. 1 tests failed: sanity-flr. | session |
LU-16960 client: kmod-lustre-client rpm add kernel version This change adds the kernel version and release number to the release number of the kmod-lustre-client rpm package. Signed-off-by: Goetz Waschk <goetz.waschk@desy.de> Change-Id: I304a1fd8897b1f7829530d52538f544b7a4cb386
LU-1095 debug: Log expired requests as D_NETERROR While knowing about expired requests is important, it's also not an uncommon event on a large system. As long as the lower layers can retry or take other corrective action there's no reason to both an administrator with this. They can always set D_NETERROR is they suspect problems with the network. Signed-off-by: Prakash Surya <surya1@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Change-Id: I9662144eb60d6ecd9e27063b6c4bf55a93b1b34a
LU-1095 debug: Standardize recovery messages The guiding principle here is that any message which might normally occur as part of recovery should not be printed using LCONSOLE_*. Also attempt to limit to a single message per service the final result of the recovery process. Too much noise and it will always just get ignored. Signed-off-by: Prakash Surya <surya1@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Change-Id: I5609c4918477be63c41ae0b233a10e9547337dec
LU-7700 build: Fix autoreconf by using AC_CONFIG_MACRO_DIRS Autoreconf does not work because we are not letting autotools know about all of the various m4 macro directories in Lustre's tree anywhere other than aclocal's command line in autogen.sh As of automake 1.13 at least, AC_CONFIG_MACRO_DIRS exists and can both replace our use of aclocal command line includes in autogen.sh, and express the includs in a way that allows autoreconf to work. The only problem, of course, is that automake 1.13 is relatively new (2012), and is not currently in some (all?) RHEL6 releases. Bump the required automake version to 1.13 in AM_INIT_AUTOMAKE to reflect that requirement. Change-Id: I1594aade093115da3181e2dd5a99c81176ee7829 Signed-off-by: Christopher J. Morrone <morrone2@llnl.gov>
LU-8148: Add OST Pools to mdtest and IOR in auster Allow mdtest and IOR to use pool definitions. Defaults to null if not set in config file. Fixed style errors. Rebased to current master 06/23/2016 Test-Parameters: trivial testlist=<parallel-scale> Change-Id: Ibaa60183f57362a1a7de006412ed368a39d9f3e7 Signed-off-by: Cliff White <cliff.white@intel.com>
| failed enforced test | platform | detail | |
|---|---|---|---|
| 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 |
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>
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>
| failed enforced test | platform | detail | |
|---|---|---|---|
| custom-1002 | RHEL 9.3/x86_64 | ran 3 tests. 1 tests failed: recovery-small. | session |
| review-dne-subtest-change | RHEL 9.3/x86_64 | ran 3 tests. 1 tests failed: recovery-small. | session |
| review-dne-zfs-subtest-change | RHEL 8.9/x86_64 | ran 3 tests. 1 tests failed: recovery-small. | session |
(typo) "connection"
LU-12066 test: cleanup staled exports In test_26b in recovery-small, there could be staled exports to wait to be evcited, and these exports should be cleaned up before test. Test-Parameters: trivial testlist=recovery-small env=ONLY=26a,ONLY_REPEAT=50 Test-Parameters: trivial testlist=recovery-small env=ONLY=26b,ONLY_REPEAT=50 Signed-off-by: Hongchao Zhang <hongchao@whamcloud.com> Change-Id: I5ba05a565fd095457df1b6d511ffec60d02ccbd0
| failed enforced test | platform | detail | |
|---|---|---|---|
| review-ldiskfs | RHEL 9.4 / 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-sec. | session |
LU-17843 build: correctly create lustre-devel.files The lustre-devel.files file is currently 'created' in the %description section of rpmbuild (the :> command), but that command doesn't do anything in %description. Move this to %install and add a blank line so the file is not empty. Otherwise, the lustre-devel.files file is only populated when we build with --shared, not static. If the lustre-devel.files file is not present OR if it's entirely empty (0 size), this results in an error in rpmbuild. Note the lustre-devel package still has other contents added in the %files directive, so lustre-devel is sound - the issue is just that you can't build RPMs when compiling statically due to the spec file issues. Signed-off-by: Patrick Farrell <patrick.farrell@oracle.com> Change-Id: Ic598531e376ce1cd356330023b74ec624b9adea8
LU-16755 kernel: RHEL 8.8 client support This patch makes changes to support RHEL 8.8 release with kernel 4.18.0-477.el8 for Lustre client and server. Lustre-change: https://review.whamcloud.com/50708 Lustre-commit: fccc55866bc7da0b4908130d3f16bd355ffb7dc6 Test-Parameters: trivial fstype=ldiskfs clientdistro=el8.8 serverdistro=el7.9 testlist=sanity Test-Parameters: trivial fstype=zfs clientdistro=el8.8 serverdistro=el7.9 testlist=sanity Change-Id: Ie47f131e0340a601c8a5d748ecf9b1b73d4baa1f Signed-off-by: Jian Yu <yujian@whamcloud.com> Reviewed-by: Yang Sheng <ys@whamcloud.com> Reviewed-by: Minh Diep <mdiep@whamcloud.com> Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com> Signed-off-by: Etienne AUJAMES <eaujames@ddn.com>
LU-15793 kernel: kernel update RHEL8.5 [4.18.0-348.23.1.el8_5] Update RHEL8.5 kernel to 4.18.0-348.23.1.el8_5 for Lustre client. Test-Parameters: trivial clientdistro=el8.5 testlist=sanity Change-Id: I9724e304c2d32bb0ac2dcf4138438c79d4abca0f Signed-off-by: Jian Yu <yujian@whamcloud.com>
LU-16269 kernel: kernel update RHEL8.6 [4.18.0-372.32.1.el8_6] Update RHEL8.6 kernel to 4.18.0-372.32.1.el8_6. Lustre-change: https://review.whamcloud.com/48969 Lustre-commit: 705edb250d62dca84f97f7e97eb468d554611c20 Test-Parameters: trivial clientdistro=el8.6 Change-Id: I5576180ddf10ed2b0a5e2ef85b58fef993de65a4 Signed-off-by: Jian Yu <yujian@whamcloud.com>
LU-16075 kernel: kernel update RHEL8.6 [4.18.0-372.19.1.el8_6] Update RHEL8.6 kernel to 4.18.0-372.19.1.el8_6. Lustre-change: https://review.whamcloud.com/48116 Lustre-commit: TBD (077f4b13e7fbe564a79c35487e8208e8381fc833) Test-Parameters: trivial fstype=ldiskfs \ clientdistro=el8.6 serverdistro=el8.6 testlist=sanity Test-Parameters: trivial fstype=zfs \ clientdistro=el8.6 serverdistro=el8.6 testlist=sanity Change-Id: I8e0fbdab54d36512c4c4cbdbc97c580994ebcbd3 Signed-off-by: Jian Yu <yujian@whamcloud.com>
LU-15793 kernel: kernel update RHEL8.5 [4.18.0-348.23.1.el8_5] Update RHEL8.5 kernel to 4.18.0-348.23.1.el8_5. Test-Parameters: trivial fstype=ldiskfs \ clientdistro=el8.5 serverdistro=el8.5 testlist=sanity Test-Parameters: trivial fstype=zfs \ clientdistro=el8.5 serverdistro=el8.5 testlist=sanity Change-Id: I9724e304c2d32bb0ac2dcf4138438c79d4abca0f Signed-off-by: Jian Yu <yujian@whamcloud.com>
LU-15795 kernel: new kernel [RHEL 8.6 4.18.0-372.9.1.el8] This patch makes changes to support new RHEL 8.6 release for Lustre client. Test-Parameters: trivial clientdistro=el8.6 Change-Id: Id738259ed94104c3a3c7bb5c1b853cfabad49405 Signed-off-by: Jian Yu <yujian@whamcloud.com>