Date: Sun, 14 Jun 2015 14:08:52 +0000 (UTC) From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r284380 - in head/sys: kern sys Message-ID: <201506141408.t5EE8qqC019823@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201506141408.t5EE8qqC019823>