diff --git a/SOURCES/autofs-5.1.8-fix-fedfs-build-flags.patch b/SOURCES/autofs-5.1.8-fix-fedfs-build-flags.patch
new file mode 100644
index 0000000..b3a846f
--- /dev/null
+++ b/SOURCES/autofs-5.1.8-fix-fedfs-build-flags.patch
@@ -0,0 +1,39 @@
+autofs-5.1.8 - fix fedfs build flags
+
+From: Ian Kent <raven@themaw.net>
+
+Dynamic executables should be compiled with -fPIE and linked with -pie.
+
+Signed-off-by: Ian Kent <raven@themaw.net>
+---
+ CHANGELOG      |    1 +
+ fedfs/Makefile |    4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+--- autofs-5.1.7.orig/CHANGELOG
++++ autofs-5.1.7/CHANGELOG
+@@ -81,6 +81,7 @@
+ - eliminate some more alloca usage.
+ - use default stack size for threads.
+ - fix kernel mount status notification.
++- fix fedfs build flags.
+ 
+ 25/01/2021 autofs-5.1.7
+ - make bind mounts propagation slave by default.
+--- autofs-5.1.7.orig/fedfs/Makefile
++++ autofs-5.1.7/fedfs/Makefile
+@@ -23,12 +23,12 @@ LDFLAGS += -rdynamic
+ all: mount.fedfs fedfs-map-nfs4
+ 
+ mount.fedfs: $(mount_fedfs_OBJ) $(fedfs-getsrvinfo_OBJ) $(HDRS)
+-	$(CC) -o mount.fedfs \
++	$(CC) $(DAEMON_LDFLAGS) -o mount.fedfs \
+ 	       $(mount_fedfs_OBJ) $(fedfs-getsrvinfo_OBJ) \
+ 	       $(LDFLAGS) $(LIBRESOLV) $(LIBS)
+ 
+ fedfs-map-nfs4: $(fedfs-map-nfs4_OBJ) $(fedfs-getsrvinfo_OBJ) $(HDRS)
+-	$(CC) -o fedfs-map-nfs4 \
++	$(CC) $(DAEMON_LDFLAGS) -o fedfs-map-nfs4 \
+ 	       $(fedfs-map-nfs4_OBJ) $(fedfs-getsrvinfo_OBJ) \
+ 	       $(LDFLAGS) $(LIBRESOLV) $(LIBS)
+ 
diff --git a/SOURCES/autofs-5.1.8-fix-kernel-mount-status-notification.patch b/SOURCES/autofs-5.1.8-fix-kernel-mount-status-notification.patch
new file mode 100644
index 0000000..da7c2d5
--- /dev/null
+++ b/SOURCES/autofs-5.1.8-fix-kernel-mount-status-notification.patch
@@ -0,0 +1,135 @@
+autofs-5.1.8 - fix kernel mount status notification
+
+From: Ian Kent <raven@themaw.net>
+
+The status return for attempted mount notification is not done
+correctly in some cases leading to a status being sent to the
+kernel multiple times or the send causing an error.
+
+We must send a status to the kernel but it needs to be the correct
+one. It definitely shouldn't be sent twice for the same mount attempt
+and shouldn't be failing.
+
+Signed-off-by: Ian Kent <raven@themaw.net>
+---
+ CHANGELOG         |    1 +
+ daemon/direct.c   |   19 +++++++++++--------
+ daemon/indirect.c |   19 +++++++++++--------
+ 3 files changed, 23 insertions(+), 16 deletions(-)
+
+--- autofs-5.1.7.orig/CHANGELOG
++++ autofs-5.1.7/CHANGELOG
+@@ -80,6 +80,7 @@
+ - fix concat_options() error handling.
+ - eliminate some more alloca usage.
+ - use default stack size for threads.
++- fix kernel mount status notification.
+ 
+ 25/01/2021 autofs-5.1.7
+ - make bind mounts propagation slave by default.
+--- autofs-5.1.7.orig/daemon/direct.c
++++ autofs-5.1.7/daemon/direct.c
+@@ -1143,12 +1143,18 @@ int handle_packet_expire_direct(struct a
+ 	return 0;
+ }
+ 
+-static void mount_send_fail(void *arg)
++static void mount_send_status(void *arg)
+ {
+ 	struct ioctl_ops *ops = get_ioctl_ops();
+ 	struct pending_args *mt = arg;
+ 	struct autofs_point *ap = mt->ap;
+-	ops->send_fail(ap->logopt, mt->ioctlfd, mt->wait_queue_token, -ENOENT);
++
++	if (mt->status)
++		ops->send_fail(ap->logopt, mt->ioctlfd,
++			       mt->wait_queue_token, mt->status);
++	else
++		ops->send_ready(ap->logopt,
++				mt->ioctlfd, mt->wait_queue_token);
+ 	ops->close(ap->logopt, mt->ioctlfd);
+ }
+ 
+@@ -1177,7 +1183,8 @@ static void *do_mount_direct(void *arg)
+ 
+ 	pending_mutex_unlock(args);
+ 
+-	pthread_cleanup_push(mount_send_fail, &mt);
++	mt.status = 0;
++	pthread_cleanup_push(mount_send_status, &mt);
+ 
+ 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &state);
+ 
+@@ -1191,9 +1198,7 @@ static void *do_mount_direct(void *arg)
+ 	if (status == -1) {
+ 		error(ap->logopt,
+ 		      "can't stat direct mount trigger %s", mt.name);
+-		ops->send_fail(ap->logopt,
+-			       mt.ioctlfd, mt.wait_queue_token, -ENOENT);
+-		ops->close(ap->logopt, mt.ioctlfd);
++		mt.status = -ENOENT;
+ 		pthread_setcancelstate(state, NULL);
+ 		pthread_exit(NULL);
+ 	}
+@@ -1203,8 +1208,6 @@ static void *do_mount_direct(void *arg)
+ 		error(ap->logopt,
+ 		     "direct trigger not valid or already mounted %s",
+ 		     mt.name);
+-		ops->send_ready(ap->logopt, mt.ioctlfd, mt.wait_queue_token);
+-		ops->close(ap->logopt, mt.ioctlfd);
+ 		pthread_setcancelstate(state, NULL);
+ 		pthread_exit(NULL);
+ 	}
+--- autofs-5.1.7.orig/daemon/indirect.c
++++ autofs-5.1.7/daemon/indirect.c
+@@ -674,13 +674,18 @@ int handle_packet_expire_indirect(struct
+ 	return 0;
+ }
+ 
+-static void mount_send_fail(void *arg)
++static void mount_send_status(void *arg)
+ {
+ 	struct ioctl_ops *ops = get_ioctl_ops();
+ 	struct pending_args *mt = arg;
+ 	struct autofs_point *ap = mt->ap;
+-	ops->send_fail(ap->logopt,
+-		       ap->ioctlfd, mt->wait_queue_token, -ENOENT);
++
++	if (mt->status)
++		ops->send_fail(ap->logopt, ap->ioctlfd,
++			       mt->wait_queue_token, mt->status);
++	else
++		ops->send_ready(ap->logopt,
++				ap->ioctlfd, mt->wait_queue_token);
+ }
+ 
+ static void *do_mount_indirect(void *arg)
+@@ -709,7 +714,8 @@ static void *do_mount_indirect(void *arg
+ 
+ 	pending_mutex_unlock(args);
+ 
+-	pthread_cleanup_push(mount_send_fail, &mt);
++	mt.status = 0;
++	pthread_cleanup_push(mount_send_status, &mt);
+ 
+ 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &state);
+ 
+@@ -722,9 +728,7 @@ static void *do_mount_indirect(void *arg
+ 	len = ncat_path(buf, sizeof(buf), ap->path, mt.name, mt.len);
+ 	if (!len) {
+ 		crit(ap->logopt, "path to be mounted is to long");
+-		ops->send_fail(ap->logopt,
+-			       ap->ioctlfd, mt.wait_queue_token,
+-			      -ENAMETOOLONG);
++		mt.status = -ENAMETOOLONG;
+ 		pthread_setcancelstate(state, NULL);
+ 		pthread_exit(NULL);
+ 	}
+@@ -733,7 +737,6 @@ static void *do_mount_indirect(void *arg
+ 	if (status != -1 && !(S_ISDIR(st.st_mode) && st.st_dev == mt.dev)) {
+ 		error(ap->logopt,
+ 		      "indirect trigger not valid or already mounted %s", buf);
+-		ops->send_ready(ap->logopt, ap->ioctlfd, mt.wait_queue_token);
+ 		pthread_setcancelstate(state, NULL);
+ 		pthread_exit(NULL);
+ 	}
diff --git a/SOURCES/autofs-5.1.8-fix-set-open-file-limit.patch b/SOURCES/autofs-5.1.8-fix-set-open-file-limit.patch
new file mode 100644
index 0000000..c213c00
--- /dev/null
+++ b/SOURCES/autofs-5.1.8-fix-set-open-file-limit.patch
@@ -0,0 +1,57 @@
+autofs-5.1.8 - fix set open file limit
+
+From: Ian Kent <raven@themaw.net>
+
+The check of whether the open file limit needs to be changed is not
+right, it checks the hard open file limit against what autofs wants
+to set it to which is always less than this value. Consequently the
+open file limit isn't changed.
+
+autofs should be changing only the soft open file limit but it is
+setting both the hard and soft limits. The system hard limit is much
+higer than the autofs maximum open files so the hard limit should be
+left alone.
+
+While we are here increase the requested maximum soft open file limit
+to 20k.
+
+Signed-off-by: Ian Kent <raven@themaw.net>
+---
+ CHANGELOG          |    1 +
+ daemon/automount.c |    7 ++++---
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+--- autofs-5.1.7.orig/CHANGELOG
++++ autofs-5.1.7/CHANGELOG
+@@ -82,6 +82,7 @@
+ - use default stack size for threads.
+ - fix kernel mount status notification.
+ - fix fedfs build flags.
++- fix set open file limit.
+ 
+ 25/01/2021 autofs-5.1.7
+ - make bind mounts propagation slave by default.
+--- autofs-5.1.7.orig/daemon/automount.c
++++ autofs-5.1.7/daemon/automount.c
+@@ -94,7 +94,7 @@ struct startup_cond suc = {
+ pthread_key_t key_thread_stdenv_vars;
+ pthread_key_t key_thread_attempt_id = (pthread_key_t) 0L;
+ 
+-#define MAX_OPEN_FILES		10240
++#define MAX_OPEN_FILES		20480
+ 
+ int aquire_flag_file(void);
+ void release_flag_file(void);
+@@ -2483,9 +2483,10 @@ int main(int argc, char *argv[])
+ 	}
+ 
+ 	res = getrlimit(RLIMIT_NOFILE, &rlim);
+-	if (res == -1 || rlim.rlim_max <= MAX_OPEN_FILES)  {
++	if (res == -1 || rlim.rlim_cur <= MAX_OPEN_FILES)  {
+ 		rlim.rlim_cur = MAX_OPEN_FILES;
+-		rlim.rlim_max = MAX_OPEN_FILES;
++		if (rlim.rlim_max < MAX_OPEN_FILES)
++			rlim.rlim_max = MAX_OPEN_FILES;
+ 	}
+ 	res = setrlimit(RLIMIT_NOFILE, &rlim);
+ 	if (res)
diff --git a/SOURCES/autofs-5.1.8-improve-descriptor-open-error-reporting.patch b/SOURCES/autofs-5.1.8-improve-descriptor-open-error-reporting.patch
new file mode 100644
index 0000000..6bb7f2a
--- /dev/null
+++ b/SOURCES/autofs-5.1.8-improve-descriptor-open-error-reporting.patch
@@ -0,0 +1,165 @@
+autofs-5.1.8 - improve descriptor open error reporting
+
+From: Ian Kent <raven@themaw.net>
+
+Add error message reporting to the descriptor open functions.
+
+Signed-off-by: Ian Kent <raven@themaw.net>
+---
+ CHANGELOG                |    1 +
+ daemon/automount.c       |    3 ---
+ daemon/spawn.c           |   29 +++++++++++++++++++++++++++++
+ lib/mounts.c             |   10 ++--------
+ modules/lookup_program.c |    5 +----
+ 5 files changed, 33 insertions(+), 15 deletions(-)
+
+--- autofs-5.1.7.orig/CHANGELOG
++++ autofs-5.1.7/CHANGELOG
+@@ -83,6 +83,7 @@
+ - fix kernel mount status notification.
+ - fix fedfs build flags.
+ - fix set open file limit.
++- improve descriptor open error reporting.
+ 
+ 25/01/2021 autofs-5.1.7
+ - make bind mounts propagation slave by default.
+--- autofs-5.1.7.orig/daemon/automount.c
++++ autofs-5.1.7/daemon/automount.c
+@@ -864,9 +864,6 @@ static int create_logpri_fifo(struct aut
+ 
+ 	fd = open_fd(fifo_name, O_RDWR|O_NONBLOCK);
+ 	if (fd < 0) {
+-		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+-		crit(ap->logopt,
+-		     "Failed to open %s: %s", fifo_name, estr);
+ 		unlink(fifo_name);
+ 		ret = -1;
+ 		goto out_free;
+--- autofs-5.1.7.orig/daemon/spawn.c
++++ autofs-5.1.7/daemon/spawn.c
+@@ -94,7 +94,12 @@ int open_fd(const char *path, int flags)
+ #endif
+ 	fd = open(path, flags);
+ 	if (fd == -1) {
++		char buf[MAX_ERR_BUF];
++		char *estr;
++
+ 		open_mutex_unlock();
++		estr = strerror_r(errno, buf, sizeof(buf));
++		logerr("failed to open file: %s", estr);
+ 		return -1;
+ 	}
+ 	check_cloexec(fd);
+@@ -113,7 +118,12 @@ int open_fd_mode(const char *path, int f
+ #endif
+ 	fd = open(path, flags, mode);
+ 	if (fd == -1) {
++		char buf[MAX_ERR_BUF];
++		char *estr;
++
+ 		open_mutex_unlock();
++		estr = strerror_r(errno, buf, sizeof(buf));
++		logerr("failed to open file: %s", estr);
+ 		return -1;
+ 	}
+ 	check_cloexec(fd);
+@@ -123,6 +133,8 @@ int open_fd_mode(const char *path, int f
+ 
+ int open_pipe(int pipefd[2])
+ {
++	char buf[MAX_ERR_BUF];
++	char *estr;
+ 	int ret;
+ 
+ 	open_mutex_lock();
+@@ -145,6 +157,8 @@ done:
+ 	return 0;
+ err:
+ 	open_mutex_unlock();
++	estr = strerror_r(errno, buf, sizeof(buf));
++	logerr("failed to open pipe: %s", estr);
+ 	return -1;
+ }
+ 
+@@ -159,7 +173,12 @@ int open_sock(int domain, int type, int
+ #endif
+ 	fd = socket(domain, type, protocol);
+ 	if (fd == -1) {
++		char buf[MAX_ERR_BUF];
++		char *estr;
++
+ 		open_mutex_unlock();
++		estr = strerror_r(errno, buf, sizeof(buf));
++		logerr("failed to open socket: %s", estr);
+ 		return -1;
+ 	}
+ 	check_cloexec(fd);
+@@ -184,7 +203,12 @@ FILE *open_fopen_r(const char *path)
+ #endif
+ 	f = fopen(path, "r");
+ 	if (f == NULL) {
++		char buf[MAX_ERR_BUF];
++		char *estr;
++
+ 		open_mutex_unlock();
++		estr = strerror_r(errno, buf, sizeof(buf));
++		logerr("failed to open file: %s", estr);
+ 		return NULL;
+ 	}
+ 	check_cloexec(fileno(f));
+@@ -209,7 +233,12 @@ FILE *open_setmntent_r(const char *table
+ #endif
+ 	tab = fopen(table, "r");
+ 	if (tab == NULL) {
++		char buf[MAX_ERR_BUF];
++		char *estr;
++
+ 		open_mutex_unlock();
++		estr = strerror_r(errno, buf, sizeof(buf));
++		logerr("failed to open mount table: %s", estr);
+ 		return NULL;
+ 	}
+ 	check_cloexec(fileno(tab));
+--- autofs-5.1.7.orig/lib/mounts.c
++++ autofs-5.1.7/lib/mounts.c
+@@ -2169,11 +2169,8 @@ struct mnt_list *get_mnt_list(const char
+ 		return NULL;
+ 
+ 	tab = open_fopen_r(_PROC_MOUNTS);
+-	if (!tab) {
+-		char *estr = strerror_r(errno, buf, PATH_MAX - 1);
+-		logerr("fopen: %s", estr);
++	if (!tab)
+ 		return NULL;
+-	}
+ 
+ 	while ((mnt = local_getmntent_r(tab, &mnt_wrk, buf, PATH_MAX * 3))) {
+ 		len = strlen(mnt->mnt_dir);
+@@ -2280,11 +2277,8 @@ static int table_is_mounted(const char *
+ 		return 0;
+ 
+ 	tab = open_fopen_r(_PROC_MOUNTS);
+-	if (!tab) {
+-		char *estr = strerror_r(errno, buf, PATH_MAX - 1);
+-		logerr("fopen: %s", estr);
++	if (!tab)
+ 		return 0;
+-	}
+ 
+ 	while ((mnt = local_getmntent_r(tab, &mnt_wrk, buf, PATH_MAX * 3))) {
+ 		size_t len = strlen(mnt->mnt_dir);
+--- autofs-5.1.7.orig/modules/lookup_program.c
++++ autofs-5.1.7/modules/lookup_program.c
+@@ -214,11 +214,8 @@ static char *lookup_one(struct autofs_po
+ 	 * want to send stderr to the syslog, and we don't use spawnl()
+ 	 * because we need the pipe hooks
+ 	 */
+-	if (open_pipe(pipefd)) {
+-		char *estr = strerror_r(errno, buf, MAX_ERR_BUF);
+-		logerr(MODPREFIX "pipe: %s", estr);
++	if (open_pipe(pipefd))
+ 		goto out_error;
+-	}
+ 	if (open_pipe(epipefd)) {
+ 		close(pipefd[0]);
+ 		close(pipefd[1]);
diff --git a/SPECS/autofs.spec b/SPECS/autofs.spec
index 3757d20..b3bc052 100644
--- a/SPECS/autofs.spec
+++ b/SPECS/autofs.spec
@@ -12,7 +12,7 @@
 Summary: A tool for automatically mounting and unmounting filesystems
 Name: autofs
 Version: 5.1.7
-Release: 24%{?dist}
+Release: 27%{?dist}
 Epoch: 1
 License: GPLv2+
 Source: https://www.kernel.org/pub/linux/daemons/autofs/v5/autofs-%{version}-2.tar.gz
@@ -102,6 +102,11 @@ Patch79: autofs-5.1.7-fix-concat_options-error-handling.patch
 Patch80: autofs-5.1.7-eliminate-some-more-alloca-usage.patch
 Patch81: autofs-5.1.7-use-default-stack-size-for-threads.patch
 
+Patch82: autofs-5.1.8-fix-kernel-mount-status-notification.patch
+Patch83: autofs-5.1.8-fix-fedfs-build-flags.patch
+Patch84: autofs-5.1.8-fix-set-open-file-limit.patch
+Patch85: autofs-5.1.8-improve-descriptor-open-error-reporting.patch
+
 %if %{with_systemd}
 BuildRequires: systemd-units
 BuildRequires: systemd-devel
@@ -249,6 +254,11 @@ echo %{version}-%{release} > .version
 %patch80 -p1
 %patch81 -p1
 
+%patch82 -p1
+%patch83 -p1
+%patch84 -p1
+%patch85 -p1
+
 %build
 LDFLAGS=-Wl,-z,now
 %configure \
@@ -356,6 +366,25 @@ fi
 %dir /etc/auto.master.d
 
 %changelog
+* Sun Jan 09 2022 Ian Kent <ikent@redhat.com> - 1:5.1.7-27
+- bz2028746 - autofs service has not proper limits set to be able to handle
+  many mounts
+  - fix set open file limit.
+  - improve descriptor open error reporting.
+- Resolves: rhbz#2028746
+
+* Tue Dec 21 2021 Ian Kent <ikent@redhat.com> - 1:5.1.7-26
+- bz2028301 - autofs: send FAIL cmd/ioctl mess when encountering problems with
+  mount trigger
+  - fix fedfs build flags.
+- Related: rhbz#2028301
+
+* Mon Dec 20 2021 Ian Kent <ikent@redhat.com> - 1:5.1.7-25
+- bz2028301 - autofs: send FAIL cmd/ioctl mess when encountering problems with
+  mount trigger
+  - fix kernel mount status notification.
+- Resolves: rhbz#2028301
+
 * Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com>
 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
   Related: rhbz#1991688