hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/f2fs/namei.c
....@@ -28,6 +28,7 @@
2828 nid_t ino;
2929 struct inode *inode;
3030 bool nid_free = false;
31
+ bool encrypt = false;
3132 int xattr_size = 0;
3233 int err;
3334
....@@ -69,13 +70,17 @@
6970 F2FS_I(inode)->i_projid = make_kprojid(&init_user_ns,
7071 F2FS_DEF_PROJID);
7172
73
+ err = fscrypt_prepare_new_inode(dir, inode, &encrypt);
74
+ if (err)
75
+ goto fail_drop;
76
+
7277 err = dquot_initialize(inode);
7378 if (err)
7479 goto fail_drop;
7580
7681 set_inode_flag(inode, FI_NEW_INODE);
7782
78
- if (f2fs_may_encrypt(dir, inode))
83
+ if (encrypt)
7984 f2fs_set_encrypted_inode(inode);
8085
8186 if (f2fs_sb_has_extra_attr(sbi)) {
....@@ -86,8 +91,6 @@
8691 if (test_opt(sbi, INLINE_XATTR))
8792 set_inode_flag(inode, FI_INLINE_XATTR);
8893
89
- if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode))
90
- set_inode_flag(inode, FI_INLINE_DATA);
9194 if (f2fs_may_inline_dentry(inode))
9295 set_inode_flag(inode, FI_INLINE_DENTRY);
9396
....@@ -101,12 +104,6 @@
101104 xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
102105 }
103106 F2FS_I(inode)->i_inline_xattr_size = xattr_size;
104
-
105
- f2fs_init_extent_tree(inode, NULL);
106
-
107
- stat_inc_inline_xattr(inode);
108
- stat_inc_inline_inode(inode);
109
- stat_inc_inline_dir(inode);
110107
111108 F2FS_I(inode)->i_flags =
112109 f2fs_mask_flags(mode, F2FS_I(dir)->i_flags & F2FS_FL_INHERITED);
....@@ -124,7 +121,17 @@
124121 set_compress_context(inode);
125122 }
126123
124
+ /* Should enable inline_data after compression set */
125
+ if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode))
126
+ set_inode_flag(inode, FI_INLINE_DATA);
127
+
128
+ stat_inc_inline_xattr(inode);
129
+ stat_inc_inline_inode(inode);
130
+ stat_inc_inline_dir(inode);
131
+
127132 f2fs_set_inode_flags(inode);
133
+
134
+ f2fs_init_extent_tree(inode);
128135
129136 trace_f2fs_new_inode(inode, 0);
130137 return inode;
....@@ -148,7 +155,8 @@
148155 return ERR_PTR(err);
149156 }
150157
151
-static inline int is_extension_exist(const unsigned char *s, const char *sub)
158
+static inline int is_extension_exist(const unsigned char *s, const char *sub,
159
+ bool tmp_ext)
152160 {
153161 size_t slen = strlen(s);
154162 size_t sublen = strlen(sub);
....@@ -163,6 +171,13 @@
163171 */
164172 if (slen < sublen + 2)
165173 return 0;
174
+
175
+ if (!tmp_ext) {
176
+ /* file has no temp extension */
177
+ if (s[slen - sublen - 1] != '.')
178
+ return 0;
179
+ return !strncasecmp(s + slen - sublen, sub, sublen);
180
+ }
166181
167182 for (i = 1; i < slen - sublen; i++) {
168183 if (s[i] != '.')
....@@ -183,17 +198,17 @@
183198 __u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
184199 int i, cold_count, hot_count;
185200
186
- down_read(&sbi->sb_lock);
201
+ f2fs_down_read(&sbi->sb_lock);
187202
188203 cold_count = le32_to_cpu(sbi->raw_super->extension_count);
189204 hot_count = sbi->raw_super->hot_ext_count;
190205
191206 for (i = 0; i < cold_count + hot_count; i++) {
192
- if (is_extension_exist(name, extlist[i]))
207
+ if (is_extension_exist(name, extlist[i], true))
193208 break;
194209 }
195210
196
- up_read(&sbi->sb_lock);
211
+ f2fs_up_read(&sbi->sb_lock);
197212
198213 if (i == cold_count + hot_count)
199214 return;
....@@ -284,26 +299,29 @@
284299 !f2fs_may_compress(inode))
285300 return;
286301
287
- down_read(&sbi->sb_lock);
302
+ f2fs_down_read(&sbi->sb_lock);
288303
289304 cold_count = le32_to_cpu(sbi->raw_super->extension_count);
290305 hot_count = sbi->raw_super->hot_ext_count;
291306
292307 for (i = cold_count; i < cold_count + hot_count; i++) {
293
- if (is_extension_exist(name, extlist[i])) {
294
- up_read(&sbi->sb_lock);
308
+ if (is_extension_exist(name, extlist[i], false)) {
309
+ f2fs_up_read(&sbi->sb_lock);
295310 return;
296311 }
297312 }
298313
299
- up_read(&sbi->sb_lock);
314
+ f2fs_up_read(&sbi->sb_lock);
300315
301316 ext = F2FS_OPTION(sbi).extensions;
302317
303318 for (i = 0; i < ext_cnt; i++) {
304
- if (!is_extension_exist(name, ext[i]))
319
+ if (!is_extension_exist(name, ext[i], false))
305320 continue;
306321
322
+ /* Do not use inline_data with compression */
323
+ stat_dec_inline_inode(inode);
324
+ clear_inode_flag(inode, FI_INLINE_DATA);
307325 set_compress_context(inode);
308326 return;
309327 }
....@@ -414,6 +432,7 @@
414432 struct qstr dotdot = QSTR_INIT("..", 2);
415433 struct page *page;
416434 unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot, &page);
435
+
417436 if (!ino) {
418437 if (IS_ERR(page))
419438 return ERR_CAST(page);
....@@ -492,7 +511,7 @@
492511 }
493512
494513 err = f2fs_prepare_lookup(dir, dentry, &fname);
495
- generic_set_encrypted_ci_d_ops(dir, dentry);
514
+ generic_set_encrypted_ci_d_ops(dentry);
496515 if (err == -ENOENT)
497516 goto out_splice;
498517 if (err)
....@@ -570,15 +589,17 @@
570589
571590 trace_f2fs_unlink_enter(dir, dentry);
572591
573
- if (unlikely(f2fs_cp_error(sbi)))
574
- return -EIO;
592
+ if (unlikely(f2fs_cp_error(sbi))) {
593
+ err = -EIO;
594
+ goto fail;
595
+ }
575596
576597 err = dquot_initialize(dir);
577598 if (err)
578
- return err;
599
+ goto fail;
579600 err = dquot_initialize(inode);
580601 if (err)
581
- return err;
602
+ goto fail;
582603
583604 de = f2fs_find_entry(dir, &dentry->d_name, &page);
584605 if (!de) {
....@@ -597,18 +618,18 @@
597618 goto fail;
598619 }
599620 f2fs_delete_entry(de, page, dir, inode);
621
+ f2fs_unlock_op(sbi);
622
+
600623 #ifdef CONFIG_UNICODE
601624 /* VFS negative dentries are incompatible with Encoding and
602625 * Case-insensitiveness. Eventually we'll want avoid
603626 * invalidating the dentries here, alongside with returning the
604
- * negative dentries at f2fs_lookup(), when it is better
627
+ * negative dentries at f2fs_lookup(), when it is better
605628 * supported by the VFS for the CI case.
606629 */
607630 if (IS_CASEFOLDED(dir))
608631 d_invalidate(dentry);
609632 #endif
610
- f2fs_unlock_op(sbi);
611
-
612633 if (IS_DIRSYNC(dir))
613634 f2fs_sync_fs(sbi->sb, 1);
614635 fail:
....@@ -621,6 +642,7 @@
621642 struct delayed_call *done)
622643 {
623644 const char *link = page_get_link(dentry, inode, done);
645
+
624646 if (!IS_ERR(link) && !*link) {
625647 /* this is broken symlink case */
626648 do_delayed_call(done);
....@@ -706,7 +728,7 @@
706728 f2fs_handle_failed_inode(inode);
707729 out_free_encrypted_link:
708730 if (disk_link.name != (unsigned char *)symname)
709
- kvfree(disk_link.name);
731
+ kfree(disk_link.name);
710732 return err;
711733 }
712734
....@@ -758,6 +780,7 @@
758780 static int f2fs_rmdir(struct inode *dir, struct dentry *dentry)
759781 {
760782 struct inode *inode = d_inode(dentry);
783
+
761784 if (f2fs_empty_dir(inode))
762785 return f2fs_unlink(dir, dentry);
763786 return -ENOTEMPTY;
....@@ -994,11 +1017,11 @@
9941017 new_page = NULL;
9951018
9961019 new_inode->i_ctime = current_time(new_inode);
997
- down_write(&F2FS_I(new_inode)->i_sem);
1020
+ f2fs_down_write(&F2FS_I(new_inode)->i_sem);
9981021 if (old_dir_entry)
9991022 f2fs_i_links_write(new_inode, false);
10001023 f2fs_i_links_write(new_inode, false);
1001
- up_write(&F2FS_I(new_inode)->i_sem);
1024
+ f2fs_up_write(&F2FS_I(new_inode)->i_sem);
10021025
10031026 if (!new_inode->i_nlink)
10041027 f2fs_add_orphan_inode(new_inode);
....@@ -1019,13 +1042,13 @@
10191042 f2fs_i_links_write(new_dir, true);
10201043 }
10211044
1022
- down_write(&F2FS_I(old_inode)->i_sem);
1045
+ f2fs_down_write(&F2FS_I(old_inode)->i_sem);
10231046 if (!old_dir_entry || whiteout)
10241047 file_lost_pino(old_inode);
10251048 else
10261049 /* adjust dir's i_pino to pass fsck check */
10271050 f2fs_i_pino_write(old_inode, new_dir->i_ino);
1028
- up_write(&F2FS_I(old_inode)->i_sem);
1051
+ f2fs_up_write(&F2FS_I(old_inode)->i_sem);
10291052
10301053 old_inode->i_ctime = current_time(old_inode);
10311054 f2fs_mark_inode_dirty_sync(old_inode, false);
....@@ -1185,38 +1208,38 @@
11851208 /* update directory entry info of old dir inode */
11861209 f2fs_set_link(old_dir, old_entry, old_page, new_inode);
11871210
1188
- down_write(&F2FS_I(old_inode)->i_sem);
1211
+ f2fs_down_write(&F2FS_I(old_inode)->i_sem);
11891212 if (!old_dir_entry)
11901213 file_lost_pino(old_inode);
11911214 else
11921215 /* adjust dir's i_pino to pass fsck check */
11931216 f2fs_i_pino_write(old_inode, new_dir->i_ino);
1194
- up_write(&F2FS_I(old_inode)->i_sem);
1217
+ f2fs_up_write(&F2FS_I(old_inode)->i_sem);
11951218
11961219 old_dir->i_ctime = current_time(old_dir);
11971220 if (old_nlink) {
1198
- down_write(&F2FS_I(old_dir)->i_sem);
1221
+ f2fs_down_write(&F2FS_I(old_dir)->i_sem);
11991222 f2fs_i_links_write(old_dir, old_nlink > 0);
1200
- up_write(&F2FS_I(old_dir)->i_sem);
1223
+ f2fs_up_write(&F2FS_I(old_dir)->i_sem);
12011224 }
12021225 f2fs_mark_inode_dirty_sync(old_dir, false);
12031226
12041227 /* update directory entry info of new dir inode */
12051228 f2fs_set_link(new_dir, new_entry, new_page, old_inode);
12061229
1207
- down_write(&F2FS_I(new_inode)->i_sem);
1230
+ f2fs_down_write(&F2FS_I(new_inode)->i_sem);
12081231 if (!new_dir_entry)
12091232 file_lost_pino(new_inode);
12101233 else
12111234 /* adjust dir's i_pino to pass fsck check */
12121235 f2fs_i_pino_write(new_inode, old_dir->i_ino);
1213
- up_write(&F2FS_I(new_inode)->i_sem);
1236
+ f2fs_up_write(&F2FS_I(new_inode)->i_sem);
12141237
12151238 new_dir->i_ctime = current_time(new_dir);
12161239 if (new_nlink) {
1217
- down_write(&F2FS_I(new_dir)->i_sem);
1240
+ f2fs_down_write(&F2FS_I(new_dir)->i_sem);
12181241 f2fs_i_links_write(new_dir, new_nlink > 0);
1219
- up_write(&F2FS_I(new_dir)->i_sem);
1242
+ f2fs_up_write(&F2FS_I(new_dir)->i_sem);
12201243 }
12211244 f2fs_mark_inode_dirty_sync(new_dir, false);
12221245
....@@ -1303,7 +1326,7 @@
13031326 }
13041327
13051328 const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
1306
- .get_link = f2fs_encrypted_get_link,
1329
+ .get_link = f2fs_encrypted_get_link,
13071330 .getattr = f2fs_encrypted_symlink_getattr,
13081331 .setattr = f2fs_setattr,
13091332 .listxattr = f2fs_listxattr,
....@@ -1329,7 +1352,7 @@
13291352 };
13301353
13311354 const struct inode_operations f2fs_symlink_inode_operations = {
1332
- .get_link = f2fs_get_link,
1355
+ .get_link = f2fs_get_link,
13331356 .getattr = f2fs_getattr,
13341357 .setattr = f2fs_setattr,
13351358 .listxattr = f2fs_listxattr,
....@@ -1337,7 +1360,7 @@
13371360
13381361 const struct inode_operations f2fs_special_inode_operations = {
13391362 .getattr = f2fs_getattr,
1340
- .setattr = f2fs_setattr,
1363
+ .setattr = f2fs_setattr,
13411364 .get_acl = f2fs_get_acl,
13421365 .set_acl = f2fs_set_acl,
13431366 .listxattr = f2fs_listxattr,