5 #include <linux/types.h>
8 #include <linux/msdos_fs_i.h>
9 #include <linux/pipe_fs_i.h>
11 /* #Specification: strategy / in memory inode
12 * Here is the information specific to the inode of the UMSDOS file
13 * system. This information is added to the end of the standard struct
14 * inode. Each file system has its own extension to struct inode,
15 * so do the umsdos file system.
17 * The strategy is to have the umsdos_inode_info as a superset of
18 * the msdos_inode_info, since most of the time the job is done
19 * by the msdos fs code.
21 * So we duplicate the msdos_inode_info, and add our own info at the
24 * For all file type (and directory) the inode has a reference to:
25 * the directory which hold this entry: i_dir_owner
26 * The EMD file of i_dir_owner: i_emd_owner
27 * The offset in this EMD file of the entry: pos
29 * For directory, we also have a reference to the inode of its
30 * own EMD file. Also, we have dir_locking_info to help synchronise
31 * file creation and file lookup. See also msdos_fs_i.h for more
32 * information about msdos_inode_info.
34 * Special file and fifo do have an inode which correspond to an
37 * symlink are processed mostly like regular file. The content is the
40 * The UMSDOS specific extension is placed after the union.
43 struct dir_locking_info
{
45 short int looking
; /* How many process doing a lookup */
46 short int creating
; /* Is there any creation going on here
47 * Only one at a time, although one
48 * may recursively lock, so it is a counter
50 long pid
; /* pid of the process owning the creation */
54 struct umsdos_inode_info
{
56 struct msdos_inode_info msdos_info
;
57 struct dir_locking_info dir_info
;
59 int i_patched
; /* Inode has been patched */
60 int i_is_hlink
; /* Resolved hardlink inode? */
61 unsigned long i_emd_owner
; /* Is this the EMD file inode? */
62 off_t pos
; /* Entry offset in the emd_owner file */
63 /* The rest is used only if this inode describes a directory */
64 struct dentry
*i_emd_dentry
; /* EMD dentry for this directory */
65 unsigned long i_emd_dir
; /* Inode of the EMD file */