1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
9 #include <linux/f2fs_fs.h>
10 #include <linux/pagemap.h>
11 #include <linux/sched.h>
12 #include <linux/ctype.h>
13 #include <linux/random.h>
14 #include <linux/dcache.h>
15 #include <linux/namei.h>
16 #include <linux/quotaops.h>
23 #include <trace/events/f2fs.h>
25 static inline bool is_extension_exist(const unsigned char *s
, const char *sub
,
26 bool tmp_ext
, bool tmp_dot
)
28 size_t slen
= strlen(s
);
29 size_t sublen
= strlen(sub
);
32 if (sublen
== 1 && *sub
== '*')
36 * filename format of multimedia file should be defined as:
37 * "filename + '.' + extension + (optional: '.' + temp extension)".
39 if (slen
< sublen
+ 2)
43 /* file has no temp extension */
44 if (s
[slen
- sublen
- 1] != '.')
46 return !strncasecmp(s
+ slen
- sublen
, sub
, sublen
);
49 for (i
= 1; i
< slen
- sublen
; i
++) {
52 if (!strncasecmp(s
+ i
+ 1, sub
, sublen
)) {
55 if (i
== slen
- sublen
- 1 || s
[i
+ 1 + sublen
] == '.')
63 static inline bool is_temperature_extension(const unsigned char *s
, const char *sub
)
65 return is_extension_exist(s
, sub
, true, false);
68 static inline bool is_compress_extension(const unsigned char *s
, const char *sub
)
70 return is_extension_exist(s
, sub
, true, true);
73 int f2fs_update_extension_list(struct f2fs_sb_info
*sbi
, const char *name
,
76 __u8 (*extlist
)[F2FS_EXTENSION_LEN
] = sbi
->raw_super
->extension_list
;
77 int cold_count
= le32_to_cpu(sbi
->raw_super
->extension_count
);
78 int hot_count
= sbi
->raw_super
->hot_ext_count
;
79 int total_count
= cold_count
+ hot_count
;
84 if (total_count
== F2FS_MAX_EXTENSION
)
87 if (!hot
&& !cold_count
)
89 if (hot
&& !hot_count
)
101 for (i
= start
; i
< count
; i
++) {
102 if (strcmp(name
, extlist
[i
]))
108 memcpy(extlist
[i
], extlist
[i
+ 1],
109 F2FS_EXTENSION_LEN
* (total_count
- i
- 1));
110 memset(extlist
[total_count
- 1], 0, F2FS_EXTENSION_LEN
);
112 sbi
->raw_super
->hot_ext_count
= hot_count
- 1;
114 sbi
->raw_super
->extension_count
=
115 cpu_to_le32(cold_count
- 1);
123 memcpy(extlist
[count
], name
, strlen(name
));
124 sbi
->raw_super
->hot_ext_count
= hot_count
+ 1;
126 char buf
[F2FS_MAX_EXTENSION
][F2FS_EXTENSION_LEN
];
128 memcpy(buf
, &extlist
[cold_count
],
129 F2FS_EXTENSION_LEN
* hot_count
);
130 memset(extlist
[cold_count
], 0, F2FS_EXTENSION_LEN
);
131 memcpy(extlist
[cold_count
], name
, strlen(name
));
132 memcpy(&extlist
[cold_count
+ 1], buf
,
133 F2FS_EXTENSION_LEN
* hot_count
);
134 sbi
->raw_super
->extension_count
= cpu_to_le32(cold_count
+ 1);
139 static void set_compress_new_inode(struct f2fs_sb_info
*sbi
, struct inode
*dir
,
140 struct inode
*inode
, const unsigned char *name
)
142 __u8 (*extlist
)[F2FS_EXTENSION_LEN
] = sbi
->raw_super
->extension_list
;
143 unsigned char (*noext
)[F2FS_EXTENSION_LEN
] =
144 F2FS_OPTION(sbi
).noextensions
;
145 unsigned char (*ext
)[F2FS_EXTENSION_LEN
] = F2FS_OPTION(sbi
).extensions
;
146 unsigned char ext_cnt
= F2FS_OPTION(sbi
).compress_ext_cnt
;
147 unsigned char noext_cnt
= F2FS_OPTION(sbi
).nocompress_ext_cnt
;
148 int i
, cold_count
, hot_count
;
150 if (!f2fs_sb_has_compression(sbi
))
153 if (S_ISDIR(inode
->i_mode
))
156 /* This name comes only from normal files. */
160 /* Don't compress hot files. */
161 f2fs_down_read(&sbi
->sb_lock
);
162 cold_count
= le32_to_cpu(sbi
->raw_super
->extension_count
);
163 hot_count
= sbi
->raw_super
->hot_ext_count
;
164 for (i
= cold_count
; i
< cold_count
+ hot_count
; i
++)
165 if (is_temperature_extension(name
, extlist
[i
]))
167 f2fs_up_read(&sbi
->sb_lock
);
168 if (i
< (cold_count
+ hot_count
))
171 /* Don't compress unallowed extension. */
172 for (i
= 0; i
< noext_cnt
; i
++)
173 if (is_compress_extension(name
, noext
[i
]))
176 /* Compress wanting extension. */
177 for (i
= 0; i
< ext_cnt
; i
++) {
178 if (is_compress_extension(name
, ext
[i
])) {
179 set_compress_context(inode
);
184 /* Inherit the {no-}compression flag in directory */
185 if (F2FS_I(dir
)->i_flags
& F2FS_NOCOMP_FL
) {
186 F2FS_I(inode
)->i_flags
|= F2FS_NOCOMP_FL
;
187 f2fs_mark_inode_dirty_sync(inode
, true);
188 } else if (F2FS_I(dir
)->i_flags
& F2FS_COMPR_FL
) {
189 set_compress_context(inode
);
194 * Set file's temperature for hot/cold data separation
196 static void set_file_temperature(struct f2fs_sb_info
*sbi
, struct inode
*inode
,
197 const unsigned char *name
)
199 __u8 (*extlist
)[F2FS_EXTENSION_LEN
] = sbi
->raw_super
->extension_list
;
200 int i
, cold_count
, hot_count
;
202 f2fs_down_read(&sbi
->sb_lock
);
203 cold_count
= le32_to_cpu(sbi
->raw_super
->extension_count
);
204 hot_count
= sbi
->raw_super
->hot_ext_count
;
205 for (i
= 0; i
< cold_count
+ hot_count
; i
++)
206 if (is_temperature_extension(name
, extlist
[i
]))
208 f2fs_up_read(&sbi
->sb_lock
);
210 if (i
== cold_count
+ hot_count
)
214 file_set_cold(inode
);
219 static struct inode
*f2fs_new_inode(struct mnt_idmap
*idmap
,
220 struct inode
*dir
, umode_t mode
,
223 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
224 struct f2fs_inode_info
*fi
;
227 bool nid_free
= false;
228 bool encrypt
= false;
232 inode
= new_inode(dir
->i_sb
);
234 return ERR_PTR(-ENOMEM
);
236 if (!f2fs_alloc_nid(sbi
, &ino
)) {
243 inode_init_owner(idmap
, inode
, dir
, mode
);
248 simple_inode_init_ts(inode
);
249 fi
->i_crtime
= inode_get_mtime(inode
);
250 inode
->i_generation
= get_random_u32();
252 if (S_ISDIR(inode
->i_mode
))
253 fi
->i_current_depth
= 1;
255 err
= insert_inode_locked(inode
);
261 if (f2fs_sb_has_project_quota(sbi
) &&
262 (F2FS_I(dir
)->i_flags
& F2FS_PROJINHERIT_FL
))
263 fi
->i_projid
= F2FS_I(dir
)->i_projid
;
265 fi
->i_projid
= make_kprojid(&init_user_ns
,
268 err
= fscrypt_prepare_new_inode(dir
, inode
, &encrypt
);
272 err
= f2fs_dquot_initialize(inode
);
276 set_inode_flag(inode
, FI_NEW_INODE
);
279 f2fs_set_encrypted_inode(inode
);
281 if (f2fs_sb_has_extra_attr(sbi
)) {
282 set_inode_flag(inode
, FI_EXTRA_ATTR
);
283 fi
->i_extra_isize
= F2FS_TOTAL_EXTRA_ATTR_SIZE
;
286 if (test_opt(sbi
, INLINE_XATTR
))
287 set_inode_flag(inode
, FI_INLINE_XATTR
);
289 if (f2fs_may_inline_dentry(inode
))
290 set_inode_flag(inode
, FI_INLINE_DENTRY
);
292 if (f2fs_sb_has_flexible_inline_xattr(sbi
)) {
293 f2fs_bug_on(sbi
, !f2fs_has_extra_attr(inode
));
294 if (f2fs_has_inline_xattr(inode
))
295 xattr_size
= F2FS_OPTION(sbi
).inline_xattr_size
;
296 /* Otherwise, will be 0 */
297 } else if (f2fs_has_inline_xattr(inode
) ||
298 f2fs_has_inline_dentry(inode
)) {
299 xattr_size
= DEFAULT_INLINE_XATTR_ADDRS
;
301 fi
->i_inline_xattr_size
= xattr_size
;
304 f2fs_mask_flags(mode
, F2FS_I(dir
)->i_flags
& F2FS_FL_INHERITED
);
306 if (S_ISDIR(inode
->i_mode
))
307 fi
->i_flags
|= F2FS_INDEX_FL
;
309 if (fi
->i_flags
& F2FS_PROJINHERIT_FL
)
310 set_inode_flag(inode
, FI_PROJ_INHERIT
);
312 /* Check compression first. */
313 set_compress_new_inode(sbi
, dir
, inode
, name
);
315 /* Should enable inline_data after compression set */
316 if (test_opt(sbi
, INLINE_DATA
) && f2fs_may_inline_data(inode
))
317 set_inode_flag(inode
, FI_INLINE_DATA
);
319 if (name
&& !test_opt(sbi
, DISABLE_EXT_IDENTIFY
))
320 set_file_temperature(sbi
, inode
, name
);
322 stat_inc_inline_xattr(inode
);
323 stat_inc_inline_inode(inode
);
324 stat_inc_inline_dir(inode
);
326 f2fs_set_inode_flags(inode
);
328 f2fs_init_extent_tree(inode
);
330 trace_f2fs_new_inode(inode
, 0);
334 trace_f2fs_new_inode(inode
, err
);
335 make_bad_inode(inode
);
337 set_inode_flag(inode
, FI_FREE_NID
);
341 trace_f2fs_new_inode(inode
, err
);
343 inode
->i_flags
|= S_NOQUOTA
;
345 set_inode_flag(inode
, FI_FREE_NID
);
347 unlock_new_inode(inode
);
352 static int f2fs_create(struct mnt_idmap
*idmap
, struct inode
*dir
,
353 struct dentry
*dentry
, umode_t mode
, bool excl
)
355 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
360 if (unlikely(f2fs_cp_error(sbi
)))
362 if (!f2fs_is_checkpoint_ready(sbi
))
365 err
= f2fs_dquot_initialize(dir
);
369 inode
= f2fs_new_inode(idmap
, dir
, mode
, dentry
->d_name
.name
);
371 return PTR_ERR(inode
);
373 inode
->i_op
= &f2fs_file_inode_operations
;
374 inode
->i_fop
= &f2fs_file_operations
;
375 inode
->i_mapping
->a_ops
= &f2fs_dblock_aops
;
379 err
= f2fs_add_link(dentry
, inode
);
384 f2fs_alloc_nid_done(sbi
, ino
);
386 d_instantiate_new(dentry
, inode
);
389 f2fs_sync_fs(sbi
->sb
, 1);
391 f2fs_balance_fs(sbi
, true);
394 f2fs_handle_failed_inode(inode
);
398 static int f2fs_link(struct dentry
*old_dentry
, struct inode
*dir
,
399 struct dentry
*dentry
)
401 struct inode
*inode
= d_inode(old_dentry
);
402 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
405 if (unlikely(f2fs_cp_error(sbi
)))
407 if (!f2fs_is_checkpoint_ready(sbi
))
410 err
= fscrypt_prepare_link(old_dentry
, dir
, dentry
);
414 if (is_inode_flag_set(dir
, FI_PROJ_INHERIT
) &&
415 (!projid_eq(F2FS_I(dir
)->i_projid
,
416 F2FS_I(old_dentry
->d_inode
)->i_projid
)))
419 err
= f2fs_dquot_initialize(dir
);
423 f2fs_balance_fs(sbi
, true);
425 inode_set_ctime_current(inode
);
428 set_inode_flag(inode
, FI_INC_LINK
);
430 err
= f2fs_add_link(dentry
, inode
);
435 d_instantiate(dentry
, inode
);
438 f2fs_sync_fs(sbi
->sb
, 1);
441 clear_inode_flag(inode
, FI_INC_LINK
);
447 struct dentry
*f2fs_get_parent(struct dentry
*child
)
450 unsigned long ino
= f2fs_inode_by_name(d_inode(child
), &dotdot_name
, &page
);
454 return ERR_CAST(page
);
455 return ERR_PTR(-ENOENT
);
457 return d_obtain_alias(f2fs_iget(child
->d_sb
, ino
));
460 static struct dentry
*f2fs_lookup(struct inode
*dir
, struct dentry
*dentry
,
463 struct inode
*inode
= NULL
;
464 struct f2fs_dir_entry
*de
;
469 struct f2fs_filename fname
;
471 trace_f2fs_lookup_start(dir
, dentry
, flags
);
473 if (dentry
->d_name
.len
> F2FS_NAME_LEN
) {
478 err
= f2fs_prepare_lookup(dir
, dentry
, &fname
);
483 de
= __f2fs_find_entry(dir
, &fname
, &page
);
484 f2fs_free_filename(&fname
);
495 ino
= le32_to_cpu(de
->ino
);
496 f2fs_put_page(page
, 0);
498 inode
= f2fs_iget(dir
->i_sb
, ino
);
500 err
= PTR_ERR(inode
);
504 if (IS_ENCRYPTED(dir
) &&
505 (S_ISDIR(inode
->i_mode
) || S_ISLNK(inode
->i_mode
)) &&
506 !fscrypt_has_permitted_context(dir
, inode
)) {
507 f2fs_warn(F2FS_I_SB(inode
), "Inconsistent encryption contexts: %lu/%lu",
508 dir
->i_ino
, inode
->i_ino
);
513 if (IS_ENABLED(CONFIG_UNICODE
) && !inode
&& IS_CASEFOLDED(dir
)) {
514 /* Eventually we want to call d_add_ci(dentry, NULL)
515 * for negative dentries in the encoding case as
516 * well. For now, prevent the negative dentry
519 trace_f2fs_lookup_end(dir
, dentry
, ino
, err
);
523 new = d_splice_alias(inode
, dentry
);
524 trace_f2fs_lookup_end(dir
, !IS_ERR_OR_NULL(new) ? new : dentry
,
525 ino
, IS_ERR(new) ? PTR_ERR(new) : err
);
530 trace_f2fs_lookup_end(dir
, dentry
, ino
, err
);
534 static int f2fs_unlink(struct inode
*dir
, struct dentry
*dentry
)
536 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
537 struct inode
*inode
= d_inode(dentry
);
538 struct f2fs_dir_entry
*de
;
542 trace_f2fs_unlink_enter(dir
, dentry
);
544 if (unlikely(f2fs_cp_error(sbi
))) {
549 err
= f2fs_dquot_initialize(dir
);
552 err
= f2fs_dquot_initialize(inode
);
556 de
= f2fs_find_entry(dir
, &dentry
->d_name
, &page
);
563 f2fs_balance_fs(sbi
, true);
566 err
= f2fs_acquire_orphan_inode(sbi
);
569 f2fs_put_page(page
, 0);
572 f2fs_delete_entry(de
, page
, dir
, inode
);
575 /* VFS negative dentries are incompatible with Encoding and
576 * Case-insensitiveness. Eventually we'll want avoid
577 * invalidating the dentries here, alongside with returning the
578 * negative dentries at f2fs_lookup(), when it is better
579 * supported by the VFS for the CI case.
581 if (IS_ENABLED(CONFIG_UNICODE
) && IS_CASEFOLDED(dir
))
582 d_invalidate(dentry
);
585 f2fs_sync_fs(sbi
->sb
, 1);
587 trace_f2fs_unlink_exit(inode
, err
);
591 static const char *f2fs_get_link(struct dentry
*dentry
,
593 struct delayed_call
*done
)
595 const char *link
= page_get_link(dentry
, inode
, done
);
597 if (!IS_ERR(link
) && !*link
) {
598 /* this is broken symlink case */
599 do_delayed_call(done
);
600 clear_delayed_call(done
);
601 link
= ERR_PTR(-ENOENT
);
606 static int f2fs_symlink(struct mnt_idmap
*idmap
, struct inode
*dir
,
607 struct dentry
*dentry
, const char *symname
)
609 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
611 size_t len
= strlen(symname
);
612 struct fscrypt_str disk_link
;
615 if (unlikely(f2fs_cp_error(sbi
)))
617 if (!f2fs_is_checkpoint_ready(sbi
))
620 err
= fscrypt_prepare_symlink(dir
, symname
, len
, dir
->i_sb
->s_blocksize
,
625 err
= f2fs_dquot_initialize(dir
);
629 inode
= f2fs_new_inode(idmap
, dir
, S_IFLNK
| S_IRWXUGO
, NULL
);
631 return PTR_ERR(inode
);
633 if (IS_ENCRYPTED(inode
))
634 inode
->i_op
= &f2fs_encrypted_symlink_inode_operations
;
636 inode
->i_op
= &f2fs_symlink_inode_operations
;
637 inode_nohighmem(inode
);
638 inode
->i_mapping
->a_ops
= &f2fs_dblock_aops
;
641 err
= f2fs_add_link(dentry
, inode
);
643 goto out_f2fs_handle_failed_inode
;
645 f2fs_alloc_nid_done(sbi
, inode
->i_ino
);
647 err
= fscrypt_encrypt_symlink(inode
, symname
, len
, &disk_link
);
651 err
= page_symlink(inode
, disk_link
.name
, disk_link
.len
);
654 d_instantiate_new(dentry
, inode
);
657 * Let's flush symlink data in order to avoid broken symlink as much as
658 * possible. Nevertheless, fsyncing is the best way, but there is no
659 * way to get a file descriptor in order to flush that.
661 * Note that, it needs to do dir->fsync to make this recoverable.
662 * If the symlink path is stored into inline_data, there is no
663 * performance regression.
666 filemap_write_and_wait_range(inode
->i_mapping
, 0,
670 f2fs_sync_fs(sbi
->sb
, 1);
672 f2fs_unlink(dir
, dentry
);
675 f2fs_balance_fs(sbi
, true);
676 goto out_free_encrypted_link
;
678 out_f2fs_handle_failed_inode
:
679 f2fs_handle_failed_inode(inode
);
680 out_free_encrypted_link
:
681 if (disk_link
.name
!= (unsigned char *)symname
)
682 kfree(disk_link
.name
);
686 static int f2fs_mkdir(struct mnt_idmap
*idmap
, struct inode
*dir
,
687 struct dentry
*dentry
, umode_t mode
)
689 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
693 if (unlikely(f2fs_cp_error(sbi
)))
696 err
= f2fs_dquot_initialize(dir
);
700 inode
= f2fs_new_inode(idmap
, dir
, S_IFDIR
| mode
, NULL
);
702 return PTR_ERR(inode
);
704 inode
->i_op
= &f2fs_dir_inode_operations
;
705 inode
->i_fop
= &f2fs_dir_operations
;
706 inode
->i_mapping
->a_ops
= &f2fs_dblock_aops
;
707 mapping_set_gfp_mask(inode
->i_mapping
, GFP_NOFS
);
709 set_inode_flag(inode
, FI_INC_LINK
);
711 err
= f2fs_add_link(dentry
, inode
);
716 f2fs_alloc_nid_done(sbi
, inode
->i_ino
);
718 d_instantiate_new(dentry
, inode
);
721 f2fs_sync_fs(sbi
->sb
, 1);
723 f2fs_balance_fs(sbi
, true);
727 clear_inode_flag(inode
, FI_INC_LINK
);
728 f2fs_handle_failed_inode(inode
);
732 static int f2fs_rmdir(struct inode
*dir
, struct dentry
*dentry
)
734 struct inode
*inode
= d_inode(dentry
);
736 if (f2fs_empty_dir(inode
))
737 return f2fs_unlink(dir
, dentry
);
741 static int f2fs_mknod(struct mnt_idmap
*idmap
, struct inode
*dir
,
742 struct dentry
*dentry
, umode_t mode
, dev_t rdev
)
744 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
748 if (unlikely(f2fs_cp_error(sbi
)))
750 if (!f2fs_is_checkpoint_ready(sbi
))
753 err
= f2fs_dquot_initialize(dir
);
757 inode
= f2fs_new_inode(idmap
, dir
, mode
, NULL
);
759 return PTR_ERR(inode
);
761 init_special_inode(inode
, inode
->i_mode
, rdev
);
762 inode
->i_op
= &f2fs_special_inode_operations
;
765 err
= f2fs_add_link(dentry
, inode
);
770 f2fs_alloc_nid_done(sbi
, inode
->i_ino
);
772 d_instantiate_new(dentry
, inode
);
775 f2fs_sync_fs(sbi
->sb
, 1);
777 f2fs_balance_fs(sbi
, true);
780 f2fs_handle_failed_inode(inode
);
784 static int __f2fs_tmpfile(struct mnt_idmap
*idmap
, struct inode
*dir
,
785 struct file
*file
, umode_t mode
, bool is_whiteout
,
786 struct inode
**new_inode
, struct f2fs_filename
*fname
)
788 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
792 err
= f2fs_dquot_initialize(dir
);
796 inode
= f2fs_new_inode(idmap
, dir
, mode
, NULL
);
798 return PTR_ERR(inode
);
801 init_special_inode(inode
, inode
->i_mode
, WHITEOUT_DEV
);
802 inode
->i_op
= &f2fs_special_inode_operations
;
804 inode
->i_op
= &f2fs_file_inode_operations
;
805 inode
->i_fop
= &f2fs_file_operations
;
806 inode
->i_mapping
->a_ops
= &f2fs_dblock_aops
;
810 err
= f2fs_acquire_orphan_inode(sbi
);
814 err
= f2fs_do_tmpfile(inode
, dir
, fname
);
819 * add this non-linked tmpfile to orphan list, in this way we could
820 * remove all unused data of tmpfile after abnormal power-off.
822 f2fs_add_orphan_inode(inode
);
823 f2fs_alloc_nid_done(sbi
, inode
->i_ino
);
826 f2fs_i_links_write(inode
, false);
828 spin_lock(&inode
->i_lock
);
829 inode
->i_state
|= I_LINKABLE
;
830 spin_unlock(&inode
->i_lock
);
833 d_tmpfile(file
, inode
);
835 f2fs_i_links_write(inode
, false);
837 /* link_count was changed by d_tmpfile as well. */
839 unlock_new_inode(inode
);
844 f2fs_balance_fs(sbi
, true);
848 f2fs_release_orphan_inode(sbi
);
850 f2fs_handle_failed_inode(inode
);
854 static int f2fs_tmpfile(struct mnt_idmap
*idmap
, struct inode
*dir
,
855 struct file
*file
, umode_t mode
)
857 struct f2fs_sb_info
*sbi
= F2FS_I_SB(dir
);
860 if (unlikely(f2fs_cp_error(sbi
)))
862 if (!f2fs_is_checkpoint_ready(sbi
))
865 err
= __f2fs_tmpfile(idmap
, dir
, file
, mode
, false, NULL
, NULL
);
867 return finish_open_simple(file
, err
);
870 static int f2fs_create_whiteout(struct mnt_idmap
*idmap
,
871 struct inode
*dir
, struct inode
**whiteout
,
872 struct f2fs_filename
*fname
)
874 return __f2fs_tmpfile(idmap
, dir
, NULL
, S_IFCHR
| WHITEOUT_MODE
,
875 true, whiteout
, fname
);
878 int f2fs_get_tmpfile(struct mnt_idmap
*idmap
, struct inode
*dir
,
879 struct inode
**new_inode
)
881 return __f2fs_tmpfile(idmap
, dir
, NULL
, S_IFREG
,
882 false, new_inode
, NULL
);
885 static int f2fs_rename(struct mnt_idmap
*idmap
, struct inode
*old_dir
,
886 struct dentry
*old_dentry
, struct inode
*new_dir
,
887 struct dentry
*new_dentry
, unsigned int flags
)
889 struct f2fs_sb_info
*sbi
= F2FS_I_SB(old_dir
);
890 struct inode
*old_inode
= d_inode(old_dentry
);
891 struct inode
*new_inode
= d_inode(new_dentry
);
892 struct inode
*whiteout
= NULL
;
893 struct page
*old_dir_page
= NULL
;
894 struct page
*old_page
, *new_page
= NULL
;
895 struct f2fs_dir_entry
*old_dir_entry
= NULL
;
896 struct f2fs_dir_entry
*old_entry
;
897 struct f2fs_dir_entry
*new_entry
;
898 bool old_is_dir
= S_ISDIR(old_inode
->i_mode
);
901 if (unlikely(f2fs_cp_error(sbi
)))
903 if (!f2fs_is_checkpoint_ready(sbi
))
906 if (is_inode_flag_set(new_dir
, FI_PROJ_INHERIT
) &&
907 (!projid_eq(F2FS_I(new_dir
)->i_projid
,
908 F2FS_I(old_dentry
->d_inode
)->i_projid
)))
912 * If new_inode is null, the below renaming flow will
913 * add a link in old_dir which can convert inline_dir.
914 * After then, if we failed to get the entry due to other
915 * reasons like ENOMEM, we had to remove the new entry.
916 * Instead of adding such the error handling routine, let's
917 * simply convert first here.
919 if (old_dir
== new_dir
&& !new_inode
) {
920 err
= f2fs_try_convert_inline_dir(old_dir
, new_dentry
);
925 if (flags
& RENAME_WHITEOUT
) {
926 struct f2fs_filename fname
;
928 err
= f2fs_setup_filename(old_dir
, &old_dentry
->d_name
,
933 err
= f2fs_create_whiteout(idmap
, old_dir
, &whiteout
, &fname
);
938 err
= f2fs_dquot_initialize(old_dir
);
942 err
= f2fs_dquot_initialize(new_dir
);
947 err
= f2fs_dquot_initialize(new_inode
);
953 old_entry
= f2fs_find_entry(old_dir
, &old_dentry
->d_name
, &old_page
);
955 if (IS_ERR(old_page
))
956 err
= PTR_ERR(old_page
);
960 if (old_is_dir
&& old_dir
!= new_dir
) {
961 old_dir_entry
= f2fs_parent_dir(old_inode
, &old_dir_page
);
962 if (!old_dir_entry
) {
963 if (IS_ERR(old_dir_page
))
964 err
= PTR_ERR(old_dir_page
);
972 if (old_is_dir
&& !f2fs_empty_dir(new_inode
))
976 new_entry
= f2fs_find_entry(new_dir
, &new_dentry
->d_name
,
979 if (IS_ERR(new_page
))
980 err
= PTR_ERR(new_page
);
984 f2fs_balance_fs(sbi
, true);
988 err
= f2fs_acquire_orphan_inode(sbi
);
992 f2fs_set_link(new_dir
, new_entry
, new_page
, old_inode
);
995 inode_set_ctime_current(new_inode
);
996 f2fs_down_write(&F2FS_I(new_inode
)->i_sem
);
998 f2fs_i_links_write(new_inode
, false);
999 f2fs_i_links_write(new_inode
, false);
1000 f2fs_up_write(&F2FS_I(new_inode
)->i_sem
);
1002 if (!new_inode
->i_nlink
)
1003 f2fs_add_orphan_inode(new_inode
);
1005 f2fs_release_orphan_inode(sbi
);
1007 f2fs_balance_fs(sbi
, true);
1011 err
= f2fs_add_link(new_dentry
, old_inode
);
1013 f2fs_unlock_op(sbi
);
1018 f2fs_i_links_write(new_dir
, true);
1021 f2fs_down_write(&F2FS_I(old_inode
)->i_sem
);
1022 if (!old_is_dir
|| whiteout
)
1023 file_lost_pino(old_inode
);
1025 /* adjust dir's i_pino to pass fsck check */
1026 f2fs_i_pino_write(old_inode
, new_dir
->i_ino
);
1027 f2fs_up_write(&F2FS_I(old_inode
)->i_sem
);
1029 inode_set_ctime_current(old_inode
);
1030 f2fs_mark_inode_dirty_sync(old_inode
, false);
1032 f2fs_delete_entry(old_entry
, old_page
, old_dir
, NULL
);
1036 set_inode_flag(whiteout
, FI_INC_LINK
);
1037 err
= f2fs_add_link(old_dentry
, whiteout
);
1041 spin_lock(&whiteout
->i_lock
);
1042 whiteout
->i_state
&= ~I_LINKABLE
;
1043 spin_unlock(&whiteout
->i_lock
);
1049 f2fs_set_link(old_inode
, old_dir_entry
, old_dir_page
, new_dir
);
1051 f2fs_i_links_write(old_dir
, false);
1053 if (F2FS_OPTION(sbi
).fsync_mode
== FSYNC_MODE_STRICT
) {
1054 f2fs_add_ino_entry(sbi
, new_dir
->i_ino
, TRANS_DIR_INO
);
1055 if (S_ISDIR(old_inode
->i_mode
))
1056 f2fs_add_ino_entry(sbi
, old_inode
->i_ino
,
1060 f2fs_unlock_op(sbi
);
1062 if (IS_DIRSYNC(old_dir
) || IS_DIRSYNC(new_dir
))
1063 f2fs_sync_fs(sbi
->sb
, 1);
1065 f2fs_update_time(sbi
, REQ_TIME
);
1069 f2fs_unlock_op(sbi
);
1070 f2fs_put_page(new_page
, 0);
1073 f2fs_put_page(old_dir_page
, 0);
1075 f2fs_put_page(old_page
, 0);
1081 static int f2fs_cross_rename(struct inode
*old_dir
, struct dentry
*old_dentry
,
1082 struct inode
*new_dir
, struct dentry
*new_dentry
)
1084 struct f2fs_sb_info
*sbi
= F2FS_I_SB(old_dir
);
1085 struct inode
*old_inode
= d_inode(old_dentry
);
1086 struct inode
*new_inode
= d_inode(new_dentry
);
1087 struct page
*old_dir_page
, *new_dir_page
;
1088 struct page
*old_page
, *new_page
;
1089 struct f2fs_dir_entry
*old_dir_entry
= NULL
, *new_dir_entry
= NULL
;
1090 struct f2fs_dir_entry
*old_entry
, *new_entry
;
1091 int old_nlink
= 0, new_nlink
= 0;
1094 if (unlikely(f2fs_cp_error(sbi
)))
1096 if (!f2fs_is_checkpoint_ready(sbi
))
1099 if ((is_inode_flag_set(new_dir
, FI_PROJ_INHERIT
) &&
1100 !projid_eq(F2FS_I(new_dir
)->i_projid
,
1101 F2FS_I(old_dentry
->d_inode
)->i_projid
)) ||
1102 (is_inode_flag_set(new_dir
, FI_PROJ_INHERIT
) &&
1103 !projid_eq(F2FS_I(old_dir
)->i_projid
,
1104 F2FS_I(new_dentry
->d_inode
)->i_projid
)))
1107 err
= f2fs_dquot_initialize(old_dir
);
1111 err
= f2fs_dquot_initialize(new_dir
);
1116 old_entry
= f2fs_find_entry(old_dir
, &old_dentry
->d_name
, &old_page
);
1118 if (IS_ERR(old_page
))
1119 err
= PTR_ERR(old_page
);
1123 new_entry
= f2fs_find_entry(new_dir
, &new_dentry
->d_name
, &new_page
);
1125 if (IS_ERR(new_page
))
1126 err
= PTR_ERR(new_page
);
1130 /* prepare for updating ".." directory entry info later */
1131 if (old_dir
!= new_dir
) {
1132 if (S_ISDIR(old_inode
->i_mode
)) {
1133 old_dir_entry
= f2fs_parent_dir(old_inode
,
1135 if (!old_dir_entry
) {
1136 if (IS_ERR(old_dir_page
))
1137 err
= PTR_ERR(old_dir_page
);
1142 if (S_ISDIR(new_inode
->i_mode
)) {
1143 new_dir_entry
= f2fs_parent_dir(new_inode
,
1145 if (!new_dir_entry
) {
1146 if (IS_ERR(new_dir_page
))
1147 err
= PTR_ERR(new_dir_page
);
1154 * If cross rename between file and directory those are not
1155 * in the same directory, we will inc nlink of file's parent
1156 * later, so we should check upper boundary of its nlink.
1158 if ((!old_dir_entry
|| !new_dir_entry
) &&
1159 old_dir_entry
!= new_dir_entry
) {
1160 old_nlink
= old_dir_entry
? -1 : 1;
1161 new_nlink
= -old_nlink
;
1163 if ((old_nlink
> 0 && old_dir
->i_nlink
>= F2FS_LINK_MAX
) ||
1164 (new_nlink
> 0 && new_dir
->i_nlink
>= F2FS_LINK_MAX
))
1168 f2fs_balance_fs(sbi
, true);
1172 /* update ".." directory entry info of old dentry */
1174 f2fs_set_link(old_inode
, old_dir_entry
, old_dir_page
, new_dir
);
1176 /* update ".." directory entry info of new dentry */
1178 f2fs_set_link(new_inode
, new_dir_entry
, new_dir_page
, old_dir
);
1180 /* update directory entry info of old dir inode */
1181 f2fs_set_link(old_dir
, old_entry
, old_page
, new_inode
);
1183 f2fs_down_write(&F2FS_I(old_inode
)->i_sem
);
1185 file_lost_pino(old_inode
);
1187 /* adjust dir's i_pino to pass fsck check */
1188 f2fs_i_pino_write(old_inode
, new_dir
->i_ino
);
1189 f2fs_up_write(&F2FS_I(old_inode
)->i_sem
);
1191 inode_set_ctime_current(old_dir
);
1193 f2fs_down_write(&F2FS_I(old_dir
)->i_sem
);
1194 f2fs_i_links_write(old_dir
, old_nlink
> 0);
1195 f2fs_up_write(&F2FS_I(old_dir
)->i_sem
);
1197 f2fs_mark_inode_dirty_sync(old_dir
, false);
1199 /* update directory entry info of new dir inode */
1200 f2fs_set_link(new_dir
, new_entry
, new_page
, old_inode
);
1202 f2fs_down_write(&F2FS_I(new_inode
)->i_sem
);
1204 file_lost_pino(new_inode
);
1206 /* adjust dir's i_pino to pass fsck check */
1207 f2fs_i_pino_write(new_inode
, old_dir
->i_ino
);
1208 f2fs_up_write(&F2FS_I(new_inode
)->i_sem
);
1210 inode_set_ctime_current(new_dir
);
1212 f2fs_down_write(&F2FS_I(new_dir
)->i_sem
);
1213 f2fs_i_links_write(new_dir
, new_nlink
> 0);
1214 f2fs_up_write(&F2FS_I(new_dir
)->i_sem
);
1216 f2fs_mark_inode_dirty_sync(new_dir
, false);
1218 if (F2FS_OPTION(sbi
).fsync_mode
== FSYNC_MODE_STRICT
) {
1219 f2fs_add_ino_entry(sbi
, old_dir
->i_ino
, TRANS_DIR_INO
);
1220 f2fs_add_ino_entry(sbi
, new_dir
->i_ino
, TRANS_DIR_INO
);
1223 f2fs_unlock_op(sbi
);
1225 if (IS_DIRSYNC(old_dir
) || IS_DIRSYNC(new_dir
))
1226 f2fs_sync_fs(sbi
->sb
, 1);
1228 f2fs_update_time(sbi
, REQ_TIME
);
1231 if (new_dir_entry
) {
1232 f2fs_put_page(new_dir_page
, 0);
1235 if (old_dir_entry
) {
1236 f2fs_put_page(old_dir_page
, 0);
1239 f2fs_put_page(new_page
, 0);
1241 f2fs_put_page(old_page
, 0);
1246 static int f2fs_rename2(struct mnt_idmap
*idmap
,
1247 struct inode
*old_dir
, struct dentry
*old_dentry
,
1248 struct inode
*new_dir
, struct dentry
*new_dentry
,
1253 if (flags
& ~(RENAME_NOREPLACE
| RENAME_EXCHANGE
| RENAME_WHITEOUT
))
1256 trace_f2fs_rename_start(old_dir
, old_dentry
, new_dir
, new_dentry
,
1259 err
= fscrypt_prepare_rename(old_dir
, old_dentry
, new_dir
, new_dentry
,
1264 if (flags
& RENAME_EXCHANGE
)
1265 err
= f2fs_cross_rename(old_dir
, old_dentry
,
1266 new_dir
, new_dentry
);
1269 * VFS has already handled the new dentry existence case,
1270 * here, we just deal with "RENAME_NOREPLACE" as regular rename.
1272 err
= f2fs_rename(idmap
, old_dir
, old_dentry
,
1273 new_dir
, new_dentry
, flags
);
1275 trace_f2fs_rename_end(old_dentry
, new_dentry
, flags
, err
);
1279 static const char *f2fs_encrypted_get_link(struct dentry
*dentry
,
1280 struct inode
*inode
,
1281 struct delayed_call
*done
)
1287 return ERR_PTR(-ECHILD
);
1289 page
= read_mapping_page(inode
->i_mapping
, 0, NULL
);
1291 return ERR_CAST(page
);
1293 target
= fscrypt_get_symlink(inode
, page_address(page
),
1294 inode
->i_sb
->s_blocksize
, done
);
1299 static int f2fs_encrypted_symlink_getattr(struct mnt_idmap
*idmap
,
1300 const struct path
*path
,
1301 struct kstat
*stat
, u32 request_mask
,
1302 unsigned int query_flags
)
1304 f2fs_getattr(idmap
, path
, stat
, request_mask
, query_flags
);
1306 return fscrypt_symlink_getattr(path
, stat
);
1309 const struct inode_operations f2fs_encrypted_symlink_inode_operations
= {
1310 .get_link
= f2fs_encrypted_get_link
,
1311 .getattr
= f2fs_encrypted_symlink_getattr
,
1312 .setattr
= f2fs_setattr
,
1313 .listxattr
= f2fs_listxattr
,
1316 const struct inode_operations f2fs_dir_inode_operations
= {
1317 .create
= f2fs_create
,
1318 .lookup
= f2fs_lookup
,
1320 .unlink
= f2fs_unlink
,
1321 .symlink
= f2fs_symlink
,
1322 .mkdir
= f2fs_mkdir
,
1323 .rmdir
= f2fs_rmdir
,
1324 .mknod
= f2fs_mknod
,
1325 .rename
= f2fs_rename2
,
1326 .tmpfile
= f2fs_tmpfile
,
1327 .getattr
= f2fs_getattr
,
1328 .setattr
= f2fs_setattr
,
1329 .get_inode_acl
= f2fs_get_acl
,
1330 .set_acl
= f2fs_set_acl
,
1331 .listxattr
= f2fs_listxattr
,
1332 .fiemap
= f2fs_fiemap
,
1333 .fileattr_get
= f2fs_fileattr_get
,
1334 .fileattr_set
= f2fs_fileattr_set
,
1337 const struct inode_operations f2fs_symlink_inode_operations
= {
1338 .get_link
= f2fs_get_link
,
1339 .getattr
= f2fs_getattr
,
1340 .setattr
= f2fs_setattr
,
1341 .listxattr
= f2fs_listxattr
,
1344 const struct inode_operations f2fs_special_inode_operations
= {
1345 .getattr
= f2fs_getattr
,
1346 .setattr
= f2fs_setattr
,
1347 .get_inode_acl
= f2fs_get_acl
,
1348 .set_acl
= f2fs_set_acl
,
1349 .listxattr
= f2fs_listxattr
,