From f50697f95b1601d40e7c33249ab1b5d8163d9f64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz>
Date: Mon, 17 May 2021 18:08:35 +0200
Subject: [PATCH] libshare: nfs: retry flock() when interrupted
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Reviewed-by: Don Brady <don.brady@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Ahelenia ZiemiaƄska <nabijaczleweli@nabijaczleweli.xyz>
Closes #12067
---
 lib/libshare/nfs.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/libshare/nfs.c b/lib/libshare/nfs.c
index e339ebc81f..2b0c70001d 100644
--- a/lib/libshare/nfs.c
+++ b/lib/libshare/nfs.c
@@ -50,7 +50,9 @@ nfs_exports_lock(const char *name)
 		return (err);
 	}
 
-	if (flock(nfs_lock_fd, LOCK_EX) != 0) {
+	while ((err = flock(nfs_lock_fd, LOCK_EX)) != 0 && errno == EINTR)
+		;
+	if (err != 0) {
 		err = errno;
 		fprintf(stderr, "failed to lock %s: %s\n", name, strerror(err));
 		(void) close(nfs_lock_fd);