ocfs2: optimize ocfs2_check_dir_entry() with unlikely() annotations
Incad3f00
, ext4_check_dir_entry was modified by adding some unlikely. Ted described it as "This function gets called a lot for large directories, and the answer is almost always 'no, no, there's no problem'. This means using unlikely() is a good thing." ext3 added the similar change in commita4ae309
. So change it accordingly in ocfs2. Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Tao Ma <boyu.mt@taobao.com> Signed-off-by: Joel Becker <jlbec@evilplan.org>
This commit is contained in:
parent
5bc970e803
commit
1dd9ffc827
@ -322,21 +322,23 @@ static int ocfs2_check_dir_entry(struct inode * dir,
|
|||||||
const char *error_msg = NULL;
|
const char *error_msg = NULL;
|
||||||
const int rlen = le16_to_cpu(de->rec_len);
|
const int rlen = le16_to_cpu(de->rec_len);
|
||||||
|
|
||||||
if (rlen < OCFS2_DIR_REC_LEN(1))
|
if (unlikely(rlen < OCFS2_DIR_REC_LEN(1)))
|
||||||
error_msg = "rec_len is smaller than minimal";
|
error_msg = "rec_len is smaller than minimal";
|
||||||
else if (rlen % 4 != 0)
|
else if (unlikely(rlen % 4 != 0))
|
||||||
error_msg = "rec_len % 4 != 0";
|
error_msg = "rec_len % 4 != 0";
|
||||||
else if (rlen < OCFS2_DIR_REC_LEN(de->name_len))
|
else if (unlikely(rlen < OCFS2_DIR_REC_LEN(de->name_len)))
|
||||||
error_msg = "rec_len is too small for name_len";
|
error_msg = "rec_len is too small for name_len";
|
||||||
else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
|
else if (unlikely(
|
||||||
|
((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize))
|
||||||
error_msg = "directory entry across blocks";
|
error_msg = "directory entry across blocks";
|
||||||
|
|
||||||
if (error_msg != NULL)
|
if (unlikely(error_msg != NULL))
|
||||||
mlog(ML_ERROR, "bad entry in directory #%llu: %s - "
|
mlog(ML_ERROR, "bad entry in directory #%llu: %s - "
|
||||||
"offset=%lu, inode=%llu, rec_len=%d, name_len=%d\n",
|
"offset=%lu, inode=%llu, rec_len=%d, name_len=%d\n",
|
||||||
(unsigned long long)OCFS2_I(dir)->ip_blkno, error_msg,
|
(unsigned long long)OCFS2_I(dir)->ip_blkno, error_msg,
|
||||||
offset, (unsigned long long)le64_to_cpu(de->inode), rlen,
|
offset, (unsigned long long)le64_to_cpu(de->inode), rlen,
|
||||||
de->name_len);
|
de->name_len);
|
||||||
|
|
||||||
return error_msg == NULL ? 1 : 0;
|
return error_msg == NULL ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user