164c6c911bf8dd249aec0858adf5155739b6517e
[firefly-linux-kernel-4.4.55.git] / fs / f2fs / dir.c
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
18 static 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
24 static 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
32 static 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
40 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
52 static 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
62 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
68 static 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
80 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
92 static 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);
136 found:
137         if (max_len > *max_slots)
138                 *max_slots = max_len;
139         return de;
140 }
141
142 static 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  */
195 struct 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 (f2fs_has_inline_dentry(dir))
205                 return find_in_inline_dir(dir, child, res_page);
206
207         if (npages == 0)
208                 return NULL;
209
210         *res_page = NULL;
211
212         name_hash = f2fs_dentry_hash(child);
213         max_depth = F2FS_I(dir)->i_current_depth;
214
215         for (level = 0; level < max_depth; level++) {
216                 de = find_in_level(dir, level, child, name_hash, res_page);
217                 if (de)
218                         break;
219         }
220         if (!de && F2FS_I(dir)->chash != name_hash) {
221                 F2FS_I(dir)->chash = name_hash;
222                 F2FS_I(dir)->clevel = level - 1;
223         }
224         return de;
225 }
226
227 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
228 {
229         struct page *page;
230         struct f2fs_dir_entry *de;
231         struct f2fs_dentry_block *dentry_blk;
232
233         if (f2fs_has_inline_dentry(dir))
234                 return f2fs_parent_inline_dir(dir, p);
235
236         page = get_lock_data_page(dir, 0);
237         if (IS_ERR(page))
238                 return NULL;
239
240         dentry_blk = kmap(page);
241         de = &dentry_blk->dentry[1];
242         *p = page;
243         unlock_page(page);
244         return de;
245 }
246
247 ino_t f2fs_inode_by_name(struct inode *dir, struct qstr *qstr)
248 {
249         ino_t res = 0;
250         struct f2fs_dir_entry *de;
251         struct page *page;
252
253         de = f2fs_find_entry(dir, qstr, &page);
254         if (de) {
255                 res = le32_to_cpu(de->ino);
256                 if (!f2fs_has_inline_dentry(dir))
257                         kunmap(page);
258                 f2fs_put_page(page, 0);
259         }
260
261         return res;
262 }
263
264 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
265                 struct page *page, struct inode *inode)
266 {
267         lock_page(page);
268         f2fs_wait_on_page_writeback(page, DATA);
269         de->ino = cpu_to_le32(inode->i_ino);
270         set_de_type(de, inode);
271         if (!f2fs_has_inline_dentry(dir))
272                 kunmap(page);
273         set_page_dirty(page);
274         dir->i_mtime = dir->i_ctime = CURRENT_TIME;
275         mark_inode_dirty(dir);
276
277         f2fs_put_page(page, 1);
278 }
279
280 static void init_dent_inode(const struct qstr *name, struct page *ipage)
281 {
282         struct f2fs_inode *ri;
283
284         f2fs_wait_on_page_writeback(ipage, NODE);
285
286         /* copy name info. to this inode page */
287         ri = F2FS_INODE(ipage);
288         ri->i_namelen = cpu_to_le32(name->len);
289         memcpy(ri->i_name, name->name, name->len);
290         set_page_dirty(ipage);
291 }
292
293 int update_dent_inode(struct inode *inode, const struct qstr *name)
294 {
295         struct page *page;
296
297         page = get_node_page(F2FS_I_SB(inode), inode->i_ino);
298         if (IS_ERR(page))
299                 return PTR_ERR(page);
300
301         init_dent_inode(name, page);
302         f2fs_put_page(page, 1);
303
304         return 0;
305 }
306
307 static int make_empty_dir(struct inode *inode,
308                 struct inode *parent, struct page *page)
309 {
310         struct page *dentry_page;
311         struct f2fs_dentry_block *dentry_blk;
312         struct f2fs_dir_entry *de;
313
314         if (f2fs_has_inline_dentry(inode))
315                 return make_empty_inline_dir(inode, parent, page);
316
317         dentry_page = get_new_data_page(inode, page, 0, true);
318         if (IS_ERR(dentry_page))
319                 return PTR_ERR(dentry_page);
320
321         dentry_blk = kmap_atomic(dentry_page);
322
323         de = &dentry_blk->dentry[0];
324         de->name_len = cpu_to_le16(1);
325         de->hash_code = 0;
326         de->ino = cpu_to_le32(inode->i_ino);
327         memcpy(dentry_blk->filename[0], ".", 1);
328         set_de_type(de, inode);
329
330         de = &dentry_blk->dentry[1];
331         de->hash_code = 0;
332         de->name_len = cpu_to_le16(2);
333         de->ino = cpu_to_le32(parent->i_ino);
334         memcpy(dentry_blk->filename[1], "..", 2);
335         set_de_type(de, inode);
336
337         test_and_set_bit_le(0, &dentry_blk->dentry_bitmap);
338         test_and_set_bit_le(1, &dentry_blk->dentry_bitmap);
339         kunmap_atomic(dentry_blk);
340
341         set_page_dirty(dentry_page);
342         f2fs_put_page(dentry_page, 1);
343         return 0;
344 }
345
346 struct page *init_inode_metadata(struct inode *inode,
347                 struct inode *dir, const struct qstr *name)
348 {
349         struct page *page;
350         int err;
351
352         if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) {
353                 page = new_inode_page(inode);
354                 if (IS_ERR(page))
355                         return page;
356
357                 if (S_ISDIR(inode->i_mode)) {
358                         err = make_empty_dir(inode, dir, page);
359                         if (err)
360                                 goto error;
361                 }
362
363                 err = f2fs_init_acl(inode, dir, page);
364                 if (err)
365                         goto put_error;
366
367                 err = f2fs_init_security(inode, dir, name, page);
368                 if (err)
369                         goto put_error;
370         } else {
371                 page = get_node_page(F2FS_I_SB(dir), inode->i_ino);
372                 if (IS_ERR(page))
373                         return page;
374
375                 set_cold_node(inode, page);
376         }
377
378         if (name)
379                 init_dent_inode(name, page);
380
381         /*
382          * This file should be checkpointed during fsync.
383          * We lost i_pino from now on.
384          */
385         if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) {
386                 file_lost_pino(inode);
387                 /*
388                  * If link the tmpfile to alias through linkat path,
389                  * we should remove this inode from orphan list.
390                  */
391                 if (inode->i_nlink == 0)
392                         remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
393                 inc_nlink(inode);
394         }
395         return page;
396
397 put_error:
398         f2fs_put_page(page, 1);
399 error:
400         /* once the failed inode becomes a bad inode, i_mode is S_IFREG */
401         truncate_inode_pages(&inode->i_data, 0);
402         truncate_blocks(inode, 0, false);
403         remove_dirty_dir_inode(inode);
404         remove_inode_page(inode);
405         return ERR_PTR(err);
406 }
407
408 void update_parent_metadata(struct inode *dir, struct inode *inode,
409                                                 unsigned int current_depth)
410 {
411         if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) {
412                 if (S_ISDIR(inode->i_mode)) {
413                         inc_nlink(dir);
414                         set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
415                 }
416                 clear_inode_flag(F2FS_I(inode), FI_NEW_INODE);
417         }
418         dir->i_mtime = dir->i_ctime = CURRENT_TIME;
419         mark_inode_dirty(dir);
420
421         if (F2FS_I(dir)->i_current_depth != current_depth) {
422                 F2FS_I(dir)->i_current_depth = current_depth;
423                 set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
424         }
425
426         if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK))
427                 clear_inode_flag(F2FS_I(inode), FI_INC_LINK);
428 }
429
430 int room_for_filename(const void *bitmap, int slots, int max_slots)
431 {
432         int bit_start = 0;
433         int zero_start, zero_end;
434 next:
435         zero_start = find_next_zero_bit_le(bitmap, max_slots, bit_start);
436         if (zero_start >= max_slots)
437                 return max_slots;
438
439         zero_end = find_next_bit_le(bitmap, max_slots, zero_start);
440         if (zero_end - zero_start >= slots)
441                 return zero_start;
442
443         bit_start = zero_end + 1;
444
445         if (zero_end + 1 >= max_slots)
446                 return max_slots;
447         goto next;
448 }
449
450 /*
451  * Caller should grab and release a rwsem by calling f2fs_lock_op() and
452  * f2fs_unlock_op().
453  */
454 int __f2fs_add_link(struct inode *dir, const struct qstr *name,
455                                                 struct inode *inode)
456 {
457         unsigned int bit_pos;
458         unsigned int level;
459         unsigned int current_depth;
460         unsigned long bidx, block;
461         f2fs_hash_t dentry_hash;
462         struct f2fs_dir_entry *de;
463         unsigned int nbucket, nblock;
464         size_t namelen = name->len;
465         struct page *dentry_page = NULL;
466         struct f2fs_dentry_block *dentry_blk = NULL;
467         int slots = GET_DENTRY_SLOTS(namelen);
468         struct page *page;
469         int err = 0;
470         int i;
471
472         if (f2fs_has_inline_dentry(dir)) {
473                 err = f2fs_add_inline_entry(dir, name, inode);
474                 if (!err || err != -EAGAIN)
475                         return err;
476                 else
477                         err = 0;
478         }
479
480         dentry_hash = f2fs_dentry_hash(name);
481         level = 0;
482         current_depth = F2FS_I(dir)->i_current_depth;
483         if (F2FS_I(dir)->chash == dentry_hash) {
484                 level = F2FS_I(dir)->clevel;
485                 F2FS_I(dir)->chash = 0;
486         }
487
488 start:
489         if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
490                 return -ENOSPC;
491
492         /* Increase the depth, if required */
493         if (level == current_depth)
494                 ++current_depth;
495
496         nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
497         nblock = bucket_blocks(level);
498
499         bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
500                                 (le32_to_cpu(dentry_hash) % nbucket));
501
502         for (block = bidx; block <= (bidx + nblock - 1); block++) {
503                 dentry_page = get_new_data_page(dir, NULL, block, true);
504                 if (IS_ERR(dentry_page))
505                         return PTR_ERR(dentry_page);
506
507                 dentry_blk = kmap(dentry_page);
508                 bit_pos = room_for_filename(&dentry_blk->dentry_bitmap,
509                                                 slots, NR_DENTRY_IN_BLOCK);
510                 if (bit_pos < NR_DENTRY_IN_BLOCK)
511                         goto add_dentry;
512
513                 kunmap(dentry_page);
514                 f2fs_put_page(dentry_page, 1);
515         }
516
517         /* Move to next level to find the empty slot for new dentry */
518         ++level;
519         goto start;
520 add_dentry:
521         f2fs_wait_on_page_writeback(dentry_page, DATA);
522
523         down_write(&F2FS_I(inode)->i_sem);
524         page = init_inode_metadata(inode, dir, name);
525         if (IS_ERR(page)) {
526                 err = PTR_ERR(page);
527                 goto fail;
528         }
529         de = &dentry_blk->dentry[bit_pos];
530         de->hash_code = dentry_hash;
531         de->name_len = cpu_to_le16(namelen);
532         memcpy(dentry_blk->filename[bit_pos], name->name, name->len);
533         de->ino = cpu_to_le32(inode->i_ino);
534         set_de_type(de, inode);
535         for (i = 0; i < slots; i++)
536                 test_and_set_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
537         set_page_dirty(dentry_page);
538
539         /* we don't need to mark_inode_dirty now */
540         F2FS_I(inode)->i_pino = dir->i_ino;
541         update_inode(inode, page);
542         f2fs_put_page(page, 1);
543
544         update_parent_metadata(dir, inode, current_depth);
545 fail:
546         up_write(&F2FS_I(inode)->i_sem);
547
548         if (is_inode_flag_set(F2FS_I(dir), FI_UPDATE_DIR)) {
549                 update_inode_page(dir);
550                 clear_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
551         }
552         kunmap(dentry_page);
553         f2fs_put_page(dentry_page, 1);
554         return err;
555 }
556
557 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
558 {
559         struct page *page;
560         int err = 0;
561
562         down_write(&F2FS_I(inode)->i_sem);
563         page = init_inode_metadata(inode, dir, NULL);
564         if (IS_ERR(page)) {
565                 err = PTR_ERR(page);
566                 goto fail;
567         }
568         /* we don't need to mark_inode_dirty now */
569         update_inode(inode, page);
570         f2fs_put_page(page, 1);
571
572         clear_inode_flag(F2FS_I(inode), FI_NEW_INODE);
573 fail:
574         up_write(&F2FS_I(inode)->i_sem);
575         return err;
576 }
577
578 void f2fs_drop_nlink(struct inode *dir, struct inode *inode, struct page *page)
579 {
580         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
581
582         down_write(&F2FS_I(inode)->i_sem);
583
584         if (S_ISDIR(inode->i_mode)) {
585                 drop_nlink(dir);
586                 if (page)
587                         update_inode(dir, page);
588                 else
589                         update_inode_page(dir);
590         }
591         inode->i_ctime = CURRENT_TIME;
592
593         drop_nlink(inode);
594         if (S_ISDIR(inode->i_mode)) {
595                 drop_nlink(inode);
596                 i_size_write(inode, 0);
597         }
598         up_write(&F2FS_I(inode)->i_sem);
599         update_inode_page(inode);
600
601         if (inode->i_nlink == 0)
602                 add_orphan_inode(sbi, inode->i_ino);
603         else
604                 release_orphan_inode(sbi);
605 }
606
607 /*
608  * It only removes the dentry from the dentry page, corresponding name
609  * entry in name page does not need to be touched during deletion.
610  */
611 void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
612                                         struct inode *dir, struct inode *inode)
613 {
614         struct  f2fs_dentry_block *dentry_blk;
615         unsigned int bit_pos;
616         int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
617         int i;
618
619         if (f2fs_has_inline_dentry(dir))
620                 return f2fs_delete_inline_entry(dentry, page, dir, inode);
621
622         lock_page(page);
623         f2fs_wait_on_page_writeback(page, DATA);
624
625         dentry_blk = page_address(page);
626         bit_pos = dentry - dentry_blk->dentry;
627         for (i = 0; i < slots; i++)
628                 test_and_clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
629
630         /* Let's check and deallocate this dentry page */
631         bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
632                         NR_DENTRY_IN_BLOCK,
633                         0);
634         kunmap(page); /* kunmap - pair of f2fs_find_entry */
635         set_page_dirty(page);
636
637         dir->i_ctime = dir->i_mtime = CURRENT_TIME;
638
639         if (inode)
640                 f2fs_drop_nlink(dir, inode, NULL);
641
642         if (bit_pos == NR_DENTRY_IN_BLOCK) {
643                 truncate_hole(dir, page->index, page->index + 1);
644                 clear_page_dirty_for_io(page);
645                 ClearPageUptodate(page);
646                 inode_dec_dirty_pages(dir);
647         }
648         f2fs_put_page(page, 1);
649 }
650
651 bool f2fs_empty_dir(struct inode *dir)
652 {
653         unsigned long bidx;
654         struct page *dentry_page;
655         unsigned int bit_pos;
656         struct f2fs_dentry_block *dentry_blk;
657         unsigned long nblock = dir_blocks(dir);
658
659         if (f2fs_has_inline_dentry(dir))
660                 return f2fs_empty_inline_dir(dir);
661
662         for (bidx = 0; bidx < nblock; bidx++) {
663                 dentry_page = get_lock_data_page(dir, bidx);
664                 if (IS_ERR(dentry_page)) {
665                         if (PTR_ERR(dentry_page) == -ENOENT)
666                                 continue;
667                         else
668                                 return false;
669                 }
670
671                 dentry_blk = kmap_atomic(dentry_page);
672                 if (bidx == 0)
673                         bit_pos = 2;
674                 else
675                         bit_pos = 0;
676                 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
677                                                 NR_DENTRY_IN_BLOCK,
678                                                 bit_pos);
679                 kunmap_atomic(dentry_blk);
680
681                 f2fs_put_page(dentry_page, 1);
682
683                 if (bit_pos < NR_DENTRY_IN_BLOCK)
684                         return false;
685         }
686         return true;
687 }
688
689 static int f2fs_readdir(struct file *file, struct dir_context *ctx)
690 {
691         struct inode *inode = file_inode(file);
692         unsigned long npages = dir_blocks(inode);
693         unsigned int bit_pos = 0;
694         struct f2fs_dentry_block *dentry_blk = NULL;
695         struct f2fs_dir_entry *de = NULL;
696         struct page *dentry_page = NULL;
697         struct file_ra_state *ra = &file->f_ra;
698         unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
699         unsigned char d_type = DT_UNKNOWN;
700
701         if (f2fs_has_inline_dentry(inode))
702                 return f2fs_read_inline_dir(file, ctx);
703
704         bit_pos = ((unsigned long)ctx->pos % NR_DENTRY_IN_BLOCK);
705
706         /* readahead for multi pages of dir */
707         if (npages - n > 1 && !ra_has_index(ra, n))
708                 page_cache_sync_readahead(inode->i_mapping, ra, file, n,
709                                 min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
710
711         for (; n < npages; n++) {
712                 dentry_page = get_lock_data_page(inode, n);
713                 if (IS_ERR(dentry_page))
714                         continue;
715
716                 dentry_blk = kmap(dentry_page);
717                 while (bit_pos < NR_DENTRY_IN_BLOCK) {
718                         bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
719                                                         NR_DENTRY_IN_BLOCK,
720                                                         bit_pos);
721                         if (bit_pos >= NR_DENTRY_IN_BLOCK)
722                                 break;
723
724                         de = &dentry_blk->dentry[bit_pos];
725                         if (de->file_type < F2FS_FT_MAX)
726                                 d_type = f2fs_filetype_table[de->file_type];
727                         else
728                                 d_type = DT_UNKNOWN;
729                         if (!dir_emit(ctx,
730                                         dentry_blk->filename[bit_pos],
731                                         le16_to_cpu(de->name_len),
732                                         le32_to_cpu(de->ino), d_type))
733                                 goto stop;
734
735                         bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
736                         ctx->pos = n * NR_DENTRY_IN_BLOCK + bit_pos;
737                 }
738                 bit_pos = 0;
739                 ctx->pos = (n + 1) * NR_DENTRY_IN_BLOCK;
740                 kunmap(dentry_page);
741                 f2fs_put_page(dentry_page, 1);
742                 dentry_page = NULL;
743         }
744 stop:
745         if (dentry_page && !IS_ERR(dentry_page)) {
746                 kunmap(dentry_page);
747                 f2fs_put_page(dentry_page, 1);
748         }
749
750         return 0;
751 }
752
753 const struct file_operations f2fs_dir_operations = {
754         .llseek         = generic_file_llseek,
755         .read           = generic_read_dir,
756         .iterate        = f2fs_readdir,
757         .fsync          = f2fs_sync_file,
758         .unlocked_ioctl = f2fs_ioctl,
759 };