[pve-devel] [PATCH zfsonlinux] Fix #5101: exports with sharenfs remain after zfs mount -a

Stefan Lendl s.lendl at proxmox.com
Mon Jan 29 12:16:15 CET 2024


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 at proxmox.com>
---
This was merged upstream via https://github.com/openzfs/zfs/pull/15660

 ...do-not-truncate-shares-not-zfs-mount.patch | 131 ++++++++++++++++++
 debian/patches/series                         |   1 +
 2 files changed, 132 insertions(+)
 create mode 100644 debian/patches/0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch

diff --git a/debian/patches/0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch b/debian/patches/0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch
new file mode 100644
index 0000000..ab01e62
--- /dev/null
+++ b/debian/patches/0012-fix-mount-do-not-truncate-shares-not-zfs-mount.patch
@@ -0,0 +1,131 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Stefan Lendl <1321542+stfl at 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 at llnl.gov>
+Signed-off-by: Stefan Lendl <s.lendl at 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"
diff --git a/debian/patches/series b/debian/patches/series
index 35f81d1..e9b5ce0 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -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
-- 
2.43.0





More information about the pve-devel mailing list