The branch main has been updated by mjg:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e68a5225e818380a0038bc9ab346fdb7913c0af9

commit e68a5225e818380a0038bc9ab346fdb7913c0af9
Author:     Mateusz Guzik <[email protected]>
AuthorDate: 2022-02-14 15:43:19 +0000
Commit:     Mateusz Guzik <[email protected]>
CommitDate: 2022-02-15 17:51:08 +0000

    fd: add fde_copy
    
    To dedup handrolled memcpy. This will be used later to make fd code
    atomic-clean.
---
 sys/kern/kern_descrip.c |  6 +++---
 sys/sys/filedesc.h      | 12 +++++++++++-
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index 57e0d9dee671..259be785f88d 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -1022,7 +1022,7 @@ kern_dup(struct thread *td, u_int mode, int flags, int 
old, int new)
        seqc_write_begin(&newfde->fde_seqc);
 #endif
        oioctls = filecaps_free_prep(&newfde->fde_caps);
-       memcpy(newfde, oldfde, fde_change_size);
+       fde_copy(oldfde, newfde);
        filecaps_copy_finish(&oldfde->fde_caps, &newfde->fde_caps,
            nioctls);
        if ((flags & FDDUP_FLAG_CLOEXEC) != 0)
@@ -3628,7 +3628,7 @@ dupfdopen(struct thread *td, struct filedesc *fdp, int 
dfd, int mode,
 #ifdef CAPABILITIES
                seqc_write_begin(&newfde->fde_seqc);
 #endif
-               memcpy(newfde, oldfde, fde_change_size);
+               fde_copy(oldfde, newfde);
                filecaps_copy_finish(&oldfde->fde_caps, &newfde->fde_caps,
                    ioctls);
 #ifdef CAPABILITIES
@@ -3645,7 +3645,7 @@ dupfdopen(struct thread *td, struct filedesc *fdp, int 
dfd, int mode,
                seqc_write_begin(&oldfde->fde_seqc);
                seqc_write_begin(&newfde->fde_seqc);
 #endif
-               memcpy(newfde, oldfde, fde_change_size);
+               fde_copy(oldfde, newfde);
                oldfde->fde_file = NULL;
                fdunused(fdp, dfd);
 #ifdef CAPABILITIES
diff --git a/sys/sys/filedesc.h b/sys/sys/filedesc.h
index ed1f8989358e..24eb6eb2c061 100644
--- a/sys/sys/filedesc.h
+++ b/sys/sys/filedesc.h
@@ -66,7 +66,17 @@ struct filedescent {
 #define        fde_fcntls      fde_caps.fc_fcntls
 #define        fde_ioctls      fde_caps.fc_ioctls
 #define        fde_nioctls     fde_caps.fc_nioctls
-#define        fde_change_size (offsetof(struct filedescent, fde_seqc))
+
+#ifdef _KERNEL
+static inline void
+fde_copy(struct filedescent *from, struct filedescent *to)
+{
+
+       to->fde_file = from->fde_file;
+       to->fde_caps = from->fde_caps;
+       to->fde_flags = from->fde_flags;
+}
+#endif
 
 struct fdescenttbl {
        int     fdt_nfiles;             /* number of open files allocated */

Reply via email to