From: Artem Blagodarenko Replace open-coded checks for directory tail entries with a call to ext4_dir_entry_is_tail(). This helper will also be used by upcoming changes. Signed-off-by: Artem Blagodarenko Reviewed-by: Andreas Dilger --- fs/ext4/ext4.h | 16 ++++++++++++++++ fs/ext4/namei.c | 7 +------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 94283a991e5c..01b1222b1454 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -3917,6 +3917,22 @@ static inline void ext4_clear_io_unwritten_flag(ext4_io_end_t *io_end) io_end->flag &= ~EXT4_IO_END_UNWRITTEN; } +/* + * ext4_dir_entry_is_tail() - Check if a directory entry is a tail entry. + * @de: directory entry to check + * + * Returns true if @de is a directory block tail entry (checksum record). + */ +static inline bool ext4_dir_entry_is_tail(struct ext4_dir_entry_2 *de) +{ + struct ext4_dir_entry_tail *t = (struct ext4_dir_entry_tail *)de; + + return !t->det_reserved_zero1 && + le16_to_cpu(t->det_rec_len) == sizeof(*t) && + !t->det_reserved_zero2 && + t->det_reserved_ft == EXT4_FT_DIR_CSUM; +} + extern const struct iomap_ops ext4_iomap_ops; extern const struct iomap_ops ext4_iomap_report_ops; diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 5805001ff1d9..0196d954cba1 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -314,7 +314,6 @@ static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode, struct buffer_head *bh) { struct ext4_dir_entry_tail *t; - int blocksize = EXT4_BLOCK_SIZE(inode->i_sb); #ifdef PARANOID struct ext4_dir_entry_2 *d, *top; @@ -334,11 +333,7 @@ static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode, t = EXT4_DIRENT_TAIL(bh->b_data, EXT4_BLOCK_SIZE(inode->i_sb)); #endif - if (t->det_reserved_zero1 || - (ext4_rec_len_from_disk(t->det_rec_len, blocksize) != - sizeof(struct ext4_dir_entry_tail)) || - t->det_reserved_zero2 || - t->det_reserved_ft != EXT4_FT_DIR_CSUM) + if (!ext4_dir_entry_is_tail((struct ext4_dir_entry_2 *)t)) return NULL; return t; -- 2.43.7