summaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorChao Yu <yuchao0@huawei.com>2016-09-05 12:28:27 +0800
committerJaegeuk Kim <jaegeuk@kernel.org>2016-09-07 18:53:49 -0700
commit7732c26ac3925e2aebfa84e14673240201ddc9de (patch)
tree870a15762ccc2d3169439ff80984891b32bac37d /fs/f2fs
parent6ab2a3085eb3c0ad58fa47f827921d05e9ad2e06 (diff)
downloadlinux-stable-7732c26ac3925e2aebfa84e14673240201ddc9de.tar.gz
linux-stable-7732c26ac3925e2aebfa84e14673240201ddc9de.tar.bz2
linux-stable-7732c26ac3925e2aebfa84e14673240201ddc9de.zip
f2fs: fix to detect temporary name of multimedia file
Some applications may create multimeida file with temporary name like '*.jpg.tmp' or '*.mp4.tmp', then rename to '*.jpg' or '*.mp4'. Now, f2fs can only detect multimedia filename with specified format: "filename + '.' + extension", so it will make f2fs missing to detect multimedia file with special temporary name, result in failing to set cold flag on file. This patch enhances detection flow for enabling lookup extension in the middle of temporary filename. Reported-by: Xue Liu <liuxueliu.liu@huawei.com> Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs')
-rw-r--r--fs/f2fs/namei.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 73fa356f8fbb..bfcd9da9c2eb 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -91,18 +91,23 @@ static int is_multimedia_file(const unsigned char *s, const char *sub)
{
size_t slen = strlen(s);
size_t sublen = strlen(sub);
+ int i;
/*
* filename format of multimedia file should be defined as:
- * "filename + '.' + extension".
+ * "filename + '.' + extension + (optional: '.' + temp extension)".
*/
if (slen < sublen + 2)
return 0;
- if (s[slen - sublen - 1] != '.')
- return 0;
+ for (i = 1; i < slen - sublen; i++) {
+ if (s[i] != '.')
+ continue;
+ if (!strncasecmp(s + i + 1, sub, sublen))
+ return 1;
+ }
- return !strncasecmp(s + slen - sublen, sub, sublen);
+ return 0;
}
/*