2011-04-13 15:25:34 +02:00
|
|
|
#ifndef __VFS_FILE_H__
|
|
|
|
#define __VFS_FILE_H__
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* This is the filp table. It is an intermediary between file descriptors and
|
|
|
|
* inodes. A slot is free if filp_count == 0.
|
|
|
|
*/
|
|
|
|
|
|
|
|
EXTERN struct filp {
|
|
|
|
mode_t filp_mode; /* RW bits, telling how file is opened */
|
|
|
|
int filp_flags; /* flags from open and fcntl */
|
2008-02-22 15:19:23 +01:00
|
|
|
int filp_state; /* state for crash recovery */
|
2005-04-21 16:53:53 +02:00
|
|
|
int filp_count; /* how many file descriptors share this slot?*/
|
2011-04-13 15:25:34 +02:00
|
|
|
struct vnode *filp_vno; /* vnode belonging to this file */
|
2006-11-27 15:21:43 +01:00
|
|
|
u64_t filp_pos; /* file position */
|
2012-02-13 16:28:04 +01:00
|
|
|
mutex_t filp_lock; /* lock to gain exclusive access */
|
|
|
|
struct fproc *filp_softlock; /* if not NULL; this filp didn't lock the
|
|
|
|
* vnode. Another filp already holds a lock
|
|
|
|
* for this thread */
|
2005-06-17 15:41:12 +02:00
|
|
|
|
|
|
|
/* the following fields are for select() and are owned by the generic
|
|
|
|
* select() code (i.e., fd-type-specific select() code can't touch these).
|
|
|
|
*/
|
|
|
|
int filp_selectors; /* select()ing processes blocking on this fd */
|
|
|
|
int filp_select_ops; /* interested in these SEL_* operations */
|
2008-02-22 15:19:23 +01:00
|
|
|
int filp_select_flags; /* Select flags for the filp */
|
2005-06-17 15:41:12 +02:00
|
|
|
|
|
|
|
/* following are for fd-type-specific select() */
|
|
|
|
int filp_pipe_select_ops;
|
2005-04-21 16:53:53 +02:00
|
|
|
} filp[NR_FILPS];
|
|
|
|
|
|
|
|
#define FILP_CLOSED 0 /* filp_mode: associated device closed */
|
|
|
|
|
2008-02-22 15:19:23 +01:00
|
|
|
#define FS_NORMAL 0 /* file descriptor can be used normally */
|
|
|
|
#define FS_NEEDS_REOPEN 1 /* file descriptor needs to be re-opened */
|
|
|
|
|
2011-04-13 15:25:34 +02:00
|
|
|
#define FSF_UPDATE 001 /* The driver should be informed about new
|
2008-02-22 15:19:23 +01:00
|
|
|
* state.
|
|
|
|
*/
|
2012-02-13 16:28:04 +01:00
|
|
|
#define FSF_BUSY 002 /* Select operation sent to driver but no
|
2008-02-22 15:19:23 +01:00
|
|
|
* reply yet.
|
|
|
|
*/
|
2012-02-13 16:28:04 +01:00
|
|
|
#define FSF_RD_BLOCK 010 /* Read request is blocking, the driver should
|
2008-02-22 15:19:23 +01:00
|
|
|
* keep state.
|
|
|
|
*/
|
2011-04-13 15:25:34 +02:00
|
|
|
#define FSF_WR_BLOCK 020 /* Write request is blocking */
|
|
|
|
#define FSF_ERR_BLOCK 040 /* Exception request is blocking */
|
|
|
|
#define FSF_BLOCKED 070
|
|
|
|
#endif
|