Author: kib
Date: Wed Oct  9 18:39:44 2013
New Revision: 256209
URL: http://svnweb.freebsd.org/changeset/base/256209

Log:
  Reduce code duplication, introduce the getmaxfd() helper to calculate
  the max filedescriptor index.
  
  Tested by:    pho
  Sponsored by: The FreeBSD Foundation
  MFC after:    1 week
  Approved by:  re (marius)

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Wed Oct  9 18:29:06 2013        
(r256208)
+++ head/sys/kern/kern_descrip.c        Wed Oct  9 18:39:44 2013        
(r256209)
@@ -129,6 +129,7 @@ static int  fill_sem_info(struct file *fp
 static int     fill_shm_info(struct file *fp, struct kinfo_file *kif);
 static int     fill_socket_info(struct socket *so, struct kinfo_file *kif);
 static int     fill_vnode_info(struct vnode *vp, struct kinfo_file *kif);
+static int     getmaxfd(struct proc *p);
 
 /*
  * Each process has:
@@ -771,6 +772,18 @@ kern_fcntl(struct thread *td, int fd, in
        return (error);
 }
 
+static int
+getmaxfd(struct proc *p)
+{
+       int maxfd;
+
+       PROC_LOCK(p);
+       maxfd = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
+       PROC_UNLOCK(p);
+
+       return (maxfd);
+}
+
 /*
  * Common code for dup, dup2, fcntl(F_DUPFD) and fcntl(F_DUP2FD).
  */
@@ -797,9 +810,7 @@ do_dup(struct thread *td, int flags, int
                return (EBADF);
        if (new < 0)
                return (flags & DUP_FCNTL ? EINVAL : EBADF);
-       PROC_LOCK(p);
-       maxfd = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
-       PROC_UNLOCK(p);
+       maxfd = getmaxfd(p);
        if (new >= maxfd)
                return (flags & DUP_FCNTL ? EINVAL : EBADF);
 
@@ -1563,9 +1574,7 @@ fdalloc(struct thread *td, int minfd, in
        if (fdp->fd_freefile > minfd)
                minfd = fdp->fd_freefile;
 
-       PROC_LOCK(p);
-       maxfd = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
-       PROC_UNLOCK(p);
+       maxfd = getmaxfd(p);
 
        /*
         * Search the bitmap for a free descriptor starting at minfd.
@@ -1652,9 +1661,7 @@ fdavail(struct thread *td, int n)
         *      call racct_add() from there instead of dealing with containers
         *      here.
         */
-       PROC_LOCK(p);
-       lim = min((int)lim_cur(p, RLIMIT_NOFILE), maxfilesperproc);
-       PROC_UNLOCK(p);
+       lim = getmaxfd(p);
        if ((i = lim - fdp->fd_nfiles) > 0 && (n -= i) <= 0)
                return (1);
        last = min(fdp->fd_nfiles, lim);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to