minix/servers/vfs/fs.h

40 lines
809 B
C
Raw Normal View History

2012-02-13 16:28:04 +01:00
#ifndef __VFS_FS_H__
#define __VFS_FS_H__
2005-04-21 16:53:53 +02:00
/* This is the master header for fs. It includes some other files
* and defines the principal constants.
*/
#define _SYSTEM 1 /* tell headers that this is the kernel */
2005-04-21 16:53:53 +02:00
/* The following are so basic, all the *.c files get them automatically. */
#include <minix/config.h> /* MUST be first */
2005-04-21 16:53:53 +02:00
#include <sys/types.h>
#include <machine/vmparam.h>
2005-04-21 16:53:53 +02:00
#include <minix/const.h>
#include <minix/type.h>
#include <minix/dmap.h>
Driver refactory for live update and crash recovery. SYSLIB CHANGES: - DS calls to publish / retrieve labels consider endpoints instead of u32_t. VFS CHANGES: - mapdriver() only adds an entry in the dmap table in VFS. - dev_up() is only executed upon reception of a driver up event. INET CHANGES: - INET no longer searches for existing drivers instances at startup. - A newtwork driver is (re)initialized upon reception of a driver up event. - Networking startup is now race-free by design. No need to waste 5 seconds at startup any more. DRIVER CHANGES: - Every driver publishes driver up events when starting for the first time or in case of restart when recovery actions must be taken in the upper layers. - Driver up events are published by drivers through DS. - For regular drivers, VFS is normally the only subscriber, but not necessarily. For instance, when the filter driver is in use, it must subscribe to driver up events to initiate recovery. - For network drivers, inet is the only subscriber for now. - Every VFS driver is statically linked with libdriver, every network driver is statically linked with libnetdriver. DRIVER LIBRARIES CHANGES: - Libdriver is extended to provide generic receive() and ds_publish() interfaces for VFS drivers. - driver_receive() is a wrapper for sef_receive() also used in driver_task() to discard spurious messages that were meant to be delivered to a previous version of the driver. - driver_receive_mq() is the same as driver_receive() but integrates support for queued messages. - driver_announce() publishes a driver up event for VFS drivers and marks the driver as initialized and expecting a DEV_OPEN message. - Libnetdriver is introduced to provide similar receive() and ds_publish() interfaces for network drivers (netdriver_announce() and netdriver_receive()). - Network drivers all support live update with no state transfer now. KERNEL CHANGES: - Added kernel call statectl for state management. Used by driver_announce() to unblock eventual callers sendrecing to the driver.
2010-04-08 15:41:35 +02:00
#include <minix/ds.h>
#include <minix/rs.h>
2005-04-21 16:53:53 +02:00
#include <limits.h>
#include <errno.h>
#include <unistd.h>
2005-04-21 16:53:53 +02:00
#include <minix/syslib.h>
#include <minix/sysutil.h>
2010-07-09 14:58:18 +02:00
#include <minix/timers.h>
2005-04-21 16:53:53 +02:00
#include "const.h"
2007-08-07 14:52:47 +02:00
#include "dmap.h"
2005-04-21 16:53:53 +02:00
#include "proto.h"
2012-02-13 16:28:04 +01:00
#include "threads.h"
2005-04-21 16:53:53 +02:00
#include "glo.h"
#include "type.h"
2012-02-13 16:28:04 +01:00
#include "vmnt.h"
VFS: worker thread model overhaul The main purpose of this patch is to fix handling of unpause calls from PM while another call is ongoing. The solution to this problem sparked a full revision of the threading model, consisting of a large number of related changes: - all active worker threads are now always associated with a process, and every process has at most one active thread working for it; - the process lock is always held by a process's worker thread; - a process can now have both normal work and postponed PM work associated to it; - timer expiry and non-postponed PM work is done from the main thread; - filp garbage collection is done from a thread associated with VFS; - reboot calls from PM are now done from a thread associated with PM; - the DS events handler is protected from starting multiple threads; - support for a system worker thread has been removed; - the deadlock recovery thread has been replaced by a parameter to the worker_start() function; the number of worker threads has consequently been increased by one; - saving and restoring of global but per-thread variables is now centralized in worker_suspend() and worker_resume(); err_code is now saved and restored in all cases; - the concept of jobs has been removed, and job_m_in now points to a message stored in the worker thread structure instead; - the PM lock has been removed; - the separate exec lock has been replaced by a lock on the VM process, which was already being locked for exec calls anyway; - PM_UNPAUSE is now processed as a postponed PM request, from a thread associated with the target process; - the FP_DROP_WORK flag has been removed, since it is no longer more than just an optimization and only applied to processes operating on a pipe when getting killed; - assignment to "fp" now takes place only when obtaining new work in the main thread or a worker thread, when resuming execution of a thread, and in the special case of exiting processes during reboot; - there are no longer special cases where the yield() call is used to force a thread to run. Change-Id: I7a97b9b95c2450454a9b5318dfa0e6150d4e6858
2013-08-30 14:00:50 +02:00
#include "fproc.h"
2012-02-13 16:28:04 +01:00
#endif