svn commit: r272567 - in head/sys: kern sys
Bjoern A. Zeeb
bz at FreeBSD.org
Sun Oct 5 20:27:32 UTC 2014
On 05 Oct 2014, at 19:40 , Mateusz Guzik <mjg at FreeBSD.org> wrote:
> Author: mjg
> Date: Sun Oct 5 19:40:29 2014
> New Revision: 272567
> URL: https://svnweb.freebsd.org/changeset/base/272567
>
> Log:
> filedesc: fix up breakage introduced in 272505
>
> Include sequence counter supports incoditionally [1]. This fixes reprted build
> problems with e.g. nvidia driver due to missing opt_capsicum.h.
>
> Replace fishy looking sizeof with offsetof. Make fde_seq the last member in
> order to simplify calculations.
Seing this on an incremental build now for
bmake: stopped in /scratch/tmp/bz/head.svn/lib/libkvm
/storage/head/obj//mips.mipsel/scratch/tmp/bz/head.svn/tmp/usr/include/sys/filedesc.h:57: error: expected specifier-qualifier-list before 'seq_t'
I’ll see if this persists with a full build but I assume it will.
>
> Suggested by: kib [1]
> X-MFC: with 272505
>
> Modified:
> head/sys/kern/kern_descrip.c
> head/sys/sys/filedesc.h
>
> Modified: head/sys/kern/kern_descrip.c
> ==============================================================================
> --- head/sys/kern/kern_descrip.c Sun Oct 5 17:35:59 2014 (r272566)
> +++ head/sys/kern/kern_descrip.c Sun Oct 5 19:40:29 2014 (r272567)
> @@ -295,7 +295,7 @@ _fdfree(struct filedesc *fdp, int fd, in
> filecaps_free(&fde->fde_caps);
> if (last)
> return;
> - bzero(fde_change(fde), fde_change_size);
> + bzero(fde, fde_change_size);
> fdunused(fdp, fd);
> #ifdef CAPABILITIES
> seq_write_end(&fde->fde_seq);
> @@ -894,7 +894,7 @@ do_dup(struct thread *td, int flags, int
> seq_write_begin(&newfde->fde_seq);
> #endif
> filecaps_free(&newfde->fde_caps);
> - memcpy(fde_change(newfde), fde_change(oldfde), fde_change_size);
> + memcpy(newfde, oldfde, fde_change_size);
> filecaps_copy(&oldfde->fde_caps, &newfde->fde_caps);
> if ((flags & DUP_CLOEXEC) != 0)
> newfde->fde_flags = oldfde->fde_flags | UF_EXCLOSE;
> @@ -2778,7 +2778,7 @@ dupfdopen(struct thread *td, struct file
> #ifdef CAPABILITIES
> seq_write_begin(&newfde->fde_seq);
> #endif
> - memcpy(fde_change(newfde), fde_change(oldfde), fde_change_size);
> + memcpy(newfde, oldfde, fde_change_size);
> filecaps_copy(&oldfde->fde_caps, &newfde->fde_caps);
> #ifdef CAPABILITIES
> seq_write_end(&newfde->fde_seq);
> @@ -2793,8 +2793,8 @@ dupfdopen(struct thread *td, struct file
> #ifdef CAPABILITIES
> seq_write_begin(&newfde->fde_seq);
> #endif
> - memcpy(fde_change(newfde), fde_change(oldfde), fde_change_size);
> - bzero(fde_change(oldfde), fde_change_size);
> + memcpy(newfde, oldfde, fde_change_size);
> + bzero(oldfde, fde_change_size);
> fdunused(fdp, dfd);
> #ifdef CAPABILITIES
> seq_write_end(&newfde->fde_seq);
>
> Modified: head/sys/sys/filedesc.h
> ==============================================================================
> --- head/sys/sys/filedesc.h Sun Oct 5 17:35:59 2014 (r272566)
> +++ head/sys/sys/filedesc.h Sun Oct 5 19:40:29 2014 (r272567)
> @@ -33,10 +33,6 @@
> #ifndef _SYS_FILEDESC_H_
> #define _SYS_FILEDESC_H_
>
> -#ifdef _KERNEL
> -#include "opt_capsicum.h"
> -#endif
> -
> #include <sys/caprights.h>
> #include <sys/queue.h>
> #include <sys/event.h>
> @@ -55,24 +51,16 @@ struct filecaps {
> };
>
> struct filedescent {
> -#ifdef CAPABILITIES
> - seq_t fde_seq; /* if you need fde_file and fde_caps in sync */
> -#endif
> struct file *fde_file; /* file structure for open file */
> struct filecaps fde_caps; /* per-descriptor rights */
> uint8_t fde_flags; /* per-process open file flags */
> + seq_t fde_seq; /* if you need fde_file and fde_caps in sync */
> };
> #define fde_rights fde_caps.fc_rights
> #define fde_fcntls fde_caps.fc_fcntls
> #define fde_ioctls fde_caps.fc_ioctls
> #define fde_nioctls fde_caps.fc_nioctls
> -#ifdef CAPABILITIES
> -#define fde_change(fde) ((char *)(fde) + sizeof(seq_t))
> -#define fde_change_size (sizeof(struct filedescent) - sizeof(seq_t))
> -#else
> -#define fde_change(fde) ((fde))
> -#define fde_change_size (sizeof(struct filedescent))
> -#endif
> +#define fde_change_size (offsetof(struct filedescent, fde_seq))
>
> /*
> * This structure is used for the management of descriptors. It may be
> @@ -97,9 +85,7 @@ struct filedesc {
> int fd_holdleaderscount; /* block fdfree() for shared close() */
> int fd_holdleaderswakeup; /* fdfree() needs wakeup */
> };
> -#ifdef CAPABILITIES
> #define fd_seq(fdp, fd) (&(fdp)->fd_ofiles[(fd)].fde_seq)
> -#endif
>
> /*
> * Structure to keep track of (process leader, struct fildedesc) tuples.
>
—
Bjoern A. Zeeb "Come on. Learn, goddamn it.", WarGames, 1983
More information about the svn-src-head
mailing list