diff options
author | Theodore Ts'o <tytso@mit.edu> | 2019-06-21 16:31:47 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2019-06-21 16:31:47 -0400 |
commit | ddce3b94715ca5a19a107cd7c1d89fea177d2454 (patch) | |
tree | 16f8f2eaf0e29fa678f1fbf12a70dd725173425b | |
parent | f036adb39976467cf57f577490269594994f9eb4 (diff) |
ext4: refactor initialize_dirent_tail()
Move the calculation of the location of the dirent tail into
initialize_dirent_tail(). Also prefix the function with ext4_ to fix
kernel namepsace polution.
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | fs/ext4/ext4.h | 4 | ||||
-rw-r--r-- | fs/ext4/inline.c | 9 | ||||
-rw-r--r-- | fs/ext4/namei.c | 54 |
3 files changed, 26 insertions, 41 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 5b86df7ec326..83128bdd7abb 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -3147,8 +3147,8 @@ extern struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode, | |||
3147 | struct ext4_dir_entry_2 *de, | 3147 | struct ext4_dir_entry_2 *de, |
3148 | int blocksize, int csum_size, | 3148 | int blocksize, int csum_size, |
3149 | unsigned int parent_ino, int dotdot_real_len); | 3149 | unsigned int parent_ino, int dotdot_real_len); |
3150 | extern void initialize_dirent_tail(struct ext4_dir_entry_tail *t, | 3150 | extern void ext4_initialize_dirent_tail(struct buffer_head *bh, |
3151 | unsigned int blocksize); | 3151 | unsigned int blocksize); |
3152 | extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode, | 3152 | extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode, |
3153 | struct buffer_head *bh); | 3153 | struct buffer_head *bh); |
3154 | extern int ext4_ci_compare(const struct inode *parent, | 3154 | extern int ext4_ci_compare(const struct inode *parent, |
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c index f19dd5a08d0d..796137bb7dfa 100644 --- a/fs/ext4/inline.c +++ b/fs/ext4/inline.c | |||
@@ -1132,7 +1132,6 @@ static int ext4_finish_convert_inline_dir(handle_t *handle, | |||
1132 | { | 1132 | { |
1133 | int err, csum_size = 0, header_size = 0; | 1133 | int err, csum_size = 0, header_size = 0; |
1134 | struct ext4_dir_entry_2 *de; | 1134 | struct ext4_dir_entry_2 *de; |
1135 | struct ext4_dir_entry_tail *t; | ||
1136 | void *target = dir_block->b_data; | 1135 | void *target = dir_block->b_data; |
1137 | 1136 | ||
1138 | /* | 1137 | /* |
@@ -1158,11 +1157,9 @@ static int ext4_finish_convert_inline_dir(handle_t *handle, | |||
1158 | inline_size - EXT4_INLINE_DOTDOT_SIZE + header_size, | 1157 | inline_size - EXT4_INLINE_DOTDOT_SIZE + header_size, |
1159 | inode->i_sb->s_blocksize - csum_size); | 1158 | inode->i_sb->s_blocksize - csum_size); |
1160 | 1159 | ||
1161 | if (csum_size) { | 1160 | if (csum_size) |
1162 | t = EXT4_DIRENT_TAIL(dir_block->b_data, | 1161 | ext4_initialize_dirent_tail(dir_block, |
1163 | inode->i_sb->s_blocksize); | 1162 | inode->i_sb->s_blocksize); |
1164 | initialize_dirent_tail(t, inode->i_sb->s_blocksize); | ||
1165 | } | ||
1166 | set_buffer_uptodate(dir_block); | 1163 | set_buffer_uptodate(dir_block); |
1167 | err = ext4_handle_dirty_dirblock(handle, inode, dir_block); | 1164 | err = ext4_handle_dirty_dirblock(handle, inode, dir_block); |
1168 | if (err) | 1165 | if (err) |
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 4f0bcbbcfe96..183ad614ae3d 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -293,9 +293,11 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname, | |||
293 | struct inode *dir, struct inode *inode); | 293 | struct inode *dir, struct inode *inode); |
294 | 294 | ||
295 | /* checksumming functions */ | 295 | /* checksumming functions */ |
296 | void initialize_dirent_tail(struct ext4_dir_entry_tail *t, | 296 | void ext4_initialize_dirent_tail(struct buffer_head *bh, |
297 | unsigned int blocksize) | 297 | unsigned int blocksize) |
298 | { | 298 | { |
299 | struct ext4_dir_entry_tail *t = EXT4_DIRENT_TAIL(bh->b_data, blocksize); | ||
300 | |||
299 | memset(t, 0, sizeof(struct ext4_dir_entry_tail)); | 301 | memset(t, 0, sizeof(struct ext4_dir_entry_tail)); |
300 | t->det_rec_len = ext4_rec_len_to_disk( | 302 | t->det_rec_len = ext4_rec_len_to_disk( |
301 | sizeof(struct ext4_dir_entry_tail), blocksize); | 303 | sizeof(struct ext4_dir_entry_tail), blocksize); |
@@ -370,7 +372,7 @@ int ext4_dirblock_csum_verify(struct inode *inode, struct buffer_head *bh) | |||
370 | } | 372 | } |
371 | 373 | ||
372 | if (t->det_checksum != ext4_dirblock_csum(inode, bh->b_data, | 374 | if (t->det_checksum != ext4_dirblock_csum(inode, bh->b_data, |
373 | (char *)t - bh->b_data)) | 375 | (char *)t - bh->b_data)) |
374 | return 0; | 376 | return 0; |
375 | 377 | ||
376 | return 1; | 378 | return 1; |
@@ -391,7 +393,7 @@ static void ext4_dirblock_csum_set(struct inode *inode, | |||
391 | } | 393 | } |
392 | 394 | ||
393 | t->det_checksum = ext4_dirblock_csum(inode, bh->b_data, | 395 | t->det_checksum = ext4_dirblock_csum(inode, bh->b_data, |
394 | (char *)t - bh->b_data); | 396 | (char *)t - bh->b_data); |
395 | } | 397 | } |
396 | 398 | ||
397 | int ext4_handle_dirty_dirblock(handle_t *handle, | 399 | int ext4_handle_dirty_dirblock(handle_t *handle, |
@@ -1813,7 +1815,6 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, | |||
1813 | char *data1 = (*bh)->b_data, *data2; | 1815 | char *data1 = (*bh)->b_data, *data2; |
1814 | unsigned split, move, size; | 1816 | unsigned split, move, size; |
1815 | struct ext4_dir_entry_2 *de = NULL, *de2; | 1817 | struct ext4_dir_entry_2 *de = NULL, *de2; |
1816 | struct ext4_dir_entry_tail *t; | ||
1817 | int csum_size = 0; | 1818 | int csum_size = 0; |
1818 | int err = 0, i; | 1819 | int err = 0, i; |
1819 | 1820 | ||
@@ -1874,11 +1875,8 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir, | |||
1874 | (char *) de2, | 1875 | (char *) de2, |
1875 | blocksize); | 1876 | blocksize); |
1876 | if (csum_size) { | 1877 | if (csum_size) { |
1877 | t = EXT4_DIRENT_TAIL(data2, blocksize); | 1878 | ext4_initialize_dirent_tail(*bh, blocksize); |
1878 | initialize_dirent_tail(t, blocksize); | 1879 | ext4_initialize_dirent_tail(bh2, blocksize); |
1879 | |||
1880 | t = EXT4_DIRENT_TAIL(data1, blocksize); | ||
1881 | initialize_dirent_tail(t, blocksize); | ||
1882 | } | 1880 | } |
1883 | 1881 | ||
1884 | dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1, | 1882 | dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1, |
@@ -2039,8 +2037,7 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname, | |||
2039 | struct dx_frame frames[EXT4_HTREE_LEVEL], *frame; | 2037 | struct dx_frame frames[EXT4_HTREE_LEVEL], *frame; |
2040 | struct dx_entry *entries; | 2038 | struct dx_entry *entries; |
2041 | struct ext4_dir_entry_2 *de, *de2; | 2039 | struct ext4_dir_entry_2 *de, *de2; |
2042 | struct ext4_dir_entry_tail *t; | 2040 | char *data2, *top; |
2043 | char *data1, *top; | ||
2044 | unsigned len; | 2041 | unsigned len; |
2045 | int retval; | 2042 | int retval; |
2046 | unsigned blocksize; | 2043 | unsigned blocksize; |
@@ -2080,21 +2077,18 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname, | |||
2080 | return PTR_ERR(bh2); | 2077 | return PTR_ERR(bh2); |
2081 | } | 2078 | } |
2082 | ext4_set_inode_flag(dir, EXT4_INODE_INDEX); | 2079 | ext4_set_inode_flag(dir, EXT4_INODE_INDEX); |
2083 | data1 = bh2->b_data; | 2080 | data2 = bh2->b_data; |
2084 | 2081 | ||
2085 | memcpy (data1, de, len); | 2082 | memcpy(data2, de, len); |
2086 | de = (struct ext4_dir_entry_2 *) data1; | 2083 | de = (struct ext4_dir_entry_2 *) data2; |
2087 | top = data1 + len; | 2084 | top = data2 + len; |
2088 | while ((char *)(de2 = ext4_next_entry(de, blocksize)) < top) | 2085 | while ((char *)(de2 = ext4_next_entry(de, blocksize)) < top) |
2089 | de = de2; | 2086 | de = de2; |
2090 | de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) - | 2087 | de->rec_len = ext4_rec_len_to_disk(data2 + (blocksize - csum_size) - |
2091 | (char *) de, | 2088 | (char *) de, blocksize); |
2092 | blocksize); | ||
2093 | 2089 | ||
2094 | if (csum_size) { | 2090 | if (csum_size) |
2095 | t = EXT4_DIRENT_TAIL(data1, blocksize); | 2091 | ext4_initialize_dirent_tail(bh2, blocksize); |
2096 | initialize_dirent_tail(t, blocksize); | ||
2097 | } | ||
2098 | 2092 | ||
2099 | /* Initialize the root; the dot dirents already exist */ | 2093 | /* Initialize the root; the dot dirents already exist */ |
2100 | de = (struct ext4_dir_entry_2 *) (&root->dotdot); | 2094 | de = (struct ext4_dir_entry_2 *) (&root->dotdot); |
@@ -2164,7 +2158,6 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, | |||
2164 | struct inode *dir = d_inode(dentry->d_parent); | 2158 | struct inode *dir = d_inode(dentry->d_parent); |
2165 | struct buffer_head *bh = NULL; | 2159 | struct buffer_head *bh = NULL; |
2166 | struct ext4_dir_entry_2 *de; | 2160 | struct ext4_dir_entry_2 *de; |
2167 | struct ext4_dir_entry_tail *t; | ||
2168 | struct super_block *sb; | 2161 | struct super_block *sb; |
2169 | struct ext4_sb_info *sbi; | 2162 | struct ext4_sb_info *sbi; |
2170 | struct ext4_filename fname; | 2163 | struct ext4_filename fname; |
@@ -2249,10 +2242,8 @@ add_to_new_block: | |||
2249 | de->inode = 0; | 2242 | de->inode = 0; |
2250 | de->rec_len = ext4_rec_len_to_disk(blocksize - csum_size, blocksize); | 2243 | de->rec_len = ext4_rec_len_to_disk(blocksize - csum_size, blocksize); |
2251 | 2244 | ||
2252 | if (csum_size) { | 2245 | if (csum_size) |
2253 | t = EXT4_DIRENT_TAIL(bh->b_data, blocksize); | 2246 | ext4_initialize_dirent_tail(bh, blocksize); |
2254 | initialize_dirent_tail(t, blocksize); | ||
2255 | } | ||
2256 | 2247 | ||
2257 | retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh); | 2248 | retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh); |
2258 | out: | 2249 | out: |
@@ -2712,7 +2703,6 @@ static int ext4_init_new_dir(handle_t *handle, struct inode *dir, | |||
2712 | { | 2703 | { |
2713 | struct buffer_head *dir_block = NULL; | 2704 | struct buffer_head *dir_block = NULL; |
2714 | struct ext4_dir_entry_2 *de; | 2705 | struct ext4_dir_entry_2 *de; |
2715 | struct ext4_dir_entry_tail *t; | ||
2716 | ext4_lblk_t block = 0; | 2706 | ext4_lblk_t block = 0; |
2717 | unsigned int blocksize = dir->i_sb->s_blocksize; | 2707 | unsigned int blocksize = dir->i_sb->s_blocksize; |
2718 | int csum_size = 0; | 2708 | int csum_size = 0; |
@@ -2736,10 +2726,8 @@ static int ext4_init_new_dir(handle_t *handle, struct inode *dir, | |||
2736 | de = (struct ext4_dir_entry_2 *)dir_block->b_data; | 2726 | de = (struct ext4_dir_entry_2 *)dir_block->b_data; |
2737 | ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); | 2727 | ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0); |
2738 | set_nlink(inode, 2); | 2728 | set_nlink(inode, 2); |
2739 | if (csum_size) { | 2729 | if (csum_size) |
2740 | t = EXT4_DIRENT_TAIL(dir_block->b_data, blocksize); | 2730 | ext4_initialize_dirent_tail(dir_block, blocksize); |
2741 | initialize_dirent_tail(t, blocksize); | ||
2742 | } | ||
2743 | 2731 | ||
2744 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); | 2732 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); |
2745 | err = ext4_handle_dirty_dirblock(handle, inode, dir_block); | 2733 | err = ext4_handle_dirty_dirblock(handle, inode, dir_block); |