mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
xfs: devirtualize ->m_dirnameops
Instead of causing a relatively expensive indirect call for each hashing and comparism of a file name in a directory just use an inline function and a simple branch on the ASCII CI bit. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> [darrick: fix unused variable warning] Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
537dabcfdb
commit
d8d11fc703
10 changed files with 42 additions and 58 deletions
|
@ -40,6 +40,9 @@ struct xfs_dir3_icfree_hdr {
|
|||
};
|
||||
|
||||
/* xfs_dir2.c */
|
||||
xfs_dahash_t xfs_ascii_ci_hashname(struct xfs_name *name);
|
||||
enum xfs_dacmp xfs_ascii_ci_compname(struct xfs_da_args *args,
|
||||
const unsigned char *name, int len);
|
||||
extern int xfs_dir2_grow_inode(struct xfs_da_args *args, int space,
|
||||
xfs_dir2_db_t *dbp);
|
||||
extern int xfs_dir_cilookup_result(struct xfs_da_args *args,
|
||||
|
@ -191,4 +194,25 @@ xfs_dir2_data_entsize(
|
|||
return round_up(len, XFS_DIR2_DATA_ALIGN);
|
||||
}
|
||||
|
||||
static inline xfs_dahash_t
|
||||
xfs_dir2_hashname(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_name *name)
|
||||
{
|
||||
if (unlikely(xfs_sb_version_hasasciici(&mp->m_sb)))
|
||||
return xfs_ascii_ci_hashname(name);
|
||||
return xfs_da_hashname(name->name, name->len);
|
||||
}
|
||||
|
||||
static inline enum xfs_dacmp
|
||||
xfs_dir2_compname(
|
||||
struct xfs_da_args *args,
|
||||
const unsigned char *name,
|
||||
int len)
|
||||
{
|
||||
if (unlikely(xfs_sb_version_hasasciici(&args->dp->i_mount->m_sb)))
|
||||
return xfs_ascii_ci_compname(args, name, len);
|
||||
return xfs_da_compname(args, name, len);
|
||||
}
|
||||
|
||||
#endif /* __XFS_DIR2_PRIV_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue