namei.c (5298d4bfe80f6ae6ae2777bcd1357b0022d98573) | namei.c (e4544b63a7ee49e7fbebf35ece0a6acd3b9617ae) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/namei.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 182 unchanged lines hidden (view full) --- 191 * Set file's temperature for hot/cold data separation 192 */ 193static inline void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode, 194 const unsigned char *name) 195{ 196 __u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list; 197 int i, cold_count, hot_count; 198 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/namei.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 182 unchanged lines hidden (view full) --- 191 * Set file's temperature for hot/cold data separation 192 */ 193static inline void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode, 194 const unsigned char *name) 195{ 196 __u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list; 197 int i, cold_count, hot_count; 198 |
199 down_read(&sbi->sb_lock); | 199 f2fs_down_read(&sbi->sb_lock); |
200 201 cold_count = le32_to_cpu(sbi->raw_super->extension_count); 202 hot_count = sbi->raw_super->hot_ext_count; 203 204 for (i = 0; i < cold_count + hot_count; i++) { 205 if (is_extension_exist(name, extlist[i], true)) 206 break; 207 } 208 | 200 201 cold_count = le32_to_cpu(sbi->raw_super->extension_count); 202 hot_count = sbi->raw_super->hot_ext_count; 203 204 for (i = 0; i < cold_count + hot_count; i++) { 205 if (is_extension_exist(name, extlist[i], true)) 206 break; 207 } 208 |
209 up_read(&sbi->sb_lock); | 209 f2fs_up_read(&sbi->sb_lock); |
210 211 if (i == cold_count + hot_count) 212 return; 213 214 if (i < cold_count) 215 file_set_cold(inode); 216 else 217 file_set_hot(inode); --- 76 unchanged lines hidden (view full) --- 294 int i, cold_count, hot_count; 295 296 if (!f2fs_sb_has_compression(sbi) || 297 F2FS_I(inode)->i_flags & F2FS_NOCOMP_FL || 298 !f2fs_may_compress(inode) || 299 (!ext_cnt && !noext_cnt)) 300 return; 301 | 210 211 if (i == cold_count + hot_count) 212 return; 213 214 if (i < cold_count) 215 file_set_cold(inode); 216 else 217 file_set_hot(inode); --- 76 unchanged lines hidden (view full) --- 294 int i, cold_count, hot_count; 295 296 if (!f2fs_sb_has_compression(sbi) || 297 F2FS_I(inode)->i_flags & F2FS_NOCOMP_FL || 298 !f2fs_may_compress(inode) || 299 (!ext_cnt && !noext_cnt)) 300 return; 301 |
302 down_read(&sbi->sb_lock); | 302 f2fs_down_read(&sbi->sb_lock); |
303 304 cold_count = le32_to_cpu(sbi->raw_super->extension_count); 305 hot_count = sbi->raw_super->hot_ext_count; 306 307 for (i = cold_count; i < cold_count + hot_count; i++) { 308 if (is_extension_exist(name, extlist[i], false)) { | 303 304 cold_count = le32_to_cpu(sbi->raw_super->extension_count); 305 hot_count = sbi->raw_super->hot_ext_count; 306 307 for (i = cold_count; i < cold_count + hot_count; i++) { 308 if (is_extension_exist(name, extlist[i], false)) { |
309 up_read(&sbi->sb_lock); | 309 f2fs_up_read(&sbi->sb_lock); |
310 return; 311 } 312 } 313 | 310 return; 311 } 312 } 313 |
314 up_read(&sbi->sb_lock); | 314 f2fs_up_read(&sbi->sb_lock); |
315 316 for (i = 0; i < noext_cnt; i++) { 317 if (is_extension_exist(name, noext[i], false)) { 318 f2fs_disable_compressed_file(inode); 319 return; 320 } 321 } 322 --- 233 unchanged lines hidden (view full) --- 556 (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) && 557 !fscrypt_has_permitted_context(dir, inode)) { 558 f2fs_warn(F2FS_I_SB(inode), "Inconsistent encryption contexts: %lu/%lu", 559 dir->i_ino, inode->i_ino); 560 err = -EPERM; 561 goto out_iput; 562 } 563out_splice: | 315 316 for (i = 0; i < noext_cnt; i++) { 317 if (is_extension_exist(name, noext[i], false)) { 318 f2fs_disable_compressed_file(inode); 319 return; 320 } 321 } 322 --- 233 unchanged lines hidden (view full) --- 556 (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) && 557 !fscrypt_has_permitted_context(dir, inode)) { 558 f2fs_warn(F2FS_I_SB(inode), "Inconsistent encryption contexts: %lu/%lu", 559 dir->i_ino, inode->i_ino); 560 err = -EPERM; 561 goto out_iput; 562 } 563out_splice: |
564#if IS_ENABLED(CONFIG_UNICODE) | 564#ifdef CONFIG_UNICODE |
565 if (!inode && IS_CASEFOLDED(dir)) { 566 /* Eventually we want to call d_add_ci(dentry, NULL) 567 * for negative dentries in the encoding case as 568 * well. For now, prevent the negative dentry 569 * from being cached. 570 */ 571 trace_f2fs_lookup_end(dir, dentry, ino, err); 572 return NULL; --- 44 unchanged lines hidden (view full) --- 617 f2fs_lock_op(sbi); 618 err = f2fs_acquire_orphan_inode(sbi); 619 if (err) { 620 f2fs_unlock_op(sbi); 621 f2fs_put_page(page, 0); 622 goto fail; 623 } 624 f2fs_delete_entry(de, page, dir, inode); | 565 if (!inode && IS_CASEFOLDED(dir)) { 566 /* Eventually we want to call d_add_ci(dentry, NULL) 567 * for negative dentries in the encoding case as 568 * well. For now, prevent the negative dentry 569 * from being cached. 570 */ 571 trace_f2fs_lookup_end(dir, dentry, ino, err); 572 return NULL; --- 44 unchanged lines hidden (view full) --- 617 f2fs_lock_op(sbi); 618 err = f2fs_acquire_orphan_inode(sbi); 619 if (err) { 620 f2fs_unlock_op(sbi); 621 f2fs_put_page(page, 0); 622 goto fail; 623 } 624 f2fs_delete_entry(de, page, dir, inode); |
625#if IS_ENABLED(CONFIG_UNICODE) | 625#ifdef CONFIG_UNICODE |
626 /* VFS negative dentries are incompatible with Encoding and 627 * Case-insensitiveness. Eventually we'll want avoid 628 * invalidating the dentries here, alongside with returning the 629 * negative dentries at f2fs_lookup(), when it is better 630 * supported by the VFS for the CI case. 631 */ 632 if (IS_CASEFOLDED(dir)) 633 d_invalidate(dentry); --- 384 unchanged lines hidden (view full) --- 1018 err = f2fs_acquire_orphan_inode(sbi); 1019 if (err) 1020 goto put_out_dir; 1021 1022 f2fs_set_link(new_dir, new_entry, new_page, old_inode); 1023 new_page = NULL; 1024 1025 new_inode->i_ctime = current_time(new_inode); | 626 /* VFS negative dentries are incompatible with Encoding and 627 * Case-insensitiveness. Eventually we'll want avoid 628 * invalidating the dentries here, alongside with returning the 629 * negative dentries at f2fs_lookup(), when it is better 630 * supported by the VFS for the CI case. 631 */ 632 if (IS_CASEFOLDED(dir)) 633 d_invalidate(dentry); --- 384 unchanged lines hidden (view full) --- 1018 err = f2fs_acquire_orphan_inode(sbi); 1019 if (err) 1020 goto put_out_dir; 1021 1022 f2fs_set_link(new_dir, new_entry, new_page, old_inode); 1023 new_page = NULL; 1024 1025 new_inode->i_ctime = current_time(new_inode); |
1026 down_write(&F2FS_I(new_inode)->i_sem); | 1026 f2fs_down_write(&F2FS_I(new_inode)->i_sem); |
1027 if (old_dir_entry) 1028 f2fs_i_links_write(new_inode, false); 1029 f2fs_i_links_write(new_inode, false); | 1027 if (old_dir_entry) 1028 f2fs_i_links_write(new_inode, false); 1029 f2fs_i_links_write(new_inode, false); |
1030 up_write(&F2FS_I(new_inode)->i_sem); | 1030 f2fs_up_write(&F2FS_I(new_inode)->i_sem); |
1031 1032 if (!new_inode->i_nlink) 1033 f2fs_add_orphan_inode(new_inode); 1034 else 1035 f2fs_release_orphan_inode(sbi); 1036 } else { 1037 f2fs_balance_fs(sbi, true); 1038 --- 4 unchanged lines hidden (view full) --- 1043 f2fs_unlock_op(sbi); 1044 goto out_dir; 1045 } 1046 1047 if (old_dir_entry) 1048 f2fs_i_links_write(new_dir, true); 1049 } 1050 | 1031 1032 if (!new_inode->i_nlink) 1033 f2fs_add_orphan_inode(new_inode); 1034 else 1035 f2fs_release_orphan_inode(sbi); 1036 } else { 1037 f2fs_balance_fs(sbi, true); 1038 --- 4 unchanged lines hidden (view full) --- 1043 f2fs_unlock_op(sbi); 1044 goto out_dir; 1045 } 1046 1047 if (old_dir_entry) 1048 f2fs_i_links_write(new_dir, true); 1049 } 1050 |
1051 down_write(&F2FS_I(old_inode)->i_sem); | 1051 f2fs_down_write(&F2FS_I(old_inode)->i_sem); |
1052 if (!old_dir_entry || whiteout) 1053 file_lost_pino(old_inode); 1054 else 1055 /* adjust dir's i_pino to pass fsck check */ 1056 f2fs_i_pino_write(old_inode, new_dir->i_ino); | 1052 if (!old_dir_entry || whiteout) 1053 file_lost_pino(old_inode); 1054 else 1055 /* adjust dir's i_pino to pass fsck check */ 1056 f2fs_i_pino_write(old_inode, new_dir->i_ino); |
1057 up_write(&F2FS_I(old_inode)->i_sem); | 1057 f2fs_up_write(&F2FS_I(old_inode)->i_sem); |
1058 1059 old_inode->i_ctime = current_time(old_inode); 1060 f2fs_mark_inode_dirty_sync(old_inode, false); 1061 1062 f2fs_delete_entry(old_entry, old_page, old_dir, NULL); 1063 old_page = NULL; 1064 1065 if (whiteout) { --- 143 unchanged lines hidden (view full) --- 1209 1210 /* update ".." directory entry info of new dentry */ 1211 if (new_dir_entry) 1212 f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir); 1213 1214 /* update directory entry info of old dir inode */ 1215 f2fs_set_link(old_dir, old_entry, old_page, new_inode); 1216 | 1058 1059 old_inode->i_ctime = current_time(old_inode); 1060 f2fs_mark_inode_dirty_sync(old_inode, false); 1061 1062 f2fs_delete_entry(old_entry, old_page, old_dir, NULL); 1063 old_page = NULL; 1064 1065 if (whiteout) { --- 143 unchanged lines hidden (view full) --- 1209 1210 /* update ".." directory entry info of new dentry */ 1211 if (new_dir_entry) 1212 f2fs_set_link(new_inode, new_dir_entry, new_dir_page, old_dir); 1213 1214 /* update directory entry info of old dir inode */ 1215 f2fs_set_link(old_dir, old_entry, old_page, new_inode); 1216 |
1217 down_write(&F2FS_I(old_inode)->i_sem); | 1217 f2fs_down_write(&F2FS_I(old_inode)->i_sem); |
1218 if (!old_dir_entry) 1219 file_lost_pino(old_inode); 1220 else 1221 /* adjust dir's i_pino to pass fsck check */ 1222 f2fs_i_pino_write(old_inode, new_dir->i_ino); | 1218 if (!old_dir_entry) 1219 file_lost_pino(old_inode); 1220 else 1221 /* adjust dir's i_pino to pass fsck check */ 1222 f2fs_i_pino_write(old_inode, new_dir->i_ino); |
1223 up_write(&F2FS_I(old_inode)->i_sem); | 1223 f2fs_up_write(&F2FS_I(old_inode)->i_sem); |
1224 1225 old_dir->i_ctime = current_time(old_dir); 1226 if (old_nlink) { | 1224 1225 old_dir->i_ctime = current_time(old_dir); 1226 if (old_nlink) { |
1227 down_write(&F2FS_I(old_dir)->i_sem); | 1227 f2fs_down_write(&F2FS_I(old_dir)->i_sem); |
1228 f2fs_i_links_write(old_dir, old_nlink > 0); | 1228 f2fs_i_links_write(old_dir, old_nlink > 0); |
1229 up_write(&F2FS_I(old_dir)->i_sem); | 1229 f2fs_up_write(&F2FS_I(old_dir)->i_sem); |
1230 } 1231 f2fs_mark_inode_dirty_sync(old_dir, false); 1232 1233 /* update directory entry info of new dir inode */ 1234 f2fs_set_link(new_dir, new_entry, new_page, old_inode); 1235 | 1230 } 1231 f2fs_mark_inode_dirty_sync(old_dir, false); 1232 1233 /* update directory entry info of new dir inode */ 1234 f2fs_set_link(new_dir, new_entry, new_page, old_inode); 1235 |
1236 down_write(&F2FS_I(new_inode)->i_sem); | 1236 f2fs_down_write(&F2FS_I(new_inode)->i_sem); |
1237 if (!new_dir_entry) 1238 file_lost_pino(new_inode); 1239 else 1240 /* adjust dir's i_pino to pass fsck check */ 1241 f2fs_i_pino_write(new_inode, old_dir->i_ino); | 1237 if (!new_dir_entry) 1238 file_lost_pino(new_inode); 1239 else 1240 /* adjust dir's i_pino to pass fsck check */ 1241 f2fs_i_pino_write(new_inode, old_dir->i_ino); |
1242 up_write(&F2FS_I(new_inode)->i_sem); | 1242 f2fs_up_write(&F2FS_I(new_inode)->i_sem); |
1243 1244 new_dir->i_ctime = current_time(new_dir); 1245 if (new_nlink) { | 1243 1244 new_dir->i_ctime = current_time(new_dir); 1245 if (new_nlink) { |
1246 down_write(&F2FS_I(new_dir)->i_sem); | 1246 f2fs_down_write(&F2FS_I(new_dir)->i_sem); |
1247 f2fs_i_links_write(new_dir, new_nlink > 0); | 1247 f2fs_i_links_write(new_dir, new_nlink > 0); |
1248 up_write(&F2FS_I(new_dir)->i_sem); | 1248 f2fs_up_write(&F2FS_I(new_dir)->i_sem); |
1249 } 1250 f2fs_mark_inode_dirty_sync(new_dir, false); 1251 1252 if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) { 1253 f2fs_add_ino_entry(sbi, old_dir->i_ino, TRANS_DIR_INO); 1254 f2fs_add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO); 1255 } 1256 --- 121 unchanged lines hidden --- | 1249 } 1250 f2fs_mark_inode_dirty_sync(new_dir, false); 1251 1252 if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) { 1253 f2fs_add_ino_entry(sbi, old_dir->i_ino, TRANS_DIR_INO); 1254 f2fs_add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO); 1255 } 1256 --- 121 unchanged lines hidden --- |