f2fs: remove deprecated parameter
[platform/kernel/linux-amlogic.git] / fs / f2fs / inline.c
1 /*
2  * fs/f2fs/inline.c
3  * Copyright (c) 2013, Intel Corporation
4  * Authors: Huajun Li <huajun.li@intel.com>
5  *          Haicheng Li <haicheng.li@intel.com>
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #include <linux/fs.h>
12 #include <linux/f2fs_fs.h>
13
14 #include "f2fs.h"
15 #include "node.h"
16
17 bool f2fs_may_inline_data(struct inode *inode)
18 {
19         if (f2fs_is_atomic_file(inode))
20                 return false;
21
22         if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))
23                 return false;
24
25         if (i_size_read(inode) > MAX_INLINE_DATA)
26                 return false;
27
28         if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
29                 return false;
30
31         return true;
32 }
33
34 bool f2fs_may_inline_dentry(struct inode *inode)
35 {
36         if (!test_opt(F2FS_I_SB(inode), INLINE_DENTRY))
37                 return false;
38
39         if (!S_ISDIR(inode->i_mode))
40                 return false;
41
42         return true;
43 }
44
45 void read_inline_data(struct page *page, struct page *ipage)
46 {
47         void *src_addr, *dst_addr;
48
49         if (PageUptodate(page))
50                 return;
51
52         f2fs_bug_on(F2FS_P_SB(page), page->index);
53
54         zero_user_segment(page, MAX_INLINE_DATA, PAGE_SIZE);
55
56         /* Copy the whole inline data block */
57         src_addr = inline_data_addr(ipage);
58         dst_addr = kmap_atomic(page);
59         memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
60         flush_dcache_page(page);
61         kunmap_atomic(dst_addr);
62         SetPageUptodate(page);
63 }
64
65 bool truncate_inline_inode(struct page *ipage, u64 from)
66 {
67         void *addr;
68
69         if (from >= MAX_INLINE_DATA)
70                 return false;
71
72         addr = inline_data_addr(ipage);
73
74         f2fs_wait_on_page_writeback(ipage, NODE, true);
75         memset(addr + from, 0, MAX_INLINE_DATA - from);
76         set_page_dirty(ipage);
77         return true;
78 }
79
80 int f2fs_read_inline_data(struct inode *inode, struct page *page)
81 {
82         struct page *ipage;
83
84         ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino);
85         if (IS_ERR(ipage)) {
86                 unlock_page(page);
87                 return PTR_ERR(ipage);
88         }
89
90         if (!f2fs_has_inline_data(inode)) {
91                 f2fs_put_page(ipage, 1);
92                 return -EAGAIN;
93         }
94
95         if (page->index)
96                 zero_user_segment(page, 0, PAGE_SIZE);
97         else
98                 read_inline_data(page, ipage);
99
100         SetPageUptodate(page);
101         f2fs_put_page(ipage, 1);
102         unlock_page(page);
103         return 0;
104 }
105
106 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
107 {
108         struct f2fs_io_info fio = {
109                 .sbi = F2FS_I_SB(dn->inode),
110                 .type = DATA,
111                 .rw = WRITE_SYNC | REQ_PRIO,
112                 .page = page,
113                 .encrypted_page = NULL,
114         };
115         int dirty, err;
116
117         if (!f2fs_exist_data(dn->inode))
118                 goto clear_out;
119
120         err = f2fs_reserve_block(dn, 0);
121         if (err)
122                 return err;
123
124         f2fs_bug_on(F2FS_P_SB(page), PageWriteback(page));
125
126         read_inline_data(page, dn->inode_page);
127         set_page_dirty(page);
128
129         /* clear dirty state */
130         dirty = clear_page_dirty_for_io(page);
131
132         /* write data page to try to make data consistent */
133         set_page_writeback(page);
134         fio.old_blkaddr = dn->data_blkaddr;
135         write_data_page(dn, &fio);
136         f2fs_wait_on_page_writeback(page, DATA, true);
137         if (dirty)
138                 inode_dec_dirty_pages(dn->inode);
139
140         /* this converted inline_data should be recovered. */
141         set_inode_flag(dn->inode, FI_APPEND_WRITE);
142
143         /* clear inline data and flag after data writeback */
144         truncate_inline_inode(dn->inode_page, 0);
145         clear_inline_node(dn->inode_page);
146 clear_out:
147         stat_dec_inline_inode(dn->inode);
148         f2fs_clear_inline_inode(dn->inode);
149         f2fs_put_dnode(dn);
150         return 0;
151 }
152
153 int f2fs_convert_inline_inode(struct inode *inode)
154 {
155         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
156         struct dnode_of_data dn;
157         struct page *ipage, *page;
158         int err = 0;
159
160         if (!f2fs_has_inline_data(inode))
161                 return 0;
162
163         page = f2fs_grab_cache_page(inode->i_mapping, 0, false);
164         if (!page)
165                 return -ENOMEM;
166
167         f2fs_lock_op(sbi);
168
169         ipage = get_node_page(sbi, inode->i_ino);
170         if (IS_ERR(ipage)) {
171                 err = PTR_ERR(ipage);
172                 goto out;
173         }
174
175         set_new_dnode(&dn, inode, ipage, ipage, 0);
176
177         if (f2fs_has_inline_data(inode))
178                 err = f2fs_convert_inline_page(&dn, page);
179
180         f2fs_put_dnode(&dn);
181 out:
182         f2fs_unlock_op(sbi);
183
184         f2fs_put_page(page, 1);
185
186         f2fs_balance_fs(sbi, dn.node_changed);
187
188         return err;
189 }
190
191 int f2fs_write_inline_data(struct inode *inode, struct page *page)
192 {
193         void *src_addr, *dst_addr;
194         struct dnode_of_data dn;
195         int err;
196
197         set_new_dnode(&dn, inode, NULL, NULL, 0);
198         err = get_dnode_of_data(&dn, 0, LOOKUP_NODE);
199         if (err)
200                 return err;
201
202         if (!f2fs_has_inline_data(inode)) {
203                 f2fs_put_dnode(&dn);
204                 return -EAGAIN;
205         }
206
207         f2fs_bug_on(F2FS_I_SB(inode), page->index);
208
209         f2fs_wait_on_page_writeback(dn.inode_page, NODE, true);
210         src_addr = kmap_atomic(page);
211         dst_addr = inline_data_addr(dn.inode_page);
212         memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
213         kunmap_atomic(src_addr);
214         set_page_dirty(dn.inode_page);
215
216         set_inode_flag(inode, FI_APPEND_WRITE);
217         set_inode_flag(inode, FI_DATA_EXIST);
218
219         clear_inline_node(dn.inode_page);
220         f2fs_put_dnode(&dn);
221         return 0;
222 }
223
224 bool recover_inline_data(struct inode *inode, struct page *npage)
225 {
226         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
227         struct f2fs_inode *ri = NULL;
228         void *src_addr, *dst_addr;
229         struct page *ipage;
230
231         /*
232          * The inline_data recovery policy is as follows.
233          * [prev.] [next] of inline_data flag
234          *    o       o  -> recover inline_data
235          *    o       x  -> remove inline_data, and then recover data blocks
236          *    x       o  -> remove inline_data, and then recover inline_data
237          *    x       x  -> recover data blocks
238          */
239         if (IS_INODE(npage))
240                 ri = F2FS_INODE(npage);
241
242         if (f2fs_has_inline_data(inode) &&
243                         ri && (ri->i_inline & F2FS_INLINE_DATA)) {
244 process_inline:
245                 ipage = get_node_page(sbi, inode->i_ino);
246                 f2fs_bug_on(sbi, IS_ERR(ipage));
247
248                 f2fs_wait_on_page_writeback(ipage, NODE, true);
249
250                 src_addr = inline_data_addr(npage);
251                 dst_addr = inline_data_addr(ipage);
252                 memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
253
254                 set_inode_flag(inode, FI_INLINE_DATA);
255                 set_inode_flag(inode, FI_DATA_EXIST);
256
257                 set_page_dirty(ipage);
258                 f2fs_put_page(ipage, 1);
259                 return true;
260         }
261
262         if (f2fs_has_inline_data(inode)) {
263                 ipage = get_node_page(sbi, inode->i_ino);
264                 f2fs_bug_on(sbi, IS_ERR(ipage));
265                 if (!truncate_inline_inode(ipage, 0))
266                         return false;
267                 f2fs_clear_inline_inode(inode);
268                 f2fs_put_page(ipage, 1);
269         } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
270                 if (truncate_blocks(inode, 0, false))
271                         return false;
272                 goto process_inline;
273         }
274         return false;
275 }
276
277 struct f2fs_dir_entry *find_in_inline_dir(struct inode *dir,
278                         struct fscrypt_name *fname, struct page **res_page)
279 {
280         struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
281         struct f2fs_inline_dentry *inline_dentry;
282         struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
283         struct f2fs_dir_entry *de;
284         struct f2fs_dentry_ptr d;
285         struct page *ipage;
286         f2fs_hash_t namehash;
287
288         ipage = get_node_page(sbi, dir->i_ino);
289         if (IS_ERR(ipage)) {
290                 *res_page = ipage;
291                 return NULL;
292         }
293
294         namehash = f2fs_dentry_hash(&name);
295
296         inline_dentry = inline_data_addr(ipage);
297
298         make_dentry_ptr(NULL, &d, (void *)inline_dentry, 2);
299         de = find_target_dentry(fname, namehash, NULL, &d);
300         unlock_page(ipage);
301         if (de)
302                 *res_page = ipage;
303         else
304                 f2fs_put_page(ipage, 0);
305
306         return de;
307 }
308
309 struct f2fs_dir_entry *f2fs_parent_inline_dir(struct inode *dir,
310                                                         struct page **p)
311 {
312         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
313         struct page *ipage;
314         struct f2fs_dir_entry *de;
315         struct f2fs_inline_dentry *dentry_blk;
316
317         ipage = get_node_page(sbi, dir->i_ino);
318         if (IS_ERR(ipage))
319                 return NULL;
320
321         dentry_blk = inline_data_addr(ipage);
322         de = &dentry_blk->dentry[1];
323         *p = ipage;
324         unlock_page(ipage);
325         return de;
326 }
327
328 int make_empty_inline_dir(struct inode *inode, struct inode *parent,
329                                                         struct page *ipage)
330 {
331         struct f2fs_inline_dentry *dentry_blk;
332         struct f2fs_dentry_ptr d;
333
334         dentry_blk = inline_data_addr(ipage);
335
336         make_dentry_ptr(NULL, &d, (void *)dentry_blk, 2);
337         do_make_empty_dir(inode, parent, &d);
338
339         set_page_dirty(ipage);
340
341         /* update i_size to MAX_INLINE_DATA */
342         if (i_size_read(inode) < MAX_INLINE_DATA)
343                 f2fs_i_size_write(inode, MAX_INLINE_DATA);
344         return 0;
345 }
346
347 /*
348  * NOTE: ipage is grabbed by caller, but if any error occurs, we should
349  * release ipage in this function.
350  */
351 static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
352                                 struct f2fs_inline_dentry *inline_dentry)
353 {
354         struct page *page;
355         struct dnode_of_data dn;
356         struct f2fs_dentry_block *dentry_blk;
357         int err;
358
359         page = f2fs_grab_cache_page(dir->i_mapping, 0, false);
360         if (!page) {
361                 f2fs_put_page(ipage, 1);
362                 return -ENOMEM;
363         }
364
365         set_new_dnode(&dn, dir, ipage, NULL, 0);
366         err = f2fs_reserve_block(&dn, 0);
367         if (err)
368                 goto out;
369
370         f2fs_wait_on_page_writeback(page, DATA, true);
371         zero_user_segment(page, MAX_INLINE_DATA, PAGE_SIZE);
372
373         dentry_blk = kmap_atomic(page);
374
375         /* copy data from inline dentry block to new dentry block */
376         memcpy(dentry_blk->dentry_bitmap, inline_dentry->dentry_bitmap,
377                                         INLINE_DENTRY_BITMAP_SIZE);
378         memset(dentry_blk->dentry_bitmap + INLINE_DENTRY_BITMAP_SIZE, 0,
379                         SIZE_OF_DENTRY_BITMAP - INLINE_DENTRY_BITMAP_SIZE);
380         /*
381          * we do not need to zero out remainder part of dentry and filename
382          * field, since we have used bitmap for marking the usage status of
383          * them, besides, we can also ignore copying/zeroing reserved space
384          * of dentry block, because them haven't been used so far.
385          */
386         memcpy(dentry_blk->dentry, inline_dentry->dentry,
387                         sizeof(struct f2fs_dir_entry) * NR_INLINE_DENTRY);
388         memcpy(dentry_blk->filename, inline_dentry->filename,
389                                         NR_INLINE_DENTRY * F2FS_SLOT_LEN);
390
391         kunmap_atomic(dentry_blk);
392         SetPageUptodate(page);
393         set_page_dirty(page);
394
395         /* clear inline dir and flag after data writeback */
396         truncate_inline_inode(ipage, 0);
397
398         stat_dec_inline_dir(dir);
399         clear_inode_flag(dir, FI_INLINE_DENTRY);
400
401         f2fs_i_depth_write(dir, 1);
402         if (i_size_read(dir) < PAGE_SIZE)
403                 f2fs_i_size_write(dir, PAGE_SIZE);
404 out:
405         f2fs_put_page(page, 1);
406         return err;
407 }
408
409 static int f2fs_add_inline_entries(struct inode *dir,
410                         struct f2fs_inline_dentry *inline_dentry)
411 {
412         struct f2fs_dentry_ptr d;
413         unsigned long bit_pos = 0;
414         int err = 0;
415
416         make_dentry_ptr(NULL, &d, (void *)inline_dentry, 2);
417
418         while (bit_pos < d.max) {
419                 struct f2fs_dir_entry *de;
420                 struct qstr new_name;
421                 nid_t ino;
422                 umode_t fake_mode;
423
424                 if (!test_bit_le(bit_pos, d.bitmap)) {
425                         bit_pos++;
426                         continue;
427                 }
428
429                 de = &d.dentry[bit_pos];
430
431                 if (unlikely(!de->name_len)) {
432                         bit_pos++;
433                         continue;
434                 }
435
436                 new_name.name = d.filename[bit_pos];
437                 new_name.len = de->name_len;
438
439                 ino = le32_to_cpu(de->ino);
440                 fake_mode = get_de_type(de) << S_SHIFT;
441
442                 err = f2fs_add_regular_entry(dir, &new_name, NULL,
443                                                         ino, fake_mode);
444                 if (err)
445                         goto punch_dentry_pages;
446
447                 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
448         }
449         return 0;
450 punch_dentry_pages:
451         truncate_inode_pages(&dir->i_data, 0);
452         truncate_blocks(dir, 0, false);
453         remove_dirty_inode(dir);
454         return err;
455 }
456
457 static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
458                                 struct f2fs_inline_dentry *inline_dentry)
459 {
460         struct f2fs_inline_dentry *backup_dentry;
461         int err;
462
463         backup_dentry = f2fs_kmalloc(sizeof(struct f2fs_inline_dentry),
464                                                         GFP_F2FS_ZERO);
465         if (!backup_dentry) {
466                 f2fs_put_page(ipage, 1);
467                 return -ENOMEM;
468         }
469
470         memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA);
471         truncate_inline_inode(ipage, 0);
472
473         unlock_page(ipage);
474
475         err = f2fs_add_inline_entries(dir, backup_dentry);
476         if (err)
477                 goto recover;
478
479         lock_page(ipage);
480
481         stat_dec_inline_dir(dir);
482         clear_inode_flag(dir, FI_INLINE_DENTRY);
483         kfree(backup_dentry);
484         return 0;
485 recover:
486         lock_page(ipage);
487         memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA);
488         f2fs_i_depth_write(dir, 0);
489         f2fs_i_size_write(dir, MAX_INLINE_DATA);
490         set_page_dirty(ipage);
491         f2fs_put_page(ipage, 1);
492
493         kfree(backup_dentry);
494         return err;
495 }
496
497 static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
498                                 struct f2fs_inline_dentry *inline_dentry)
499 {
500         if (!F2FS_I(dir)->i_dir_level)
501                 return f2fs_move_inline_dirents(dir, ipage, inline_dentry);
502         else
503                 return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
504 }
505
506 int f2fs_add_inline_entry(struct inode *dir, const struct qstr *name,
507                         struct inode *inode, nid_t ino, umode_t mode)
508 {
509         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
510         struct page *ipage;
511         unsigned int bit_pos;
512         f2fs_hash_t name_hash;
513         size_t namelen = name->len;
514         struct f2fs_inline_dentry *dentry_blk = NULL;
515         struct f2fs_dentry_ptr d;
516         int slots = GET_DENTRY_SLOTS(namelen);
517         struct page *page = NULL;
518         int err = 0;
519
520         ipage = get_node_page(sbi, dir->i_ino);
521         if (IS_ERR(ipage))
522                 return PTR_ERR(ipage);
523
524         dentry_blk = inline_data_addr(ipage);
525         bit_pos = room_for_filename(&dentry_blk->dentry_bitmap,
526                                                 slots, NR_INLINE_DENTRY);
527         if (bit_pos >= NR_INLINE_DENTRY) {
528                 err = f2fs_convert_inline_dir(dir, ipage, dentry_blk);
529                 if (err)
530                         return err;
531                 err = -EAGAIN;
532                 goto out;
533         }
534
535         if (inode) {
536                 down_write(&F2FS_I(inode)->i_sem);
537                 page = init_inode_metadata(inode, dir, name, ipage);
538                 if (IS_ERR(page)) {
539                         err = PTR_ERR(page);
540                         goto fail;
541                 }
542         }
543
544         f2fs_wait_on_page_writeback(ipage, NODE, true);
545
546         name_hash = f2fs_dentry_hash(name);
547         make_dentry_ptr(NULL, &d, (void *)dentry_blk, 2);
548         f2fs_update_dentry(ino, mode, &d, name, name_hash, bit_pos);
549
550         set_page_dirty(ipage);
551
552         /* we don't need to mark_inode_dirty now */
553         if (inode) {
554                 f2fs_i_pino_write(inode, dir->i_ino);
555                 f2fs_put_page(page, 1);
556         }
557
558         update_parent_metadata(dir, inode, 0);
559 fail:
560         if (inode)
561                 up_write(&F2FS_I(inode)->i_sem);
562 out:
563         f2fs_put_page(ipage, 1);
564         return err;
565 }
566
567 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
568                                         struct inode *dir, struct inode *inode)
569 {
570         struct f2fs_inline_dentry *inline_dentry;
571         int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
572         unsigned int bit_pos;
573         int i;
574
575         lock_page(page);
576         f2fs_wait_on_page_writeback(page, NODE, true);
577
578         inline_dentry = inline_data_addr(page);
579         bit_pos = dentry - inline_dentry->dentry;
580         for (i = 0; i < slots; i++)
581                 test_and_clear_bit_le(bit_pos + i,
582                                 &inline_dentry->dentry_bitmap);
583
584         set_page_dirty(page);
585         f2fs_put_page(page, 1);
586
587         dir->i_ctime = dir->i_mtime = CURRENT_TIME;
588         mark_inode_dirty_sync(dir);
589
590         if (inode)
591                 f2fs_drop_nlink(dir, inode);
592 }
593
594 bool f2fs_empty_inline_dir(struct inode *dir)
595 {
596         struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
597         struct page *ipage;
598         unsigned int bit_pos = 2;
599         struct f2fs_inline_dentry *dentry_blk;
600
601         ipage = get_node_page(sbi, dir->i_ino);
602         if (IS_ERR(ipage))
603                 return false;
604
605         dentry_blk = inline_data_addr(ipage);
606         bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
607                                         NR_INLINE_DENTRY,
608                                         bit_pos);
609
610         f2fs_put_page(ipage, 1);
611
612         if (bit_pos < NR_INLINE_DENTRY)
613                 return false;
614
615         return true;
616 }
617
618 int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
619                                 struct fscrypt_str *fstr)
620 {
621         struct inode *inode = file_inode(file);
622         struct f2fs_inline_dentry *inline_dentry = NULL;
623         struct page *ipage = NULL;
624         struct f2fs_dentry_ptr d;
625
626         if (ctx->pos == NR_INLINE_DENTRY)
627                 return 0;
628
629         ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino);
630         if (IS_ERR(ipage))
631                 return PTR_ERR(ipage);
632
633         inline_dentry = inline_data_addr(ipage);
634
635         make_dentry_ptr(inode, &d, (void *)inline_dentry, 2);
636
637         if (!f2fs_fill_dentries(ctx, &d, 0, fstr))
638                 ctx->pos = NR_INLINE_DENTRY;
639
640         f2fs_put_page(ipage, 1);
641         return 0;
642 }
643
644 int f2fs_inline_data_fiemap(struct inode *inode,
645                 struct fiemap_extent_info *fieinfo, __u64 start, __u64 len)
646 {
647         __u64 byteaddr, ilen;
648         __u32 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED |
649                 FIEMAP_EXTENT_LAST;
650         struct node_info ni;
651         struct page *ipage;
652         int err = 0;
653
654         ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino);
655         if (IS_ERR(ipage))
656                 return PTR_ERR(ipage);
657
658         if (!f2fs_has_inline_data(inode)) {
659                 err = -EAGAIN;
660                 goto out;
661         }
662
663         ilen = min_t(size_t, MAX_INLINE_DATA, i_size_read(inode));
664         if (start >= ilen)
665                 goto out;
666         if (start + len < ilen)
667                 ilen = start + len;
668         ilen -= start;
669
670         get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni);
671         byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
672         byteaddr += (char *)inline_data_addr(ipage) - (char *)F2FS_INODE(ipage);
673         err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
674 out:
675         f2fs_put_page(ipage, 1);
676         return err;
677 }