Author: mjg
Date: Sun Jun 14 14:08:52 2015
New Revision: 284380
URL: https://svnweb.freebsd.org/changeset/base/284380

Log:
  fd: move out actual fp installation to _finstall
  
  Use it in fd passing functions as the first step towards fd code cleanup.

Modified:
  head/sys/kern/kern_descrip.c
  head/sys/kern/uipc_usrreq.c
  head/sys/sys/filedesc.h

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Sun Jun 14 11:08:27 2015        
(r284379)
+++ head/sys/kern/kern_descrip.c        Sun Jun 14 14:08:52 2015        
(r284380)
@@ -1750,26 +1750,18 @@ falloc_noinstall(struct thread *td, stru
 /*
  * Install a file in a file descriptor table.
  */
-int
-finstall(struct thread *td, struct file *fp, int *fd, int flags,
+void
+_finstall(struct filedesc *fdp, struct file *fp, int fd, int flags,
     struct filecaps *fcaps)
 {
-       struct filedesc *fdp = td->td_proc->p_fd;
        struct filedescent *fde;
-       int error;
 
-       KASSERT(fd != NULL, ("%s: fd == NULL", __func__));
-       KASSERT(fp != NULL, ("%s: fp == NULL", __func__));
+       MPASS(fp != NULL);
        if (fcaps != NULL)
                filecaps_validate(fcaps, __func__);
+       FILEDESC_XLOCK_ASSERT(fdp);
 
-       FILEDESC_XLOCK(fdp);
-       if ((error = fdalloc(td, 0, fd))) {
-               FILEDESC_XUNLOCK(fdp);
-               return (error);
-       }
-       fhold(fp);
-       fde = &fdp->fd_ofiles[*fd];
+       fde = &fdp->fd_ofiles[fd];
 #ifdef CAPABILITIES
        seq_write_begin(&fde->fde_seq);
 #endif
@@ -1783,6 +1775,24 @@ finstall(struct thread *td, struct file 
 #ifdef CAPABILITIES
        seq_write_end(&fde->fde_seq);
 #endif
+}
+
+int
+finstall(struct thread *td, struct file *fp, int *fd, int flags,
+    struct filecaps *fcaps)
+{
+       struct filedesc *fdp = td->td_proc->p_fd;
+       int error;
+
+       MPASS(fd != NULL);
+
+       FILEDESC_XLOCK(fdp);
+       if ((error = fdalloc(td, 0, fd))) {
+               FILEDESC_XUNLOCK(fdp);
+               return (error);
+       }
+       fhold(fp);
+       _finstall(fdp, fp, *fd, flags, fcaps);
        FILEDESC_XUNLOCK(fdp);
        return (0);
 }

Modified: head/sys/kern/uipc_usrreq.c
==============================================================================
--- head/sys/kern/uipc_usrreq.c Sun Jun 14 11:08:27 2015        (r284379)
+++ head/sys/kern/uipc_usrreq.c Sun Jun 14 14:08:52 2015        (r284380)
@@ -1736,7 +1736,7 @@ unp_externalize(struct mbuf *control, st
        int i;
        int *fdp;
        struct filedesc *fdesc = td->td_proc->p_fd;
-       struct filedescent *fde, **fdep;
+       struct filedescent **fdep;
        void *data;
        socklen_t clen = control->m_len, datalen;
        int error, newfds;
@@ -1795,13 +1795,10 @@ unp_externalize(struct mbuf *control, st
                                goto next;
                        }
                        for (i = 0; i < newfds; i++, fdp++) {
-                               fde = &fdesc->fd_ofiles[*fdp];
-                               fde->fde_file = fdep[i]->fde_file;
-                               filecaps_move(&fdep[i]->fde_caps,
-                                   &fde->fde_caps);
-                               if ((flags & MSG_CMSG_CLOEXEC) != 0)
-                                       fde->fde_flags |= UF_EXCLOSE;
-                               unp_externalize_fp(fde->fde_file);
+                               _finstall(fdesc, fdep[i]->fde_file, *fdp,
+                                   (flags & MSG_CMSG_CLOEXEC) != 0 ? 
UF_EXCLOSE : 0,
+                                   &fdep[i]->fde_caps);
+                               unp_externalize_fp(fdep[i]->fde_file);
                        }
                        FILEDESC_XUNLOCK(fdesc);
                        free(fdep[0], M_FILECAPS);

Modified: head/sys/sys/filedesc.h
==============================================================================
--- head/sys/sys/filedesc.h     Sun Jun 14 11:08:27 2015        (r284379)
+++ head/sys/sys/filedesc.h     Sun Jun 14 14:08:52 2015        (r284380)
@@ -147,7 +147,9 @@ int dupfdopen(struct thread *td, struct 
 int    falloc(struct thread *td, struct file **resultfp, int *resultfd,
            int flags);
 int    falloc_noinstall(struct thread *td, struct file **resultfp);
-int    finstall(struct thread *td, struct file *fp, int *resultfp, int flags,
+void   _finstall(struct filedesc *fdp, struct file *fp, int fd, int flags,
+           struct filecaps *fcaps);
+int    finstall(struct thread *td, struct file *fp, int *resultfd, int flags,
            struct filecaps *fcaps);
 int    fdalloc(struct thread *td, int minfd, int *result);
 int    fdallocn(struct thread *td, int minfd, int *fds, int n);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to