Fix #5101: exports with sharenfs remain after zfs mount -a
When running `zfs mount -a`, prevent the exported datasets (with sharenfs) to be truncated (unexported). Adds tests to verify shares persist after mount -a Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
This commit is contained in:
parent
81d11761c3
commit
5f4f0445f4
131
debian/patches/0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch
vendored
Normal file
131
debian/patches/0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch
vendored
Normal file
@ -0,0 +1,131 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Lendl <1321542+stfl@users.noreply.github.com>
|
||||
Date: Fri, 12 Jan 2024 21:05:11 +0100
|
||||
Subject: [PATCH] fix(mount): do not truncate shares not zfs mount
|
||||
|
||||
When running zfs share -a resetting the exports.d/zfs.exports makes
|
||||
sense the get a clean state.
|
||||
Truncating was also called with zfs mount which would not populate the
|
||||
file again.
|
||||
Add test to verify shares persist after mount -a.
|
||||
|
||||
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
||||
Signed-off-by: Stefan Lendl <s.lendl@proxmox.com>
|
||||
Closes #15607
|
||||
Closes #15660
|
||||
---
|
||||
cmd/zfs/zfs_main.c | 3 +-
|
||||
tests/runfiles/common.run | 3 +-
|
||||
tests/zfs-tests/tests/Makefile.am | 1 +
|
||||
.../zfs_share/zfs_share_after_mount.ksh | 62 +++++++++++++++++++
|
||||
4 files changed, 67 insertions(+), 2 deletions(-)
|
||||
create mode 100755 tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_after_mount.ksh
|
||||
|
||||
diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c
|
||||
index 9939f206a..f67f6114d 100644
|
||||
--- a/cmd/zfs/zfs_main.c
|
||||
+++ b/cmd/zfs/zfs_main.c
|
||||
@@ -7234,7 +7234,8 @@ share_mount(int op, int argc, char **argv)
|
||||
pthread_mutex_init(&share_mount_state.sm_lock, NULL);
|
||||
|
||||
/* For a 'zfs share -a' operation start with a clean slate. */
|
||||
- zfs_truncate_shares(NULL);
|
||||
+ if (op == OP_SHARE)
|
||||
+ zfs_truncate_shares(NULL);
|
||||
|
||||
/*
|
||||
* libshare isn't mt-safe, so only do the operation in parallel
|
||||
diff --git a/tests/runfiles/common.run b/tests/runfiles/common.run
|
||||
index f6e5367f5..a600140ea 100644
|
||||
--- a/tests/runfiles/common.run
|
||||
+++ b/tests/runfiles/common.run
|
||||
@@ -316,7 +316,8 @@ tags = ['functional', 'cli_root', 'zfs_set']
|
||||
[tests/functional/cli_root/zfs_share]
|
||||
tests = ['zfs_share_001_pos', 'zfs_share_002_pos', 'zfs_share_003_pos',
|
||||
'zfs_share_004_pos', 'zfs_share_006_pos', 'zfs_share_008_neg',
|
||||
- 'zfs_share_010_neg', 'zfs_share_011_pos', 'zfs_share_concurrent_shares']
|
||||
+ 'zfs_share_010_neg', 'zfs_share_011_pos', 'zfs_share_concurrent_shares',
|
||||
+ 'zfs_share_after_mount']
|
||||
tags = ['functional', 'cli_root', 'zfs_share']
|
||||
|
||||
[tests/functional/cli_root/zfs_snapshot]
|
||||
diff --git a/tests/zfs-tests/tests/Makefile.am b/tests/zfs-tests/tests/Makefile.am
|
||||
index c20b428db..3798194f0 100644
|
||||
--- a/tests/zfs-tests/tests/Makefile.am
|
||||
+++ b/tests/zfs-tests/tests/Makefile.am
|
||||
@@ -912,6 +912,7 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \
|
||||
functional/cli_root/zfs_share/zfs_share_012_pos.ksh \
|
||||
functional/cli_root/zfs_share/zfs_share_013_pos.ksh \
|
||||
functional/cli_root/zfs_share/zfs_share_concurrent_shares.ksh \
|
||||
+ functional/cli_root/zfs_share/zfs_share_after_mount.ksh \
|
||||
functional/cli_root/zfs_snapshot/cleanup.ksh \
|
||||
functional/cli_root/zfs_snapshot/setup.ksh \
|
||||
functional/cli_root/zfs_snapshot/zfs_snapshot_001_neg.ksh \
|
||||
diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_after_mount.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_after_mount.ksh
|
||||
new file mode 100755
|
||||
index 000000000..0d4b66ea8
|
||||
--- /dev/null
|
||||
+++ b/tests/zfs-tests/tests/functional/cli_root/zfs_share/zfs_share_after_mount.ksh
|
||||
@@ -0,0 +1,62 @@
|
||||
+#!/bin/ksh -p
|
||||
+#
|
||||
+# CDDL HEADER START
|
||||
+#
|
||||
+# The contents of this file are subject to the terms of the
|
||||
+# Common Development and Distribution License (the "License").
|
||||
+# You may not use this file except in compliance with the License.
|
||||
+#
|
||||
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
+# or https://opensource.org/licenses/CDDL-1.0.
|
||||
+# See the License for the specific language governing permissions
|
||||
+# and limitations under the License.
|
||||
+#
|
||||
+# When distributing Covered Code, include this CDDL HEADER in each
|
||||
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
+# If applicable, add the following below this CDDL HEADER, with the
|
||||
+# fields enclosed by brackets "[]" replaced with your own identifying
|
||||
+# information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
+#
|
||||
+# CDDL HEADER END
|
||||
+#
|
||||
+
|
||||
+#
|
||||
+# Copyright (c) 2023 by Proxmox. All rights reserved.
|
||||
+#
|
||||
+
|
||||
+. $STF_SUITE/include/libtest.shlib
|
||||
+
|
||||
+# DESCRIPTION:
|
||||
+# Verify that nfs shares persist after zfs mount -a
|
||||
+#
|
||||
+# STRATEGY:
|
||||
+# 1. Verify that the filesystem is not shared.
|
||||
+# 2. Enable the 'sharenfs' property
|
||||
+# 3. Verify filesystem is shared
|
||||
+# 4. Invoke 'zfs mount -a'
|
||||
+# 5. Verify filesystem is still shared
|
||||
+
|
||||
+verify_runnable "global"
|
||||
+
|
||||
+function cleanup
|
||||
+{
|
||||
+ log_must zfs set sharenfs=off $TESTPOOL/$TESTFS
|
||||
+ is_shared $TESTPOOL/$TESTFS && \
|
||||
+ log_must unshare_fs $TESTPOOL/$TESTFS
|
||||
+ log_must zfs share -a
|
||||
+}
|
||||
+
|
||||
+
|
||||
+log_onexit cleanup
|
||||
+
|
||||
+cleanup
|
||||
+
|
||||
+log_must zfs set sharenfs="on" $TESTPOOL/$TESTFS
|
||||
+log_must is_shared $TESTPOOL/$TESTFS
|
||||
+log_must is_exported $TESTPOOL/$TESTFS
|
||||
+
|
||||
+log_must zfs mount -a
|
||||
+log_must is_shared $TESTPOOL/$TESTFS
|
||||
+log_must is_exported $TESTPOOL/$TESTFS
|
||||
+
|
||||
+log_pass "Verify that nfs shares persist after zfs mount -a"
|
1
debian/patches/series
vendored
1
debian/patches/series
vendored
@ -9,3 +9,4 @@
|
||||
0009-arc-stat-summary-guard-access-to-l2arc-MFU-MRU-stats.patch
|
||||
0010-Fix-nfs_truncate_shares-without-etc-exports.d.patch
|
||||
0011-zpool-status-tighten-bounds-for-noalloc-stat-availab.patch
|
||||
0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch
|
||||
|
Loading…
Reference in New Issue
Block a user