1/*
2 * fs/f2fs/dir.c
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 *             http://www.samsung.com/
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#include <linux/fs.h>
12#include <linux/f2fs_fs.h>
13#include "f2fs.h"
14#include "node.h"
15#include "acl.h"
16#include "xattr.h"
17
18static unsigned long dir_blocks(struct inode *inode)
19{
20	return ((unsigned long long) (i_size_read(inode) + PAGE_CACHE_SIZE - 1))
21							>> PAGE_CACHE_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
51#define S_SHIFT 12
52static unsigned char f2fs_type_by_mode[S_IFMT >> S_SHIFT] = {
53	[S_IFREG >> S_SHIFT]	= F2FS_FT_REG_FILE,
54	[S_IFDIR >> S_SHIFT]	= F2FS_FT_DIR,
55	[S_IFCHR >> S_SHIFT]	= F2FS_FT_CHRDEV,
56	[S_IFBLK >> S_SHIFT]	= F2FS_FT_BLKDEV,
57	[S_IFIFO >> S_SHIFT]	= F2FS_FT_FIFO,
58	[S_IFSOCK >> S_SHIFT]	= F2FS_FT_SOCK,
59	[S_IFLNK >> S_SHIFT]	= F2FS_FT_SYMLINK,
60};
61
62static void set_de_type(struct f2fs_dir_entry *de, struct inode *inode)
63{
64	umode_t mode = inode->i_mode;
65	de->file_type = f2fs_type_by_mode[(mode & S_IFMT) >> S_SHIFT];
66}
67
68static unsigned long dir_block_index(unsigned int level,
69				int dir_level, unsigned int idx)
70{
71	unsigned long i;
72	unsigned long bidx = 0;
73
74	for (i = 0; i < level; i++)
75		bidx += dir_buckets(i, dir_level) * bucket_blocks(i);
76	bidx += idx * bucket_blocks(level);
77	return bidx;
78}
79
80static bool early_match_name(size_t namelen, f2fs_hash_t namehash,
81				struct f2fs_dir_entry *de)
82{
83	if (le16_to_cpu(de->name_len) != namelen)
84		return false;
85
86	if (de->hash_code != namehash)
87		return false;
88
89	return true;
90}
91
92static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
93			struct qstr *name, int *max_slots,
94			f2fs_hash_t namehash, struct page **res_page)
95{
96	struct f2fs_dir_entry *de;
97	unsigned long bit_pos = 0;
98	struct f2fs_dentry_block *dentry_blk = kmap(dentry_page);
99	const void *dentry_bits = &dentry_blk->dentry_bitmap;
100	int max_len = 0;
101
102	while (bit_pos < NR_DENTRY_IN_BLOCK) {
103		if (!test_bit_le(bit_pos, dentry_bits)) {
104			if (bit_pos == 0)
105				max_len = 1;
106			else if (!test_bit_le(bit_pos - 1, dentry_bits))
107				max_len++;
108			bit_pos++;
109			continue;
110		}
111		de = &dentry_blk->dentry[bit_pos];
112		if (early_match_name(name->len, namehash, de)) {
113			if (!memcmp(dentry_blk->filename[bit_pos],
114							name->name,
115							name->len)) {
116				*res_page = dentry_page;
117				goto found;
118			}
119		}
120		if (max_len > *max_slots) {
121			*max_slots = max_len;
122			max_len = 0;
123		}
124
125		/*
126		 * For the most part, it should be a bug when name_len is zero.
127		 * We stop here for figuring out where the bugs has occurred.
128		 */
129		f2fs_bug_on(F2FS_P_SB(dentry_page), !de->name_len);
130
131		bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
132	}
133
134	de = NULL;
135	kunmap(dentry_page);
136found:
137	if (max_len > *max_slots)
138		*max_slots = max_len;
139	return de;
140}
141
142static struct f2fs_dir_entry *find_in_level(struct inode *dir,
143			unsigned int level, struct qstr *name,
144			f2fs_hash_t namehash, struct page **res_page)
145{
146	int s = GET_DENTRY_SLOTS(name->len);
147	unsigned int nbucket, nblock;
148	unsigned int bidx, end_block;
149	struct page *dentry_page;
150	struct f2fs_dir_entry *de = NULL;
151	bool room = false;
152	int max_slots = 0;
153
154	f2fs_bug_on(F2FS_I_SB(dir), level > MAX_DIR_HASH_DEPTH);
155
156	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
157	nblock = bucket_blocks(level);
158
159	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
160					le32_to_cpu(namehash) % nbucket);
161	end_block = bidx + nblock;
162
163	for (; bidx < end_block; bidx++) {
164		/* no need to allocate new dentry pages to all the indices */
165		dentry_page = find_data_page(dir, bidx, true);
166		if (IS_ERR(dentry_page)) {
167			room = true;
168			continue;
169		}
170
171		de = find_in_block(dentry_page, name, &max_slots,
172					namehash, res_page);
173		if (de)
174			break;
175
176		if (max_slots >= s)
177			room = true;
178		f2fs_put_page(dentry_page, 0);
179	}
180
181	if (!de && room && F2FS_I(dir)->chash != namehash) {
182		F2FS_I(dir)->chash = namehash;
183		F2FS_I(dir)->clevel = level;
184	}
185
186	return de;
187}
188
189/*
190 * Find an entry in the specified directory with the wanted name.
191 * It returns the page where the entry was found (as a parameter - res_page),
192 * and the entry itself. Page is returned mapped and unlocked.
193 * Entry is guaranteed to be valid.
194 */
195struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
196			struct qstr *child, struct page **res_page)
197{
198	unsigned long npages = dir_blocks(dir);
199	struct f2fs_dir_entry *de = NULL;
200	f2fs_hash_t name_hash;
201	unsigned int max_depth;
202	unsigned int level;
203
204	if (npages == 0)
205		return NULL;
206
207	*res_page = NULL;
208
209	name_hash = f2fs_dentry_hash(child);
210	max_depth = F2FS_I(dir)->i_current_depth;
211
212	for (level = 0; level < max_depth; level++) {
213		de = find_in_level(dir, level, child, name_hash, res_page);
214		if (de)
215			break;
216	}
217	if (!de && F2FS_I(dir)->chash != name_hash) {
218		F2FS_I(dir)->chash = name_hash;
219		F2FS_I(dir)->clevel = level - 1;
220	}
221	return de;
222}
223
224struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
225{
226	struct page *page;
227	struct f2fs_dir_entry *de;
228	struct f2fs_dentry_block *dentry_blk;
229
230	page = get_lock_data_page(dir, 0);
231	if (IS_ERR(page))
232		return NULL;
233
234	dentry_blk = kmap(page);
235	de = &dentry_blk->dentry[1];
236	*p = page;
237	unlock_page(page);
238	return de;
239}
240
241ino_t f2fs_inode_by_name(struct inode *dir, struct qstr *qstr)
242{
243	ino_t res = 0;
244	struct f2fs_dir_entry *de;
245	struct page *page;
246
247	de = f2fs_find_entry(dir, qstr, &page);
248	if (de) {
249		res = le32_to_cpu(de->ino);
250		kunmap(page);
251		f2fs_put_page(page, 0);
252	}
253
254	return res;
255}
256
257void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
258		struct page *page, struct inode *inode)
259{
260	lock_page(page);
261	f2fs_wait_on_page_writeback(page, DATA);
262	de->ino = cpu_to_le32(inode->i_ino);
263	set_de_type(de, inode);
264	kunmap(page);
265	set_page_dirty(page);
266	dir->i_mtime = dir->i_ctime = CURRENT_TIME;
267	mark_inode_dirty(dir);
268
269	f2fs_put_page(page, 1);
270}
271
272static void init_dent_inode(const struct qstr *name, struct page *ipage)
273{
274	struct f2fs_inode *ri;
275
276	f2fs_wait_on_page_writeback(ipage, NODE);
277
278	/* copy name info. to this inode page */
279	ri = F2FS_INODE(ipage);
280	ri->i_namelen = cpu_to_le32(name->len);
281	memcpy(ri->i_name, name->name, name->len);
282	set_page_dirty(ipage);
283}
284
285int update_dent_inode(struct inode *inode, const struct qstr *name)
286{
287	struct page *page;
288
289	page = get_node_page(F2FS_I_SB(inode), inode->i_ino);
290	if (IS_ERR(page))
291		return PTR_ERR(page);
292
293	init_dent_inode(name, page);
294	f2fs_put_page(page, 1);
295
296	return 0;
297}
298
299static int make_empty_dir(struct inode *inode,
300		struct inode *parent, struct page *page)
301{
302	struct page *dentry_page;
303	struct f2fs_dentry_block *dentry_blk;
304	struct f2fs_dir_entry *de;
305
306	dentry_page = get_new_data_page(inode, page, 0, true);
307	if (IS_ERR(dentry_page))
308		return PTR_ERR(dentry_page);
309
310
311	dentry_blk = kmap_atomic(dentry_page);
312
313	de = &dentry_blk->dentry[0];
314	de->name_len = cpu_to_le16(1);
315	de->hash_code = 0;
316	de->ino = cpu_to_le32(inode->i_ino);
317	memcpy(dentry_blk->filename[0], ".", 1);
318	set_de_type(de, inode);
319
320	de = &dentry_blk->dentry[1];
321	de->hash_code = 0;
322	de->name_len = cpu_to_le16(2);
323	de->ino = cpu_to_le32(parent->i_ino);
324	memcpy(dentry_blk->filename[1], "..", 2);
325	set_de_type(de, inode);
326
327	test_and_set_bit_le(0, &dentry_blk->dentry_bitmap);
328	test_and_set_bit_le(1, &dentry_blk->dentry_bitmap);
329	kunmap_atomic(dentry_blk);
330
331	set_page_dirty(dentry_page);
332	f2fs_put_page(dentry_page, 1);
333	return 0;
334}
335
336static struct page *init_inode_metadata(struct inode *inode,
337		struct inode *dir, const struct qstr *name)
338{
339	struct page *page;
340	int err;
341
342	if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) {
343		page = new_inode_page(inode);
344		if (IS_ERR(page))
345			return page;
346
347		if (S_ISDIR(inode->i_mode)) {
348			err = make_empty_dir(inode, dir, page);
349			if (err)
350				goto error;
351		}
352
353		err = f2fs_init_acl(inode, dir, page);
354		if (err)
355			goto put_error;
356
357		err = f2fs_init_security(inode, dir, name, page);
358		if (err)
359			goto put_error;
360	} else {
361		page = get_node_page(F2FS_I_SB(dir), inode->i_ino);
362		if (IS_ERR(page))
363			return page;
364
365		set_cold_node(inode, page);
366	}
367
368	if (name)
369		init_dent_inode(name, page);
370
371	/*
372	 * This file should be checkpointed during fsync.
373	 * We lost i_pino from now on.
374	 */
375	if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) {
376		file_lost_pino(inode);
377		/*
378		 * If link the tmpfile to alias through linkat path,
379		 * we should remove this inode from orphan list.
380		 */
381		if (inode->i_nlink == 0)
382			remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
383		inc_nlink(inode);
384	}
385	return page;
386
387put_error:
388	f2fs_put_page(page, 1);
389error:
390	/* once the failed inode becomes a bad inode, i_mode is S_IFREG */
391	truncate_inode_pages(&inode->i_data, 0);
392	truncate_blocks(inode, 0, false);
393	remove_dirty_dir_inode(inode);
394	remove_inode_page(inode);
395	return ERR_PTR(err);
396}
397
398static void update_parent_metadata(struct inode *dir, struct inode *inode,
399						unsigned int current_depth)
400{
401	if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) {
402		if (S_ISDIR(inode->i_mode)) {
403			inc_nlink(dir);
404			set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
405		}
406		clear_inode_flag(F2FS_I(inode), FI_NEW_INODE);
407	}
408	dir->i_mtime = dir->i_ctime = CURRENT_TIME;
409	mark_inode_dirty(dir);
410
411	if (F2FS_I(dir)->i_current_depth != current_depth) {
412		F2FS_I(dir)->i_current_depth = current_depth;
413		set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
414	}
415
416	if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK))
417		clear_inode_flag(F2FS_I(inode), FI_INC_LINK);
418}
419
420static int room_for_filename(struct f2fs_dentry_block *dentry_blk, int slots)
421{
422	int bit_start = 0;
423	int zero_start, zero_end;
424next:
425	zero_start = find_next_zero_bit_le(&dentry_blk->dentry_bitmap,
426						NR_DENTRY_IN_BLOCK,
427						bit_start);
428	if (zero_start >= NR_DENTRY_IN_BLOCK)
429		return NR_DENTRY_IN_BLOCK;
430
431	zero_end = find_next_bit_le(&dentry_blk->dentry_bitmap,
432						NR_DENTRY_IN_BLOCK,
433						zero_start);
434	if (zero_end - zero_start >= slots)
435		return zero_start;
436
437	bit_start = zero_end + 1;
438
439	if (zero_end + 1 >= NR_DENTRY_IN_BLOCK)
440		return NR_DENTRY_IN_BLOCK;
441	goto next;
442}
443
444/*
445 * Caller should grab and release a rwsem by calling f2fs_lock_op() and
446 * f2fs_unlock_op().
447 */
448int __f2fs_add_link(struct inode *dir, const struct qstr *name,
449						struct inode *inode)
450{
451	unsigned int bit_pos;
452	unsigned int level;
453	unsigned int current_depth;
454	unsigned long bidx, block;
455	f2fs_hash_t dentry_hash;
456	struct f2fs_dir_entry *de;
457	unsigned int nbucket, nblock;
458	size_t namelen = name->len;
459	struct page *dentry_page = NULL;
460	struct f2fs_dentry_block *dentry_blk = NULL;
461	int slots = GET_DENTRY_SLOTS(namelen);
462	struct page *page;
463	int err = 0;
464	int i;
465
466	dentry_hash = f2fs_dentry_hash(name);
467	level = 0;
468	current_depth = F2FS_I(dir)->i_current_depth;
469	if (F2FS_I(dir)->chash == dentry_hash) {
470		level = F2FS_I(dir)->clevel;
471		F2FS_I(dir)->chash = 0;
472	}
473
474start:
475	if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
476		return -ENOSPC;
477
478	/* Increase the depth, if required */
479	if (level == current_depth)
480		++current_depth;
481
482	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
483	nblock = bucket_blocks(level);
484
485	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
486				(le32_to_cpu(dentry_hash) % nbucket));
487
488	for (block = bidx; block <= (bidx + nblock - 1); block++) {
489		dentry_page = get_new_data_page(dir, NULL, block, true);
490		if (IS_ERR(dentry_page))
491			return PTR_ERR(dentry_page);
492
493		dentry_blk = kmap(dentry_page);
494		bit_pos = room_for_filename(dentry_blk, slots);
495		if (bit_pos < NR_DENTRY_IN_BLOCK)
496			goto add_dentry;
497
498		kunmap(dentry_page);
499		f2fs_put_page(dentry_page, 1);
500	}
501
502	/* Move to next level to find the empty slot for new dentry */
503	++level;
504	goto start;
505add_dentry:
506	f2fs_wait_on_page_writeback(dentry_page, DATA);
507
508	down_write(&F2FS_I(inode)->i_sem);
509	page = init_inode_metadata(inode, dir, name);
510	if (IS_ERR(page)) {
511		err = PTR_ERR(page);
512		goto fail;
513	}
514	de = &dentry_blk->dentry[bit_pos];
515	de->hash_code = dentry_hash;
516	de->name_len = cpu_to_le16(namelen);
517	memcpy(dentry_blk->filename[bit_pos], name->name, name->len);
518	de->ino = cpu_to_le32(inode->i_ino);
519	set_de_type(de, inode);
520	for (i = 0; i < slots; i++)
521		test_and_set_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
522	set_page_dirty(dentry_page);
523
524	/* we don't need to mark_inode_dirty now */
525	F2FS_I(inode)->i_pino = dir->i_ino;
526	update_inode(inode, page);
527	f2fs_put_page(page, 1);
528
529	update_parent_metadata(dir, inode, current_depth);
530fail:
531	up_write(&F2FS_I(inode)->i_sem);
532
533	if (is_inode_flag_set(F2FS_I(dir), FI_UPDATE_DIR)) {
534		update_inode_page(dir);
535		clear_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
536	}
537	kunmap(dentry_page);
538	f2fs_put_page(dentry_page, 1);
539	return err;
540}
541
542int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
543{
544	struct page *page;
545	int err = 0;
546
547	down_write(&F2FS_I(inode)->i_sem);
548	page = init_inode_metadata(inode, dir, NULL);
549	if (IS_ERR(page)) {
550		err = PTR_ERR(page);
551		goto fail;
552	}
553	/* we don't need to mark_inode_dirty now */
554	update_inode(inode, page);
555	f2fs_put_page(page, 1);
556
557	clear_inode_flag(F2FS_I(inode), FI_NEW_INODE);
558fail:
559	up_write(&F2FS_I(inode)->i_sem);
560	return err;
561}
562
563/*
564 * It only removes the dentry from the dentry page, corresponding name
565 * entry in name page does not need to be touched during deletion.
566 */
567void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
568						struct inode *inode)
569{
570	struct	f2fs_dentry_block *dentry_blk;
571	unsigned int bit_pos;
572	struct inode *dir = page->mapping->host;
573	int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
574	int i;
575
576	lock_page(page);
577	f2fs_wait_on_page_writeback(page, DATA);
578
579	dentry_blk = page_address(page);
580	bit_pos = dentry - dentry_blk->dentry;
581	for (i = 0; i < slots; i++)
582		test_and_clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
583
584	/* Let's check and deallocate this dentry page */
585	bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
586			NR_DENTRY_IN_BLOCK,
587			0);
588	kunmap(page); /* kunmap - pair of f2fs_find_entry */
589	set_page_dirty(page);
590
591	dir->i_ctime = dir->i_mtime = CURRENT_TIME;
592
593	if (inode) {
594		struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
595
596		down_write(&F2FS_I(inode)->i_sem);
597
598		if (S_ISDIR(inode->i_mode)) {
599			drop_nlink(dir);
600			update_inode_page(dir);
601		}
602		inode->i_ctime = CURRENT_TIME;
603		drop_nlink(inode);
604		if (S_ISDIR(inode->i_mode)) {
605			drop_nlink(inode);
606			i_size_write(inode, 0);
607		}
608		up_write(&F2FS_I(inode)->i_sem);
609		update_inode_page(inode);
610
611		if (inode->i_nlink == 0)
612			add_orphan_inode(sbi, inode->i_ino);
613		else
614			release_orphan_inode(sbi);
615	}
616
617	if (bit_pos == NR_DENTRY_IN_BLOCK) {
618		truncate_hole(dir, page->index, page->index + 1);
619		clear_page_dirty_for_io(page);
620		ClearPageUptodate(page);
621		inode_dec_dirty_pages(dir);
622	}
623	f2fs_put_page(page, 1);
624}
625
626bool f2fs_empty_dir(struct inode *dir)
627{
628	unsigned long bidx;
629	struct page *dentry_page;
630	unsigned int bit_pos;
631	struct	f2fs_dentry_block *dentry_blk;
632	unsigned long nblock = dir_blocks(dir);
633
634	for (bidx = 0; bidx < nblock; bidx++) {
635		dentry_page = get_lock_data_page(dir, bidx);
636		if (IS_ERR(dentry_page)) {
637			if (PTR_ERR(dentry_page) == -ENOENT)
638				continue;
639			else
640				return false;
641		}
642
643
644		dentry_blk = kmap_atomic(dentry_page);
645		if (bidx == 0)
646			bit_pos = 2;
647		else
648			bit_pos = 0;
649		bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
650						NR_DENTRY_IN_BLOCK,
651						bit_pos);
652		kunmap_atomic(dentry_blk);
653
654		f2fs_put_page(dentry_page, 1);
655
656		if (bit_pos < NR_DENTRY_IN_BLOCK)
657			return false;
658	}
659	return true;
660}
661
662static int f2fs_readdir(struct file *file, struct dir_context *ctx)
663{
664	struct inode *inode = file_inode(file);
665	unsigned long npages = dir_blocks(inode);
666	unsigned int bit_pos = 0;
667	struct f2fs_dentry_block *dentry_blk = NULL;
668	struct f2fs_dir_entry *de = NULL;
669	struct page *dentry_page = NULL;
670	struct file_ra_state *ra = &file->f_ra;
671	unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
672	unsigned char d_type = DT_UNKNOWN;
673
674	bit_pos = ((unsigned long)ctx->pos % NR_DENTRY_IN_BLOCK);
675
676	/* readahead for multi pages of dir */
677	if (npages - n > 1 && !ra_has_index(ra, n))
678		page_cache_sync_readahead(inode->i_mapping, ra, file, n,
679				min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
680
681	for (; n < npages; n++) {
682		dentry_page = get_lock_data_page(inode, n);
683		if (IS_ERR(dentry_page))
684			continue;
685
686		dentry_blk = kmap(dentry_page);
687		while (bit_pos < NR_DENTRY_IN_BLOCK) {
688			bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
689							NR_DENTRY_IN_BLOCK,
690							bit_pos);
691			if (bit_pos >= NR_DENTRY_IN_BLOCK)
692				break;
693
694			de = &dentry_blk->dentry[bit_pos];
695			if (de->file_type < F2FS_FT_MAX)
696				d_type = f2fs_filetype_table[de->file_type];
697			else
698				d_type = DT_UNKNOWN;
699			if (!dir_emit(ctx,
700					dentry_blk->filename[bit_pos],
701					le16_to_cpu(de->name_len),
702					le32_to_cpu(de->ino), d_type))
703				goto stop;
704
705			bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
706			ctx->pos = n * NR_DENTRY_IN_BLOCK + bit_pos;
707		}
708		bit_pos = 0;
709		ctx->pos = (n + 1) * NR_DENTRY_IN_BLOCK;
710		kunmap(dentry_page);
711		f2fs_put_page(dentry_page, 1);
712		dentry_page = NULL;
713	}
714stop:
715	if (dentry_page && !IS_ERR(dentry_page)) {
716		kunmap(dentry_page);
717		f2fs_put_page(dentry_page, 1);
718	}
719
720	return 0;
721}
722
723const struct file_operations f2fs_dir_operations = {
724	.llseek		= generic_file_llseek,
725	.read		= generic_read_dir,
726	.iterate	= f2fs_readdir,
727	.fsync		= f2fs_sync_file,
728	.unlocked_ioctl	= f2fs_ioctl,
729};
730