]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/f2fs/namei.c
Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[karo-tx-linux.git] / fs / f2fs / namei.c
index fdbae21ee8fb2ca991c2e37e35b9fdc505eb291a..a680bf38e4f0a70b71a9c2a4d0f376895c8b5e61 100644 (file)
@@ -53,7 +53,7 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
        if (err) {
                err = -EINVAL;
                nid_free = true;
-               goto out;
+               goto fail;
        }
 
        /* If the directory encrypted, then we should encrypt the inode. */
@@ -65,6 +65,9 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
        if (f2fs_may_inline_dentry(inode))
                set_inode_flag(F2FS_I(inode), FI_INLINE_DENTRY);
 
+       f2fs_init_extent_tree(inode, NULL);
+
+       stat_inc_inline_xattr(inode);
        stat_inc_inline_inode(inode);
        stat_inc_inline_dir(inode);
 
@@ -72,15 +75,12 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
        mark_inode_dirty(inode);
        return inode;
 
-out:
-       clear_nlink(inode);
-       unlock_new_inode(inode);
 fail:
        trace_f2fs_new_inode(inode, err);
        make_bad_inode(inode);
-       iput(inode);
        if (nid_free)
-               alloc_nid_failed(sbi, ino);
+               set_inode_flag(F2FS_I(inode), FI_FREE_NID);
+       iput(inode);
        return ERR_PTR(err);
 }
 
@@ -89,7 +89,14 @@ static int is_multimedia_file(const unsigned char *s, const char *sub)
        size_t slen = strlen(s);
        size_t sublen = strlen(sub);
 
-       if (sublen > slen)
+       /*
+        * filename format of multimedia file should be defined as:
+        * "filename + '.' + extension".
+        */
+       if (slen < sublen + 2)
+               return 0;
+
+       if (s[slen - sublen - 1] != '.')
                return 0;
 
        return !strncasecmp(s + slen - sublen, sub, sublen);