diff options
Diffstat (limited to 'fs/ext4/ext4.h')
| -rw-r--r-- | fs/ext4/ext4.h | 50 | 
1 files changed, 31 insertions, 19 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index b0c225cdb52c..c55a1faaed58 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -572,15 +572,15 @@ enum {  /*   * The bit position of these flags must not overlap with any of the - * EXT4_GET_BLOCKS_*.  They are used by ext4_ext_find_extent(), + * EXT4_GET_BLOCKS_*.  They are used by ext4_find_extent(),   * read_extent_tree_block(), ext4_split_extent_at(),   * ext4_ext_insert_extent(), and ext4_ext_create_new_leaf().   * EXT4_EX_NOCACHE is used to indicate that the we shouldn't be   * caching the extents when reading from the extent tree while a   * truncate or punch hole operation is in progress.   */ -#define EXT4_EX_NOCACHE				0x0400 -#define EXT4_EX_FORCE_CACHE			0x0800 +#define EXT4_EX_NOCACHE				0x40000000 +#define EXT4_EX_FORCE_CACHE			0x20000000  /*   * Flags used by ext4_free_blocks @@ -890,6 +890,7 @@ struct ext4_inode_info {  	struct ext4_es_tree i_es_tree;  	rwlock_t i_es_lock;  	struct list_head i_es_lru; +	unsigned int i_es_all_nr;	/* protected by i_es_lock */  	unsigned int i_es_lru_nr;	/* protected by i_es_lock */  	unsigned long i_touch_when;	/* jiffies of last accessing */ @@ -1174,6 +1175,9 @@ struct ext4_super_block {  #define EXT4_MF_MNTDIR_SAMPLED	0x0001  #define EXT4_MF_FS_ABORTED	0x0002	/* Fatal error detected */ +/* Number of quota types we support */ +#define EXT4_MAXQUOTAS 2 +  /*   * fourth extended-fs super-block data in memory   */ @@ -1237,7 +1241,7 @@ struct ext4_sb_info {  	u32 s_min_batch_time;  	struct block_device *journal_bdev;  #ifdef CONFIG_QUOTA -	char *s_qf_names[MAXQUOTAS];		/* Names of quota files with journalled quota */ +	char *s_qf_names[EXT4_MAXQUOTAS];	/* Names of quota files with journalled quota */  	int s_jquota_fmt;			/* Format of quota to use */  #endif  	unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */ @@ -1330,8 +1334,7 @@ struct ext4_sb_info {  	/* Reclaim extents from extent status tree */  	struct shrinker s_es_shrinker;  	struct list_head s_es_lru; -	unsigned long s_es_last_sorted; -	struct percpu_counter s_extent_cache_cnt; +	struct ext4_es_stats s_es_stats;  	struct mb_cache *s_mb_cache;  	spinlock_t s_es_lru_lock ____cacheline_aligned_in_smp; @@ -1399,7 +1402,6 @@ enum {  	EXT4_STATE_EXT_MIGRATE,		/* Inode is migrating */  	EXT4_STATE_DIO_UNWRITTEN,	/* need convert on dio done*/  	EXT4_STATE_NEWENTRY,		/* File just added to dir */ -	EXT4_STATE_DELALLOC_RESERVED,	/* blks already reserved for delalloc */  	EXT4_STATE_DIOREAD_LOCK,	/* Disable support for dio read  					   nolocking */  	EXT4_STATE_MAY_INLINE_DATA,	/* may have in-inode data */ @@ -2086,10 +2088,8 @@ extern int ext4_group_add_blocks(handle_t *handle, struct super_block *sb,  extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);  /* inode.c */ -struct buffer_head *ext4_getblk(handle_t *, struct inode *, -						ext4_lblk_t, int, int *); -struct buffer_head *ext4_bread(handle_t *, struct inode *, -						ext4_lblk_t, int, int *); +struct buffer_head *ext4_getblk(handle_t *, struct inode *, ext4_lblk_t, int); +struct buffer_head *ext4_bread(handle_t *, struct inode *, ext4_lblk_t, int);  int ext4_get_block_write(struct inode *inode, sector_t iblock,  			 struct buffer_head *bh_result, int create);  int ext4_get_block(struct inode *inode, sector_t iblock, @@ -2109,6 +2109,7 @@ int do_journal_get_write_access(handle_t *handle,  #define CONVERT_INLINE_DATA	 2  extern struct inode *ext4_iget(struct super_block *, unsigned long); +extern struct inode *ext4_iget_normal(struct super_block *, unsigned long);  extern int  ext4_write_inode(struct inode *, struct writeback_control *);  extern int  ext4_setattr(struct dentry *, struct iattr *);  extern int  ext4_getattr(struct vfsmount *mnt, struct dentry *dentry, @@ -2332,10 +2333,18 @@ extern int ext4_register_li_request(struct super_block *sb,  static inline int ext4_has_group_desc_csum(struct super_block *sb)  {  	return EXT4_HAS_RO_COMPAT_FEATURE(sb, -					  EXT4_FEATURE_RO_COMPAT_GDT_CSUM | -					  EXT4_FEATURE_RO_COMPAT_METADATA_CSUM); +					  EXT4_FEATURE_RO_COMPAT_GDT_CSUM) || +	       (EXT4_SB(sb)->s_chksum_driver != NULL);  } +static inline int ext4_has_metadata_csum(struct super_block *sb) +{ +	WARN_ON_ONCE(EXT4_HAS_RO_COMPAT_FEATURE(sb, +			EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) && +		     !EXT4_SB(sb)->s_chksum_driver); + +	return (EXT4_SB(sb)->s_chksum_driver != NULL); +}  static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es)  {  	return ((ext4_fsblk_t)le32_to_cpu(es->s_blocks_count_hi) << 32) | @@ -2731,21 +2740,26 @@ extern int ext4_can_extents_be_merged(struct inode *inode,  				      struct ext4_extent *ex1,  				      struct ext4_extent *ex2);  extern int ext4_ext_insert_extent(handle_t *, struct inode *, -				  struct ext4_ext_path *, +				  struct ext4_ext_path **,  				  struct ext4_extent *, int); -extern struct ext4_ext_path *ext4_ext_find_extent(struct inode *, ext4_lblk_t, -						  struct ext4_ext_path *, -						  int flags); +extern struct ext4_ext_path *ext4_find_extent(struct inode *, ext4_lblk_t, +					      struct ext4_ext_path **, +					      int flags);  extern void ext4_ext_drop_refs(struct ext4_ext_path *);  extern int ext4_ext_check_inode(struct inode *inode);  extern int ext4_find_delalloc_range(struct inode *inode,  				    ext4_lblk_t lblk_start,  				    ext4_lblk_t lblk_end);  extern int ext4_find_delalloc_cluster(struct inode *inode, ext4_lblk_t lblk); +extern ext4_lblk_t ext4_ext_next_allocated_block(struct ext4_ext_path *path);  extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,  			__u64 start, __u64 len);  extern int ext4_ext_precache(struct inode *inode);  extern int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len); +extern int ext4_swap_extents(handle_t *handle, struct inode *inode1, +				struct inode *inode2, ext4_lblk_t lblk1, +			     ext4_lblk_t lblk2,  ext4_lblk_t count, +			     int mark_unwritten,int *err);  /* move_extent.c */  extern void ext4_double_down_write_data_sem(struct inode *first, @@ -2755,8 +2769,6 @@ extern void ext4_double_up_write_data_sem(struct inode *orig_inode,  extern int ext4_move_extents(struct file *o_filp, struct file *d_filp,  			     __u64 start_orig, __u64 start_donor,  			     __u64 len, __u64 *moved_len); -extern int mext_next_extent(struct inode *inode, struct ext4_ext_path *path, -			    struct ext4_extent **extent);  /* page-io.c */  extern int __init ext4_init_pageio(void);  | 
