summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2020-12-13 18:06:24 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2020-12-13 18:06:24 +0000
commitedcdcefb88a833d5170461993ee5c91a83a00ece (patch)
tree189689dbf23b94bac2f58d2fa77480096b043287
parent87c1ec0a31cce6441c52f6101d99482e50aeffba (diff)
downloadsrc-test2-edcdcefb88a833d5170461993ee5c91a83a00ece.tar.gz
src-test2-edcdcefb88a833d5170461993ee5c91a83a00ece.zip
Notes
-rw-r--r--sys/kern/kern_descrip.c2
-rw-r--r--sys/sys/file.h11
2 files changed, 12 insertions, 1 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index bd3b9508809e..dbcf6d316a2f 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -2766,7 +2766,7 @@ closef(struct file *fp, struct thread *td)
FILEDESC_XUNLOCK(fdp);
}
}
- return (fdrop(fp, td));
+ return (fdrop_close(fp, td));
}
/*
diff --git a/sys/sys/file.h b/sys/sys/file.h
index 4efed9807bc8..165ca10c9f76 100644
--- a/sys/sys/file.h
+++ b/sys/sys/file.h
@@ -299,6 +299,17 @@ fhold(struct file *fp)
_error; \
})
+#define fdrop_close(fp, td) ({ \
+ struct file *_fp; \
+ int _error; \
+ \
+ _error = 0; \
+ _fp = (fp); \
+ if (__predict_true(refcount_release(&_fp->f_count))) \
+ _error = _fdrop(_fp, td); \
+ _error; \
+})
+
static __inline fo_rdwr_t fo_read;
static __inline fo_rdwr_t fo_write;
static __inline fo_truncate_t fo_truncate;