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