xref: /kernel/linux/linux-5.10/fs/f2fs/dir.c (revision 8c2ecf20)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * fs/f2fs/dir.c
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 *             http://www.samsung.com/
7 */
8#include <linux/fs.h>
9#include <linux/f2fs_fs.h>
10#include <linux/sched/signal.h>
11#include <linux/unicode.h>
12#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
73/* If @dir is casefolded, initialize @fname->cf_name from @fname->usr_fname. */
74int f2fs_init_casefolded_name(const struct inode *dir,
75			      struct f2fs_filename *fname)
76{
77#ifdef CONFIG_UNICODE
78	struct super_block *sb = dir->i_sb;
79	struct f2fs_sb_info *sbi = F2FS_SB(sb);
80
81	if (IS_CASEFOLDED(dir)) {
82		fname->cf_name.name = f2fs_kmalloc(sbi, F2FS_NAME_LEN,
83						   GFP_NOFS);
84		if (!fname->cf_name.name)
85			return -ENOMEM;
86		fname->cf_name.len = utf8_casefold(sb->s_encoding,
87						   fname->usr_fname,
88						   fname->cf_name.name,
89						   F2FS_NAME_LEN);
90		if ((int)fname->cf_name.len <= 0) {
91			kfree(fname->cf_name.name);
92			fname->cf_name.name = NULL;
93			if (sb_has_strict_encoding(sb))
94				return -EINVAL;
95			/* fall back to treating name as opaque byte sequence */
96		}
97	}
98#endif
99	return 0;
100}
101
102static int __f2fs_setup_filename(const struct inode *dir,
103				 const struct fscrypt_name *crypt_name,
104				 struct f2fs_filename *fname)
105{
106	int err;
107
108	memset(fname, 0, sizeof(*fname));
109
110	fname->usr_fname = crypt_name->usr_fname;
111	fname->disk_name = crypt_name->disk_name;
112#ifdef CONFIG_FS_ENCRYPTION
113	fname->crypto_buf = crypt_name->crypto_buf;
114#endif
115	if (crypt_name->is_nokey_name) {
116		/* hash was decoded from the no-key name */
117		fname->hash = cpu_to_le32(crypt_name->hash);
118	} else {
119		err = f2fs_init_casefolded_name(dir, fname);
120		if (err) {
121			f2fs_free_filename(fname);
122			return err;
123		}
124		f2fs_hash_filename(dir, fname);
125	}
126	return 0;
127}
128
129/*
130 * Prepare to search for @iname in @dir.  This is similar to
131 * fscrypt_setup_filename(), but this also handles computing the casefolded name
132 * and the f2fs dirhash if needed, then packing all the information about this
133 * filename up into a 'struct f2fs_filename'.
134 */
135int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
136			int lookup, struct f2fs_filename *fname)
137{
138	struct fscrypt_name crypt_name;
139	int err;
140
141	err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name);
142	if (err)
143		return err;
144
145	return __f2fs_setup_filename(dir, &crypt_name, fname);
146}
147
148/*
149 * Prepare to look up @dentry in @dir.  This is similar to
150 * fscrypt_prepare_lookup(), but this also handles computing the casefolded name
151 * and the f2fs dirhash if needed, then packing all the information about this
152 * filename up into a 'struct f2fs_filename'.
153 */
154int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
155			struct f2fs_filename *fname)
156{
157	struct fscrypt_name crypt_name;
158	int err;
159
160	err = fscrypt_prepare_lookup(dir, dentry, &crypt_name);
161	if (err)
162		return err;
163
164	return __f2fs_setup_filename(dir, &crypt_name, fname);
165}
166
167void f2fs_free_filename(struct f2fs_filename *fname)
168{
169#ifdef CONFIG_FS_ENCRYPTION
170	kfree(fname->crypto_buf.name);
171	fname->crypto_buf.name = NULL;
172#endif
173#ifdef CONFIG_UNICODE
174	kfree(fname->cf_name.name);
175	fname->cf_name.name = NULL;
176#endif
177}
178
179static unsigned long dir_block_index(unsigned int level,
180				int dir_level, unsigned int idx)
181{
182	unsigned long i;
183	unsigned long bidx = 0;
184
185	for (i = 0; i < level; i++)
186		bidx += dir_buckets(i, dir_level) * bucket_blocks(i);
187	bidx += idx * bucket_blocks(level);
188	return bidx;
189}
190
191static struct f2fs_dir_entry *find_in_block(struct inode *dir,
192				struct page *dentry_page,
193				const struct f2fs_filename *fname,
194				int *max_slots)
195{
196	struct f2fs_dentry_block *dentry_blk;
197	struct f2fs_dentry_ptr d;
198
199	dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
200
201	make_dentry_ptr_block(dir, &d, dentry_blk);
202	return f2fs_find_target_dentry(&d, fname, max_slots);
203}
204
205#ifdef CONFIG_UNICODE
206/*
207 * Test whether a case-insensitive directory entry matches the filename
208 * being searched for.
209 */
210static bool f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
211			       const u8 *de_name, u32 de_name_len)
212{
213	const struct super_block *sb = dir->i_sb;
214	const struct unicode_map *um = sb->s_encoding;
215	struct qstr entry = QSTR_INIT(de_name, de_name_len);
216	int res;
217
218	res = utf8_strncasecmp_folded(um, name, &entry);
219	if (res < 0) {
220		/*
221		 * In strict mode, ignore invalid names.  In non-strict mode,
222		 * fall back to treating them as opaque byte sequences.
223		 */
224		if (sb_has_strict_encoding(sb) || name->len != entry.len)
225			return false;
226		return !memcmp(name->name, entry.name, name->len);
227	}
228	return res == 0;
229}
230#endif /* CONFIG_UNICODE */
231
232static inline bool f2fs_match_name(const struct inode *dir,
233				   const struct f2fs_filename *fname,
234				   const u8 *de_name, u32 de_name_len)
235{
236	struct fscrypt_name f;
237
238#ifdef CONFIG_UNICODE
239	if (fname->cf_name.name) {
240		struct qstr cf = FSTR_TO_QSTR(&fname->cf_name);
241
242		return f2fs_match_ci_name(dir, &cf, de_name, de_name_len);
243	}
244#endif
245	f.usr_fname = fname->usr_fname;
246	f.disk_name = fname->disk_name;
247#ifdef CONFIG_FS_ENCRYPTION
248	f.crypto_buf = fname->crypto_buf;
249#endif
250	return fscrypt_match_name(&f, de_name, de_name_len);
251}
252
253struct f2fs_dir_entry *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d,
254			const struct f2fs_filename *fname, int *max_slots)
255{
256	struct f2fs_dir_entry *de;
257	unsigned long bit_pos = 0;
258	int max_len = 0;
259
260	if (max_slots)
261		*max_slots = 0;
262	while (bit_pos < d->max) {
263		if (!test_bit_le(bit_pos, d->bitmap)) {
264			bit_pos++;
265			max_len++;
266			continue;
267		}
268
269		de = &d->dentry[bit_pos];
270
271		if (unlikely(!de->name_len)) {
272			bit_pos++;
273			continue;
274		}
275
276		if (de->hash_code == fname->hash &&
277		    f2fs_match_name(d->inode, fname, d->filename[bit_pos],
278				    le16_to_cpu(de->name_len)))
279			goto found;
280
281		if (max_slots && max_len > *max_slots)
282			*max_slots = max_len;
283		max_len = 0;
284
285		bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
286	}
287
288	de = NULL;
289found:
290	if (max_slots && max_len > *max_slots)
291		*max_slots = max_len;
292	return de;
293}
294
295static struct f2fs_dir_entry *find_in_level(struct inode *dir,
296					unsigned int level,
297					const struct f2fs_filename *fname,
298					struct page **res_page)
299{
300	int s = GET_DENTRY_SLOTS(fname->disk_name.len);
301	unsigned int nbucket, nblock;
302	unsigned int bidx, end_block;
303	struct page *dentry_page;
304	struct f2fs_dir_entry *de = NULL;
305	bool room = false;
306	int max_slots;
307
308	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
309	nblock = bucket_blocks(level);
310
311	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
312			       le32_to_cpu(fname->hash) % nbucket);
313	end_block = bidx + nblock;
314
315	for (; bidx < end_block; bidx++) {
316		/* no need to allocate new dentry pages to all the indices */
317		dentry_page = f2fs_find_data_page(dir, bidx);
318		if (IS_ERR(dentry_page)) {
319			if (PTR_ERR(dentry_page) == -ENOENT) {
320				room = true;
321				continue;
322			} else {
323				*res_page = dentry_page;
324				break;
325			}
326		}
327
328		de = find_in_block(dir, dentry_page, fname, &max_slots);
329		if (de) {
330			*res_page = dentry_page;
331			break;
332		}
333
334		if (max_slots >= s)
335			room = true;
336		f2fs_put_page(dentry_page, 0);
337	}
338
339	if (!de && room && F2FS_I(dir)->chash != fname->hash) {
340		F2FS_I(dir)->chash = fname->hash;
341		F2FS_I(dir)->clevel = level;
342	}
343
344	return de;
345}
346
347struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
348					 const struct f2fs_filename *fname,
349					 struct page **res_page)
350{
351	unsigned long npages = dir_blocks(dir);
352	struct f2fs_dir_entry *de = NULL;
353	unsigned int max_depth;
354	unsigned int level;
355
356	*res_page = NULL;
357
358	if (f2fs_has_inline_dentry(dir)) {
359		de = f2fs_find_in_inline_dir(dir, fname, res_page);
360		goto out;
361	}
362
363	if (npages == 0)
364		goto out;
365
366	max_depth = F2FS_I(dir)->i_current_depth;
367	if (unlikely(max_depth > MAX_DIR_HASH_DEPTH)) {
368		f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %lu: %u",
369			  dir->i_ino, max_depth);
370		max_depth = MAX_DIR_HASH_DEPTH;
371		f2fs_i_depth_write(dir, max_depth);
372	}
373
374	for (level = 0; level < max_depth; level++) {
375		de = find_in_level(dir, level, fname, res_page);
376		if (de || IS_ERR(*res_page))
377			break;
378	}
379out:
380	/* This is to increase the speed of f2fs_create */
381	if (!de)
382		F2FS_I(dir)->task = current;
383	return de;
384}
385
386/*
387 * Find an entry in the specified directory with the wanted name.
388 * It returns the page where the entry was found (as a parameter - res_page),
389 * and the entry itself. Page is returned mapped and unlocked.
390 * Entry is guaranteed to be valid.
391 */
392struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
393			const struct qstr *child, struct page **res_page)
394{
395	struct f2fs_dir_entry *de = NULL;
396	struct f2fs_filename fname;
397	int err;
398
399	err = f2fs_setup_filename(dir, child, 1, &fname);
400	if (err) {
401		if (err == -ENOENT)
402			*res_page = NULL;
403		else
404			*res_page = ERR_PTR(err);
405		return NULL;
406	}
407
408	de = __f2fs_find_entry(dir, &fname, res_page);
409
410	f2fs_free_filename(&fname);
411	return de;
412}
413
414struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
415{
416	struct qstr dotdot = QSTR_INIT("..", 2);
417
418	return f2fs_find_entry(dir, &dotdot, p);
419}
420
421ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
422							struct page **page)
423{
424	ino_t res = 0;
425	struct f2fs_dir_entry *de;
426
427	de = f2fs_find_entry(dir, qstr, page);
428	if (de) {
429		res = le32_to_cpu(de->ino);
430		f2fs_put_page(*page, 0);
431	}
432
433	return res;
434}
435
436void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
437		struct page *page, struct inode *inode)
438{
439	enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
440	lock_page(page);
441	f2fs_wait_on_page_writeback(page, type, true, true);
442	de->ino = cpu_to_le32(inode->i_ino);
443	set_de_type(de, inode->i_mode);
444	set_page_dirty(page);
445
446	dir->i_mtime = dir->i_ctime = current_time(dir);
447	f2fs_mark_inode_dirty_sync(dir, false);
448	f2fs_put_page(page, 1);
449}
450
451static void init_dent_inode(const struct f2fs_filename *fname,
452			    struct page *ipage)
453{
454	struct f2fs_inode *ri;
455
456	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
457
458	/* copy name info. to this inode page */
459	ri = F2FS_INODE(ipage);
460	ri->i_namelen = cpu_to_le32(fname->disk_name.len);
461	memcpy(ri->i_name, fname->disk_name.name, fname->disk_name.len);
462	set_page_dirty(ipage);
463}
464
465void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
466					struct f2fs_dentry_ptr *d)
467{
468	struct fscrypt_str dot = FSTR_INIT(".", 1);
469	struct fscrypt_str dotdot = FSTR_INIT("..", 2);
470
471	/* update dirent of "." */
472	f2fs_update_dentry(inode->i_ino, inode->i_mode, d, &dot, 0, 0);
473
474	/* update dirent of ".." */
475	f2fs_update_dentry(parent->i_ino, parent->i_mode, d, &dotdot, 0, 1);
476}
477
478static int make_empty_dir(struct inode *inode,
479		struct inode *parent, struct page *page)
480{
481	struct page *dentry_page;
482	struct f2fs_dentry_block *dentry_blk;
483	struct f2fs_dentry_ptr d;
484
485	if (f2fs_has_inline_dentry(inode))
486		return f2fs_make_empty_inline_dir(inode, parent, page);
487
488	dentry_page = f2fs_get_new_data_page(inode, page, 0, true);
489	if (IS_ERR(dentry_page))
490		return PTR_ERR(dentry_page);
491
492	dentry_blk = page_address(dentry_page);
493
494	make_dentry_ptr_block(NULL, &d, dentry_blk);
495	f2fs_do_make_empty_dir(inode, parent, &d);
496
497	set_page_dirty(dentry_page);
498	f2fs_put_page(dentry_page, 1);
499	return 0;
500}
501
502struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
503			const struct f2fs_filename *fname, struct page *dpage)
504{
505	struct page *page;
506	int err;
507
508	if (is_inode_flag_set(inode, FI_NEW_INODE)) {
509		page = f2fs_new_inode_page(inode);
510		if (IS_ERR(page))
511			return page;
512
513		if (S_ISDIR(inode->i_mode)) {
514			/* in order to handle error case */
515			get_page(page);
516			err = make_empty_dir(inode, dir, page);
517			if (err) {
518				lock_page(page);
519				goto put_error;
520			}
521			put_page(page);
522		}
523
524		err = f2fs_init_acl(inode, dir, page, dpage);
525		if (err)
526			goto put_error;
527
528		err = f2fs_init_security(inode, dir,
529					 fname ? fname->usr_fname : NULL, page);
530		if (err)
531			goto put_error;
532
533		if (IS_ENCRYPTED(inode)) {
534			err = fscrypt_set_context(inode, page);
535			if (err)
536				goto put_error;
537		}
538	} else {
539		page = f2fs_get_node_page(F2FS_I_SB(dir), inode->i_ino);
540		if (IS_ERR(page))
541			return page;
542	}
543
544	if (fname) {
545		init_dent_inode(fname, page);
546		if (IS_ENCRYPTED(dir))
547			file_set_enc_name(inode);
548	}
549
550	/*
551	 * This file should be checkpointed during fsync.
552	 * We lost i_pino from now on.
553	 */
554	if (is_inode_flag_set(inode, FI_INC_LINK)) {
555		if (!S_ISDIR(inode->i_mode))
556			file_lost_pino(inode);
557		/*
558		 * If link the tmpfile to alias through linkat path,
559		 * we should remove this inode from orphan list.
560		 */
561		if (inode->i_nlink == 0)
562			f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
563		f2fs_i_links_write(inode, true);
564	}
565	return page;
566
567put_error:
568	clear_nlink(inode);
569	f2fs_update_inode(inode, page);
570	f2fs_put_page(page, 1);
571	return ERR_PTR(err);
572}
573
574void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
575						unsigned int current_depth)
576{
577	if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) {
578		if (S_ISDIR(inode->i_mode))
579			f2fs_i_links_write(dir, true);
580		clear_inode_flag(inode, FI_NEW_INODE);
581	}
582	dir->i_mtime = dir->i_ctime = current_time(dir);
583	f2fs_mark_inode_dirty_sync(dir, false);
584
585	if (F2FS_I(dir)->i_current_depth != current_depth)
586		f2fs_i_depth_write(dir, current_depth);
587
588	if (inode && is_inode_flag_set(inode, FI_INC_LINK))
589		clear_inode_flag(inode, FI_INC_LINK);
590}
591
592int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots)
593{
594	int bit_start = 0;
595	int zero_start, zero_end;
596next:
597	zero_start = find_next_zero_bit_le(bitmap, max_slots, bit_start);
598	if (zero_start >= max_slots)
599		return max_slots;
600
601	zero_end = find_next_bit_le(bitmap, max_slots, zero_start);
602	if (zero_end - zero_start >= slots)
603		return zero_start;
604
605	bit_start = zero_end + 1;
606
607	if (zero_end + 1 >= max_slots)
608		return max_slots;
609	goto next;
610}
611
612bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
613			  const struct f2fs_filename *fname)
614{
615	struct f2fs_dentry_ptr d;
616	unsigned int bit_pos;
617	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
618
619	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage));
620
621	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
622
623	return bit_pos < d.max;
624}
625
626void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
627			const struct fscrypt_str *name, f2fs_hash_t name_hash,
628			unsigned int bit_pos)
629{
630	struct f2fs_dir_entry *de;
631	int slots = GET_DENTRY_SLOTS(name->len);
632	int i;
633
634	de = &d->dentry[bit_pos];
635	de->hash_code = name_hash;
636	de->name_len = cpu_to_le16(name->len);
637	memcpy(d->filename[bit_pos], name->name, name->len);
638	de->ino = cpu_to_le32(ino);
639	set_de_type(de, mode);
640	for (i = 0; i < slots; i++) {
641		__set_bit_le(bit_pos + i, (void *)d->bitmap);
642		/* avoid wrong garbage data for readdir */
643		if (i)
644			(de + i)->name_len = 0;
645	}
646}
647
648int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
649			   struct inode *inode, nid_t ino, umode_t mode)
650{
651	unsigned int bit_pos;
652	unsigned int level;
653	unsigned int current_depth;
654	unsigned long bidx, block;
655	unsigned int nbucket, nblock;
656	struct page *dentry_page = NULL;
657	struct f2fs_dentry_block *dentry_blk = NULL;
658	struct f2fs_dentry_ptr d;
659	struct page *page = NULL;
660	int slots, err = 0;
661
662	level = 0;
663	slots = GET_DENTRY_SLOTS(fname->disk_name.len);
664
665	current_depth = F2FS_I(dir)->i_current_depth;
666	if (F2FS_I(dir)->chash == fname->hash) {
667		level = F2FS_I(dir)->clevel;
668		F2FS_I(dir)->chash = 0;
669	}
670
671start:
672	if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) {
673		f2fs_show_injection_info(F2FS_I_SB(dir), FAULT_DIR_DEPTH);
674		return -ENOSPC;
675	}
676
677	if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
678		return -ENOSPC;
679
680	/* Increase the depth, if required */
681	if (level == current_depth)
682		++current_depth;
683
684	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
685	nblock = bucket_blocks(level);
686
687	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
688				(le32_to_cpu(fname->hash) % nbucket));
689
690	for (block = bidx; block <= (bidx + nblock - 1); block++) {
691		dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
692		if (IS_ERR(dentry_page))
693			return PTR_ERR(dentry_page);
694
695		dentry_blk = page_address(dentry_page);
696		bit_pos = f2fs_room_for_filename(&dentry_blk->dentry_bitmap,
697						slots, NR_DENTRY_IN_BLOCK);
698		if (bit_pos < NR_DENTRY_IN_BLOCK)
699			goto add_dentry;
700
701		f2fs_put_page(dentry_page, 1);
702	}
703
704	/* Move to next level to find the empty slot for new dentry */
705	++level;
706	goto start;
707add_dentry:
708	f2fs_wait_on_page_writeback(dentry_page, DATA, true, true);
709
710	if (inode) {
711		down_write(&F2FS_I(inode)->i_sem);
712		page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
713		if (IS_ERR(page)) {
714			err = PTR_ERR(page);
715			goto fail;
716		}
717	}
718
719	make_dentry_ptr_block(NULL, &d, dentry_blk);
720	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
721			   bit_pos);
722
723	set_page_dirty(dentry_page);
724
725	if (inode) {
726		f2fs_i_pino_write(inode, dir->i_ino);
727
728		/* synchronize inode page's data from inode cache */
729		if (is_inode_flag_set(inode, FI_NEW_INODE))
730			f2fs_update_inode(inode, page);
731
732		f2fs_put_page(page, 1);
733	}
734
735	f2fs_update_parent_metadata(dir, inode, current_depth);
736fail:
737	if (inode)
738		up_write(&F2FS_I(inode)->i_sem);
739
740	f2fs_put_page(dentry_page, 1);
741
742	return err;
743}
744
745int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
746		    struct inode *inode, nid_t ino, umode_t mode)
747{
748	int err = -EAGAIN;
749
750	if (f2fs_has_inline_dentry(dir))
751		err = f2fs_add_inline_entry(dir, fname, inode, ino, mode);
752	if (err == -EAGAIN)
753		err = f2fs_add_regular_entry(dir, fname, inode, ino, mode);
754
755	f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
756	return err;
757}
758
759/*
760 * Caller should grab and release a rwsem by calling f2fs_lock_op() and
761 * f2fs_unlock_op().
762 */
763int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
764				struct inode *inode, nid_t ino, umode_t mode)
765{
766	struct f2fs_filename fname;
767	struct page *page = NULL;
768	struct f2fs_dir_entry *de = NULL;
769	int err;
770
771	err = f2fs_setup_filename(dir, name, 0, &fname);
772	if (err)
773		return err;
774
775	/*
776	 * An immature stackable filesystem shows a race condition between lookup
777	 * and create. If we have same task when doing lookup and create, it's
778	 * definitely fine as expected by VFS normally. Otherwise, let's just
779	 * verify on-disk dentry one more time, which guarantees filesystem
780	 * consistency more.
781	 */
782	if (current != F2FS_I(dir)->task) {
783		de = __f2fs_find_entry(dir, &fname, &page);
784		F2FS_I(dir)->task = NULL;
785	}
786	if (de) {
787		f2fs_put_page(page, 0);
788		err = -EEXIST;
789	} else if (IS_ERR(page)) {
790		err = PTR_ERR(page);
791	} else {
792		err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
793	}
794	f2fs_free_filename(&fname);
795	return err;
796}
797
798int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
799{
800	struct page *page;
801	int err = 0;
802
803	down_write(&F2FS_I(inode)->i_sem);
804	page = f2fs_init_inode_metadata(inode, dir, NULL, NULL);
805	if (IS_ERR(page)) {
806		err = PTR_ERR(page);
807		goto fail;
808	}
809	f2fs_put_page(page, 1);
810
811	clear_inode_flag(inode, FI_NEW_INODE);
812	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
813fail:
814	up_write(&F2FS_I(inode)->i_sem);
815	return err;
816}
817
818void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
819{
820	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
821
822	down_write(&F2FS_I(inode)->i_sem);
823
824	if (S_ISDIR(inode->i_mode))
825		f2fs_i_links_write(dir, false);
826	inode->i_ctime = current_time(inode);
827
828	f2fs_i_links_write(inode, false);
829	if (S_ISDIR(inode->i_mode)) {
830		f2fs_i_links_write(inode, false);
831		f2fs_i_size_write(inode, 0);
832	}
833	up_write(&F2FS_I(inode)->i_sem);
834
835	if (inode->i_nlink == 0)
836		f2fs_add_orphan_inode(inode);
837	else
838		f2fs_release_orphan_inode(sbi);
839}
840
841/*
842 * It only removes the dentry from the dentry page, corresponding name
843 * entry in name page does not need to be touched during deletion.
844 */
845void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
846					struct inode *dir, struct inode *inode)
847{
848	struct	f2fs_dentry_block *dentry_blk;
849	unsigned int bit_pos;
850	int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
851	int i;
852
853	f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
854
855	if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT)
856		f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO);
857
858	if (f2fs_has_inline_dentry(dir))
859		return f2fs_delete_inline_entry(dentry, page, dir, inode);
860
861	lock_page(page);
862	f2fs_wait_on_page_writeback(page, DATA, true, true);
863
864	dentry_blk = page_address(page);
865	bit_pos = dentry - dentry_blk->dentry;
866	for (i = 0; i < slots; i++)
867		__clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
868
869	/* Let's check and deallocate this dentry page */
870	bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
871			NR_DENTRY_IN_BLOCK,
872			0);
873	set_page_dirty(page);
874
875	if (bit_pos == NR_DENTRY_IN_BLOCK &&
876		!f2fs_truncate_hole(dir, page->index, page->index + 1)) {
877		f2fs_clear_page_cache_dirty_tag(page);
878		clear_page_dirty_for_io(page);
879		f2fs_clear_page_private(page);
880		ClearPageUptodate(page);
881		clear_cold_data(page);
882		inode_dec_dirty_pages(dir);
883		f2fs_remove_dirty_inode(dir);
884	}
885	f2fs_put_page(page, 1);
886
887	dir->i_ctime = dir->i_mtime = current_time(dir);
888	f2fs_mark_inode_dirty_sync(dir, false);
889
890	if (inode)
891		f2fs_drop_nlink(dir, inode);
892}
893
894bool f2fs_empty_dir(struct inode *dir)
895{
896	unsigned long bidx;
897	struct page *dentry_page;
898	unsigned int bit_pos;
899	struct f2fs_dentry_block *dentry_blk;
900	unsigned long nblock = dir_blocks(dir);
901
902	if (f2fs_has_inline_dentry(dir))
903		return f2fs_empty_inline_dir(dir);
904
905	for (bidx = 0; bidx < nblock; bidx++) {
906		dentry_page = f2fs_get_lock_data_page(dir, bidx, false);
907		if (IS_ERR(dentry_page)) {
908			if (PTR_ERR(dentry_page) == -ENOENT)
909				continue;
910			else
911				return false;
912		}
913
914		dentry_blk = page_address(dentry_page);
915		if (bidx == 0)
916			bit_pos = 2;
917		else
918			bit_pos = 0;
919		bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
920						NR_DENTRY_IN_BLOCK,
921						bit_pos);
922
923		f2fs_put_page(dentry_page, 1);
924
925		if (bit_pos < NR_DENTRY_IN_BLOCK)
926			return false;
927	}
928	return true;
929}
930
931int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
932			unsigned int start_pos, struct fscrypt_str *fstr)
933{
934	unsigned char d_type = DT_UNKNOWN;
935	unsigned int bit_pos;
936	struct f2fs_dir_entry *de = NULL;
937	struct fscrypt_str de_name = FSTR_INIT(NULL, 0);
938	struct f2fs_sb_info *sbi = F2FS_I_SB(d->inode);
939	struct blk_plug plug;
940	bool readdir_ra = sbi->readdir_ra == 1;
941	bool found_valid_dirent = false;
942	int err = 0;
943
944	bit_pos = ((unsigned long)ctx->pos % d->max);
945
946	if (readdir_ra)
947		blk_start_plug(&plug);
948
949	while (bit_pos < d->max) {
950		bit_pos = find_next_bit_le(d->bitmap, d->max, bit_pos);
951		if (bit_pos >= d->max)
952			break;
953
954		de = &d->dentry[bit_pos];
955		if (de->name_len == 0) {
956			if (found_valid_dirent || !bit_pos) {
957				printk_ratelimited(
958					"%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.",
959					KERN_WARNING, sbi->sb->s_id,
960					le32_to_cpu(de->ino));
961				set_sbi_flag(sbi, SBI_NEED_FSCK);
962			}
963			bit_pos++;
964			ctx->pos = start_pos + bit_pos;
965			continue;
966		}
967
968		d_type = f2fs_get_de_type(de);
969
970		de_name.name = d->filename[bit_pos];
971		de_name.len = le16_to_cpu(de->name_len);
972
973		/* check memory boundary before moving forward */
974		bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
975		if (unlikely(bit_pos > d->max ||
976				le16_to_cpu(de->name_len) > F2FS_NAME_LEN)) {
977			f2fs_warn(sbi, "%s: corrupted namelen=%d, run fsck to fix.",
978				  __func__, le16_to_cpu(de->name_len));
979			set_sbi_flag(sbi, SBI_NEED_FSCK);
980			err = -EFSCORRUPTED;
981			goto out;
982		}
983
984		if (IS_ENCRYPTED(d->inode)) {
985			int save_len = fstr->len;
986
987			err = fscrypt_fname_disk_to_usr(d->inode,
988						(u32)le32_to_cpu(de->hash_code),
989						0, &de_name, fstr);
990			if (err)
991				goto out;
992
993			de_name = *fstr;
994			fstr->len = save_len;
995		}
996
997		if (!dir_emit(ctx, de_name.name, de_name.len,
998					le32_to_cpu(de->ino), d_type)) {
999			err = 1;
1000			goto out;
1001		}
1002
1003		if (readdir_ra)
1004			f2fs_ra_node_page(sbi, le32_to_cpu(de->ino));
1005
1006		ctx->pos = start_pos + bit_pos;
1007		found_valid_dirent = true;
1008	}
1009out:
1010	if (readdir_ra)
1011		blk_finish_plug(&plug);
1012	return err;
1013}
1014
1015static int f2fs_readdir(struct file *file, struct dir_context *ctx)
1016{
1017	struct inode *inode = file_inode(file);
1018	unsigned long npages = dir_blocks(inode);
1019	struct f2fs_dentry_block *dentry_blk = NULL;
1020	struct page *dentry_page = NULL;
1021	struct file_ra_state *ra = &file->f_ra;
1022	loff_t start_pos = ctx->pos;
1023	unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
1024	struct f2fs_dentry_ptr d;
1025	struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
1026	int err = 0;
1027
1028	if (IS_ENCRYPTED(inode)) {
1029		err = fscrypt_get_encryption_info(inode);
1030		if (err)
1031			goto out;
1032
1033		err = fscrypt_fname_alloc_buffer(F2FS_NAME_LEN, &fstr);
1034		if (err < 0)
1035			goto out;
1036	}
1037
1038	if (f2fs_has_inline_dentry(inode)) {
1039		err = f2fs_read_inline_dir(file, ctx, &fstr);
1040		goto out_free;
1041	}
1042
1043	for (; n < npages; n++, ctx->pos = n * NR_DENTRY_IN_BLOCK) {
1044
1045		/* allow readdir() to be interrupted */
1046		if (fatal_signal_pending(current)) {
1047			err = -ERESTARTSYS;
1048			goto out_free;
1049		}
1050		cond_resched();
1051
1052		/* readahead for multi pages of dir */
1053		if (npages - n > 1 && !ra_has_index(ra, n))
1054			page_cache_sync_readahead(inode->i_mapping, ra, file, n,
1055				min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
1056
1057		dentry_page = f2fs_find_data_page(inode, n);
1058		if (IS_ERR(dentry_page)) {
1059			err = PTR_ERR(dentry_page);
1060			if (err == -ENOENT) {
1061				err = 0;
1062				continue;
1063			} else {
1064				goto out_free;
1065			}
1066		}
1067
1068		dentry_blk = page_address(dentry_page);
1069
1070		make_dentry_ptr_block(inode, &d, dentry_blk);
1071
1072		err = f2fs_fill_dentries(ctx, &d,
1073				n * NR_DENTRY_IN_BLOCK, &fstr);
1074		if (err) {
1075			f2fs_put_page(dentry_page, 0);
1076			break;
1077		}
1078
1079		f2fs_put_page(dentry_page, 0);
1080	}
1081out_free:
1082	fscrypt_fname_free_buffer(&fstr);
1083out:
1084	trace_f2fs_readdir(inode, start_pos, ctx->pos, err);
1085	return err < 0 ? err : 0;
1086}
1087
1088static int f2fs_dir_open(struct inode *inode, struct file *filp)
1089{
1090	if (IS_ENCRYPTED(inode))
1091		return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
1092	return 0;
1093}
1094
1095const struct file_operations f2fs_dir_operations = {
1096	.llseek		= generic_file_llseek,
1097	.read		= generic_read_dir,
1098	.iterate_shared	= f2fs_readdir,
1099	.fsync		= f2fs_sync_file,
1100	.open		= f2fs_dir_open,
1101	.unlocked_ioctl	= f2fs_ioctl,
1102#ifdef CONFIG_COMPAT
1103	.compat_ioctl   = f2fs_compat_ioctl,
1104#endif
1105};
1106
1107#ifdef CONFIG_UNICODE
1108const struct dentry_operations f2fs_dentry_ops = {
1109	.d_hash = generic_ci_d_hash,
1110	.d_compare = generic_ci_d_compare,
1111};
1112#endif
1113