From: Thomas Veerman Date: Tue, 17 Jul 2012 10:12:34 +0000 (+0000) Subject: VFS: remove support for sync FS communication X-Git-Tag: v3.2.1~449 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/Bv9ARM.ch09.html?a=commitdiff_plain;h=fd60f0312942256544e456ed2b140ca58e4a92e1;p=minix.git VFS: remove support for sync FS communication --- diff --git a/servers/vfs/Makefile b/servers/vfs/Makefile index afea3e496..b3a203115 100644 --- a/servers/vfs/Makefile +++ b/servers/vfs/Makefile @@ -6,7 +6,7 @@ SRCS= main.c open.c read.c write.c pipe.c dmap.c \ path.c device.c mount.c link.c exec.c \ filedes.c stadir.c protect.c time.c \ lock.c misc.c utility.c select.c table.c \ - vnode.c vmnt.c request.c fscall.c \ + vnode.c vmnt.c request.c \ tll.c comm.c worker.c coredump.c .if ${MKCOVERAGE} != "no" diff --git a/servers/vfs/comm.c b/servers/vfs/comm.c index 6358ecb7e..2cf2ab54a 100644 --- a/servers/vfs/comm.c +++ b/servers/vfs/comm.c @@ -100,53 +100,21 @@ int fs_sendrec(endpoint_t fs_e, message *reqmp) } if (fs_e == fp->fp_endpoint) return(EDEADLK); - if (!force_sync) { - fp->fp_sendrec = reqmp; /* Where to store request and reply */ - - /* Find out whether we can send right away or have to enqueue */ - if ( !(vmp->m_flags & VMNT_CALLBACK) && - vmp->m_comm.c_cur_reqs < vmp->m_comm.c_max_reqs) { - /* There's still room to send more and no proc is queued */ - r = sendmsg(vmp, fp); - } else { - r = queuemsg(vmp); - } - self->w_next = NULL; /* End of list */ - - if (r != OK) return(r); - - worker_wait(); /* Yield execution until we've received the reply. */ - } else if (force_sync == 1) { - int r; - if (OK != (r = sendrec(fs_e, reqmp))) { - printf("VFS: sendrec failed: %d\n", r); - util_stacktrace(); - return(r); - } - } else if (force_sync == 2) { - int r, status; - if (OK != (r = asynsend(fs_e, reqmp)) || - OK != (r = receive(fs_e, reqmp, &status))) { - printf("VFS: asynrec failed: %d\n", r); - util_stacktrace(); - return(r); - } - } else if (force_sync == 3) { - int r, status; - if (OK != (r = send(fs_e, reqmp)) || - OK != (r = receive(fs_e, reqmp, &status))) { - printf("VFS: sendreceive failed: %d\n", r); - util_stacktrace(); - return(r); - } - } + fp->fp_sendrec = reqmp; /* Where to store request and reply */ - if (force_sync != 0 && reqmp->m_type > 0) { - /* XXX: Keep this as long as we're interested in having support - * for synchronous communication. */ - nested_fs_call(reqmp); - return fs_sendrec(fs_e, reqmp); + /* Find out whether we can send right away or have to enqueue */ + if ( !(vmp->m_flags & VMNT_CALLBACK) && + vmp->m_comm.c_cur_reqs < vmp->m_comm.c_max_reqs) { + /* There's still room to send more and no proc is queued */ + r = sendmsg(vmp, fp); + } else { + r = queuemsg(vmp); } + self->w_next = NULL; /* End of list */ + + if (r != OK) return(r); + + worker_wait(); /* Yield execution until we've received the reply. */ return(reqmp->m_type); } diff --git a/servers/vfs/fscall.c b/servers/vfs/fscall.c deleted file mode 100644 index ca812b150..000000000 --- a/servers/vfs/fscall.c +++ /dev/null @@ -1,132 +0,0 @@ -/* This file handles nested counter-request calls to VFS sent by file system - * (FS) servers in response to VFS requests. - * - * The entry points into this file are - * nested_fs_call perform a nested call from a file system server - * nested_dev_call perform a nested call from a device driver server - * - */ - -#include "fs.h" -#include "fproc.h" -#include -#include -#include -#include -#include - -/* maximum nested call stack depth */ -#define MAX_DEPTH 1 - -/* global variables stack */ -static struct { - struct fproc *g_fp; /* pointer to caller process */ - message g_m_in; /* request message */ - message g_m_out; /* reply message */ - int g_who_e; /* endpoint of caller process */ - int g_who_p; /* slot number of caller process */ - int g_call_nr; /* call number */ - int g_super_user; /* is the caller root? */ - char g_user_fullpath[PATH_MAX]; /* path to look up */ -} globals[MAX_DEPTH]; - -static int depth = 0; /* current globals stack level */ - -static int push_globals(void); -static void pop_globals(void); -static void set_globals(message *m); - -/*===========================================================================* - * push_globals * - *===========================================================================*/ -static int push_globals() -{ -/* Save the global variables of the current call onto the globals stack. - */ - - if (depth == MAX_DEPTH) - return(EPERM); - - globals[depth].g_fp = fp; - globals[depth].g_m_in = job_m_in; - globals[depth].g_m_out = m_out; - globals[depth].g_super_user = super_user; - - /* err_code is not used across blocking calls */ - depth++; - return(OK); -} - -/*===========================================================================* - * pop_globals * - *===========================================================================*/ -static void pop_globals() -{ -/* Restore the global variables of a call from the globals stack. - */ - - if (depth == 0) - panic("Popping from empty globals stack!"); - - depth--; - - fp = globals[depth].g_fp; - job_m_in = globals[depth].g_m_in; - m_out = globals[depth].g_m_out; - -} - -/*===========================================================================* - * set_globals * - *===========================================================================*/ -static void set_globals(m) -message *m; /* request message */ -{ -/* Initialize global variables based on a request message. - */ - int proc_p; - - m_in = *m; - - proc_p = _ENDPOINT_P(m_in.m_source); - fp = &fproc[proc_p]; - - /* the rest need not be initialized */ -} - -/*===========================================================================* - * nested_fs_call * - *===========================================================================*/ -void nested_fs_call(m) -message *m; /* request/reply message pointer */ -{ -/* Handle a nested call from a file system server. - */ - int r; - - /* Save global variables of the current call */ - if ((r = push_globals()) != OK) { - printf("VFS: error saving global variables in call %d from FS %d\n", - m->m_type, m->m_source); - } else { - /* Initialize global variables for the nested call */ - set_globals(m); - - /* Perform the nested call - only getsysinfo() is allowed right now */ - if (job_call_nr == COMMON_GETSYSINFO) { - r = do_getsysinfo(); - } else { - printf("VFS: invalid nested call %d from FS %d\n", job_call_nr, - who_e); - - r = ENOSYS; - } - - /* Store the result, and restore original global variables */ - *m = m_out; - - pop_globals(); - } - - m->m_type = r; -}