mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 06:56:46 +07:00
0e4f6a791b
a) count file openers correctly; i_count use was completely wrong b) use new mutex for exclusion between final close/open/truncate, to protect tailpacking logics. i_mutex use was wrong and resulted in deadlocks. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
64 lines
2.1 KiB
C
64 lines
2.1 KiB
C
#ifndef _REISER_FS_I
|
|
#define _REISER_FS_I
|
|
|
|
#include <linux/list.h>
|
|
|
|
struct reiserfs_journal_list;
|
|
|
|
/** bitmasks for i_flags field in reiserfs-specific part of inode */
|
|
typedef enum {
|
|
/** this says what format of key do all items (but stat data) of
|
|
an object have. If this is set, that format is 3.6 otherwise
|
|
- 3.5 */
|
|
i_item_key_version_mask = 0x0001,
|
|
/** If this is unset, object has 3.5 stat data, otherwise, it has
|
|
3.6 stat data with 64bit size, 32bit nlink etc. */
|
|
i_stat_data_version_mask = 0x0002,
|
|
/** file might need tail packing on close */
|
|
i_pack_on_close_mask = 0x0004,
|
|
/** don't pack tail of file */
|
|
i_nopack_mask = 0x0008,
|
|
/** If those is set, "safe link" was created for this file during
|
|
truncate or unlink. Safe link is used to avoid leakage of disk
|
|
space on crash with some files open, but unlinked. */
|
|
i_link_saved_unlink_mask = 0x0010,
|
|
i_link_saved_truncate_mask = 0x0020,
|
|
i_has_xattr_dir = 0x0040,
|
|
i_data_log = 0x0080,
|
|
} reiserfs_inode_flags;
|
|
|
|
struct reiserfs_inode_info {
|
|
__u32 i_key[4]; /* key is still 4 32 bit integers */
|
|
/** transient inode flags that are never stored on disk. Bitmasks
|
|
for this field are defined above. */
|
|
__u32 i_flags;
|
|
|
|
__u32 i_first_direct_byte; // offset of first byte stored in direct item.
|
|
|
|
/* copy of persistent inode flags read from sd_attrs. */
|
|
__u32 i_attrs;
|
|
|
|
int i_prealloc_block; /* first unused block of a sequence of unused blocks */
|
|
int i_prealloc_count; /* length of that sequence */
|
|
struct list_head i_prealloc_list; /* per-transaction list of inodes which
|
|
* have preallocated blocks */
|
|
|
|
unsigned new_packing_locality:1; /* new_packig_locality is created; new blocks
|
|
* for the contents of this directory should be
|
|
* displaced */
|
|
|
|
/* we use these for fsync or O_SYNC to decide which transaction
|
|
** needs to be committed in order for this inode to be properly
|
|
** flushed */
|
|
unsigned int i_trans_id;
|
|
struct reiserfs_journal_list *i_jl;
|
|
atomic_t openers;
|
|
struct mutex tailpack;
|
|
#ifdef CONFIG_REISERFS_FS_XATTR
|
|
struct rw_semaphore i_xattr_sem;
|
|
#endif
|
|
struct inode vfs_inode;
|
|
};
|
|
|
|
#endif
|