From nobody Sun Feb 13 13:07:20 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4BE9819BC6C3; Sun, 13 Feb 2022 13:07:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4JxSLd1TQRz3JNP; Sun, 13 Feb 2022 13:07:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644757641; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=rdf1QgpFcjaVzJg+jQzRmcecQyGPnfF3vIHiKwrKDTU=; b=FvK5fCOw01pmFmoPa3QHgRVAoe8qh7R8U7Kbay5hOqmMC2H7rHX8xs16CBSxEf0OMyFnf/ Df8ghiN7ROBMeb1hLDQUaTrV/4M61YYWhMQjiJkTRPti9cHQB+8Td3FnAlppAtex8oZhhS jRKBJevmjvXS3kruBbwsjhwEi+LJqBzPpytq3/+ep0ejMLt2hnNYAujEHScPZ35rhDquKp FijYf20Fqk2cEG/2mdH0T/PXy6vVgB2yNJWFnGXvdVyd1FPWAU47lCtVcEjcK4ScVINhpU iFz583SXsZqdC/gJGQwwgHUhiG5wMaF3VpirdQYlGzEhutM9ZRPJx57T/88hyw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D6EF21B83C; Sun, 13 Feb 2022 13:07:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21DD7Khf074063; Sun, 13 Feb 2022 13:07:20 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21DD7KtZ074062; Sun, 13 Feb 2022 13:07:20 GMT (envelope-from git) Date: Sun, 13 Feb 2022 13:07:20 GMT Message-Id: <202202131307.21DD7KtZ074062@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mateusz Guzik Subject: git: 5c3102506014 - main - fd: use FILEDESC_FOREACH_{FDE,FP} where appropriate List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mjg X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5c3102506014035cb3489c55e4c481ae680a76db Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644757641; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=rdf1QgpFcjaVzJg+jQzRmcecQyGPnfF3vIHiKwrKDTU=; b=R72E2hW8tLpIHdCTDbgZg+KDCgf9mlDz3JS4dVYrTvOidHvdthzGO1O1sZhyiWyXB8p7Zo csIal7aAS+2wosrkaB1nSwhOm90srg1y4qGwOqavQUXkshaZEc4PHE6do77hSRD9lX16uw wYBhZNcqgjXpGMtYAi9/89bWFD0GMjT7miGJOdPakMMCLDRrb3g5QfLcdXWdx7QJKjD1WJ 1AlP1N8yq9MxMWkKjLDu2eDEswnQ1mdaUTH6KOvM3YmyBQb7P7d3aGOWeyWqje1AmmBGVQ tzQsl1cOAMLJKx3uERKTjet0jnGJy/XEFmqp5NX0S2y+XE//bn2T2Kg0ooWT2Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1644757641; a=rsa-sha256; cv=none; b=Jk65Y9mtOZcfHt+nhkGaLHw48zlozLAwwBKr8buBIlPkRPZ0C2G07RfNiflXF2j8SBMsXf jJrZHqvk+NDVAJXsgnxvG5rC22JG4OLTmwzMWodiOugUpMDXvTla3B1KdOrGYURAR2X5UI hwO5TBKa56EPENikkVnkHrFC9fOMZh+8pNymCHNTcWJ31EHWpa3jUvZr4xAir6vUSx4RNM //1Rts5viiVFPqxbfK8vlUTiSR5n5GIuv3VmoKF3ns4kqG7m+8kqWZPLANtHPbPfYUvhAs zY6wxJFf0szOFigmLuVgHl6Wx3jNgCecdmJOKzmNPFqESkmY/rgFcrPzfzojdg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by mjg: URL: https://cgit.FreeBSD.org/src/commit/?id=5c3102506014035cb3489c55e4c481ae680a76db commit 5c3102506014035cb3489c55e4c481ae680a76db Author: Mateusz Guzik AuthorDate: 2022-01-29 22:30:33 +0000 Commit: Mateusz Guzik CommitDate: 2022-02-13 13:07:08 +0000 fd: use FILEDESC_FOREACH_{FDE,FP} where appropriate --- sys/kern/kern_descrip.c | 72 +++++++++++++++++++------------------------------ 1 file changed, 27 insertions(+), 45 deletions(-) diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index feb35c28cba1..fe67395a32fc 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -2357,10 +2357,8 @@ fdcopy(struct filedesc *fdp) } /* copy all passable descriptors (i.e. not kqueue) */ newfdp->fd_freefile = fdp->fd_freefile; - for (i = 0; i <= lastfile; ++i) { - ofde = &fdp->fd_ofiles[i]; - if (ofde->fde_file == NULL || - (ofde->fde_file->f_ops->fo_flags & DFLAG_PASSABLE) == 0 || + FILEDESC_FOREACH_FDE(fdp, i, ofde) { + if ((ofde->fde_file->f_ops->fo_flags & DFLAG_PASSABLE) == 0 || !fhold(ofde->fde_file)) { if (newfdp->fd_freefile == fdp->fd_freefile) newfdp->fd_freefile = i; @@ -2405,7 +2403,7 @@ fdclearlocks(struct thread *td) struct file *fp; struct proc *p; struct vnode *vp; - int i, lastfile; + int i; p = td->td_proc; fdp = p->p_fd; @@ -2418,10 +2416,8 @@ fdclearlocks(struct thread *td) fdtol->fdl_refcount)); if (fdtol->fdl_refcount == 1 && (p->p_leader->p_flag & P_ADVLOCK) != 0) { - lastfile = fdlastfile(fdp); - for (i = 0; i <= lastfile; i++) { - fp = fdp->fd_ofiles[i].fde_file; - if (fp == NULL || fp->f_type != DTYPE_VNODE || + FILEDESC_FOREACH_FP(fdp, i, fp) { + if (fp->f_type != DTYPE_VNODE || !fhold(fp)) continue; FILEDESC_XUNLOCK(fdp); @@ -2484,7 +2480,7 @@ fdescfree_fds(struct thread *td, struct filedesc *fdp) struct freetable *ft, *tft; struct filedescent *fde; struct file *fp; - int i, lastfile; + int i; KASSERT(refcount_load(&fdp->fd_refcnt) == 0, ("%s: fd table %p carries references", __func__, fdp)); @@ -2497,14 +2493,10 @@ fdescfree_fds(struct thread *td, struct filedesc *fdp) FILEDESC_XUNLOCK(fdp); } - lastfile = fdlastfile_single(fdp); - for (i = 0; i <= lastfile; i++) { - fde = &fdp->fd_ofiles[i]; + FILEDESC_FOREACH_FDE(fdp, i, fde) { fp = fde->fde_file; - if (fp != NULL) { - fdefree_last(fde); - (void) closef(fp, td); - } + fdefree_last(fde); + (void) closef(fp, td); } if (NDSLOTS(fdp->fd_nfiles) > NDSLOTS(NDFILE)) @@ -2651,17 +2643,15 @@ fdcloseexec(struct thread *td) struct filedesc *fdp; struct filedescent *fde; struct file *fp; - int i, lastfile; + int i; fdp = td->td_proc->p_fd; KASSERT(refcount_load(&fdp->fd_refcnt) == 1, ("the fdtable should not be shared")); - lastfile = fdlastfile_single(fdp); - for (i = 0; i <= lastfile; i++) { - fde = &fdp->fd_ofiles[i]; + FILEDESC_FOREACH_FDE(fdp, i, fde) { fp = fde->fde_file; - if (fp != NULL && (fp->f_type == DTYPE_MQUEUE || - (fde->fde_flags & UF_EXCLOSE))) { + if (fp->f_type == DTYPE_MQUEUE || + (fde->fde_flags & UF_EXCLOSE)) { FILEDESC_XLOCK(fdp); fdfree(fdp, i); (void) closefp(fdp, i, fp, td, false, false); @@ -3690,15 +3680,11 @@ chroot_refuse_vdir_fds(struct filedesc *fdp) { struct vnode *vp; struct file *fp; - int fd, lastfile; + int i; FILEDESC_LOCK_ASSERT(fdp); - lastfile = fdlastfile(fdp); - for (fd = 0; fd <= lastfile; fd++) { - fp = fget_locked(fdp, fd); - if (fp == NULL) - continue; + FILEDESC_FOREACH_FP(fdp, i, fp) { if (fp->f_type == DTYPE_VNODE) { vp = fp->f_vnode; if (vp->v_type == VDIR) @@ -4125,7 +4111,7 @@ sysctl_kern_file(SYSCTL_HANDLER_ARGS) struct filedesc *fdp; struct file *fp; struct proc *p; - int error, n, lastfile; + int error, n; error = sysctl_wire_old_buffer(req, 0); if (error != 0) @@ -4171,11 +4157,9 @@ sysctl_kern_file(SYSCTL_HANDLER_ARGS) if (fdp == NULL) continue; FILEDESC_SLOCK(fdp); - lastfile = fdlastfile(fdp); - for (n = 0; refcount_load(&fdp->fd_refcnt) > 0 && n <= lastfile; - n++) { - if ((fp = fdp->fd_ofiles[n].fde_file) == NULL) - continue; + FILEDESC_FOREACH_FP(fdp, n, fp) { + if (refcount_load(&fdp->fd_refcnt) == 0) + break; xf.xf_fd = n; xf.xf_file = (uintptr_t)fp; xf.xf_data = (uintptr_t)fp->f_data; @@ -4377,7 +4361,7 @@ kern_proc_filedesc_out(struct proc *p, struct sbuf *sb, ssize_t maxlen, struct export_fd_buf *efbuf; struct vnode *cttyvp, *textvp, *tracevp; struct pwd *pwd; - int error, i, lastfile; + int error, i; cap_rights_t rights; PROC_LOCK_ASSERT(p, MA_OWNED); @@ -4448,10 +4432,9 @@ kern_proc_filedesc_out(struct proc *p, struct sbuf *sb, ssize_t maxlen, if (pwd != NULL) pwd_drop(pwd); FILEDESC_SLOCK(fdp); - lastfile = fdlastfile(fdp); - for (i = 0; refcount_load(&fdp->fd_refcnt) > 0 && i <= lastfile; i++) { - if ((fp = fdp->fd_ofiles[i].fde_file) == NULL) - continue; + FILEDESC_FOREACH_FP(fdp, i, fp) { + if (refcount_load(&fdp->fd_refcnt) == 0) + break; #ifdef CAPABILITIES rights = *cap_rights(fdp, i); #else /* !CAPABILITIES */ @@ -4573,7 +4556,7 @@ sysctl_kern_proc_ofiledesc(SYSCTL_HANDLER_ARGS) struct pwddesc *pdp; struct pwd *pwd; u_int namelen; - int error, i, lastfile, *name; + int error, i, *name; struct file *fp; struct proc *p; @@ -4613,10 +4596,9 @@ sysctl_kern_proc_ofiledesc(SYSCTL_HANDLER_ARGS) if (pwd != NULL) pwd_drop(pwd); FILEDESC_SLOCK(fdp); - lastfile = fdlastfile(fdp); - for (i = 0; refcount_load(&fdp->fd_refcnt) > 0 && i <= lastfile; i++) { - if ((fp = fdp->fd_ofiles[i].fde_file) == NULL) - continue; + FILEDESC_FOREACH_FP(fdp, i, fp) { + if (refcount_load(&fdp->fd_refcnt) == 0) + break; export_file_to_kinfo(fp, i, NULL, kif, fdp, KERN_FILEDESC_PACK_KINFO); FILEDESC_SUNLOCK(fdp);