svn commit: r345248 - stable/12/sys/kern

Mark Johnston markj at FreeBSD.org
Sun Mar 17 20:41:07 UTC 2019


Author: markj
Date: Sun Mar 17 20:41:06 2019
New Revision: 345248
URL: https://svnweb.freebsd.org/changeset/base/345248

Log:
  MFC r344670:
  Allow FIONBIO and FIOASYNC ioctls on POSIX shm descriptors.

Modified:
  stable/12/sys/kern/uipc_shm.c

Modified: stable/12/sys/kern/uipc_shm.c
==============================================================================
--- stable/12/sys/kern/uipc_shm.c	Sun Mar 17 20:30:27 2019	(r345247)
+++ stable/12/sys/kern/uipc_shm.c	Sun Mar 17 20:41:06 2019	(r345248)
@@ -60,6 +60,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/fcntl.h>
 #include <sys/file.h>
 #include <sys/filedesc.h>
+#include <sys/filio.h>
 #include <sys/fnv_hash.h>
 #include <sys/kernel.h>
 #include <sys/uio.h>
@@ -126,6 +127,7 @@ static int	shm_remove(char *path, Fnv32_t fnv, struct 
 static fo_rdwr_t	shm_read;
 static fo_rdwr_t	shm_write;
 static fo_truncate_t	shm_truncate;
+static fo_ioctl_t	shm_ioctl;
 static fo_stat_t	shm_stat;
 static fo_close_t	shm_close;
 static fo_chmod_t	shm_chmod;
@@ -139,7 +141,7 @@ struct fileops shm_ops = {
 	.fo_read = shm_read,
 	.fo_write = shm_write,
 	.fo_truncate = shm_truncate,
-	.fo_ioctl = invfo_ioctl,
+	.fo_ioctl = shm_ioctl,
 	.fo_poll = invfo_poll,
 	.fo_kqfilter = invfo_kqfilter,
 	.fo_stat = shm_stat,
@@ -361,6 +363,24 @@ shm_truncate(struct file *fp, off_t length, struct ucr
 		return (error);
 #endif
 	return (shm_dotruncate(shmfd, length));
+}
+
+int
+shm_ioctl(struct file *fp, u_long com, void *data, struct ucred *active_cred,
+    struct thread *td)
+{
+
+	switch (com) {
+	case FIONBIO:
+	case FIOASYNC:
+		/*
+		 * Allow fcntl(fd, F_SETFL, O_NONBLOCK) to work,
+		 * just like it would on an unlinked regular file
+		 */
+		return (0);
+	default:
+		return (ENOTTY);
+	}
 }
 
 static int


More information about the svn-src-all mailing list