summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2001-05-06 00:49:54 +0000
committerRoland McGrath <roland@gnu.org>2001-05-06 00:49:54 +0000
commitaede167cfb66c3c95742f7c3821643591040a56d (patch)
treee83e78ea4051e36dfad97910368643e2459f91a3
parent5b097e8086fde7387f255cb9504c1027e9ff85d2 (diff)
2001-04-22 Neal H Walfield <neal@cs.uml.edu>
* 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 <hurd/ports.h>. (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.
-rw-r--r--libdiskfs/Makefile1
-rw-r--r--libdiskfs/diskfs.h30
-rw-r--r--libdiskfs/extern-inline.c20
-rw-r--r--libdiskfs/fsmutations.h10
-rw-r--r--libdiskfs/init-first.c9
-rw-r--r--libdiskfs/init-main.c4
-rw-r--r--libdiskfs/priv.h21
7 files changed, 61 insertions, 34 deletions
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 <hurd/iohelp.h>
#include <idvec.h>
+#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 <stdlib.h>
+#include <hurd/ports.h>
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