Added filp_state for driver recovery and filp_select_flags to store select

state for character specials that use asynch I/O.
This commit is contained in:
Philip Homburg 2008-02-22 14:19:23 +00:00
parent 1d7d5aa629
commit 047cc090e4
2 changed files with 17 additions and 0 deletions

View file

@ -5,6 +5,7 @@
EXTERN struct filp { EXTERN struct filp {
mode_t filp_mode; /* RW bits, telling how file is opened */ mode_t filp_mode; /* RW bits, telling how file is opened */
int filp_flags; /* flags from open and fcntl */ 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?*/ int filp_count; /* how many file descriptors share this slot?*/
/* struct inode *filp_ino;*/ /* pointer to the inode */ /* 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_selectors; /* select()ing processes blocking on this fd */
int filp_select_ops; /* interested in these SEL_* operations */ 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() */ /* following are for fd-type-specific select() */
int filp_pipe_select_ops; int filp_pipe_select_ops;
@ -24,4 +26,17 @@ EXTERN struct filp {
#define FILP_CLOSED 0 /* filp_mode: associated device closed */ #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 */ #define NIL_FILP (struct filp *) 0 /* indicates absence of a filp slot */

View file

@ -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_select_ops = 0;
f->filp_pipe_select_ops = 0; f->filp_pipe_select_ops = 0;
f->filp_flags = 0; f->filp_flags = 0;
f->filp_state = FS_NORMAL;
f->filp_select_flags = 0;
*fpt = f; *fpt = f;
return(OK); return(OK);
} }