From: Philip Homburg Date: Fri, 22 Feb 2008 14:19:23 +0000 (+0000) Subject: Added filp_state for driver recovery and filp_select_flags to store select X-Git-Tag: v3.1.4~271 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/invmod.png?a=commitdiff_plain;h=047cc090e469822e315e643a80b52239457d61f3;p=minix.git Added filp_state for driver recovery and filp_select_flags to store select state for character specials that use asynch I/O. --- diff --git a/servers/vfs/file.h b/servers/vfs/file.h index 74552a58e..fda94da93 100644 --- a/servers/vfs/file.h +++ b/servers/vfs/file.h @@ -5,6 +5,7 @@ EXTERN struct filp { mode_t filp_mode; /* RW bits, telling how file is opened */ int filp_flags; /* flags from open and fcntl */ + int filp_state; /* state for crash recovery */ int filp_count; /* how many file descriptors share this slot?*/ /* struct inode *filp_ino;*/ /* pointer to the inode */ @@ -17,6 +18,7 @@ EXTERN struct filp { */ int filp_selectors; /* select()ing processes blocking on this fd */ int filp_select_ops; /* interested in these SEL_* operations */ + int filp_select_flags; /* Select flags for the filp */ /* following are for fd-type-specific select() */ int filp_pipe_select_ops; @@ -24,4 +26,17 @@ EXTERN struct filp { #define FILP_CLOSED 0 /* filp_mode: associated device closed */ +#define FS_NORMAL 0 /* file descriptor can be used normally */ +#define FS_NEEDS_REOPEN 1 /* file descriptor needs to be re-opened */ + +#define FSF_UPDATE 1 /* The driver should be informed about new + * state. + */ +#define FSF_BUSY 2 /* Select operation sent to driver but no + * reply yet. + */ +#define FSF_BLOCK 4 /* Request is blocking, the driver should + * keep state. + */ + #define NIL_FILP (struct filp *) 0 /* indicates absence of a filp slot */ diff --git a/servers/vfs/filedes.c b/servers/vfs/filedes.c index f1fae581c..332b37957 100644 --- a/servers/vfs/filedes.c +++ b/servers/vfs/filedes.c @@ -53,6 +53,8 @@ PUBLIC int get_fd(int start, mode_t bits, int *k, struct filp **fpt) f->filp_select_ops = 0; f->filp_pipe_select_ops = 0; f->filp_flags = 0; + f->filp_state = FS_NORMAL; + f->filp_select_flags = 0; *fpt = f; return(OK); }