Commit 8bad4597 authored by Theodore Ts'o's avatar Theodore Ts'o

ext4: Use unsigned int for blocksize in dx_make_map() and dx_pack_dirents()

Signed-off-by: default avatarWei Yongjun <yjwei@cn.fujitsu.com>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent e187c658
...@@ -161,12 +161,12 @@ static struct dx_frame *dx_probe(const struct qstr *d_name, ...@@ -161,12 +161,12 @@ static struct dx_frame *dx_probe(const struct qstr *d_name,
struct dx_frame *frame, struct dx_frame *frame,
int *err); int *err);
static void dx_release(struct dx_frame *frames); static void dx_release(struct dx_frame *frames);
static int dx_make_map(struct ext4_dir_entry_2 *de, int size, static int dx_make_map(struct ext4_dir_entry_2 *de, unsigned blocksize,
struct dx_hash_info *hinfo, struct dx_map_entry map[]); struct dx_hash_info *hinfo, struct dx_map_entry map[]);
static void dx_sort_map(struct dx_map_entry *map, unsigned count); static void dx_sort_map(struct dx_map_entry *map, unsigned count);
static struct ext4_dir_entry_2 *dx_move_dirents(char *from, char *to, static struct ext4_dir_entry_2 *dx_move_dirents(char *from, char *to,
struct dx_map_entry *offsets, int count); struct dx_map_entry *offsets, int count);
static struct ext4_dir_entry_2* dx_pack_dirents(char *base, int size); static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize);
static void dx_insert_block(struct dx_frame *frame, static void dx_insert_block(struct dx_frame *frame,
u32 hash, ext4_lblk_t block); u32 hash, ext4_lblk_t block);
static int ext4_htree_next_block(struct inode *dir, __u32 hash, static int ext4_htree_next_block(struct inode *dir, __u32 hash,
...@@ -713,15 +713,15 @@ errout: ...@@ -713,15 +713,15 @@ errout:
* Create map of hash values, offsets, and sizes, stored at end of block. * Create map of hash values, offsets, and sizes, stored at end of block.
* Returns number of entries mapped. * Returns number of entries mapped.
*/ */
static int dx_make_map (struct ext4_dir_entry_2 *de, int size, static int dx_make_map(struct ext4_dir_entry_2 *de, unsigned blocksize,
struct dx_hash_info *hinfo, struct dx_map_entry *map_tail) struct dx_hash_info *hinfo,
struct dx_map_entry *map_tail)
{ {
int count = 0; int count = 0;
char *base = (char *) de; char *base = (char *) de;
struct dx_hash_info h = *hinfo; struct dx_hash_info h = *hinfo;
while ((char *) de < base + size) while ((char *) de < base + blocksize) {
{
if (de->name_len && de->inode) { if (de->name_len && de->inode) {
ext4fs_dirhash(de->name, de->name_len, &h); ext4fs_dirhash(de->name, de->name_len, &h);
map_tail--; map_tail--;
...@@ -1130,13 +1130,13 @@ dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count) ...@@ -1130,13 +1130,13 @@ dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count)
* Compact each dir entry in the range to the minimal rec_len. * Compact each dir entry in the range to the minimal rec_len.
* Returns pointer to last entry in range. * Returns pointer to last entry in range.
*/ */
static struct ext4_dir_entry_2* dx_pack_dirents(char *base, int size) static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
{ {
struct ext4_dir_entry_2 *next, *to, *prev, *de = (struct ext4_dir_entry_2 *) base; struct ext4_dir_entry_2 *next, *to, *prev, *de = (struct ext4_dir_entry_2 *) base;
unsigned rec_len = 0; unsigned rec_len = 0;
prev = to = de; prev = to = de;
while ((char*)de < base + size) { while ((char*)de < base + blocksize) {
next = ext4_next_entry(de); next = ext4_next_entry(de);
if (de->inode && de->name_len) { if (de->inode && de->name_len) {
rec_len = EXT4_DIR_REC_LEN(de->name_len); rec_len = EXT4_DIR_REC_LEN(de->name_len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment