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 { | |||
572 | 572 | ||
573 | /* | 573 | /* |
574 | * The bit position of these flags must not overlap with any of the | 574 | * The bit position of these flags must not overlap with any of the |
575 | * EXT4_GET_BLOCKS_*. They are used by ext4_ext_find_extent(), | 575 | * EXT4_GET_BLOCKS_*. They are used by ext4_find_extent(), |
576 | * read_extent_tree_block(), ext4_split_extent_at(), | 576 | * read_extent_tree_block(), ext4_split_extent_at(), |
577 | * ext4_ext_insert_extent(), and ext4_ext_create_new_leaf(). | 577 | * ext4_ext_insert_extent(), and ext4_ext_create_new_leaf(). |
578 | * EXT4_EX_NOCACHE is used to indicate that the we shouldn't be | 578 | * EXT4_EX_NOCACHE is used to indicate that the we shouldn't be |
579 | * caching the extents when reading from the extent tree while a | 579 | * caching the extents when reading from the extent tree while a |
580 | * truncate or punch hole operation is in progress. | 580 | * truncate or punch hole operation is in progress. |
581 | */ | 581 | */ |
582 | #define EXT4_EX_NOCACHE 0x0400 | 582 | #define EXT4_EX_NOCACHE 0x40000000 |
583 | #define EXT4_EX_FORCE_CACHE 0x0800 | 583 | #define EXT4_EX_FORCE_CACHE 0x20000000 |
584 | 584 | ||
585 | /* | 585 | /* |
586 | * Flags used by ext4_free_blocks | 586 | * Flags used by ext4_free_blocks |
@@ -890,6 +890,7 @@ struct ext4_inode_info { | |||
890 | struct ext4_es_tree i_es_tree; | 890 | struct ext4_es_tree i_es_tree; |
891 | rwlock_t i_es_lock; | 891 | rwlock_t i_es_lock; |
892 | struct list_head i_es_lru; | 892 | struct list_head i_es_lru; |
893 | unsigned int i_es_all_nr; /* protected by i_es_lock */ | ||
893 | unsigned int i_es_lru_nr; /* protected by i_es_lock */ | 894 | unsigned int i_es_lru_nr; /* protected by i_es_lock */ |
894 | unsigned long i_touch_when; /* jiffies of last accessing */ | 895 | unsigned long i_touch_when; /* jiffies of last accessing */ |
895 | 896 | ||
@@ -1174,6 +1175,9 @@ struct ext4_super_block { | |||
1174 | #define EXT4_MF_MNTDIR_SAMPLED 0x0001 | 1175 | #define EXT4_MF_MNTDIR_SAMPLED 0x0001 |
1175 | #define EXT4_MF_FS_ABORTED 0x0002 /* Fatal error detected */ | 1176 | #define EXT4_MF_FS_ABORTED 0x0002 /* Fatal error detected */ |
1176 | 1177 | ||
1178 | /* Number of quota types we support */ | ||
1179 | #define EXT4_MAXQUOTAS 2 | ||
1180 | |||
1177 | /* | 1181 | /* |
1178 | * fourth extended-fs super-block data in memory | 1182 | * fourth extended-fs super-block data in memory |
1179 | */ | 1183 | */ |
@@ -1237,7 +1241,7 @@ struct ext4_sb_info { | |||
1237 | u32 s_min_batch_time; | 1241 | u32 s_min_batch_time; |
1238 | struct block_device *journal_bdev; | 1242 | struct block_device *journal_bdev; |
1239 | #ifdef CONFIG_QUOTA | 1243 | #ifdef CONFIG_QUOTA |
1240 | char *s_qf_names[MAXQUOTAS]; /* Names of quota files with journalled quota */ | 1244 | char *s_qf_names[EXT4_MAXQUOTAS]; /* Names of quota files with journalled quota */ |
1241 | int s_jquota_fmt; /* Format of quota to use */ | 1245 | int s_jquota_fmt; /* Format of quota to use */ |
1242 | #endif | 1246 | #endif |
1243 | unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */ | 1247 | unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */ |
@@ -1330,8 +1334,7 @@ struct ext4_sb_info { | |||
1330 | /* Reclaim extents from extent status tree */ | 1334 | /* Reclaim extents from extent status tree */ |
1331 | struct shrinker s_es_shrinker; | 1335 | struct shrinker s_es_shrinker; |
1332 | struct list_head s_es_lru; | 1336 | struct list_head s_es_lru; |
1333 | unsigned long s_es_last_sorted; | 1337 | struct ext4_es_stats s_es_stats; |
1334 | struct percpu_counter s_extent_cache_cnt; | ||
1335 | struct mb_cache *s_mb_cache; | 1338 | struct mb_cache *s_mb_cache; |
1336 | spinlock_t s_es_lru_lock ____cacheline_aligned_in_smp; | 1339 | spinlock_t s_es_lru_lock ____cacheline_aligned_in_smp; |
1337 | 1340 | ||
@@ -1399,7 +1402,6 @@ enum { | |||
1399 | EXT4_STATE_EXT_MIGRATE, /* Inode is migrating */ | 1402 | EXT4_STATE_EXT_MIGRATE, /* Inode is migrating */ |
1400 | EXT4_STATE_DIO_UNWRITTEN, /* need convert on dio done*/ | 1403 | EXT4_STATE_DIO_UNWRITTEN, /* need convert on dio done*/ |
1401 | EXT4_STATE_NEWENTRY, /* File just added to dir */ | 1404 | EXT4_STATE_NEWENTRY, /* File just added to dir */ |
1402 | EXT4_STATE_DELALLOC_RESERVED, /* blks already reserved for delalloc */ | ||
1403 | EXT4_STATE_DIOREAD_LOCK, /* Disable support for dio read | 1405 | EXT4_STATE_DIOREAD_LOCK, /* Disable support for dio read |
1404 | nolocking */ | 1406 | nolocking */ |
1405 | EXT4_STATE_MAY_INLINE_DATA, /* may have in-inode data */ | 1407 | 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, | |||
2086 | extern int ext4_trim_fs(struct super_block *, struct fstrim_range *); | 2088 | extern int ext4_trim_fs(struct super_block *, struct fstrim_range *); |
2087 | 2089 | ||
2088 | /* inode.c */ | 2090 | /* inode.c */ |
2089 | struct buffer_head *ext4_getblk(handle_t *, struct inode *, | 2091 | struct buffer_head *ext4_getblk(handle_t *, struct inode *, ext4_lblk_t, int); |
2090 | ext4_lblk_t, int, int *); | 2092 | struct buffer_head *ext4_bread(handle_t *, struct inode *, ext4_lblk_t, int); |
2091 | struct buffer_head *ext4_bread(handle_t *, struct inode *, | ||
2092 | ext4_lblk_t, int, int *); | ||
2093 | int ext4_get_block_write(struct inode *inode, sector_t iblock, | 2093 | int ext4_get_block_write(struct inode *inode, sector_t iblock, |
2094 | struct buffer_head *bh_result, int create); | 2094 | struct buffer_head *bh_result, int create); |
2095 | int ext4_get_block(struct inode *inode, sector_t iblock, | 2095 | int ext4_get_block(struct inode *inode, sector_t iblock, |
@@ -2109,6 +2109,7 @@ int do_journal_get_write_access(handle_t *handle, | |||
2109 | #define CONVERT_INLINE_DATA 2 | 2109 | #define CONVERT_INLINE_DATA 2 |
2110 | 2110 | ||
2111 | extern struct inode *ext4_iget(struct super_block *, unsigned long); | 2111 | extern struct inode *ext4_iget(struct super_block *, unsigned long); |
2112 | extern struct inode *ext4_iget_normal(struct super_block *, unsigned long); | ||
2112 | extern int ext4_write_inode(struct inode *, struct writeback_control *); | 2113 | extern int ext4_write_inode(struct inode *, struct writeback_control *); |
2113 | extern int ext4_setattr(struct dentry *, struct iattr *); | 2114 | extern int ext4_setattr(struct dentry *, struct iattr *); |
2114 | extern int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry, | 2115 | extern int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry, |
@@ -2332,10 +2333,18 @@ extern int ext4_register_li_request(struct super_block *sb, | |||
2332 | static inline int ext4_has_group_desc_csum(struct super_block *sb) | 2333 | static inline int ext4_has_group_desc_csum(struct super_block *sb) |
2333 | { | 2334 | { |
2334 | return EXT4_HAS_RO_COMPAT_FEATURE(sb, | 2335 | return EXT4_HAS_RO_COMPAT_FEATURE(sb, |
2335 | EXT4_FEATURE_RO_COMPAT_GDT_CSUM | | 2336 | EXT4_FEATURE_RO_COMPAT_GDT_CSUM) || |
2336 | EXT4_FEATURE_RO_COMPAT_METADATA_CSUM); | 2337 | (EXT4_SB(sb)->s_chksum_driver != NULL); |
2337 | } | 2338 | } |
2338 | 2339 | ||
2340 | static inline int ext4_has_metadata_csum(struct super_block *sb) | ||
2341 | { | ||
2342 | WARN_ON_ONCE(EXT4_HAS_RO_COMPAT_FEATURE(sb, | ||
2343 | EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) && | ||
2344 | !EXT4_SB(sb)->s_chksum_driver); | ||
2345 | |||
2346 | return (EXT4_SB(sb)->s_chksum_driver != NULL); | ||
2347 | } | ||
2339 | static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es) | 2348 | static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es) |
2340 | { | 2349 | { |
2341 | return ((ext4_fsblk_t)le32_to_cpu(es->s_blocks_count_hi) << 32) | | 2350 | 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, | |||
2731 | struct ext4_extent *ex1, | 2740 | struct ext4_extent *ex1, |
2732 | struct ext4_extent *ex2); | 2741 | struct ext4_extent *ex2); |
2733 | extern int ext4_ext_insert_extent(handle_t *, struct inode *, | 2742 | extern int ext4_ext_insert_extent(handle_t *, struct inode *, |
2734 | struct ext4_ext_path *, | 2743 | struct ext4_ext_path **, |
2735 | struct ext4_extent *, int); | 2744 | struct ext4_extent *, int); |
2736 | extern struct ext4_ext_path *ext4_ext_find_extent(struct inode *, ext4_lblk_t, | 2745 | extern struct ext4_ext_path *ext4_find_extent(struct inode *, ext4_lblk_t, |
2737 | struct ext4_ext_path *, | 2746 | struct ext4_ext_path **, |
2738 | int flags); | 2747 | int flags); |
2739 | extern void ext4_ext_drop_refs(struct ext4_ext_path *); | 2748 | extern void ext4_ext_drop_refs(struct ext4_ext_path *); |
2740 | extern int ext4_ext_check_inode(struct inode *inode); | 2749 | extern int ext4_ext_check_inode(struct inode *inode); |
2741 | extern int ext4_find_delalloc_range(struct inode *inode, | 2750 | extern int ext4_find_delalloc_range(struct inode *inode, |
2742 | ext4_lblk_t lblk_start, | 2751 | ext4_lblk_t lblk_start, |
2743 | ext4_lblk_t lblk_end); | 2752 | ext4_lblk_t lblk_end); |
2744 | extern int ext4_find_delalloc_cluster(struct inode *inode, ext4_lblk_t lblk); | 2753 | extern int ext4_find_delalloc_cluster(struct inode *inode, ext4_lblk_t lblk); |
2754 | extern ext4_lblk_t ext4_ext_next_allocated_block(struct ext4_ext_path *path); | ||
2745 | extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, | 2755 | extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, |
2746 | __u64 start, __u64 len); | 2756 | __u64 start, __u64 len); |
2747 | extern int ext4_ext_precache(struct inode *inode); | 2757 | extern int ext4_ext_precache(struct inode *inode); |
2748 | extern int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len); | 2758 | extern int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len); |
2759 | extern int ext4_swap_extents(handle_t *handle, struct inode *inode1, | ||
2760 | struct inode *inode2, ext4_lblk_t lblk1, | ||
2761 | ext4_lblk_t lblk2, ext4_lblk_t count, | ||
2762 | int mark_unwritten,int *err); | ||
2749 | 2763 | ||
2750 | /* move_extent.c */ | 2764 | /* move_extent.c */ |
2751 | extern void ext4_double_down_write_data_sem(struct inode *first, | 2765 | 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, | |||
2755 | extern int ext4_move_extents(struct file *o_filp, struct file *d_filp, | 2769 | extern int ext4_move_extents(struct file *o_filp, struct file *d_filp, |
2756 | __u64 start_orig, __u64 start_donor, | 2770 | __u64 start_orig, __u64 start_donor, |
2757 | __u64 len, __u64 *moved_len); | 2771 | __u64 len, __u64 *moved_len); |
2758 | extern int mext_next_extent(struct inode *inode, struct ext4_ext_path *path, | ||
2759 | struct ext4_extent **extent); | ||
2760 | 2772 | ||
2761 | /* page-io.c */ | 2773 | /* page-io.c */ |
2762 | extern int __init ext4_init_pageio(void); | 2774 | extern int __init ext4_init_pageio(void); |