blob: 99c4a868d73b0531fe1ff19667105c45310f4b72 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001// SPDX-License-Identifier: GPL-2.0
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002/*
3 * fs/f2fs/dir.c
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00007 */
8#include <linux/fs.h>
9#include <linux/f2fs_fs.h>
10#include <linux/sched/signal.h>
David Brazdil0f672f62019-12-10 10:32:29 +000011#include <linux/unicode.h>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000012#include "f2fs.h"
13#include "node.h"
14#include "acl.h"
15#include "xattr.h"
16#include <trace/events/f2fs.h>
17
18static unsigned long dir_blocks(struct inode *inode)
19{
20 return ((unsigned long long) (i_size_read(inode) + PAGE_SIZE - 1))
21 >> PAGE_SHIFT;
22}
23
24static unsigned int dir_buckets(unsigned int level, int dir_level)
25{
26 if (level + dir_level < MAX_DIR_HASH_DEPTH / 2)
27 return 1 << (level + dir_level);
28 else
29 return MAX_DIR_BUCKETS;
30}
31
32static unsigned int bucket_blocks(unsigned int level)
33{
34 if (level < MAX_DIR_HASH_DEPTH / 2)
35 return 2;
36 else
37 return 4;
38}
39
40static unsigned char f2fs_filetype_table[F2FS_FT_MAX] = {
41 [F2FS_FT_UNKNOWN] = DT_UNKNOWN,
42 [F2FS_FT_REG_FILE] = DT_REG,
43 [F2FS_FT_DIR] = DT_DIR,
44 [F2FS_FT_CHRDEV] = DT_CHR,
45 [F2FS_FT_BLKDEV] = DT_BLK,
46 [F2FS_FT_FIFO] = DT_FIFO,
47 [F2FS_FT_SOCK] = DT_SOCK,
48 [F2FS_FT_SYMLINK] = DT_LNK,
49};
50
51static unsigned char f2fs_type_by_mode[S_IFMT >> S_SHIFT] = {
52 [S_IFREG >> S_SHIFT] = F2FS_FT_REG_FILE,
53 [S_IFDIR >> S_SHIFT] = F2FS_FT_DIR,
54 [S_IFCHR >> S_SHIFT] = F2FS_FT_CHRDEV,
55 [S_IFBLK >> S_SHIFT] = F2FS_FT_BLKDEV,
56 [S_IFIFO >> S_SHIFT] = F2FS_FT_FIFO,
57 [S_IFSOCK >> S_SHIFT] = F2FS_FT_SOCK,
58 [S_IFLNK >> S_SHIFT] = F2FS_FT_SYMLINK,
59};
60
61static void set_de_type(struct f2fs_dir_entry *de, umode_t mode)
62{
63 de->file_type = f2fs_type_by_mode[(mode & S_IFMT) >> S_SHIFT];
64}
65
66unsigned char f2fs_get_de_type(struct f2fs_dir_entry *de)
67{
68 if (de->file_type < F2FS_FT_MAX)
69 return f2fs_filetype_table[de->file_type];
70 return DT_UNKNOWN;
71}
72
73static unsigned long dir_block_index(unsigned int level,
74 int dir_level, unsigned int idx)
75{
76 unsigned long i;
77 unsigned long bidx = 0;
78
79 for (i = 0; i < level; i++)
80 bidx += dir_buckets(i, dir_level) * bucket_blocks(i);
81 bidx += idx * bucket_blocks(level);
82 return bidx;
83}
84
David Brazdil0f672f62019-12-10 10:32:29 +000085static struct f2fs_dir_entry *find_in_block(struct inode *dir,
86 struct page *dentry_page,
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000087 struct fscrypt_name *fname,
88 f2fs_hash_t namehash,
89 int *max_slots,
90 struct page **res_page)
91{
92 struct f2fs_dentry_block *dentry_blk;
93 struct f2fs_dir_entry *de;
94 struct f2fs_dentry_ptr d;
95
96 dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
97
David Brazdil0f672f62019-12-10 10:32:29 +000098 make_dentry_ptr_block(dir, &d, dentry_blk);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000099 de = f2fs_find_target_dentry(fname, namehash, max_slots, &d);
100 if (de)
101 *res_page = dentry_page;
102
103 return de;
104}
105
David Brazdil0f672f62019-12-10 10:32:29 +0000106#ifdef CONFIG_UNICODE
107/*
108 * Test whether a case-insensitive directory entry matches the filename
109 * being searched for.
David Brazdil0f672f62019-12-10 10:32:29 +0000110 */
Olivier Deprez0e641232021-09-23 10:07:05 +0200111static bool f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
112 const struct qstr *entry, bool quick)
David Brazdil0f672f62019-12-10 10:32:29 +0000113{
Olivier Deprez0e641232021-09-23 10:07:05 +0200114 const struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
David Brazdil0f672f62019-12-10 10:32:29 +0000115 const struct unicode_map *um = sbi->s_encoding;
Olivier Deprez0e641232021-09-23 10:07:05 +0200116 int res;
David Brazdil0f672f62019-12-10 10:32:29 +0000117
118 if (quick)
Olivier Deprez0e641232021-09-23 10:07:05 +0200119 res = utf8_strncasecmp_folded(um, name, entry);
David Brazdil0f672f62019-12-10 10:32:29 +0000120 else
Olivier Deprez0e641232021-09-23 10:07:05 +0200121 res = utf8_strncasecmp(um, name, entry);
122 if (res < 0) {
123 /*
124 * In strict mode, ignore invalid names. In non-strict mode,
125 * fall back to treating them as opaque byte sequences.
David Brazdil0f672f62019-12-10 10:32:29 +0000126 */
Olivier Deprez0e641232021-09-23 10:07:05 +0200127 if (f2fs_has_strict_mode(sbi) || name->len != entry->len)
128 return false;
129 return !memcmp(name->name, entry->name, name->len);
David Brazdil0f672f62019-12-10 10:32:29 +0000130 }
Olivier Deprez0e641232021-09-23 10:07:05 +0200131 return res == 0;
David Brazdil0f672f62019-12-10 10:32:29 +0000132}
133
134static void f2fs_fname_setup_ci_filename(struct inode *dir,
135 const struct qstr *iname,
136 struct fscrypt_str *cf_name)
137{
138 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
139
140 if (!IS_CASEFOLDED(dir)) {
141 cf_name->name = NULL;
142 return;
143 }
144
145 cf_name->name = f2fs_kmalloc(sbi, F2FS_NAME_LEN, GFP_NOFS);
146 if (!cf_name->name)
147 return;
148
149 cf_name->len = utf8_casefold(sbi->s_encoding,
150 iname, cf_name->name,
151 F2FS_NAME_LEN);
152 if ((int)cf_name->len <= 0) {
153 kvfree(cf_name->name);
154 cf_name->name = NULL;
155 }
156}
157#endif
158
159static inline bool f2fs_match_name(struct f2fs_dentry_ptr *d,
160 struct f2fs_dir_entry *de,
161 struct fscrypt_name *fname,
162 struct fscrypt_str *cf_str,
163 unsigned long bit_pos,
164 f2fs_hash_t namehash)
165{
166#ifdef CONFIG_UNICODE
167 struct inode *parent = d->inode;
168 struct f2fs_sb_info *sbi = F2FS_I_SB(parent);
169 struct qstr entry;
170#endif
171
172 if (de->hash_code != namehash)
173 return false;
174
175#ifdef CONFIG_UNICODE
176 entry.name = d->filename[bit_pos];
177 entry.len = de->name_len;
178
179 if (sbi->s_encoding && IS_CASEFOLDED(parent)) {
180 if (cf_str->name) {
181 struct qstr cf = {.name = cf_str->name,
182 .len = cf_str->len};
Olivier Deprez0e641232021-09-23 10:07:05 +0200183 return f2fs_match_ci_name(parent, &cf, &entry, true);
David Brazdil0f672f62019-12-10 10:32:29 +0000184 }
Olivier Deprez0e641232021-09-23 10:07:05 +0200185 return f2fs_match_ci_name(parent, fname->usr_fname, &entry,
186 false);
David Brazdil0f672f62019-12-10 10:32:29 +0000187 }
188#endif
189 if (fscrypt_match_name(fname, d->filename[bit_pos],
190 le16_to_cpu(de->name_len)))
191 return true;
192 return false;
193}
194
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000195struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
196 f2fs_hash_t namehash, int *max_slots,
197 struct f2fs_dentry_ptr *d)
198{
199 struct f2fs_dir_entry *de;
David Brazdil0f672f62019-12-10 10:32:29 +0000200 struct fscrypt_str cf_str = { .name = NULL, .len = 0 };
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000201 unsigned long bit_pos = 0;
202 int max_len = 0;
203
David Brazdil0f672f62019-12-10 10:32:29 +0000204#ifdef CONFIG_UNICODE
205 f2fs_fname_setup_ci_filename(d->inode, fname->usr_fname, &cf_str);
206#endif
207
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000208 if (max_slots)
209 *max_slots = 0;
210 while (bit_pos < d->max) {
211 if (!test_bit_le(bit_pos, d->bitmap)) {
212 bit_pos++;
213 max_len++;
214 continue;
215 }
216
217 de = &d->dentry[bit_pos];
218
219 if (unlikely(!de->name_len)) {
220 bit_pos++;
221 continue;
222 }
223
David Brazdil0f672f62019-12-10 10:32:29 +0000224 if (f2fs_match_name(d, de, fname, &cf_str, bit_pos, namehash))
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000225 goto found;
226
227 if (max_slots && max_len > *max_slots)
228 *max_slots = max_len;
229 max_len = 0;
230
231 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
232 }
233
234 de = NULL;
235found:
236 if (max_slots && max_len > *max_slots)
237 *max_slots = max_len;
David Brazdil0f672f62019-12-10 10:32:29 +0000238
239#ifdef CONFIG_UNICODE
240 kvfree(cf_str.name);
241#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000242 return de;
243}
244
245static struct f2fs_dir_entry *find_in_level(struct inode *dir,
246 unsigned int level,
247 struct fscrypt_name *fname,
248 struct page **res_page)
249{
250 struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
251 int s = GET_DENTRY_SLOTS(name.len);
252 unsigned int nbucket, nblock;
253 unsigned int bidx, end_block;
254 struct page *dentry_page;
255 struct f2fs_dir_entry *de = NULL;
256 bool room = false;
257 int max_slots;
David Brazdil0f672f62019-12-10 10:32:29 +0000258 f2fs_hash_t namehash = f2fs_dentry_hash(dir, &name, fname);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000259
260 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
261 nblock = bucket_blocks(level);
262
263 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
264 le32_to_cpu(namehash) % nbucket);
265 end_block = bidx + nblock;
266
267 for (; bidx < end_block; bidx++) {
268 /* no need to allocate new dentry pages to all the indices */
269 dentry_page = f2fs_find_data_page(dir, bidx);
270 if (IS_ERR(dentry_page)) {
271 if (PTR_ERR(dentry_page) == -ENOENT) {
272 room = true;
273 continue;
274 } else {
275 *res_page = dentry_page;
276 break;
277 }
278 }
279
David Brazdil0f672f62019-12-10 10:32:29 +0000280 de = find_in_block(dir, dentry_page, fname, namehash,
281 &max_slots, res_page);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000282 if (de)
283 break;
284
285 if (max_slots >= s)
286 room = true;
287 f2fs_put_page(dentry_page, 0);
288 }
289
290 if (!de && room && F2FS_I(dir)->chash != namehash) {
291 F2FS_I(dir)->chash = namehash;
292 F2FS_I(dir)->clevel = level;
293 }
294
295 return de;
296}
297
298struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
299 struct fscrypt_name *fname, struct page **res_page)
300{
301 unsigned long npages = dir_blocks(dir);
302 struct f2fs_dir_entry *de = NULL;
303 unsigned int max_depth;
304 unsigned int level;
305
Olivier Deprez0e641232021-09-23 10:07:05 +0200306 *res_page = NULL;
307
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000308 if (f2fs_has_inline_dentry(dir)) {
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000309 de = f2fs_find_in_inline_dir(dir, fname, res_page);
310 goto out;
311 }
312
Olivier Deprez0e641232021-09-23 10:07:05 +0200313 if (npages == 0)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000314 goto out;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000315
316 max_depth = F2FS_I(dir)->i_current_depth;
317 if (unlikely(max_depth > MAX_DIR_HASH_DEPTH)) {
David Brazdil0f672f62019-12-10 10:32:29 +0000318 f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %lu: %u",
319 dir->i_ino, max_depth);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000320 max_depth = MAX_DIR_HASH_DEPTH;
321 f2fs_i_depth_write(dir, max_depth);
322 }
323
324 for (level = 0; level < max_depth; level++) {
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000325 de = find_in_level(dir, level, fname, res_page);
326 if (de || IS_ERR(*res_page))
327 break;
328 }
329out:
330 /* This is to increase the speed of f2fs_create */
331 if (!de)
332 F2FS_I(dir)->task = current;
333 return de;
334}
335
336/*
337 * Find an entry in the specified directory with the wanted name.
338 * It returns the page where the entry was found (as a parameter - res_page),
339 * and the entry itself. Page is returned mapped and unlocked.
340 * Entry is guaranteed to be valid.
341 */
342struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
343 const struct qstr *child, struct page **res_page)
344{
345 struct f2fs_dir_entry *de = NULL;
346 struct fscrypt_name fname;
347 int err;
348
David Brazdil0f672f62019-12-10 10:32:29 +0000349#ifdef CONFIG_UNICODE
350 if (f2fs_has_strict_mode(F2FS_I_SB(dir)) && IS_CASEFOLDED(dir) &&
351 utf8_validate(F2FS_I_SB(dir)->s_encoding, child)) {
352 *res_page = ERR_PTR(-EINVAL);
353 return NULL;
354 }
355#endif
356
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000357 err = fscrypt_setup_filename(dir, child, 1, &fname);
358 if (err) {
359 if (err == -ENOENT)
360 *res_page = NULL;
361 else
362 *res_page = ERR_PTR(err);
363 return NULL;
364 }
365
366 de = __f2fs_find_entry(dir, &fname, res_page);
367
368 fscrypt_free_filename(&fname);
369 return de;
370}
371
372struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
373{
374 struct qstr dotdot = QSTR_INIT("..", 2);
375
376 return f2fs_find_entry(dir, &dotdot, p);
377}
378
379ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
380 struct page **page)
381{
382 ino_t res = 0;
383 struct f2fs_dir_entry *de;
384
385 de = f2fs_find_entry(dir, qstr, page);
386 if (de) {
387 res = le32_to_cpu(de->ino);
388 f2fs_put_page(*page, 0);
389 }
390
391 return res;
392}
393
394void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
395 struct page *page, struct inode *inode)
396{
397 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
398 lock_page(page);
David Brazdil0f672f62019-12-10 10:32:29 +0000399 f2fs_wait_on_page_writeback(page, type, true, true);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000400 de->ino = cpu_to_le32(inode->i_ino);
401 set_de_type(de, inode->i_mode);
402 set_page_dirty(page);
403
404 dir->i_mtime = dir->i_ctime = current_time(dir);
405 f2fs_mark_inode_dirty_sync(dir, false);
406 f2fs_put_page(page, 1);
407}
408
409static void init_dent_inode(const struct qstr *name, struct page *ipage)
410{
411 struct f2fs_inode *ri;
412
David Brazdil0f672f62019-12-10 10:32:29 +0000413 f2fs_wait_on_page_writeback(ipage, NODE, true, true);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000414
415 /* copy name info. to this inode page */
416 ri = F2FS_INODE(ipage);
417 ri->i_namelen = cpu_to_le32(name->len);
418 memcpy(ri->i_name, name->name, name->len);
419 set_page_dirty(ipage);
420}
421
422void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
423 struct f2fs_dentry_ptr *d)
424{
425 struct qstr dot = QSTR_INIT(".", 1);
426 struct qstr dotdot = QSTR_INIT("..", 2);
427
428 /* update dirent of "." */
429 f2fs_update_dentry(inode->i_ino, inode->i_mode, d, &dot, 0, 0);
430
431 /* update dirent of ".." */
432 f2fs_update_dentry(parent->i_ino, parent->i_mode, d, &dotdot, 0, 1);
433}
434
435static int make_empty_dir(struct inode *inode,
436 struct inode *parent, struct page *page)
437{
438 struct page *dentry_page;
439 struct f2fs_dentry_block *dentry_blk;
440 struct f2fs_dentry_ptr d;
441
442 if (f2fs_has_inline_dentry(inode))
443 return f2fs_make_empty_inline_dir(inode, parent, page);
444
445 dentry_page = f2fs_get_new_data_page(inode, page, 0, true);
446 if (IS_ERR(dentry_page))
447 return PTR_ERR(dentry_page);
448
449 dentry_blk = page_address(dentry_page);
450
451 make_dentry_ptr_block(NULL, &d, dentry_blk);
452 f2fs_do_make_empty_dir(inode, parent, &d);
453
454 set_page_dirty(dentry_page);
455 f2fs_put_page(dentry_page, 1);
456 return 0;
457}
458
459struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
460 const struct qstr *new_name, const struct qstr *orig_name,
461 struct page *dpage)
462{
463 struct page *page;
464 int dummy_encrypt = DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(dir));
465 int err;
466
467 if (is_inode_flag_set(inode, FI_NEW_INODE)) {
468 page = f2fs_new_inode_page(inode);
469 if (IS_ERR(page))
470 return page;
471
472 if (S_ISDIR(inode->i_mode)) {
473 /* in order to handle error case */
474 get_page(page);
475 err = make_empty_dir(inode, dir, page);
476 if (err) {
477 lock_page(page);
478 goto put_error;
479 }
480 put_page(page);
481 }
482
483 err = f2fs_init_acl(inode, dir, page, dpage);
484 if (err)
485 goto put_error;
486
487 err = f2fs_init_security(inode, dir, orig_name, page);
488 if (err)
489 goto put_error;
490
David Brazdil0f672f62019-12-10 10:32:29 +0000491 if ((IS_ENCRYPTED(dir) || dummy_encrypt) &&
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000492 f2fs_may_encrypt(inode)) {
493 err = fscrypt_inherit_context(dir, inode, page, false);
494 if (err)
495 goto put_error;
496 }
497 } else {
498 page = f2fs_get_node_page(F2FS_I_SB(dir), inode->i_ino);
499 if (IS_ERR(page))
500 return page;
501 }
502
503 if (new_name) {
504 init_dent_inode(new_name, page);
David Brazdil0f672f62019-12-10 10:32:29 +0000505 if (IS_ENCRYPTED(dir))
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000506 file_set_enc_name(inode);
507 }
508
509 /*
510 * This file should be checkpointed during fsync.
511 * We lost i_pino from now on.
512 */
513 if (is_inode_flag_set(inode, FI_INC_LINK)) {
514 if (!S_ISDIR(inode->i_mode))
515 file_lost_pino(inode);
516 /*
517 * If link the tmpfile to alias through linkat path,
518 * we should remove this inode from orphan list.
519 */
520 if (inode->i_nlink == 0)
521 f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
522 f2fs_i_links_write(inode, true);
523 }
524 return page;
525
526put_error:
527 clear_nlink(inode);
528 f2fs_update_inode(inode, page);
529 f2fs_put_page(page, 1);
530 return ERR_PTR(err);
531}
532
533void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
534 unsigned int current_depth)
535{
536 if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) {
537 if (S_ISDIR(inode->i_mode))
538 f2fs_i_links_write(dir, true);
539 clear_inode_flag(inode, FI_NEW_INODE);
540 }
541 dir->i_mtime = dir->i_ctime = current_time(dir);
542 f2fs_mark_inode_dirty_sync(dir, false);
543
544 if (F2FS_I(dir)->i_current_depth != current_depth)
545 f2fs_i_depth_write(dir, current_depth);
546
547 if (inode && is_inode_flag_set(inode, FI_INC_LINK))
548 clear_inode_flag(inode, FI_INC_LINK);
549}
550
551int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots)
552{
553 int bit_start = 0;
554 int zero_start, zero_end;
555next:
556 zero_start = find_next_zero_bit_le(bitmap, max_slots, bit_start);
557 if (zero_start >= max_slots)
558 return max_slots;
559
560 zero_end = find_next_bit_le(bitmap, max_slots, zero_start);
561 if (zero_end - zero_start >= slots)
562 return zero_start;
563
564 bit_start = zero_end + 1;
565
566 if (zero_end + 1 >= max_slots)
567 return max_slots;
568 goto next;
569}
570
571void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
572 const struct qstr *name, f2fs_hash_t name_hash,
573 unsigned int bit_pos)
574{
575 struct f2fs_dir_entry *de;
576 int slots = GET_DENTRY_SLOTS(name->len);
577 int i;
578
579 de = &d->dentry[bit_pos];
580 de->hash_code = name_hash;
581 de->name_len = cpu_to_le16(name->len);
582 memcpy(d->filename[bit_pos], name->name, name->len);
583 de->ino = cpu_to_le32(ino);
584 set_de_type(de, mode);
585 for (i = 0; i < slots; i++) {
586 __set_bit_le(bit_pos + i, (void *)d->bitmap);
587 /* avoid wrong garbage data for readdir */
588 if (i)
589 (de + i)->name_len = 0;
590 }
591}
592
593int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
594 const struct qstr *orig_name,
595 struct inode *inode, nid_t ino, umode_t mode)
596{
597 unsigned int bit_pos;
598 unsigned int level;
599 unsigned int current_depth;
600 unsigned long bidx, block;
601 f2fs_hash_t dentry_hash;
602 unsigned int nbucket, nblock;
603 struct page *dentry_page = NULL;
604 struct f2fs_dentry_block *dentry_blk = NULL;
605 struct f2fs_dentry_ptr d;
606 struct page *page = NULL;
607 int slots, err = 0;
608
609 level = 0;
610 slots = GET_DENTRY_SLOTS(new_name->len);
David Brazdil0f672f62019-12-10 10:32:29 +0000611 dentry_hash = f2fs_dentry_hash(dir, new_name, NULL);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000612
613 current_depth = F2FS_I(dir)->i_current_depth;
614 if (F2FS_I(dir)->chash == dentry_hash) {
615 level = F2FS_I(dir)->clevel;
616 F2FS_I(dir)->chash = 0;
617 }
618
619start:
620 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) {
Olivier Deprez0e641232021-09-23 10:07:05 +0200621 f2fs_show_injection_info(F2FS_I_SB(dir), FAULT_DIR_DEPTH);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000622 return -ENOSPC;
623 }
624
625 if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
626 return -ENOSPC;
627
628 /* Increase the depth, if required */
629 if (level == current_depth)
630 ++current_depth;
631
632 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
633 nblock = bucket_blocks(level);
634
635 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
636 (le32_to_cpu(dentry_hash) % nbucket));
637
638 for (block = bidx; block <= (bidx + nblock - 1); block++) {
639 dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
640 if (IS_ERR(dentry_page))
641 return PTR_ERR(dentry_page);
642
643 dentry_blk = page_address(dentry_page);
644 bit_pos = f2fs_room_for_filename(&dentry_blk->dentry_bitmap,
645 slots, NR_DENTRY_IN_BLOCK);
646 if (bit_pos < NR_DENTRY_IN_BLOCK)
647 goto add_dentry;
648
649 f2fs_put_page(dentry_page, 1);
650 }
651
652 /* Move to next level to find the empty slot for new dentry */
653 ++level;
654 goto start;
655add_dentry:
David Brazdil0f672f62019-12-10 10:32:29 +0000656 f2fs_wait_on_page_writeback(dentry_page, DATA, true, true);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000657
658 if (inode) {
659 down_write(&F2FS_I(inode)->i_sem);
660 page = f2fs_init_inode_metadata(inode, dir, new_name,
661 orig_name, NULL);
662 if (IS_ERR(page)) {
663 err = PTR_ERR(page);
664 goto fail;
665 }
666 }
667
668 make_dentry_ptr_block(NULL, &d, dentry_blk);
669 f2fs_update_dentry(ino, mode, &d, new_name, dentry_hash, bit_pos);
670
671 set_page_dirty(dentry_page);
672
673 if (inode) {
674 f2fs_i_pino_write(inode, dir->i_ino);
David Brazdil0f672f62019-12-10 10:32:29 +0000675
676 /* synchronize inode page's data from inode cache */
677 if (is_inode_flag_set(inode, FI_NEW_INODE))
678 f2fs_update_inode(inode, page);
679
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000680 f2fs_put_page(page, 1);
681 }
682
683 f2fs_update_parent_metadata(dir, inode, current_depth);
684fail:
685 if (inode)
686 up_write(&F2FS_I(inode)->i_sem);
687
688 f2fs_put_page(dentry_page, 1);
689
690 return err;
691}
692
693int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
694 struct inode *inode, nid_t ino, umode_t mode)
695{
696 struct qstr new_name;
697 int err = -EAGAIN;
698
699 new_name.name = fname_name(fname);
700 new_name.len = fname_len(fname);
701
702 if (f2fs_has_inline_dentry(dir))
703 err = f2fs_add_inline_entry(dir, &new_name, fname->usr_fname,
704 inode, ino, mode);
705 if (err == -EAGAIN)
706 err = f2fs_add_regular_entry(dir, &new_name, fname->usr_fname,
707 inode, ino, mode);
708
709 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
710 return err;
711}
712
713/*
714 * Caller should grab and release a rwsem by calling f2fs_lock_op() and
715 * f2fs_unlock_op().
716 */
717int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
718 struct inode *inode, nid_t ino, umode_t mode)
719{
720 struct fscrypt_name fname;
721 struct page *page = NULL;
722 struct f2fs_dir_entry *de = NULL;
723 int err;
724
725 err = fscrypt_setup_filename(dir, name, 0, &fname);
726 if (err)
727 return err;
728
729 /*
730 * An immature stakable filesystem shows a race condition between lookup
731 * and create. If we have same task when doing lookup and create, it's
732 * definitely fine as expected by VFS normally. Otherwise, let's just
733 * verify on-disk dentry one more time, which guarantees filesystem
734 * consistency more.
735 */
736 if (current != F2FS_I(dir)->task) {
737 de = __f2fs_find_entry(dir, &fname, &page);
738 F2FS_I(dir)->task = NULL;
739 }
740 if (de) {
741 f2fs_put_page(page, 0);
742 err = -EEXIST;
743 } else if (IS_ERR(page)) {
744 err = PTR_ERR(page);
745 } else {
746 err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
747 }
748 fscrypt_free_filename(&fname);
749 return err;
750}
751
752int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
753{
754 struct page *page;
755 int err = 0;
756
757 down_write(&F2FS_I(inode)->i_sem);
758 page = f2fs_init_inode_metadata(inode, dir, NULL, NULL, NULL);
759 if (IS_ERR(page)) {
760 err = PTR_ERR(page);
761 goto fail;
762 }
763 f2fs_put_page(page, 1);
764
765 clear_inode_flag(inode, FI_NEW_INODE);
David Brazdil0f672f62019-12-10 10:32:29 +0000766 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000767fail:
768 up_write(&F2FS_I(inode)->i_sem);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000769 return err;
770}
771
772void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
773{
774 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
775
776 down_write(&F2FS_I(inode)->i_sem);
777
778 if (S_ISDIR(inode->i_mode))
779 f2fs_i_links_write(dir, false);
780 inode->i_ctime = current_time(inode);
781
782 f2fs_i_links_write(inode, false);
783 if (S_ISDIR(inode->i_mode)) {
784 f2fs_i_links_write(inode, false);
785 f2fs_i_size_write(inode, 0);
786 }
787 up_write(&F2FS_I(inode)->i_sem);
788
789 if (inode->i_nlink == 0)
790 f2fs_add_orphan_inode(inode);
791 else
792 f2fs_release_orphan_inode(sbi);
793}
794
795/*
796 * It only removes the dentry from the dentry page, corresponding name
797 * entry in name page does not need to be touched during deletion.
798 */
799void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
800 struct inode *dir, struct inode *inode)
801{
802 struct f2fs_dentry_block *dentry_blk;
803 unsigned int bit_pos;
804 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
805 int i;
806
807 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
808
809 if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT)
810 f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO);
811
812 if (f2fs_has_inline_dentry(dir))
813 return f2fs_delete_inline_entry(dentry, page, dir, inode);
814
815 lock_page(page);
David Brazdil0f672f62019-12-10 10:32:29 +0000816 f2fs_wait_on_page_writeback(page, DATA, true, true);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000817
818 dentry_blk = page_address(page);
819 bit_pos = dentry - dentry_blk->dentry;
820 for (i = 0; i < slots; i++)
821 __clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
822
823 /* Let's check and deallocate this dentry page */
824 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
825 NR_DENTRY_IN_BLOCK,
826 0);
827 set_page_dirty(page);
828
829 dir->i_ctime = dir->i_mtime = current_time(dir);
830 f2fs_mark_inode_dirty_sync(dir, false);
831
832 if (inode)
833 f2fs_drop_nlink(dir, inode);
834
835 if (bit_pos == NR_DENTRY_IN_BLOCK &&
836 !f2fs_truncate_hole(dir, page->index, page->index + 1)) {
David Brazdil0f672f62019-12-10 10:32:29 +0000837 f2fs_clear_page_cache_dirty_tag(page);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000838 clear_page_dirty_for_io(page);
David Brazdil0f672f62019-12-10 10:32:29 +0000839 f2fs_clear_page_private(page);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000840 ClearPageUptodate(page);
David Brazdil0f672f62019-12-10 10:32:29 +0000841 clear_cold_data(page);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000842 inode_dec_dirty_pages(dir);
843 f2fs_remove_dirty_inode(dir);
844 }
845 f2fs_put_page(page, 1);
846}
847
848bool f2fs_empty_dir(struct inode *dir)
849{
850 unsigned long bidx;
851 struct page *dentry_page;
852 unsigned int bit_pos;
853 struct f2fs_dentry_block *dentry_blk;
854 unsigned long nblock = dir_blocks(dir);
855
856 if (f2fs_has_inline_dentry(dir))
857 return f2fs_empty_inline_dir(dir);
858
859 for (bidx = 0; bidx < nblock; bidx++) {
860 dentry_page = f2fs_get_lock_data_page(dir, bidx, false);
861 if (IS_ERR(dentry_page)) {
862 if (PTR_ERR(dentry_page) == -ENOENT)
863 continue;
864 else
865 return false;
866 }
867
868 dentry_blk = page_address(dentry_page);
869 if (bidx == 0)
870 bit_pos = 2;
871 else
872 bit_pos = 0;
873 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
874 NR_DENTRY_IN_BLOCK,
875 bit_pos);
876
877 f2fs_put_page(dentry_page, 1);
878
879 if (bit_pos < NR_DENTRY_IN_BLOCK)
880 return false;
881 }
882 return true;
883}
884
885int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
886 unsigned int start_pos, struct fscrypt_str *fstr)
887{
888 unsigned char d_type = DT_UNKNOWN;
889 unsigned int bit_pos;
890 struct f2fs_dir_entry *de = NULL;
891 struct fscrypt_str de_name = FSTR_INIT(NULL, 0);
892 struct f2fs_sb_info *sbi = F2FS_I_SB(d->inode);
David Brazdil0f672f62019-12-10 10:32:29 +0000893 struct blk_plug plug;
894 bool readdir_ra = sbi->readdir_ra == 1;
Olivier Deprez0e641232021-09-23 10:07:05 +0200895 bool found_valid_dirent = false;
David Brazdil0f672f62019-12-10 10:32:29 +0000896 int err = 0;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000897
898 bit_pos = ((unsigned long)ctx->pos % d->max);
899
David Brazdil0f672f62019-12-10 10:32:29 +0000900 if (readdir_ra)
901 blk_start_plug(&plug);
902
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000903 while (bit_pos < d->max) {
904 bit_pos = find_next_bit_le(d->bitmap, d->max, bit_pos);
905 if (bit_pos >= d->max)
906 break;
907
908 de = &d->dentry[bit_pos];
909 if (de->name_len == 0) {
Olivier Deprez0e641232021-09-23 10:07:05 +0200910 if (found_valid_dirent || !bit_pos) {
911 printk_ratelimited(
912 "%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.",
913 KERN_WARNING, sbi->sb->s_id,
914 le32_to_cpu(de->ino));
915 set_sbi_flag(sbi, SBI_NEED_FSCK);
916 }
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000917 bit_pos++;
918 ctx->pos = start_pos + bit_pos;
919 continue;
920 }
921
922 d_type = f2fs_get_de_type(de);
923
924 de_name.name = d->filename[bit_pos];
925 de_name.len = le16_to_cpu(de->name_len);
926
David Brazdil0f672f62019-12-10 10:32:29 +0000927 /* check memory boundary before moving forward */
928 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
929 if (unlikely(bit_pos > d->max ||
930 le16_to_cpu(de->name_len) > F2FS_NAME_LEN)) {
931 f2fs_warn(sbi, "%s: corrupted namelen=%d, run fsck to fix.",
932 __func__, le16_to_cpu(de->name_len));
933 set_sbi_flag(sbi, SBI_NEED_FSCK);
934 err = -EFSCORRUPTED;
935 goto out;
936 }
937
938 if (IS_ENCRYPTED(d->inode)) {
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000939 int save_len = fstr->len;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000940
941 err = fscrypt_fname_disk_to_usr(d->inode,
David Brazdil0f672f62019-12-10 10:32:29 +0000942 (u32)le32_to_cpu(de->hash_code),
943 0, &de_name, fstr);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000944 if (err)
David Brazdil0f672f62019-12-10 10:32:29 +0000945 goto out;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000946
947 de_name = *fstr;
948 fstr->len = save_len;
949 }
950
951 if (!dir_emit(ctx, de_name.name, de_name.len,
David Brazdil0f672f62019-12-10 10:32:29 +0000952 le32_to_cpu(de->ino), d_type)) {
953 err = 1;
954 goto out;
955 }
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000956
David Brazdil0f672f62019-12-10 10:32:29 +0000957 if (readdir_ra)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000958 f2fs_ra_node_page(sbi, le32_to_cpu(de->ino));
959
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000960 ctx->pos = start_pos + bit_pos;
Olivier Deprez0e641232021-09-23 10:07:05 +0200961 found_valid_dirent = true;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000962 }
David Brazdil0f672f62019-12-10 10:32:29 +0000963out:
964 if (readdir_ra)
965 blk_finish_plug(&plug);
966 return err;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000967}
968
969static int f2fs_readdir(struct file *file, struct dir_context *ctx)
970{
971 struct inode *inode = file_inode(file);
972 unsigned long npages = dir_blocks(inode);
973 struct f2fs_dentry_block *dentry_blk = NULL;
974 struct page *dentry_page = NULL;
975 struct file_ra_state *ra = &file->f_ra;
976 loff_t start_pos = ctx->pos;
977 unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
978 struct f2fs_dentry_ptr d;
979 struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
980 int err = 0;
981
David Brazdil0f672f62019-12-10 10:32:29 +0000982 if (IS_ENCRYPTED(inode)) {
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000983 err = fscrypt_get_encryption_info(inode);
984 if (err && err != -ENOKEY)
985 goto out;
986
987 err = fscrypt_fname_alloc_buffer(inode, F2FS_NAME_LEN, &fstr);
988 if (err < 0)
989 goto out;
990 }
991
992 if (f2fs_has_inline_dentry(inode)) {
993 err = f2fs_read_inline_dir(file, ctx, &fstr);
994 goto out_free;
995 }
996
997 for (; n < npages; n++, ctx->pos = n * NR_DENTRY_IN_BLOCK) {
998
999 /* allow readdir() to be interrupted */
1000 if (fatal_signal_pending(current)) {
1001 err = -ERESTARTSYS;
1002 goto out_free;
1003 }
1004 cond_resched();
1005
1006 /* readahead for multi pages of dir */
1007 if (npages - n > 1 && !ra_has_index(ra, n))
1008 page_cache_sync_readahead(inode->i_mapping, ra, file, n,
1009 min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
1010
David Brazdil0f672f62019-12-10 10:32:29 +00001011 dentry_page = f2fs_find_data_page(inode, n);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001012 if (IS_ERR(dentry_page)) {
1013 err = PTR_ERR(dentry_page);
1014 if (err == -ENOENT) {
1015 err = 0;
1016 continue;
1017 } else {
1018 goto out_free;
1019 }
1020 }
1021
1022 dentry_blk = page_address(dentry_page);
1023
1024 make_dentry_ptr_block(inode, &d, dentry_blk);
1025
1026 err = f2fs_fill_dentries(ctx, &d,
1027 n * NR_DENTRY_IN_BLOCK, &fstr);
1028 if (err) {
David Brazdil0f672f62019-12-10 10:32:29 +00001029 f2fs_put_page(dentry_page, 0);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001030 break;
1031 }
1032
David Brazdil0f672f62019-12-10 10:32:29 +00001033 f2fs_put_page(dentry_page, 0);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001034 }
1035out_free:
1036 fscrypt_fname_free_buffer(&fstr);
1037out:
1038 trace_f2fs_readdir(inode, start_pos, ctx->pos, err);
1039 return err < 0 ? err : 0;
1040}
1041
1042static int f2fs_dir_open(struct inode *inode, struct file *filp)
1043{
David Brazdil0f672f62019-12-10 10:32:29 +00001044 if (IS_ENCRYPTED(inode))
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001045 return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
1046 return 0;
1047}
1048
1049const struct file_operations f2fs_dir_operations = {
1050 .llseek = generic_file_llseek,
1051 .read = generic_read_dir,
1052 .iterate_shared = f2fs_readdir,
1053 .fsync = f2fs_sync_file,
1054 .open = f2fs_dir_open,
1055 .unlocked_ioctl = f2fs_ioctl,
1056#ifdef CONFIG_COMPAT
1057 .compat_ioctl = f2fs_compat_ioctl,
1058#endif
1059};
David Brazdil0f672f62019-12-10 10:32:29 +00001060
1061#ifdef CONFIG_UNICODE
1062static int f2fs_d_compare(const struct dentry *dentry, unsigned int len,
1063 const char *str, const struct qstr *name)
1064{
Olivier Deprez0e641232021-09-23 10:07:05 +02001065 const struct dentry *parent = READ_ONCE(dentry->d_parent);
1066 const struct inode *dir = READ_ONCE(parent->d_inode);
1067 const struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
1068 struct qstr entry = QSTR_INIT(str, len);
1069 char strbuf[DNAME_INLINE_LEN];
1070 int res;
David Brazdil0f672f62019-12-10 10:32:29 +00001071
Olivier Deprez0e641232021-09-23 10:07:05 +02001072 if (!dir || !IS_CASEFOLDED(dir))
1073 goto fallback;
1074
1075 /*
1076 * If the dentry name is stored in-line, then it may be concurrently
1077 * modified by a rename. If this happens, the VFS will eventually retry
1078 * the lookup, so it doesn't matter what ->d_compare() returns.
1079 * However, it's unsafe to call utf8_strncasecmp() with an unstable
1080 * string. Therefore, we have to copy the name into a temporary buffer.
1081 */
1082 if (len <= DNAME_INLINE_LEN - 1) {
1083 memcpy(strbuf, str, len);
1084 strbuf[len] = 0;
1085 entry.name = strbuf;
1086 /* prevent compiler from optimizing out the temporary buffer */
1087 barrier();
David Brazdil0f672f62019-12-10 10:32:29 +00001088 }
1089
Olivier Deprez0e641232021-09-23 10:07:05 +02001090 res = utf8_strncasecmp(sbi->s_encoding, name, &entry);
1091 if (res >= 0)
1092 return res;
1093
1094 if (f2fs_has_strict_mode(sbi))
1095 return -EINVAL;
1096fallback:
1097 if (len != name->len)
1098 return 1;
1099 return !!memcmp(str, name->name, len);
David Brazdil0f672f62019-12-10 10:32:29 +00001100}
1101
1102static int f2fs_d_hash(const struct dentry *dentry, struct qstr *str)
1103{
1104 struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
1105 const struct unicode_map *um = sbi->s_encoding;
Olivier Deprez0e641232021-09-23 10:07:05 +02001106 const struct inode *inode = READ_ONCE(dentry->d_inode);
David Brazdil0f672f62019-12-10 10:32:29 +00001107 unsigned char *norm;
1108 int len, ret = 0;
1109
Olivier Deprez0e641232021-09-23 10:07:05 +02001110 if (!inode || !IS_CASEFOLDED(inode))
David Brazdil0f672f62019-12-10 10:32:29 +00001111 return 0;
1112
1113 norm = f2fs_kmalloc(sbi, PATH_MAX, GFP_ATOMIC);
1114 if (!norm)
1115 return -ENOMEM;
1116
1117 len = utf8_casefold(um, str, norm, PATH_MAX);
1118 if (len < 0) {
1119 if (f2fs_has_strict_mode(sbi))
1120 ret = -EINVAL;
1121 goto out;
1122 }
1123 str->hash = full_name_hash(dentry, norm, len);
1124out:
1125 kvfree(norm);
1126 return ret;
1127}
1128
1129const struct dentry_operations f2fs_dentry_ops = {
1130 .d_hash = f2fs_d_hash,
1131 .d_compare = f2fs_d_compare,
1132};
1133#endif