@@ -67,27 +67,29 @@ typedef unsigned int ext4_group_t;
67
67
68
68
69
69
/* prefer goal again. length */
70
- #define EXT4_MB_HINT_MERGE 1
70
+ #define EXT4_MB_HINT_MERGE 0x0001
71
71
/* blocks already reserved */
72
- #define EXT4_MB_HINT_RESERVED 2
72
+ #define EXT4_MB_HINT_RESERVED 0x0002
73
73
/* metadata is being allocated */
74
- #define EXT4_MB_HINT_METADATA 4
74
+ #define EXT4_MB_HINT_METADATA 0x0004
75
75
/* first blocks in the file */
76
- #define EXT4_MB_HINT_FIRST 8
76
+ #define EXT4_MB_HINT_FIRST 0x0008
77
77
/* search for the best chunk */
78
- #define EXT4_MB_HINT_BEST 16
78
+ #define EXT4_MB_HINT_BEST 0x0010
79
79
/* data is being allocated */
80
- #define EXT4_MB_HINT_DATA 32
80
+ #define EXT4_MB_HINT_DATA 0x0020
81
81
/* don't preallocate (for tails) */
82
- #define EXT4_MB_HINT_NOPREALLOC 64
82
+ #define EXT4_MB_HINT_NOPREALLOC 0x0040
83
83
/* allocate for locality group */
84
- #define EXT4_MB_HINT_GROUP_ALLOC 128
84
+ #define EXT4_MB_HINT_GROUP_ALLOC 0x0080
85
85
/* allocate goal blocks or none */
86
- #define EXT4_MB_HINT_GOAL_ONLY 256
86
+ #define EXT4_MB_HINT_GOAL_ONLY 0x0100
87
87
/* goal is meaningful */
88
- #define EXT4_MB_HINT_TRY_GOAL 512
88
+ #define EXT4_MB_HINT_TRY_GOAL 0x0200
89
89
/* blocks already pre-reserved by delayed allocation */
90
- #define EXT4_MB_DELALLOC_RESERVED 1024
90
+ #define EXT4_MB_DELALLOC_RESERVED 0x0400
91
+ /* We are doing stream allocation */
92
+ #define EXT4_MB_STREAM_ALLOC 0x0800
91
93
92
94
93
95
struct ext4_allocation_request {
@@ -111,6 +113,21 @@ struct ext4_allocation_request {
111
113
unsigned int flags ;
112
114
};
113
115
116
+ /*
117
+ * For delayed allocation tracking
118
+ */
119
+ struct mpage_da_data {
120
+ struct inode * inode ;
121
+ sector_t b_blocknr ; /* start block number of extent */
122
+ size_t b_size ; /* size of extent */
123
+ unsigned long b_state ; /* state of the extent */
124
+ unsigned long first_page , next_page ; /* extent of pages */
125
+ struct writeback_control * wbc ;
126
+ int io_done ;
127
+ int pages_written ;
128
+ int retval ;
129
+ };
130
+
114
131
/*
115
132
* Special inodes numbers
116
133
*/
@@ -251,7 +268,6 @@ struct flex_groups {
251
268
#define EXT4_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
252
269
#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */
253
270
#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
254
- #define EXT4_EXT_MIGRATE 0x00100000 /* Inode is migrating */
255
271
#define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */
256
272
257
273
#define EXT4_FL_USER_VISIBLE 0x000BDFFF /* User visible flags */
@@ -289,6 +305,7 @@ static inline __u32 ext4_mask_flags(umode_t mode, __u32 flags)
289
305
#define EXT4_STATE_XATTR 0x00000004 /* has in-inode xattrs */
290
306
#define EXT4_STATE_NO_EXPAND 0x00000008 /* No space for expansion */
291
307
#define EXT4_STATE_DA_ALLOC_CLOSE 0x00000010 /* Alloc DA blks on close */
308
+ #define EXT4_STATE_EXT_MIGRATE 0x00000020 /* Inode is migrating */
292
309
293
310
/* Used to pass group descriptor data when online resize is done */
294
311
struct ext4_new_group_input {
@@ -386,6 +403,9 @@ struct ext4_mount_options {
386
403
#endif
387
404
};
388
405
406
+ /* Max physical block we can addres w/o extents */
407
+ #define EXT4_MAX_BLOCK_FILE_PHYS 0xFFFFFFFF
408
+
389
409
/*
390
410
* Structure of an inode on the disk
391
411
*/
@@ -456,7 +476,6 @@ struct move_extent {
456
476
__u64 len ; /* block length to be moved */
457
477
__u64 moved_len ; /* moved block length */
458
478
};
459
- #define MAX_DEFRAG_SIZE ((1UL<<31) - 1)
460
479
461
480
#define EXT4_EPOCH_BITS 2
462
481
#define EXT4_EPOCH_MASK ((1 << EXT4_EPOCH_BITS) - 1)
@@ -694,7 +713,6 @@ struct ext4_inode_info {
694
713
#define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */
695
714
#define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */
696
715
#define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */
697
- #define EXT4_MOUNT_JOURNAL_CHECKSUM 0x800000 /* Journal checksums */
698
716
#define EXT4_MOUNT_JOURNAL_ASYNC_COMMIT 0x1000000 /* Journal Async Commit */
699
717
#define EXT4_MOUNT_I_VERSION 0x2000000 /* i_version support */
700
718
#define EXT4_MOUNT_DELALLOC 0x8000000 /* Delalloc support */
@@ -841,6 +859,7 @@ struct ext4_sb_info {
841
859
unsigned long s_gdb_count ; /* Number of group descriptor blocks */
842
860
unsigned long s_desc_per_block ; /* Number of group descriptors per block */
843
861
ext4_group_t s_groups_count ; /* Number of groups in the fs */
862
+ ext4_group_t s_blockfile_groups ;/* Groups acceptable for non-extent files */
844
863
unsigned long s_overhead_last ; /* Last calculated overhead */
845
864
unsigned long s_blocks_last ; /* Last seen block count */
846
865
loff_t s_bitmap_maxbytes ; /* max bytes for bitmap files */
@@ -950,6 +969,7 @@ struct ext4_sb_info {
950
969
atomic_t s_mb_lost_chunks ;
951
970
atomic_t s_mb_preallocated ;
952
971
atomic_t s_mb_discarded ;
972
+ atomic_t s_lock_busy ;
953
973
954
974
/* locality groups */
955
975
struct ext4_locality_group * s_locality_groups ;
@@ -1340,8 +1360,6 @@ extern void ext4_mb_free_blocks(handle_t *, struct inode *,
1340
1360
ext4_fsblk_t , unsigned long , int , unsigned long * );
1341
1361
extern int ext4_mb_add_groupinfo (struct super_block * sb ,
1342
1362
ext4_group_t i , struct ext4_group_desc * desc );
1343
- extern void ext4_mb_update_group_info (struct ext4_group_info * grp ,
1344
- ext4_grpblk_t add );
1345
1363
extern int ext4_mb_get_buddy_cache_lock (struct super_block * , ext4_group_t );
1346
1364
extern void ext4_mb_put_buddy_cache_lock (struct super_block * ,
1347
1365
ext4_group_t , int );
@@ -1367,6 +1385,7 @@ extern int ext4_change_inode_journal_flag(struct inode *, int);
1367
1385
extern int ext4_get_inode_loc (struct inode * , struct ext4_iloc * );
1368
1386
extern int ext4_can_truncate (struct inode * inode );
1369
1387
extern void ext4_truncate (struct inode * );
1388
+ extern int ext4_truncate_restart_trans (handle_t * , struct inode * , int nblocks );
1370
1389
extern void ext4_set_inode_flags (struct inode * );
1371
1390
extern void ext4_get_inode_flags (struct ext4_inode_info * );
1372
1391
extern int ext4_alloc_da_blocks (struct inode * inode );
@@ -1575,31 +1594,61 @@ static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize)
1575
1594
struct ext4_group_info {
1576
1595
unsigned long bb_state ;
1577
1596
struct rb_root bb_free_root ;
1578
- unsigned short bb_first_free ;
1579
- unsigned short bb_free ;
1580
- unsigned short bb_fragments ;
1597
+ ext4_grpblk_t bb_first_free ; /* first free block */
1598
+ ext4_grpblk_t bb_free ; /* total free blocks */
1599
+ ext4_grpblk_t bb_fragments ; /* nr of freespace fragments */
1581
1600
struct list_head bb_prealloc_list ;
1582
1601
#ifdef DOUBLE_CHECK
1583
1602
void * bb_bitmap ;
1584
1603
#endif
1585
1604
struct rw_semaphore alloc_sem ;
1586
- unsigned short bb_counters [];
1605
+ ext4_grpblk_t bb_counters []; /* Nr of free power-of-two-block
1606
+ * regions, index is order.
1607
+ * bb_counters[3] = 5 means
1608
+ * 5 free 8-block regions. */
1587
1609
};
1588
1610
1589
1611
#define EXT4_GROUP_INFO_NEED_INIT_BIT 0
1590
1612
1591
1613
#define EXT4_MB_GRP_NEED_INIT (grp ) \
1592
1614
(test_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &((grp)->bb_state)))
1593
1615
1616
+ #define EXT4_MAX_CONTENTION 8
1617
+ #define EXT4_CONTENTION_THRESHOLD 2
1618
+
1594
1619
static inline spinlock_t * ext4_group_lock_ptr (struct super_block * sb ,
1595
1620
ext4_group_t group )
1596
1621
{
1597
1622
return bgl_lock_ptr (EXT4_SB (sb )-> s_blockgroup_lock , group );
1598
1623
}
1599
1624
1625
+ /*
1626
+ * Returns true if the filesystem is busy enough that attempts to
1627
+ * access the block group locks has run into contention.
1628
+ */
1629
+ static inline int ext4_fs_is_busy (struct ext4_sb_info * sbi )
1630
+ {
1631
+ return (atomic_read (& sbi -> s_lock_busy ) > EXT4_CONTENTION_THRESHOLD );
1632
+ }
1633
+
1600
1634
static inline void ext4_lock_group (struct super_block * sb , ext4_group_t group )
1601
1635
{
1602
- spin_lock (ext4_group_lock_ptr (sb , group ));
1636
+ spinlock_t * lock = ext4_group_lock_ptr (sb , group );
1637
+ if (spin_trylock (lock ))
1638
+ /*
1639
+ * We're able to grab the lock right away, so drop the
1640
+ * lock contention counter.
1641
+ */
1642
+ atomic_add_unless (& EXT4_SB (sb )-> s_lock_busy , -1 , 0 );
1643
+ else {
1644
+ /*
1645
+ * The lock is busy, so bump the contention counter,
1646
+ * and then wait on the spin lock.
1647
+ */
1648
+ atomic_add_unless (& EXT4_SB (sb )-> s_lock_busy , 1 ,
1649
+ EXT4_MAX_CONTENTION );
1650
+ spin_lock (lock );
1651
+ }
1603
1652
}
1604
1653
1605
1654
static inline void ext4_unlock_group (struct super_block * sb ,
0 commit comments