summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2019-06-21 16:31:47 -0400
committerTheodore Ts'o <tytso@mit.edu>2019-06-21 16:31:47 -0400
commitddce3b94715ca5a19a107cd7c1d89fea177d2454 (patch)
tree16f8f2eaf0e29fa678f1fbf12a70dd725173425b
parentf036adb39976467cf57f577490269594994f9eb4 (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.h4
-rw-r--r--fs/ext4/inline.c9
-rw-r--r--fs/ext4/namei.c54
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);
3150extern void initialize_dirent_tail(struct ext4_dir_entry_tail *t, 3150extern void ext4_initialize_dirent_tail(struct buffer_head *bh,
3151 unsigned int blocksize); 3151 unsigned int blocksize);
3152extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode, 3152extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode,
3153 struct buffer_head *bh); 3153 struct buffer_head *bh);
3154extern int ext4_ci_compare(const struct inode *parent, 3154extern 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 */
296void initialize_dirent_tail(struct ext4_dir_entry_tail *t, 296void 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
397int ext4_handle_dirty_dirblock(handle_t *handle, 399int 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);
2258out: 2249out:
@@ -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);