From aede167cfb66c3c95742f7c3821643591040a56d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 6 May 2001 00:49:54 +0000 Subject: 2001-04-22 Neal H Walfield * Makefile (OTHERSRCS): Add extern-inline.c. * diskfs.h (DISKFS_EXTERN_INLINE): New macro. (diskfs_spawn_first_thread): Update prototype to include the additional parameter, a demuxer. (diskfs_begin_using_protid_port): Moved and renamed function begin_using_protid_port from priv.h. (diskfs_end_using_protid_port): Moved and renamed function end_using_protid_port from priv.h. * extern-inline.c: New file. * fsmutations.h (FILE_INTRAN): Use new function name. (FILE_DESTRUCTOR): Likewise. (IO_INTRAN): Likewise. (IO_DESTRUCTOR): Likewise. * init-first.c: Include . (master_thread_function): Unnamed parameter is now the demuxer. Use that rather than diskfs_demuxer directly. (diskfs_spawn_first_thread): New parameter DEMUXER. * init-main.c (diskfs_init_main): Pass diskfs_demuxer to diskfs_spawn_first_thread to conform to new semantics. * priv.h (begin_using_protid_port): Moved to diskfs.h. (end_using_protid_port): Likewise. --- libdiskfs/Makefile | 1 + libdiskfs/diskfs.h | 30 +++++++++++++++++++++++++++--- libdiskfs/extern-inline.c | 20 ++++++++++++++++++++ libdiskfs/fsmutations.h | 10 +++++----- libdiskfs/init-first.c | 9 +++++---- libdiskfs/init-main.c | 4 ++-- libdiskfs/priv.h | 21 +-------------------- 7 files changed, 61 insertions(+), 34 deletions(-) create mode 100644 libdiskfs/extern-inline.c diff --git a/libdiskfs/Makefile b/libdiskfs/Makefile index 9a6fe548..325bce79 100644 --- a/libdiskfs/Makefile +++ b/libdiskfs/Makefile @@ -37,6 +37,7 @@ FSYSSRCS=fsys-getroot.c fsys-goaway.c fsys-startup.c fsys-getfile.c \ fsys-options.c fsys-syncfs.c fsys-forward.c IFSOCKSRCS=ifsock.c OTHERSRCS = conch-fetch.c conch-set.c dir-clear.c dir-init.c dir-renamed.c \ + extern-inline.c \ node-create.c node-drop.c node-make.c node-rdwr.c node-update.c \ node-nref.c node-nput.c node-nrele.c node-nrefl.c node-nputl.c \ node-nrelel.c \ diff --git a/libdiskfs/diskfs.h b/libdiskfs/diskfs.h index fda0f9c6..c067f576 100644 --- a/libdiskfs/diskfs.h +++ b/libdiskfs/diskfs.h @@ -1,5 +1,5 @@ /* Definitions for fileserver helper functions - Copyright (C) 1994, 95, 96, 97, 98, 99 Free Software Foundation, Inc. + Copyright (C) 1994,95,96,97,98,99,2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -26,6 +26,10 @@ #include #include +#ifndef DISKFS_EXTERN_INLINE +#define DISKFS_EXTERN_INLINE extern inline +#endif + /* Each user port referring to a file points to one of these (with the aid of the ports library). */ struct protid @@ -560,8 +564,9 @@ mach_port_t diskfs_startup_diskfs (mach_port_t bootstrap, int flags); /* Call this after all format-specific initialization is done (except for setting diskfs_root_node); at this point the pagers should be - ready to go. */ -void diskfs_spawn_first_thread (void); + ready to go. DEMUXER is the demuxer to user. Normally, this is + just diskfs_demuxer. */ +void diskfs_spawn_first_thread (ports_demuxer_type demuxer); /* Once diskfs_root_node is set, call this if we are a bootstrap filesystem. If you call this, then the library will call @@ -762,6 +767,25 @@ error_t diskfs_start_protid (struct peropen *po, struct protid **cred); the user to install is USER. */ void diskfs_finish_protid (struct protid *cred, struct iouser *user); +/* Called by MiG to translate ports into struct protid *. + fsmutations.h arranges for this to happen for the io and + fs interfaces. */ +DISKFS_EXTERN_INLINE struct protid * +diskfs_begin_using_protid_port (file_t port) +{ + return ports_lookup_port (diskfs_port_bucket, port, diskfs_protid_class); +} + +/* Called by MiG after server routines have been run; this + balances begin_using_protid_port, and is arranged for the io + and fs interfaces by fsmutations.h. */ +DISKFS_EXTERN_INLINE void +diskfs_end_using_protid_port (struct protid *cred) +{ + if (cred) + ports_port_deref (cred); +} + /* Create and return a new peropen structure on node NP with open flags FLAGS. The initial values for the root_parent, shadow_root, and shadow_root_parent fields are copied from CONTEXT if it's non-zero, diff --git a/libdiskfs/extern-inline.c b/libdiskfs/extern-inline.c new file mode 100644 index 00000000..0abcc4cc --- /dev/null +++ b/libdiskfs/extern-inline.c @@ -0,0 +1,20 @@ +/* Run time callable functions for extern inlines. + Copyright (C) 2001 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#define DISKFS_EXTERN_INLINE + +#include "diskfs.h" diff --git a/libdiskfs/fsmutations.h b/libdiskfs/fsmutations.h index 9280ee04..5026810c 100644 --- a/libdiskfs/fsmutations.h +++ b/libdiskfs/fsmutations.h @@ -1,5 +1,5 @@ /* - Copyright (C) 1994 Free Software Foundation + Copyright (C) 1994,2001 Free Software Foundation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -17,11 +17,11 @@ /* Only CPP macro definitions should go in this file. */ -#define FILE_INTRAN protid_t begin_using_protid_port (file_t) -#define FILE_DESTRUCTOR end_using_protid_port (protid_t) +#define FILE_INTRAN protid_t diskfs_begin_using_protid_port (file_t) +#define FILE_DESTRUCTOR diskfs_end_using_protid_port (protid_t) -#define IO_INTRAN protid_t begin_using_protid_port (io_t) -#define IO_DESTRUCTOR end_using_protid_port (protid_t) +#define IO_INTRAN protid_t diskfs_begin_using_protid_port (io_t) +#define IO_DESTRUCTOR diskfs_end_using_protid_port (protid_t) #define FILE_IMPORTS import "priv.h"; #define IO_IMPORTS import "priv.h"; diff --git a/libdiskfs/init-first.c b/libdiskfs/init-first.c index 99c5d5ef..d91345be 100644 --- a/libdiskfs/init-first.c +++ b/libdiskfs/init-first.c @@ -21,20 +21,21 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "priv.h" #include +#include static int thread_timeout = 1000 * 60 * 2; /* two minutes */ static int server_timeout = 1000 * 60 * 10; /* ten minutes */ static any_t -master_thread_function (any_t foo __attribute__ ((unused))) +master_thread_function (any_t demuxer) { error_t err; do { ports_manage_port_operations_multithread (diskfs_port_bucket, - diskfs_demuxer, + (ports_demuxer_type) demuxer, thread_timeout, server_timeout, 0); @@ -48,8 +49,8 @@ master_thread_function (any_t foo __attribute__ ((unused))) } void -diskfs_spawn_first_thread (void) +diskfs_spawn_first_thread (ports_demuxer_type demuxer) { cthread_detach (cthread_fork ((cthread_fn_t) master_thread_function, - (any_t) 0)); + (any_t) demuxer)); } diff --git a/libdiskfs/init-main.c b/libdiskfs/init-main.c index 09c2b680..98943189 100644 --- a/libdiskfs/init-main.c +++ b/libdiskfs/init-main.c @@ -1,5 +1,5 @@ /* diskfs_init_main -- initialize diskfs world, parse arguments, and open store - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU Hurd. @@ -72,7 +72,7 @@ diskfs_init_main (struct argp *startup_argp, diskfs_readonly = diskfs_hard_readonly = 1; /* Start the first request thread, to handle RPCs and page requests. */ - diskfs_spawn_first_thread (); + diskfs_spawn_first_thread (diskfs_demuxer); return store; } diff --git a/libdiskfs/priv.h b/libdiskfs/priv.h index fd69af9c..d5ef60c5 100644 --- a/libdiskfs/priv.h +++ b/libdiskfs/priv.h @@ -1,5 +1,5 @@ /* Private declarations for fileserver library - Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc. + Copyright (C) 1994,95,96,97,98,99,2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -64,25 +64,6 @@ extern int _diskfs_diskdirty; /* Needed for MiG. */ typedef struct protid *protid_t; -/* Called by MiG to translate ports into struct protid *. - fsmutations.h arranges for this to happen for the io and - fs interfaces. */ -extern inline struct protid * -begin_using_protid_port (file_t port) -{ - return ports_lookup_port (diskfs_port_bucket, port, diskfs_protid_class); -} - -/* Called by MiG after server routines have been run; this - balances begin_using_protid_port, and is arranged for the io - and fs interfaces by fsmutations.h. */ -extern inline void -end_using_protid_port (struct protid *cred) -{ - if (cred) - ports_port_deref (cred); -} - /* Actually read or write a file. The file size must already permit the requested access. NP is the file to read/write. DATA is a buffer to write from or fill on read. OFFSET is the absolute address (-1 -- cgit v1.2.3