return bidx;
 }
 
-static bool early_match_name(const char *name, int namelen,
+static bool early_match_name(const char *name, size_t namelen,
                        f2fs_hash_t namehash, struct f2fs_dir_entry *de)
 {
        if (le16_to_cpu(de->name_len) != namelen)
 }
 
 static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
-                       const char *name, int namelen, int *max_slots,
+                       const char *name, size_t namelen, int *max_slots,
                        f2fs_hash_t namehash, struct page **res_page)
 {
        struct f2fs_dir_entry *de;
 }
 
 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
-               unsigned int level, const char *name, int namelen,
+               unsigned int level, const char *name, size_t namelen,
                        f2fs_hash_t namehash, struct page **res_page)
 {
        int s = GET_DENTRY_SLOTS(namelen);
                        struct qstr *child, struct page **res_page)
 {
        const char *name = child->name;
-       int namelen = child->len;
+       size_t namelen = child->len;
        unsigned long npages = dir_blocks(dir);
        struct f2fs_dir_entry *de = NULL;
        f2fs_hash_t name_hash;
        struct inode *dir = dentry->d_parent->d_inode;
        struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
        const char *name = dentry->d_name.name;
-       int namelen = dentry->d_name.len;
+       size_t namelen = dentry->d_name.len;
        struct page *dentry_page = NULL;
        struct f2fs_dentry_block *dentry_blk = NULL;
        int slots = GET_DENTRY_SLOTS(namelen);
 
        buf[1] += b1;
 }
 
-static void str2hashbuf(const char *msg, int len, unsigned int *buf, int num)
+static void str2hashbuf(const char *msg, size_t len, unsigned int *buf, int num)
 {
        unsigned pad, val;
        int i;
                *buf++ = pad;
 }
 
-f2fs_hash_t f2fs_dentry_hash(const char *name, int len)
+f2fs_hash_t f2fs_dentry_hash(const char *name, size_t len)
 {
        __u32 hash;
        f2fs_hash_t f2fs_hash;
        buf[3] = 0x10325476;
 
        p = name;
-       while (len > 0) {
+       while (1) {
                str2hashbuf(p, len, in, 4);
                TEA_transform(buf, in);
-               len -= 16;
                p += 16;
+               if (len <= 16)
+                       break;
+               len -= 16;
        }
        hash = buf[0];
        f2fs_hash = cpu_to_le32(hash & ~F2FS_HASH_COL_BIT);
 
 
 static int is_multimedia_file(const unsigned char *s, const char *sub)
 {
-       int slen = strlen(s);
-       int sublen = strlen(sub);
+       size_t slen = strlen(s);
+       size_t sublen = strlen(sub);
        int ret;
 
        if (sublen > slen)
        struct super_block *sb = dir->i_sb;
        struct f2fs_sb_info *sbi = F2FS_SB(sb);
        struct inode *inode;
-       unsigned symlen = strlen(symname) + 1;
+       size_t symlen = strlen(symname) + 1;
        int err;
 
        f2fs_balance_fs(sbi);
 
        struct page *page;
        void *base_addr;
        int error = 0, found = 0;
-       int value_len, name_len;
+       size_t value_len, name_len;
 
        if (name == NULL)
                return -EINVAL;
        struct f2fs_xattr_entry *here, *last;
        struct page *page;
        void *base_addr;
-       int error, found, free, name_len, newsize;
+       int error, found, free, newsize;
+       size_t name_len;
        char *pval;
 
        if (name == NULL)