Whamcloud - gitweb
LU-12353 ldiskfs: speedup quota journalling
[fs/lustre-release.git] / ldiskfs / kernel_patches / patches / rhel7.6 / ext4-move-handling-of-list-of-shrinkable-inodes-into.patch
1 From 8d5847463404eb2d6b24f748d521d1930a432da9 Mon Sep 17 00:00:00 2001
2 From: Jan Kara <jack@suse.cz>
3 Date: Tue, 25 Nov 2014 11:49:25 -0500
4 Subject: [PATCH 4/7] ext4: move handling of list of shrinkable inodes into
5  extent status code
6
7 Currently callers adding extents to extent status tree were responsible
8 for adding the inode to the list of inodes with freeable extents. This
9 is error prone and puts list handling in unnecessarily many places.
10
11 Just add inode to the list automatically when the first non-delay extent
12 is added to the tree and remove inode from the list when the last
13 non-delay extent is removed.
14
15 Signed-off-by: Jan Kara <jack@suse.cz>
16 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
17 ---
18  fs/ext4/extents.c        |  2 --
19  fs/ext4/extents_status.c | 10 ++++++----
20  fs/ext4/extents_status.h |  2 --
21  fs/ext4/inode.c          |  2 --
22  fs/ext4/ioctl.c          |  2 --
23  fs/ext4/super.c          |  1 -
24  6 files changed, 6 insertions(+), 13 deletions(-)
25
26 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
27 index c012dc51..d9d51a5b 100644
28 --- a/fs/ext4/extents.c
29 +++ b/fs/ext4/extents.c
30 @@ -4689,7 +4689,6 @@ out2:
31  
32         trace_ext4_ext_map_blocks_exit(inode, flags, map,
33                                        err ? err : allocated);
34 -       ext4_es_list_add(inode);
35         return err ? err : allocated;
36  }
37  
38 @@ -5263,7 +5262,6 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
39                 error = ext4_fill_fiemap_extents(inode, start_blk,
40                                                  len_blks, fieinfo);
41         }
42 -       ext4_es_list_add(inode);
43         return error;
44  }
45  
46 diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c
47 index 382a7bf9..edd49793 100644
48 --- a/fs/ext4/extents_status.c
49 +++ b/fs/ext4/extents_status.c
50 @@ -298,7 +298,7 @@ out:
51         trace_ext4_es_find_delayed_extent_range_exit(inode, es);
52  }
53  
54 -void ext4_es_list_add(struct inode *inode)
55 +static void ext4_es_list_add(struct inode *inode)
56  {
57         struct ext4_inode_info *ei = EXT4_I(inode);
58         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
59 @@ -314,7 +314,7 @@ void ext4_es_list_add(struct inode *inode)
60         spin_unlock(&sbi->s_es_lock);
61  }
62  
63 -void ext4_es_list_del(struct inode *inode)
64 +static void ext4_es_list_del(struct inode *inode)
65  {
66         struct ext4_inode_info *ei = EXT4_I(inode);
67         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
68 @@ -344,7 +344,8 @@ ext4_es_alloc_extent(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len,
69          * We don't count delayed extent because we never try to reclaim them
70          */
71         if (!ext4_es_is_delayed(es)) {
72 -               EXT4_I(inode)->i_es_shk_nr++;
73 +               if (!EXT4_I(inode)->i_es_shk_nr++)
74 +                       ext4_es_list_add(inode);
75                 percpu_counter_inc(&EXT4_SB(inode->i_sb)->
76                                         s_es_stats.es_stats_shk_cnt);
77         }
78 @@ -363,7 +364,8 @@ static void ext4_es_free_extent(struct inode *inode, struct extent_status *es)
79         /* Decrease the shrink counter when this es is not delayed */
80         if (!ext4_es_is_delayed(es)) {
81                 BUG_ON(EXT4_I(inode)->i_es_shk_nr == 0);
82 -               EXT4_I(inode)->i_es_shk_nr--;
83 +               if (!--EXT4_I(inode)->i_es_shk_nr)
84 +                       ext4_es_list_del(inode);
85                 percpu_counter_dec(&EXT4_SB(inode->i_sb)->
86                                         s_es_stats.es_stats_shk_cnt);
87         }
88 diff --git a/fs/ext4/extents_status.h b/fs/ext4/extents_status.h
89 index 0e6a33e8..b0b78b95 100644
90 --- a/fs/ext4/extents_status.h
91 +++ b/fs/ext4/extents_status.h
92 @@ -150,7 +150,5 @@ static inline void ext4_es_store_pblock_status(struct extent_status *es,
93  
94  extern int ext4_es_register_shrinker(struct ext4_sb_info *sbi);
95  extern void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi);
96 -extern void ext4_es_list_add(struct inode *inode);
97 -extern void ext4_es_list_del(struct inode *inode);
98  
99  #endif /* _EXT4_EXTENTS_STATUS_H */
100 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
101 index f6a2764c..9bbdc9e5 100644
102 --- a/fs/ext4/inode.c
103 +++ b/fs/ext4/inode.c
104 @@ -523,7 +523,6 @@ int ext4_map_blocks(handle_t *handle, struct inode *inode,
105  
106         /* Lookup extent status tree firstly */
107         if (ext4_es_lookup_extent(inode, map->m_lblk, &es)) {
108 -               ext4_es_list_add(inode);
109                 if (ext4_es_is_written(&es) || ext4_es_is_unwritten(&es)) {
110                         map->m_pblk = ext4_es_pblock(&es) +
111                                         map->m_lblk - es.es_lblk;
112 @@ -1519,7 +1518,6 @@ static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
113  
114         /* Lookup extent status tree firstly */
115         if (ext4_es_lookup_extent(inode, iblock, &es)) {
116 -               ext4_es_list_add(inode);
117                 if (ext4_es_is_hole(&es)) {
118                         retval = 0;
119                         down_read(&EXT4_I(inode)->i_data_sem);
120 diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
121 index 122d517c..6a6a9588 100644
122 --- a/fs/ext4/ioctl.c
123 +++ b/fs/ext4/ioctl.c
124 @@ -80,8 +80,6 @@ static void swap_inode_data(struct inode *inode1, struct inode *inode2)
125         memswap(&ei1->i_disksize, &ei2->i_disksize, sizeof(ei1->i_disksize));
126         ext4_es_remove_extent(inode1, 0, EXT_MAX_BLOCKS);
127         ext4_es_remove_extent(inode2, 0, EXT_MAX_BLOCKS);
128 -       ext4_es_list_del(inode1);
129 -       ext4_es_list_del(inode2);
130  
131         isize = i_size_read(inode1);
132         i_size_write(inode1, i_size_read(inode2));
133 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
134 index ea2a1026..8a81fa73 100644
135 --- a/fs/ext4/super.c
136 +++ b/fs/ext4/super.c
137 @@ -1033,7 +1033,6 @@ void ext4_clear_inode(struct inode *inode)
138         dquot_drop(inode);
139         ext4_discard_preallocations(inode);
140         ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
141 -       ext4_es_list_del(inode);
142         if (EXT4_I(inode)->jinode) {
143                 jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
144                                                EXT4_I(inode)->jinode);
145 -- 
146 2.24.1
147