Skip to content

Commit

Permalink
f2fs: compress tmp files given extension
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jaegeuk Kim committed Jun 26, 2023
1 parent 6201c47 commit 2724daf
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions fs/f2fs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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)
{
Expand Down Expand Up @@ -148,20 +162,20 @@ 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))
return;

/* 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;
}
Expand Down Expand Up @@ -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);

Expand Down

0 comments on commit 2724daf

Please sign in to comment.