23
23
#include <trace/events/f2fs.h>
24
24
25
25
static inline bool is_extension_exist (const unsigned char * s , const char * sub ,
26
- bool tmp_ext )
26
+ bool tmp_ext , bool tmp_dot )
27
27
{
28
28
size_t slen = strlen (s );
29
29
size_t sublen = strlen (sub );
@@ -49,13 +49,27 @@ static inline bool is_extension_exist(const unsigned char *s, const char *sub,
49
49
for (i = 1 ; i < slen - sublen ; i ++ ) {
50
50
if (s [i ] != '.' )
51
51
continue ;
52
- if (!strncasecmp (s + i + 1 , sub , sublen ))
53
- return true;
52
+ if (!strncasecmp (s + i + 1 , sub , sublen )) {
53
+ if (!tmp_dot )
54
+ return true;
55
+ if (i == slen - sublen - 1 || s [i + 1 + sublen ] == '.' )
56
+ return true;
57
+ }
54
58
}
55
59
56
60
return false;
57
61
}
58
62
63
+ static inline bool is_temperature_extension (const unsigned char * s , const char * sub )
64
+ {
65
+ return is_extension_exist (s , sub , true, false);
66
+ }
67
+
68
+ static inline bool is_compress_extension (const unsigned char * s , const char * sub )
69
+ {
70
+ return is_extension_exist (s , sub , true, true);
71
+ }
72
+
59
73
int f2fs_update_extension_list (struct f2fs_sb_info * sbi , const char * name ,
60
74
bool hot , bool set )
61
75
{
@@ -148,20 +162,20 @@ static void set_compress_new_inode(struct f2fs_sb_info *sbi, struct inode *dir,
148
162
cold_count = le32_to_cpu (sbi -> raw_super -> extension_count );
149
163
hot_count = sbi -> raw_super -> hot_ext_count ;
150
164
for (i = cold_count ; i < cold_count + hot_count ; i ++ )
151
- if (is_extension_exist (name , extlist [i ], false ))
165
+ if (is_temperature_extension (name , extlist [i ]))
152
166
break ;
153
167
f2fs_up_read (& sbi -> sb_lock );
154
168
if (i < (cold_count + hot_count ))
155
169
return ;
156
170
157
171
/* Don't compress unallowed extension. */
158
172
for (i = 0 ; i < noext_cnt ; i ++ )
159
- if (is_extension_exist (name , noext [i ], false ))
173
+ if (is_compress_extension (name , noext [i ]))
160
174
return ;
161
175
162
176
/* Compress wanting extension. */
163
177
for (i = 0 ; i < ext_cnt ; i ++ ) {
164
- if (is_extension_exist (name , ext [i ], false )) {
178
+ if (is_compress_extension (name , ext [i ])) {
165
179
set_compress_context (inode );
166
180
return ;
167
181
}
@@ -189,7 +203,7 @@ static void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
189
203
cold_count = le32_to_cpu (sbi -> raw_super -> extension_count );
190
204
hot_count = sbi -> raw_super -> hot_ext_count ;
191
205
for (i = 0 ; i < cold_count + hot_count ; i ++ )
192
- if (is_extension_exist (name , extlist [i ], true ))
206
+ if (is_temperature_extension (name , extlist [i ]))
193
207
break ;
194
208
f2fs_up_read (& sbi -> sb_lock );
195
209
0 commit comments