f2fs: compress tmp files given extension
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 6 Jun 2023 17:17:47 +0000 (10:17 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 26 Jun 2023 13:21:41 +0000 (06:21 -0700)
Let's compress tmp files for the given extension list.

This patch does not change the previous behavior, but allow the cases as below.

Extention example: "ext"

- abc.ext : allow
- abc.ext.abc : allow
- abc.extm : not allow

Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/namei.c

index 3e35eb7..ff89de1 100644 (file)
@@ -23,7 +23,7 @@
 #include <trace/events/f2fs.h>
 
 static inline bool is_extension_exist(const unsigned char *s, const char *sub,
-                                               bool tmp_ext)
+                                               bool tmp_ext, bool tmp_dot)
 {
        size_t slen = strlen(s);
        size_t sublen = strlen(sub);
@@ -49,13 +49,27 @@ static inline bool is_extension_exist(const unsigned char *s, const char *sub,
        for (i = 1; i < slen - sublen; i++) {
                if (s[i] != '.')
                        continue;
-               if (!strncasecmp(s + i + 1, sub, sublen))
-                       return true;
+               if (!strncasecmp(s + i + 1, sub, sublen)) {
+                       if (!tmp_dot)
+                               return true;
+                       if (i == slen - sublen - 1 || s[i + 1 + sublen] == '.')
+                               return true;
+               }
        }
 
        return false;
 }
 
+static inline bool is_temperature_extension(const unsigned char *s, const char *sub)
+{
+       return is_extension_exist(s, sub, true, false);
+}
+
+static inline bool is_compress_extension(const unsigned char *s, const char *sub)
+{
+       return is_extension_exist(s, sub, true, true);
+}
+
 int f2fs_update_extension_list(struct f2fs_sb_info *sbi, const char *name,
                                                        bool hot, bool set)
 {
@@ -148,7 +162,7 @@ static void set_compress_new_inode(struct f2fs_sb_info *sbi, struct inode *dir,
        cold_count = le32_to_cpu(sbi->raw_super->extension_count);
        hot_count = sbi->raw_super->hot_ext_count;
        for (i = cold_count; i < cold_count + hot_count; i++)
-               if (is_extension_exist(name, extlist[i], false))
+               if (is_temperature_extension(name, extlist[i]))
                        break;
        f2fs_up_read(&sbi->sb_lock);
        if (i < (cold_count + hot_count))
@@ -156,12 +170,12 @@ static void set_compress_new_inode(struct f2fs_sb_info *sbi, struct inode *dir,
 
        /* Don't compress unallowed extension. */
        for (i = 0; i < noext_cnt; i++)
-               if (is_extension_exist(name, noext[i], false))
+               if (is_compress_extension(name, noext[i]))
                        return;
 
        /* Compress wanting extension. */
        for (i = 0; i < ext_cnt; i++) {
-               if (is_extension_exist(name, ext[i], false)) {
+               if (is_compress_extension(name, ext[i])) {
                        set_compress_context(inode);
                        return;
                }
@@ -189,7 +203,7 @@ static void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
        cold_count = le32_to_cpu(sbi->raw_super->extension_count);
        hot_count = sbi->raw_super->hot_ext_count;
        for (i = 0; i < cold_count + hot_count; i++)
-               if (is_extension_exist(name, extlist[i], true))
+               if (is_temperature_extension(name, extlist[i]))
                        break;
        f2fs_up_read(&sbi->sb_lock);