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