git: 4faa375cdd4e - main - fd: provide a dedicated closef variant for unix socket code
Mateusz Guzik
mjg at FreeBSD.org
Wed Jan 13 03:31:42 UTC 2021
The branch main has been updated by mjg:
URL: https://cgit.FreeBSD.org/src/commit/?id=4faa375cdd4e36d3a5b7fc46ee9dd8079a5e26f7
commit 4faa375cdd4e36d3a5b7fc46ee9dd8079a5e26f7
Author: Mateusz Guzik <mjg at FreeBSD.org>
AuthorDate: 2021-01-12 15:13:27 +0000
Commit: Mateusz Guzik <mjg at FreeBSD.org>
CommitDate: 2021-01-13 02:27:03 +0000
fd: provide a dedicated closef variant for unix socket code
This avoids testing for td != NULL.
---
sys/kern/kern_descrip.c | 14 +++++++++++++-
sys/kern/uipc_usrreq.c | 4 ++--
sys/sys/filedesc.h | 1 +
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index ad1916e87b68..237d15fb5387 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -2737,6 +2737,8 @@ closef(struct file *fp, struct thread *td)
struct filedesc_to_leader *fdtol;
struct filedesc *fdp;
+ MPASS(td != NULL);
+
/*
* POSIX record locking dictates that any close releases ALL
* locks owned by this process. This is handled by setting
@@ -2749,7 +2751,7 @@ closef(struct file *fp, struct thread *td)
* context that might have locks, or the locks will be
* leaked.
*/
- if (fp->f_type == DTYPE_VNODE && td != NULL) {
+ if (fp->f_type == DTYPE_VNODE) {
vp = fp->f_vnode;
if ((td->td_proc->p_leader->p_flag & P_ADVLOCK) != 0) {
lf.l_whence = SEEK_SET;
@@ -2797,6 +2799,16 @@ closef(struct file *fp, struct thread *td)
return (fdrop_close(fp, td));
}
+/*
+ * Hack for file descriptor passing code.
+ */
+void
+closef_nothread(struct file *fp)
+{
+
+ fdrop(fp, NULL);
+}
+
/*
* Initialize the file pointer with the specified properties.
*
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index 44e48bc864a3..0809f5180cc1 100644
--- a/sys/kern/uipc_usrreq.c
+++ b/sys/kern/uipc_usrreq.c
@@ -2486,7 +2486,7 @@ unp_discard(struct file *fp)
atomic_add_int(&unp_defers_count, 1);
taskqueue_enqueue(taskqueue_thread, &unp_defer_task);
} else
- (void) closef(fp, (struct thread *)NULL);
+ closef_nothread(fp);
}
static void
@@ -2508,7 +2508,7 @@ unp_process_defers(void *arg __unused, int pending)
count = 0;
while ((dr = SLIST_FIRST(&drl)) != NULL) {
SLIST_REMOVE_HEAD(&drl, ud_link);
- closef(dr->ud_fp, NULL);
+ closef_nothread(dr->ud_fp);
free(dr, M_TEMP);
count++;
}
diff --git a/sys/sys/filedesc.h b/sys/sys/filedesc.h
index ae2232814136..132aa6c1de03 100644
--- a/sys/sys/filedesc.h
+++ b/sys/sys/filedesc.h
@@ -224,6 +224,7 @@ void filecaps_move(struct filecaps *src, struct filecaps *dst);
void filecaps_free(struct filecaps *fcaps);
int closef(struct file *fp, struct thread *td);
+void closef_nothread(struct file *fp);
int dupfdopen(struct thread *td, struct filedesc *fdp, int dfd, int mode,
int openerror, int *indxp);
int falloc_caps(struct thread *td, struct file **resultfp, int *resultfd,
More information about the dev-commits-src-main
mailing list