]> asedeno.scripts.mit.edu Git - linux.git/blob - fs/f2fs/file.c
Merge branch 'work.autofs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux.git] / fs / f2fs / file.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * fs/f2fs/file.c
4  *
5  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6  *             http://www.samsung.com/
7  */
8 #include <linux/fs.h>
9 #include <linux/f2fs_fs.h>
10 #include <linux/stat.h>
11 #include <linux/buffer_head.h>
12 #include <linux/writeback.h>
13 #include <linux/blkdev.h>
14 #include <linux/falloc.h>
15 #include <linux/types.h>
16 #include <linux/compat.h>
17 #include <linux/uaccess.h>
18 #include <linux/mount.h>
19 #include <linux/pagevec.h>
20 #include <linux/uio.h>
21 #include <linux/uuid.h>
22 #include <linux/file.h>
23
24 #include "f2fs.h"
25 #include "node.h"
26 #include "segment.h"
27 #include "xattr.h"
28 #include "acl.h"
29 #include "gc.h"
30 #include "trace.h"
31 #include <trace/events/f2fs.h>
32
33 static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
34 {
35         struct inode *inode = file_inode(vmf->vma->vm_file);
36         vm_fault_t ret;
37
38         down_read(&F2FS_I(inode)->i_mmap_sem);
39         ret = filemap_fault(vmf);
40         up_read(&F2FS_I(inode)->i_mmap_sem);
41
42         trace_f2fs_filemap_fault(inode, vmf->pgoff, (unsigned long)ret);
43
44         return ret;
45 }
46
47 static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
48 {
49         struct page *page = vmf->page;
50         struct inode *inode = file_inode(vmf->vma->vm_file);
51         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
52         struct dnode_of_data dn = { .node_changed = false };
53         int err;
54
55         if (unlikely(f2fs_cp_error(sbi))) {
56                 err = -EIO;
57                 goto err;
58         }
59
60         sb_start_pagefault(inode->i_sb);
61
62         f2fs_bug_on(sbi, f2fs_has_inline_data(inode));
63
64         file_update_time(vmf->vma->vm_file);
65         down_read(&F2FS_I(inode)->i_mmap_sem);
66         lock_page(page);
67         if (unlikely(page->mapping != inode->i_mapping ||
68                         page_offset(page) > i_size_read(inode) ||
69                         !PageUptodate(page))) {
70                 unlock_page(page);
71                 err = -EFAULT;
72                 goto out_sem;
73         }
74
75         /* block allocation */
76         __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
77         set_new_dnode(&dn, inode, NULL, NULL, 0);
78         err = f2fs_get_block(&dn, page->index);
79         f2fs_put_dnode(&dn);
80         __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
81         if (err) {
82                 unlock_page(page);
83                 goto out_sem;
84         }
85
86         /* fill the page */
87         f2fs_wait_on_page_writeback(page, DATA, false, true);
88
89         /* wait for GCed page writeback via META_MAPPING */
90         f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
91
92         /*
93          * check to see if the page is mapped already (no holes)
94          */
95         if (PageMappedToDisk(page))
96                 goto out_sem;
97
98         /* page is wholly or partially inside EOF */
99         if (((loff_t)(page->index + 1) << PAGE_SHIFT) >
100                                                 i_size_read(inode)) {
101                 loff_t offset;
102
103                 offset = i_size_read(inode) & ~PAGE_MASK;
104                 zero_user_segment(page, offset, PAGE_SIZE);
105         }
106         set_page_dirty(page);
107         if (!PageUptodate(page))
108                 SetPageUptodate(page);
109
110         f2fs_update_iostat(sbi, APP_MAPPED_IO, F2FS_BLKSIZE);
111         f2fs_update_time(sbi, REQ_TIME);
112
113         trace_f2fs_vm_page_mkwrite(page, DATA);
114 out_sem:
115         up_read(&F2FS_I(inode)->i_mmap_sem);
116
117         f2fs_balance_fs(sbi, dn.node_changed);
118
119         sb_end_pagefault(inode->i_sb);
120 err:
121         return block_page_mkwrite_return(err);
122 }
123
124 static const struct vm_operations_struct f2fs_file_vm_ops = {
125         .fault          = f2fs_filemap_fault,
126         .map_pages      = filemap_map_pages,
127         .page_mkwrite   = f2fs_vm_page_mkwrite,
128 };
129
130 static int get_parent_ino(struct inode *inode, nid_t *pino)
131 {
132         struct dentry *dentry;
133
134         inode = igrab(inode);
135         dentry = d_find_any_alias(inode);
136         iput(inode);
137         if (!dentry)
138                 return 0;
139
140         *pino = parent_ino(dentry);
141         dput(dentry);
142         return 1;
143 }
144
145 static inline enum cp_reason_type need_do_checkpoint(struct inode *inode)
146 {
147         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
148         enum cp_reason_type cp_reason = CP_NO_NEEDED;
149
150         if (!S_ISREG(inode->i_mode))
151                 cp_reason = CP_NON_REGULAR;
152         else if (inode->i_nlink != 1)
153                 cp_reason = CP_HARDLINK;
154         else if (is_sbi_flag_set(sbi, SBI_NEED_CP))
155                 cp_reason = CP_SB_NEED_CP;
156         else if (file_wrong_pino(inode))
157                 cp_reason = CP_WRONG_PINO;
158         else if (!f2fs_space_for_roll_forward(sbi))
159                 cp_reason = CP_NO_SPC_ROLL;
160         else if (!f2fs_is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
161                 cp_reason = CP_NODE_NEED_CP;
162         else if (test_opt(sbi, FASTBOOT))
163                 cp_reason = CP_FASTBOOT_MODE;
164         else if (F2FS_OPTION(sbi).active_logs == 2)
165                 cp_reason = CP_SPEC_LOG_NUM;
166         else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT &&
167                 f2fs_need_dentry_mark(sbi, inode->i_ino) &&
168                 f2fs_exist_written_data(sbi, F2FS_I(inode)->i_pino,
169                                                         TRANS_DIR_INO))
170                 cp_reason = CP_RECOVER_DIR;
171
172         return cp_reason;
173 }
174
175 static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
176 {
177         struct page *i = find_get_page(NODE_MAPPING(sbi), ino);
178         bool ret = false;
179         /* But we need to avoid that there are some inode updates */
180         if ((i && PageDirty(i)) || f2fs_need_inode_block_update(sbi, ino))
181                 ret = true;
182         f2fs_put_page(i, 0);
183         return ret;
184 }
185
186 static void try_to_fix_pino(struct inode *inode)
187 {
188         struct f2fs_inode_info *fi = F2FS_I(inode);
189         nid_t pino;
190
191         down_write(&fi->i_sem);
192         if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
193                         get_parent_ino(inode, &pino)) {
194                 f2fs_i_pino_write(inode, pino);
195                 file_got_pino(inode);
196         }
197         up_write(&fi->i_sem);
198 }
199
200 static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
201                                                 int datasync, bool atomic)
202 {
203         struct inode *inode = file->f_mapping->host;
204         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
205         nid_t ino = inode->i_ino;
206         int ret = 0;
207         enum cp_reason_type cp_reason = 0;
208         struct writeback_control wbc = {
209                 .sync_mode = WB_SYNC_ALL,
210                 .nr_to_write = LONG_MAX,
211                 .for_reclaim = 0,
212         };
213         unsigned int seq_id = 0;
214
215         if (unlikely(f2fs_readonly(inode->i_sb) ||
216                                 is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
217                 return 0;
218
219         trace_f2fs_sync_file_enter(inode);
220
221         if (S_ISDIR(inode->i_mode))
222                 goto go_write;
223
224         /* if fdatasync is triggered, let's do in-place-update */
225         if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
226                 set_inode_flag(inode, FI_NEED_IPU);
227         ret = file_write_and_wait_range(file, start, end);
228         clear_inode_flag(inode, FI_NEED_IPU);
229
230         if (ret) {
231                 trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
232                 return ret;
233         }
234
235         /* if the inode is dirty, let's recover all the time */
236         if (!f2fs_skip_inode_update(inode, datasync)) {
237                 f2fs_write_inode(inode, NULL);
238                 goto go_write;
239         }
240
241         /*
242          * if there is no written data, don't waste time to write recovery info.
243          */
244         if (!is_inode_flag_set(inode, FI_APPEND_WRITE) &&
245                         !f2fs_exist_written_data(sbi, ino, APPEND_INO)) {
246
247                 /* it may call write_inode just prior to fsync */
248                 if (need_inode_page_update(sbi, ino))
249                         goto go_write;
250
251                 if (is_inode_flag_set(inode, FI_UPDATE_WRITE) ||
252                                 f2fs_exist_written_data(sbi, ino, UPDATE_INO))
253                         goto flush_out;
254                 goto out;
255         }
256 go_write:
257         /*
258          * Both of fdatasync() and fsync() are able to be recovered from
259          * sudden-power-off.
260          */
261         down_read(&F2FS_I(inode)->i_sem);
262         cp_reason = need_do_checkpoint(inode);
263         up_read(&F2FS_I(inode)->i_sem);
264
265         if (cp_reason) {
266                 /* all the dirty node pages should be flushed for POR */
267                 ret = f2fs_sync_fs(inode->i_sb, 1);
268
269                 /*
270                  * We've secured consistency through sync_fs. Following pino
271                  * will be used only for fsynced inodes after checkpoint.
272                  */
273                 try_to_fix_pino(inode);
274                 clear_inode_flag(inode, FI_APPEND_WRITE);
275                 clear_inode_flag(inode, FI_UPDATE_WRITE);
276                 goto out;
277         }
278 sync_nodes:
279         atomic_inc(&sbi->wb_sync_req[NODE]);
280         ret = f2fs_fsync_node_pages(sbi, inode, &wbc, atomic, &seq_id);
281         atomic_dec(&sbi->wb_sync_req[NODE]);
282         if (ret)
283                 goto out;
284
285         /* if cp_error was enabled, we should avoid infinite loop */
286         if (unlikely(f2fs_cp_error(sbi))) {
287                 ret = -EIO;
288                 goto out;
289         }
290
291         if (f2fs_need_inode_block_update(sbi, ino)) {
292                 f2fs_mark_inode_dirty_sync(inode, true);
293                 f2fs_write_inode(inode, NULL);
294                 goto sync_nodes;
295         }
296
297         /*
298          * If it's atomic_write, it's just fine to keep write ordering. So
299          * here we don't need to wait for node write completion, since we use
300          * node chain which serializes node blocks. If one of node writes are
301          * reordered, we can see simply broken chain, resulting in stopping
302          * roll-forward recovery. It means we'll recover all or none node blocks
303          * given fsync mark.
304          */
305         if (!atomic) {
306                 ret = f2fs_wait_on_node_pages_writeback(sbi, seq_id);
307                 if (ret)
308                         goto out;
309         }
310
311         /* once recovery info is written, don't need to tack this */
312         f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
313         clear_inode_flag(inode, FI_APPEND_WRITE);
314 flush_out:
315         if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
316                 ret = f2fs_issue_flush(sbi, inode->i_ino);
317         if (!ret) {
318                 f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
319                 clear_inode_flag(inode, FI_UPDATE_WRITE);
320                 f2fs_remove_ino_entry(sbi, ino, FLUSH_INO);
321         }
322         f2fs_update_time(sbi, REQ_TIME);
323 out:
324         trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
325         f2fs_trace_ios(NULL, 1);
326         return ret;
327 }
328
329 int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
330 {
331         if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
332                 return -EIO;
333         return f2fs_do_sync_file(file, start, end, datasync, false);
334 }
335
336 static pgoff_t __get_first_dirty_index(struct address_space *mapping,
337                                                 pgoff_t pgofs, int whence)
338 {
339         struct page *page;
340         int nr_pages;
341
342         if (whence != SEEK_DATA)
343                 return 0;
344
345         /* find first dirty page index */
346         nr_pages = find_get_pages_tag(mapping, &pgofs, PAGECACHE_TAG_DIRTY,
347                                       1, &page);
348         if (!nr_pages)
349                 return ULONG_MAX;
350         pgofs = page->index;
351         put_page(page);
352         return pgofs;
353 }
354
355 static bool __found_offset(struct f2fs_sb_info *sbi, block_t blkaddr,
356                                 pgoff_t dirty, pgoff_t pgofs, int whence)
357 {
358         switch (whence) {
359         case SEEK_DATA:
360                 if ((blkaddr == NEW_ADDR && dirty == pgofs) ||
361                         __is_valid_data_blkaddr(blkaddr))
362                         return true;
363                 break;
364         case SEEK_HOLE:
365                 if (blkaddr == NULL_ADDR)
366                         return true;
367                 break;
368         }
369         return false;
370 }
371
372 static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
373 {
374         struct inode *inode = file->f_mapping->host;
375         loff_t maxbytes = inode->i_sb->s_maxbytes;
376         struct dnode_of_data dn;
377         pgoff_t pgofs, end_offset, dirty;
378         loff_t data_ofs = offset;
379         loff_t isize;
380         int err = 0;
381
382         inode_lock(inode);
383
384         isize = i_size_read(inode);
385         if (offset >= isize)
386                 goto fail;
387
388         /* handle inline data case */
389         if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
390                 if (whence == SEEK_HOLE)
391                         data_ofs = isize;
392                 goto found;
393         }
394
395         pgofs = (pgoff_t)(offset >> PAGE_SHIFT);
396
397         dirty = __get_first_dirty_index(inode->i_mapping, pgofs, whence);
398
399         for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
400                 set_new_dnode(&dn, inode, NULL, NULL, 0);
401                 err = f2fs_get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
402                 if (err && err != -ENOENT) {
403                         goto fail;
404                 } else if (err == -ENOENT) {
405                         /* direct node does not exists */
406                         if (whence == SEEK_DATA) {
407                                 pgofs = f2fs_get_next_page_offset(&dn, pgofs);
408                                 continue;
409                         } else {
410                                 goto found;
411                         }
412                 }
413
414                 end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
415
416                 /* find data/hole in dnode block */
417                 for (; dn.ofs_in_node < end_offset;
418                                 dn.ofs_in_node++, pgofs++,
419                                 data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
420                         block_t blkaddr;
421
422                         blkaddr = datablock_addr(dn.inode,
423                                         dn.node_page, dn.ofs_in_node);
424
425                         if (__is_valid_data_blkaddr(blkaddr) &&
426                                 !f2fs_is_valid_blkaddr(F2FS_I_SB(inode),
427                                         blkaddr, DATA_GENERIC_ENHANCE)) {
428                                 f2fs_put_dnode(&dn);
429                                 goto fail;
430                         }
431
432                         if (__found_offset(F2FS_I_SB(inode), blkaddr, dirty,
433                                                         pgofs, whence)) {
434                                 f2fs_put_dnode(&dn);
435                                 goto found;
436                         }
437                 }
438                 f2fs_put_dnode(&dn);
439         }
440
441         if (whence == SEEK_DATA)
442                 goto fail;
443 found:
444         if (whence == SEEK_HOLE && data_ofs > isize)
445                 data_ofs = isize;
446         inode_unlock(inode);
447         return vfs_setpos(file, data_ofs, maxbytes);
448 fail:
449         inode_unlock(inode);
450         return -ENXIO;
451 }
452
453 static loff_t f2fs_llseek(struct file *file, loff_t offset, int whence)
454 {
455         struct inode *inode = file->f_mapping->host;
456         loff_t maxbytes = inode->i_sb->s_maxbytes;
457
458         switch (whence) {
459         case SEEK_SET:
460         case SEEK_CUR:
461         case SEEK_END:
462                 return generic_file_llseek_size(file, offset, whence,
463                                                 maxbytes, i_size_read(inode));
464         case SEEK_DATA:
465         case SEEK_HOLE:
466                 if (offset < 0)
467                         return -ENXIO;
468                 return f2fs_seek_block(file, offset, whence);
469         }
470
471         return -EINVAL;
472 }
473
474 static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma)
475 {
476         struct inode *inode = file_inode(file);
477         int err;
478
479         if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
480                 return -EIO;
481
482         /* we don't need to use inline_data strictly */
483         err = f2fs_convert_inline_inode(inode);
484         if (err)
485                 return err;
486
487         file_accessed(file);
488         vma->vm_ops = &f2fs_file_vm_ops;
489         return 0;
490 }
491
492 static int f2fs_file_open(struct inode *inode, struct file *filp)
493 {
494         int err = fscrypt_file_open(inode, filp);
495
496         if (err)
497                 return err;
498
499         err = fsverity_file_open(inode, filp);
500         if (err)
501                 return err;
502
503         filp->f_mode |= FMODE_NOWAIT;
504
505         return dquot_file_open(inode, filp);
506 }
507
508 void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
509 {
510         struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
511         struct f2fs_node *raw_node;
512         int nr_free = 0, ofs = dn->ofs_in_node, len = count;
513         __le32 *addr;
514         int base = 0;
515
516         if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode))
517                 base = get_extra_isize(dn->inode);
518
519         raw_node = F2FS_NODE(dn->node_page);
520         addr = blkaddr_in_node(raw_node) + base + ofs;
521
522         for (; count > 0; count--, addr++, dn->ofs_in_node++) {
523                 block_t blkaddr = le32_to_cpu(*addr);
524
525                 if (blkaddr == NULL_ADDR)
526                         continue;
527
528                 dn->data_blkaddr = NULL_ADDR;
529                 f2fs_set_data_blkaddr(dn);
530
531                 if (__is_valid_data_blkaddr(blkaddr) &&
532                         !f2fs_is_valid_blkaddr(sbi, blkaddr,
533                                         DATA_GENERIC_ENHANCE))
534                         continue;
535
536                 f2fs_invalidate_blocks(sbi, blkaddr);
537                 if (dn->ofs_in_node == 0 && IS_INODE(dn->node_page))
538                         clear_inode_flag(dn->inode, FI_FIRST_BLOCK_WRITTEN);
539                 nr_free++;
540         }
541
542         if (nr_free) {
543                 pgoff_t fofs;
544                 /*
545                  * once we invalidate valid blkaddr in range [ofs, ofs + count],
546                  * we will invalidate all blkaddr in the whole range.
547                  */
548                 fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_page),
549                                                         dn->inode) + ofs;
550                 f2fs_update_extent_cache_range(dn, fofs, 0, len);
551                 dec_valid_block_count(sbi, dn->inode, nr_free);
552         }
553         dn->ofs_in_node = ofs;
554
555         f2fs_update_time(sbi, REQ_TIME);
556         trace_f2fs_truncate_data_blocks_range(dn->inode, dn->nid,
557                                          dn->ofs_in_node, nr_free);
558 }
559
560 void f2fs_truncate_data_blocks(struct dnode_of_data *dn)
561 {
562         f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK(dn->inode));
563 }
564
565 static int truncate_partial_data_page(struct inode *inode, u64 from,
566                                                                 bool cache_only)
567 {
568         loff_t offset = from & (PAGE_SIZE - 1);
569         pgoff_t index = from >> PAGE_SHIFT;
570         struct address_space *mapping = inode->i_mapping;
571         struct page *page;
572
573         if (!offset && !cache_only)
574                 return 0;
575
576         if (cache_only) {
577                 page = find_lock_page(mapping, index);
578                 if (page && PageUptodate(page))
579                         goto truncate_out;
580                 f2fs_put_page(page, 1);
581                 return 0;
582         }
583
584         page = f2fs_get_lock_data_page(inode, index, true);
585         if (IS_ERR(page))
586                 return PTR_ERR(page) == -ENOENT ? 0 : PTR_ERR(page);
587 truncate_out:
588         f2fs_wait_on_page_writeback(page, DATA, true, true);
589         zero_user(page, offset, PAGE_SIZE - offset);
590
591         /* An encrypted inode should have a key and truncate the last page. */
592         f2fs_bug_on(F2FS_I_SB(inode), cache_only && IS_ENCRYPTED(inode));
593         if (!cache_only)
594                 set_page_dirty(page);
595         f2fs_put_page(page, 1);
596         return 0;
597 }
598
599 int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
600 {
601         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
602         struct dnode_of_data dn;
603         pgoff_t free_from;
604         int count = 0, err = 0;
605         struct page *ipage;
606         bool truncate_page = false;
607
608         trace_f2fs_truncate_blocks_enter(inode, from);
609
610         free_from = (pgoff_t)F2FS_BLK_ALIGN(from);
611
612         if (free_from >= sbi->max_file_blocks)
613                 goto free_partial;
614
615         if (lock)
616                 f2fs_lock_op(sbi);
617
618         ipage = f2fs_get_node_page(sbi, inode->i_ino);
619         if (IS_ERR(ipage)) {
620                 err = PTR_ERR(ipage);
621                 goto out;
622         }
623
624         if (f2fs_has_inline_data(inode)) {
625                 f2fs_truncate_inline_inode(inode, ipage, from);
626                 f2fs_put_page(ipage, 1);
627                 truncate_page = true;
628                 goto out;
629         }
630
631         set_new_dnode(&dn, inode, ipage, NULL, 0);
632         err = f2fs_get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
633         if (err) {
634                 if (err == -ENOENT)
635                         goto free_next;
636                 goto out;
637         }
638
639         count = ADDRS_PER_PAGE(dn.node_page, inode);
640
641         count -= dn.ofs_in_node;
642         f2fs_bug_on(sbi, count < 0);
643
644         if (dn.ofs_in_node || IS_INODE(dn.node_page)) {
645                 f2fs_truncate_data_blocks_range(&dn, count);
646                 free_from += count;
647         }
648
649         f2fs_put_dnode(&dn);
650 free_next:
651         err = f2fs_truncate_inode_blocks(inode, free_from);
652 out:
653         if (lock)
654                 f2fs_unlock_op(sbi);
655 free_partial:
656         /* lastly zero out the first data page */
657         if (!err)
658                 err = truncate_partial_data_page(inode, from, truncate_page);
659
660         trace_f2fs_truncate_blocks_exit(inode, err);
661         return err;
662 }
663
664 int f2fs_truncate(struct inode *inode)
665 {
666         int err;
667
668         if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
669                 return -EIO;
670
671         if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
672                                 S_ISLNK(inode->i_mode)))
673                 return 0;
674
675         trace_f2fs_truncate(inode);
676
677         if (time_to_inject(F2FS_I_SB(inode), FAULT_TRUNCATE)) {
678                 f2fs_show_injection_info(FAULT_TRUNCATE);
679                 return -EIO;
680         }
681
682         /* we should check inline_data size */
683         if (!f2fs_may_inline_data(inode)) {
684                 err = f2fs_convert_inline_inode(inode);
685                 if (err)
686                         return err;
687         }
688
689         err = f2fs_truncate_blocks(inode, i_size_read(inode), true);
690         if (err)
691                 return err;
692
693         inode->i_mtime = inode->i_ctime = current_time(inode);
694         f2fs_mark_inode_dirty_sync(inode, false);
695         return 0;
696 }
697
698 int f2fs_getattr(const struct path *path, struct kstat *stat,
699                  u32 request_mask, unsigned int query_flags)
700 {
701         struct inode *inode = d_inode(path->dentry);
702         struct f2fs_inode_info *fi = F2FS_I(inode);
703         struct f2fs_inode *ri;
704         unsigned int flags;
705
706         if (f2fs_has_extra_attr(inode) &&
707                         f2fs_sb_has_inode_crtime(F2FS_I_SB(inode)) &&
708                         F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, i_crtime)) {
709                 stat->result_mask |= STATX_BTIME;
710                 stat->btime.tv_sec = fi->i_crtime.tv_sec;
711                 stat->btime.tv_nsec = fi->i_crtime.tv_nsec;
712         }
713
714         flags = fi->i_flags;
715         if (flags & F2FS_APPEND_FL)
716                 stat->attributes |= STATX_ATTR_APPEND;
717         if (IS_ENCRYPTED(inode))
718                 stat->attributes |= STATX_ATTR_ENCRYPTED;
719         if (flags & F2FS_IMMUTABLE_FL)
720                 stat->attributes |= STATX_ATTR_IMMUTABLE;
721         if (flags & F2FS_NODUMP_FL)
722                 stat->attributes |= STATX_ATTR_NODUMP;
723
724         stat->attributes_mask |= (STATX_ATTR_APPEND |
725                                   STATX_ATTR_ENCRYPTED |
726                                   STATX_ATTR_IMMUTABLE |
727                                   STATX_ATTR_NODUMP);
728
729         generic_fillattr(inode, stat);
730
731         /* we need to show initial sectors used for inline_data/dentries */
732         if ((S_ISREG(inode->i_mode) && f2fs_has_inline_data(inode)) ||
733                                         f2fs_has_inline_dentry(inode))
734                 stat->blocks += (stat->size + 511) >> 9;
735
736         return 0;
737 }
738
739 #ifdef CONFIG_F2FS_FS_POSIX_ACL
740 static void __setattr_copy(struct inode *inode, const struct iattr *attr)
741 {
742         unsigned int ia_valid = attr->ia_valid;
743
744         if (ia_valid & ATTR_UID)
745                 inode->i_uid = attr->ia_uid;
746         if (ia_valid & ATTR_GID)
747                 inode->i_gid = attr->ia_gid;
748         if (ia_valid & ATTR_ATIME) {
749                 inode->i_atime = timestamp_truncate(attr->ia_atime,
750                                                   inode);
751         }
752         if (ia_valid & ATTR_MTIME) {
753                 inode->i_mtime = timestamp_truncate(attr->ia_mtime,
754                                                   inode);
755         }
756         if (ia_valid & ATTR_CTIME) {
757                 inode->i_ctime = timestamp_truncate(attr->ia_ctime,
758                                                   inode);
759         }
760         if (ia_valid & ATTR_MODE) {
761                 umode_t mode = attr->ia_mode;
762
763                 if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
764                         mode &= ~S_ISGID;
765                 set_acl_inode(inode, mode);
766         }
767 }
768 #else
769 #define __setattr_copy setattr_copy
770 #endif
771
772 int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
773 {
774         struct inode *inode = d_inode(dentry);
775         int err;
776
777         if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
778                 return -EIO;
779
780         err = setattr_prepare(dentry, attr);
781         if (err)
782                 return err;
783
784         err = fscrypt_prepare_setattr(dentry, attr);
785         if (err)
786                 return err;
787
788         err = fsverity_prepare_setattr(dentry, attr);
789         if (err)
790                 return err;
791
792         if (is_quota_modification(inode, attr)) {
793                 err = dquot_initialize(inode);
794                 if (err)
795                         return err;
796         }
797         if ((attr->ia_valid & ATTR_UID &&
798                 !uid_eq(attr->ia_uid, inode->i_uid)) ||
799                 (attr->ia_valid & ATTR_GID &&
800                 !gid_eq(attr->ia_gid, inode->i_gid))) {
801                 f2fs_lock_op(F2FS_I_SB(inode));
802                 err = dquot_transfer(inode, attr);
803                 if (err) {
804                         set_sbi_flag(F2FS_I_SB(inode),
805                                         SBI_QUOTA_NEED_REPAIR);
806                         f2fs_unlock_op(F2FS_I_SB(inode));
807                         return err;
808                 }
809                 /*
810                  * update uid/gid under lock_op(), so that dquot and inode can
811                  * be updated atomically.
812                  */
813                 if (attr->ia_valid & ATTR_UID)
814                         inode->i_uid = attr->ia_uid;
815                 if (attr->ia_valid & ATTR_GID)
816                         inode->i_gid = attr->ia_gid;
817                 f2fs_mark_inode_dirty_sync(inode, true);
818                 f2fs_unlock_op(F2FS_I_SB(inode));
819         }
820
821         if (attr->ia_valid & ATTR_SIZE) {
822                 bool to_smaller = (attr->ia_size <= i_size_read(inode));
823
824                 down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
825                 down_write(&F2FS_I(inode)->i_mmap_sem);
826
827                 truncate_setsize(inode, attr->ia_size);
828
829                 if (to_smaller)
830                         err = f2fs_truncate(inode);
831                 /*
832                  * do not trim all blocks after i_size if target size is
833                  * larger than i_size.
834                  */
835                 up_write(&F2FS_I(inode)->i_mmap_sem);
836                 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
837
838                 if (err)
839                         return err;
840
841                 if (!to_smaller) {
842                         /* should convert inline inode here */
843                         if (!f2fs_may_inline_data(inode)) {
844                                 err = f2fs_convert_inline_inode(inode);
845                                 if (err)
846                                         return err;
847                         }
848                         inode->i_mtime = inode->i_ctime = current_time(inode);
849                 }
850
851                 down_write(&F2FS_I(inode)->i_sem);
852                 F2FS_I(inode)->last_disk_size = i_size_read(inode);
853                 up_write(&F2FS_I(inode)->i_sem);
854         }
855
856         __setattr_copy(inode, attr);
857
858         if (attr->ia_valid & ATTR_MODE) {
859                 err = posix_acl_chmod(inode, f2fs_get_inode_mode(inode));
860                 if (err || is_inode_flag_set(inode, FI_ACL_MODE)) {
861                         inode->i_mode = F2FS_I(inode)->i_acl_mode;
862                         clear_inode_flag(inode, FI_ACL_MODE);
863                 }
864         }
865
866         /* file size may changed here */
867         f2fs_mark_inode_dirty_sync(inode, true);
868
869         /* inode change will produce dirty node pages flushed by checkpoint */
870         f2fs_balance_fs(F2FS_I_SB(inode), true);
871
872         return err;
873 }
874
875 const struct inode_operations f2fs_file_inode_operations = {
876         .getattr        = f2fs_getattr,
877         .setattr        = f2fs_setattr,
878         .get_acl        = f2fs_get_acl,
879         .set_acl        = f2fs_set_acl,
880 #ifdef CONFIG_F2FS_FS_XATTR
881         .listxattr      = f2fs_listxattr,
882 #endif
883         .fiemap         = f2fs_fiemap,
884 };
885
886 static int fill_zero(struct inode *inode, pgoff_t index,
887                                         loff_t start, loff_t len)
888 {
889         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
890         struct page *page;
891
892         if (!len)
893                 return 0;
894
895         f2fs_balance_fs(sbi, true);
896
897         f2fs_lock_op(sbi);
898         page = f2fs_get_new_data_page(inode, NULL, index, false);
899         f2fs_unlock_op(sbi);
900
901         if (IS_ERR(page))
902                 return PTR_ERR(page);
903
904         f2fs_wait_on_page_writeback(page, DATA, true, true);
905         zero_user(page, start, len);
906         set_page_dirty(page);
907         f2fs_put_page(page, 1);
908         return 0;
909 }
910
911 int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
912 {
913         int err;
914
915         while (pg_start < pg_end) {
916                 struct dnode_of_data dn;
917                 pgoff_t end_offset, count;
918
919                 set_new_dnode(&dn, inode, NULL, NULL, 0);
920                 err = f2fs_get_dnode_of_data(&dn, pg_start, LOOKUP_NODE);
921                 if (err) {
922                         if (err == -ENOENT) {
923                                 pg_start = f2fs_get_next_page_offset(&dn,
924                                                                 pg_start);
925                                 continue;
926                         }
927                         return err;
928                 }
929
930                 end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
931                 count = min(end_offset - dn.ofs_in_node, pg_end - pg_start);
932
933                 f2fs_bug_on(F2FS_I_SB(inode), count == 0 || count > end_offset);
934
935                 f2fs_truncate_data_blocks_range(&dn, count);
936                 f2fs_put_dnode(&dn);
937
938                 pg_start += count;
939         }
940         return 0;
941 }
942
943 static int punch_hole(struct inode *inode, loff_t offset, loff_t len)
944 {
945         pgoff_t pg_start, pg_end;
946         loff_t off_start, off_end;
947         int ret;
948
949         ret = f2fs_convert_inline_inode(inode);
950         if (ret)
951                 return ret;
952
953         pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
954         pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
955
956         off_start = offset & (PAGE_SIZE - 1);
957         off_end = (offset + len) & (PAGE_SIZE - 1);
958
959         if (pg_start == pg_end) {
960                 ret = fill_zero(inode, pg_start, off_start,
961                                                 off_end - off_start);
962                 if (ret)
963                         return ret;
964         } else {
965                 if (off_start) {
966                         ret = fill_zero(inode, pg_start++, off_start,
967                                                 PAGE_SIZE - off_start);
968                         if (ret)
969                                 return ret;
970                 }
971                 if (off_end) {
972                         ret = fill_zero(inode, pg_end, 0, off_end);
973                         if (ret)
974                                 return ret;
975                 }
976
977                 if (pg_start < pg_end) {
978                         struct address_space *mapping = inode->i_mapping;
979                         loff_t blk_start, blk_end;
980                         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
981
982                         f2fs_balance_fs(sbi, true);
983
984                         blk_start = (loff_t)pg_start << PAGE_SHIFT;
985                         blk_end = (loff_t)pg_end << PAGE_SHIFT;
986
987                         down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
988                         down_write(&F2FS_I(inode)->i_mmap_sem);
989
990                         truncate_inode_pages_range(mapping, blk_start,
991                                         blk_end - 1);
992
993                         f2fs_lock_op(sbi);
994                         ret = f2fs_truncate_hole(inode, pg_start, pg_end);
995                         f2fs_unlock_op(sbi);
996
997                         up_write(&F2FS_I(inode)->i_mmap_sem);
998                         up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
999                 }
1000         }
1001
1002         return ret;
1003 }
1004
1005 static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
1006                                 int *do_replace, pgoff_t off, pgoff_t len)
1007 {
1008         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1009         struct dnode_of_data dn;
1010         int ret, done, i;
1011
1012 next_dnode:
1013         set_new_dnode(&dn, inode, NULL, NULL, 0);
1014         ret = f2fs_get_dnode_of_data(&dn, off, LOOKUP_NODE_RA);
1015         if (ret && ret != -ENOENT) {
1016                 return ret;
1017         } else if (ret == -ENOENT) {
1018                 if (dn.max_level == 0)
1019                         return -ENOENT;
1020                 done = min((pgoff_t)ADDRS_PER_BLOCK(inode) - dn.ofs_in_node,
1021                                                                         len);
1022                 blkaddr += done;
1023                 do_replace += done;
1024                 goto next;
1025         }
1026
1027         done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, inode) -
1028                                                         dn.ofs_in_node, len);
1029         for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
1030                 *blkaddr = datablock_addr(dn.inode,
1031                                         dn.node_page, dn.ofs_in_node);
1032
1033                 if (__is_valid_data_blkaddr(*blkaddr) &&
1034                         !f2fs_is_valid_blkaddr(sbi, *blkaddr,
1035                                         DATA_GENERIC_ENHANCE)) {
1036                         f2fs_put_dnode(&dn);
1037                         return -EFSCORRUPTED;
1038                 }
1039
1040                 if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
1041
1042                         if (test_opt(sbi, LFS)) {
1043                                 f2fs_put_dnode(&dn);
1044                                 return -ENOTSUPP;
1045                         }
1046
1047                         /* do not invalidate this block address */
1048                         f2fs_update_data_blkaddr(&dn, NULL_ADDR);
1049                         *do_replace = 1;
1050                 }
1051         }
1052         f2fs_put_dnode(&dn);
1053 next:
1054         len -= done;
1055         off += done;
1056         if (len)
1057                 goto next_dnode;
1058         return 0;
1059 }
1060
1061 static int __roll_back_blkaddrs(struct inode *inode, block_t *blkaddr,
1062                                 int *do_replace, pgoff_t off, int len)
1063 {
1064         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1065         struct dnode_of_data dn;
1066         int ret, i;
1067
1068         for (i = 0; i < len; i++, do_replace++, blkaddr++) {
1069                 if (*do_replace == 0)
1070                         continue;
1071
1072                 set_new_dnode(&dn, inode, NULL, NULL, 0);
1073                 ret = f2fs_get_dnode_of_data(&dn, off + i, LOOKUP_NODE_RA);
1074                 if (ret) {
1075                         dec_valid_block_count(sbi, inode, 1);
1076                         f2fs_invalidate_blocks(sbi, *blkaddr);
1077                 } else {
1078                         f2fs_update_data_blkaddr(&dn, *blkaddr);
1079                 }
1080                 f2fs_put_dnode(&dn);
1081         }
1082         return 0;
1083 }
1084
1085 static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
1086                         block_t *blkaddr, int *do_replace,
1087                         pgoff_t src, pgoff_t dst, pgoff_t len, bool full)
1088 {
1089         struct f2fs_sb_info *sbi = F2FS_I_SB(src_inode);
1090         pgoff_t i = 0;
1091         int ret;
1092
1093         while (i < len) {
1094                 if (blkaddr[i] == NULL_ADDR && !full) {
1095                         i++;
1096                         continue;
1097                 }
1098
1099                 if (do_replace[i] || blkaddr[i] == NULL_ADDR) {
1100                         struct dnode_of_data dn;
1101                         struct node_info ni;
1102                         size_t new_size;
1103                         pgoff_t ilen;
1104
1105                         set_new_dnode(&dn, dst_inode, NULL, NULL, 0);
1106                         ret = f2fs_get_dnode_of_data(&dn, dst + i, ALLOC_NODE);
1107                         if (ret)
1108                                 return ret;
1109
1110                         ret = f2fs_get_node_info(sbi, dn.nid, &ni);
1111                         if (ret) {
1112                                 f2fs_put_dnode(&dn);
1113                                 return ret;
1114                         }
1115
1116                         ilen = min((pgoff_t)
1117                                 ADDRS_PER_PAGE(dn.node_page, dst_inode) -
1118                                                 dn.ofs_in_node, len - i);
1119                         do {
1120                                 dn.data_blkaddr = datablock_addr(dn.inode,
1121                                                 dn.node_page, dn.ofs_in_node);
1122                                 f2fs_truncate_data_blocks_range(&dn, 1);
1123
1124                                 if (do_replace[i]) {
1125                                         f2fs_i_blocks_write(src_inode,
1126                                                         1, false, false);
1127                                         f2fs_i_blocks_write(dst_inode,
1128                                                         1, true, false);
1129                                         f2fs_replace_block(sbi, &dn, dn.data_blkaddr,
1130                                         blkaddr[i], ni.version, true, false);
1131
1132                                         do_replace[i] = 0;
1133                                 }
1134                                 dn.ofs_in_node++;
1135                                 i++;
1136                                 new_size = (dst + i) << PAGE_SHIFT;
1137                                 if (dst_inode->i_size < new_size)
1138                                         f2fs_i_size_write(dst_inode, new_size);
1139                         } while (--ilen && (do_replace[i] || blkaddr[i] == NULL_ADDR));
1140
1141                         f2fs_put_dnode(&dn);
1142                 } else {
1143                         struct page *psrc, *pdst;
1144
1145                         psrc = f2fs_get_lock_data_page(src_inode,
1146                                                         src + i, true);
1147                         if (IS_ERR(psrc))
1148                                 return PTR_ERR(psrc);
1149                         pdst = f2fs_get_new_data_page(dst_inode, NULL, dst + i,
1150                                                                 true);
1151                         if (IS_ERR(pdst)) {
1152                                 f2fs_put_page(psrc, 1);
1153                                 return PTR_ERR(pdst);
1154                         }
1155                         f2fs_copy_page(psrc, pdst);
1156                         set_page_dirty(pdst);
1157                         f2fs_put_page(pdst, 1);
1158                         f2fs_put_page(psrc, 1);
1159
1160                         ret = f2fs_truncate_hole(src_inode,
1161                                                 src + i, src + i + 1);
1162                         if (ret)
1163                                 return ret;
1164                         i++;
1165                 }
1166         }
1167         return 0;
1168 }
1169
1170 static int __exchange_data_block(struct inode *src_inode,
1171                         struct inode *dst_inode, pgoff_t src, pgoff_t dst,
1172                         pgoff_t len, bool full)
1173 {
1174         block_t *src_blkaddr;
1175         int *do_replace;
1176         pgoff_t olen;
1177         int ret;
1178
1179         while (len) {
1180                 olen = min((pgoff_t)4 * ADDRS_PER_BLOCK(src_inode), len);
1181
1182                 src_blkaddr = f2fs_kvzalloc(F2FS_I_SB(src_inode),
1183                                         array_size(olen, sizeof(block_t)),
1184                                         GFP_KERNEL);
1185                 if (!src_blkaddr)
1186                         return -ENOMEM;
1187
1188                 do_replace = f2fs_kvzalloc(F2FS_I_SB(src_inode),
1189                                         array_size(olen, sizeof(int)),
1190                                         GFP_KERNEL);
1191                 if (!do_replace) {
1192                         kvfree(src_blkaddr);
1193                         return -ENOMEM;
1194                 }
1195
1196                 ret = __read_out_blkaddrs(src_inode, src_blkaddr,
1197                                         do_replace, src, olen);
1198                 if (ret)
1199                         goto roll_back;
1200
1201                 ret = __clone_blkaddrs(src_inode, dst_inode, src_blkaddr,
1202                                         do_replace, src, dst, olen, full);
1203                 if (ret)
1204                         goto roll_back;
1205
1206                 src += olen;
1207                 dst += olen;
1208                 len -= olen;
1209
1210                 kvfree(src_blkaddr);
1211                 kvfree(do_replace);
1212         }
1213         return 0;
1214
1215 roll_back:
1216         __roll_back_blkaddrs(src_inode, src_blkaddr, do_replace, src, olen);
1217         kvfree(src_blkaddr);
1218         kvfree(do_replace);
1219         return ret;
1220 }
1221
1222 static int f2fs_do_collapse(struct inode *inode, loff_t offset, loff_t len)
1223 {
1224         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1225         pgoff_t nrpages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1226         pgoff_t start = offset >> PAGE_SHIFT;
1227         pgoff_t end = (offset + len) >> PAGE_SHIFT;
1228         int ret;
1229
1230         f2fs_balance_fs(sbi, true);
1231
1232         /* avoid gc operation during block exchange */
1233         down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1234         down_write(&F2FS_I(inode)->i_mmap_sem);
1235
1236         f2fs_lock_op(sbi);
1237         f2fs_drop_extent_tree(inode);
1238         truncate_pagecache(inode, offset);
1239         ret = __exchange_data_block(inode, inode, end, start, nrpages - end, true);
1240         f2fs_unlock_op(sbi);
1241
1242         up_write(&F2FS_I(inode)->i_mmap_sem);
1243         up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1244         return ret;
1245 }
1246
1247 static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
1248 {
1249         loff_t new_size;
1250         int ret;
1251
1252         if (offset + len >= i_size_read(inode))
1253                 return -EINVAL;
1254
1255         /* collapse range should be aligned to block size of f2fs. */
1256         if (offset & (F2FS_BLKSIZE - 1) || len & (F2FS_BLKSIZE - 1))
1257                 return -EINVAL;
1258
1259         ret = f2fs_convert_inline_inode(inode);
1260         if (ret)
1261                 return ret;
1262
1263         /* write out all dirty pages from offset */
1264         ret = filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
1265         if (ret)
1266                 return ret;
1267
1268         ret = f2fs_do_collapse(inode, offset, len);
1269         if (ret)
1270                 return ret;
1271
1272         /* write out all moved pages, if possible */
1273         down_write(&F2FS_I(inode)->i_mmap_sem);
1274         filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
1275         truncate_pagecache(inode, offset);
1276
1277         new_size = i_size_read(inode) - len;
1278         truncate_pagecache(inode, new_size);
1279
1280         ret = f2fs_truncate_blocks(inode, new_size, true);
1281         up_write(&F2FS_I(inode)->i_mmap_sem);
1282         if (!ret)
1283                 f2fs_i_size_write(inode, new_size);
1284         return ret;
1285 }
1286
1287 static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
1288                                                                 pgoff_t end)
1289 {
1290         struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
1291         pgoff_t index = start;
1292         unsigned int ofs_in_node = dn->ofs_in_node;
1293         blkcnt_t count = 0;
1294         int ret;
1295
1296         for (; index < end; index++, dn->ofs_in_node++) {
1297                 if (datablock_addr(dn->inode, dn->node_page,
1298                                         dn->ofs_in_node) == NULL_ADDR)
1299                         count++;
1300         }
1301
1302         dn->ofs_in_node = ofs_in_node;
1303         ret = f2fs_reserve_new_blocks(dn, count);
1304         if (ret)
1305                 return ret;
1306
1307         dn->ofs_in_node = ofs_in_node;
1308         for (index = start; index < end; index++, dn->ofs_in_node++) {
1309                 dn->data_blkaddr = datablock_addr(dn->inode,
1310                                         dn->node_page, dn->ofs_in_node);
1311                 /*
1312                  * f2fs_reserve_new_blocks will not guarantee entire block
1313                  * allocation.
1314                  */
1315                 if (dn->data_blkaddr == NULL_ADDR) {
1316                         ret = -ENOSPC;
1317                         break;
1318                 }
1319                 if (dn->data_blkaddr != NEW_ADDR) {
1320                         f2fs_invalidate_blocks(sbi, dn->data_blkaddr);
1321                         dn->data_blkaddr = NEW_ADDR;
1322                         f2fs_set_data_blkaddr(dn);
1323                 }
1324         }
1325
1326         f2fs_update_extent_cache_range(dn, start, 0, index - start);
1327
1328         return ret;
1329 }
1330
1331 static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
1332                                                                 int mode)
1333 {
1334         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1335         struct address_space *mapping = inode->i_mapping;
1336         pgoff_t index, pg_start, pg_end;
1337         loff_t new_size = i_size_read(inode);
1338         loff_t off_start, off_end;
1339         int ret = 0;
1340
1341         ret = inode_newsize_ok(inode, (len + offset));
1342         if (ret)
1343                 return ret;
1344
1345         ret = f2fs_convert_inline_inode(inode);
1346         if (ret)
1347                 return ret;
1348
1349         ret = filemap_write_and_wait_range(mapping, offset, offset + len - 1);
1350         if (ret)
1351                 return ret;
1352
1353         pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
1354         pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
1355
1356         off_start = offset & (PAGE_SIZE - 1);
1357         off_end = (offset + len) & (PAGE_SIZE - 1);
1358
1359         if (pg_start == pg_end) {
1360                 ret = fill_zero(inode, pg_start, off_start,
1361                                                 off_end - off_start);
1362                 if (ret)
1363                         return ret;
1364
1365                 new_size = max_t(loff_t, new_size, offset + len);
1366         } else {
1367                 if (off_start) {
1368                         ret = fill_zero(inode, pg_start++, off_start,
1369                                                 PAGE_SIZE - off_start);
1370                         if (ret)
1371                                 return ret;
1372
1373                         new_size = max_t(loff_t, new_size,
1374                                         (loff_t)pg_start << PAGE_SHIFT);
1375                 }
1376
1377                 for (index = pg_start; index < pg_end;) {
1378                         struct dnode_of_data dn;
1379                         unsigned int end_offset;
1380                         pgoff_t end;
1381
1382                         down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1383                         down_write(&F2FS_I(inode)->i_mmap_sem);
1384
1385                         truncate_pagecache_range(inode,
1386                                 (loff_t)index << PAGE_SHIFT,
1387                                 ((loff_t)pg_end << PAGE_SHIFT) - 1);
1388
1389                         f2fs_lock_op(sbi);
1390
1391                         set_new_dnode(&dn, inode, NULL, NULL, 0);
1392                         ret = f2fs_get_dnode_of_data(&dn, index, ALLOC_NODE);
1393                         if (ret) {
1394                                 f2fs_unlock_op(sbi);
1395                                 up_write(&F2FS_I(inode)->i_mmap_sem);
1396                                 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1397                                 goto out;
1398                         }
1399
1400                         end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
1401                         end = min(pg_end, end_offset - dn.ofs_in_node + index);
1402
1403                         ret = f2fs_do_zero_range(&dn, index, end);
1404                         f2fs_put_dnode(&dn);
1405
1406                         f2fs_unlock_op(sbi);
1407                         up_write(&F2FS_I(inode)->i_mmap_sem);
1408                         up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1409
1410                         f2fs_balance_fs(sbi, dn.node_changed);
1411
1412                         if (ret)
1413                                 goto out;
1414
1415                         index = end;
1416                         new_size = max_t(loff_t, new_size,
1417                                         (loff_t)index << PAGE_SHIFT);
1418                 }
1419
1420                 if (off_end) {
1421                         ret = fill_zero(inode, pg_end, 0, off_end);
1422                         if (ret)
1423                                 goto out;
1424
1425                         new_size = max_t(loff_t, new_size, offset + len);
1426                 }
1427         }
1428
1429 out:
1430         if (new_size > i_size_read(inode)) {
1431                 if (mode & FALLOC_FL_KEEP_SIZE)
1432                         file_set_keep_isize(inode);
1433                 else
1434                         f2fs_i_size_write(inode, new_size);
1435         }
1436         return ret;
1437 }
1438
1439 static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len)
1440 {
1441         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1442         pgoff_t nr, pg_start, pg_end, delta, idx;
1443         loff_t new_size;
1444         int ret = 0;
1445
1446         new_size = i_size_read(inode) + len;
1447         ret = inode_newsize_ok(inode, new_size);
1448         if (ret)
1449                 return ret;
1450
1451         if (offset >= i_size_read(inode))
1452                 return -EINVAL;
1453
1454         /* insert range should be aligned to block size of f2fs. */
1455         if (offset & (F2FS_BLKSIZE - 1) || len & (F2FS_BLKSIZE - 1))
1456                 return -EINVAL;
1457
1458         ret = f2fs_convert_inline_inode(inode);
1459         if (ret)
1460                 return ret;
1461
1462         f2fs_balance_fs(sbi, true);
1463
1464         down_write(&F2FS_I(inode)->i_mmap_sem);
1465         ret = f2fs_truncate_blocks(inode, i_size_read(inode), true);
1466         up_write(&F2FS_I(inode)->i_mmap_sem);
1467         if (ret)
1468                 return ret;
1469
1470         /* write out all dirty pages from offset */
1471         ret = filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
1472         if (ret)
1473                 return ret;
1474
1475         pg_start = offset >> PAGE_SHIFT;
1476         pg_end = (offset + len) >> PAGE_SHIFT;
1477         delta = pg_end - pg_start;
1478         idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1479
1480         /* avoid gc operation during block exchange */
1481         down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1482         down_write(&F2FS_I(inode)->i_mmap_sem);
1483         truncate_pagecache(inode, offset);
1484
1485         while (!ret && idx > pg_start) {
1486                 nr = idx - pg_start;
1487                 if (nr > delta)
1488                         nr = delta;
1489                 idx -= nr;
1490
1491                 f2fs_lock_op(sbi);
1492                 f2fs_drop_extent_tree(inode);
1493
1494                 ret = __exchange_data_block(inode, inode, idx,
1495                                         idx + delta, nr, false);
1496                 f2fs_unlock_op(sbi);
1497         }
1498         up_write(&F2FS_I(inode)->i_mmap_sem);
1499         up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1500
1501         /* write out all moved pages, if possible */
1502         down_write(&F2FS_I(inode)->i_mmap_sem);
1503         filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
1504         truncate_pagecache(inode, offset);
1505         up_write(&F2FS_I(inode)->i_mmap_sem);
1506
1507         if (!ret)
1508                 f2fs_i_size_write(inode, new_size);
1509         return ret;
1510 }
1511
1512 static int expand_inode_data(struct inode *inode, loff_t offset,
1513                                         loff_t len, int mode)
1514 {
1515         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1516         struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
1517                         .m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE,
1518                         .m_may_create = true };
1519         pgoff_t pg_end;
1520         loff_t new_size = i_size_read(inode);
1521         loff_t off_end;
1522         int err;
1523
1524         err = inode_newsize_ok(inode, (len + offset));
1525         if (err)
1526                 return err;
1527
1528         err = f2fs_convert_inline_inode(inode);
1529         if (err)
1530                 return err;
1531
1532         f2fs_balance_fs(sbi, true);
1533
1534         pg_end = ((unsigned long long)offset + len) >> PAGE_SHIFT;
1535         off_end = (offset + len) & (PAGE_SIZE - 1);
1536
1537         map.m_lblk = ((unsigned long long)offset) >> PAGE_SHIFT;
1538         map.m_len = pg_end - map.m_lblk;
1539         if (off_end)
1540                 map.m_len++;
1541
1542         if (f2fs_is_pinned_file(inode))
1543                 map.m_seg_type = CURSEG_COLD_DATA;
1544
1545         err = f2fs_map_blocks(inode, &map, 1, (f2fs_is_pinned_file(inode) ?
1546                                                 F2FS_GET_BLOCK_PRE_DIO :
1547                                                 F2FS_GET_BLOCK_PRE_AIO));
1548         if (err) {
1549                 pgoff_t last_off;
1550
1551                 if (!map.m_len)
1552                         return err;
1553
1554                 last_off = map.m_lblk + map.m_len - 1;
1555
1556                 /* update new size to the failed position */
1557                 new_size = (last_off == pg_end) ? offset + len :
1558                                         (loff_t)(last_off + 1) << PAGE_SHIFT;
1559         } else {
1560                 new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end;
1561         }
1562
1563         if (new_size > i_size_read(inode)) {
1564                 if (mode & FALLOC_FL_KEEP_SIZE)
1565                         file_set_keep_isize(inode);
1566                 else
1567                         f2fs_i_size_write(inode, new_size);
1568         }
1569
1570         return err;
1571 }
1572
1573 static long f2fs_fallocate(struct file *file, int mode,
1574                                 loff_t offset, loff_t len)
1575 {
1576         struct inode *inode = file_inode(file);
1577         long ret = 0;
1578
1579         if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
1580                 return -EIO;
1581
1582         /* f2fs only support ->fallocate for regular file */
1583         if (!S_ISREG(inode->i_mode))
1584                 return -EINVAL;
1585
1586         if (IS_ENCRYPTED(inode) &&
1587                 (mode & (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE)))
1588                 return -EOPNOTSUPP;
1589
1590         if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
1591                         FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE |
1592                         FALLOC_FL_INSERT_RANGE))
1593                 return -EOPNOTSUPP;
1594
1595         inode_lock(inode);
1596
1597         if (mode & FALLOC_FL_PUNCH_HOLE) {
1598                 if (offset >= inode->i_size)
1599                         goto out;
1600
1601                 ret = punch_hole(inode, offset, len);
1602         } else if (mode & FALLOC_FL_COLLAPSE_RANGE) {
1603                 ret = f2fs_collapse_range(inode, offset, len);
1604         } else if (mode & FALLOC_FL_ZERO_RANGE) {
1605                 ret = f2fs_zero_range(inode, offset, len, mode);
1606         } else if (mode & FALLOC_FL_INSERT_RANGE) {
1607                 ret = f2fs_insert_range(inode, offset, len);
1608         } else {
1609                 ret = expand_inode_data(inode, offset, len, mode);
1610         }
1611
1612         if (!ret) {
1613                 inode->i_mtime = inode->i_ctime = current_time(inode);
1614                 f2fs_mark_inode_dirty_sync(inode, false);
1615                 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
1616         }
1617
1618 out:
1619         inode_unlock(inode);
1620
1621         trace_f2fs_fallocate(inode, mode, offset, len, ret);
1622         return ret;
1623 }
1624
1625 static int f2fs_release_file(struct inode *inode, struct file *filp)
1626 {
1627         /*
1628          * f2fs_relase_file is called at every close calls. So we should
1629          * not drop any inmemory pages by close called by other process.
1630          */
1631         if (!(filp->f_mode & FMODE_WRITE) ||
1632                         atomic_read(&inode->i_writecount) != 1)
1633                 return 0;
1634
1635         /* some remained atomic pages should discarded */
1636         if (f2fs_is_atomic_file(inode))
1637                 f2fs_drop_inmem_pages(inode);
1638         if (f2fs_is_volatile_file(inode)) {
1639                 set_inode_flag(inode, FI_DROP_CACHE);
1640                 filemap_fdatawrite(inode->i_mapping);
1641                 clear_inode_flag(inode, FI_DROP_CACHE);
1642                 clear_inode_flag(inode, FI_VOLATILE_FILE);
1643                 stat_dec_volatile_write(inode);
1644         }
1645         return 0;
1646 }
1647
1648 static int f2fs_file_flush(struct file *file, fl_owner_t id)
1649 {
1650         struct inode *inode = file_inode(file);
1651
1652         /*
1653          * If the process doing a transaction is crashed, we should do
1654          * roll-back. Otherwise, other reader/write can see corrupted database
1655          * until all the writers close its file. Since this should be done
1656          * before dropping file lock, it needs to do in ->flush.
1657          */
1658         if (f2fs_is_atomic_file(inode) &&
1659                         F2FS_I(inode)->inmem_task == current)
1660                 f2fs_drop_inmem_pages(inode);
1661         return 0;
1662 }
1663
1664 static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
1665 {
1666         struct f2fs_inode_info *fi = F2FS_I(inode);
1667
1668         /* Is it quota file? Do not allow user to mess with it */
1669         if (IS_NOQUOTA(inode))
1670                 return -EPERM;
1671
1672         fi->i_flags = iflags | (fi->i_flags & ~mask);
1673
1674         if (fi->i_flags & F2FS_PROJINHERIT_FL)
1675                 set_inode_flag(inode, FI_PROJ_INHERIT);
1676         else
1677                 clear_inode_flag(inode, FI_PROJ_INHERIT);
1678
1679         inode->i_ctime = current_time(inode);
1680         f2fs_set_inode_flags(inode);
1681         f2fs_mark_inode_dirty_sync(inode, true);
1682         return 0;
1683 }
1684
1685 /* FS_IOC_GETFLAGS and FS_IOC_SETFLAGS support */
1686
1687 /*
1688  * To make a new on-disk f2fs i_flag gettable via FS_IOC_GETFLAGS, add an entry
1689  * for it to f2fs_fsflags_map[], and add its FS_*_FL equivalent to
1690  * F2FS_GETTABLE_FS_FL.  To also make it settable via FS_IOC_SETFLAGS, also add
1691  * its FS_*_FL equivalent to F2FS_SETTABLE_FS_FL.
1692  */
1693
1694 static const struct {
1695         u32 iflag;
1696         u32 fsflag;
1697 } f2fs_fsflags_map[] = {
1698         { F2FS_SYNC_FL,         FS_SYNC_FL },
1699         { F2FS_IMMUTABLE_FL,    FS_IMMUTABLE_FL },
1700         { F2FS_APPEND_FL,       FS_APPEND_FL },
1701         { F2FS_NODUMP_FL,       FS_NODUMP_FL },
1702         { F2FS_NOATIME_FL,      FS_NOATIME_FL },
1703         { F2FS_INDEX_FL,        FS_INDEX_FL },
1704         { F2FS_DIRSYNC_FL,      FS_DIRSYNC_FL },
1705         { F2FS_PROJINHERIT_FL,  FS_PROJINHERIT_FL },
1706 };
1707
1708 #define F2FS_GETTABLE_FS_FL (           \
1709                 FS_SYNC_FL |            \
1710                 FS_IMMUTABLE_FL |       \
1711                 FS_APPEND_FL |          \
1712                 FS_NODUMP_FL |          \
1713                 FS_NOATIME_FL |         \
1714                 FS_INDEX_FL |           \
1715                 FS_DIRSYNC_FL |         \
1716                 FS_PROJINHERIT_FL |     \
1717                 FS_ENCRYPT_FL |         \
1718                 FS_INLINE_DATA_FL |     \
1719                 FS_NOCOW_FL |           \
1720                 FS_VERITY_FL)
1721
1722 #define F2FS_SETTABLE_FS_FL (           \
1723                 FS_SYNC_FL |            \
1724                 FS_IMMUTABLE_FL |       \
1725                 FS_APPEND_FL |          \
1726                 FS_NODUMP_FL |          \
1727                 FS_NOATIME_FL |         \
1728                 FS_DIRSYNC_FL |         \
1729                 FS_PROJINHERIT_FL)
1730
1731 /* Convert f2fs on-disk i_flags to FS_IOC_{GET,SET}FLAGS flags */
1732 static inline u32 f2fs_iflags_to_fsflags(u32 iflags)
1733 {
1734         u32 fsflags = 0;
1735         int i;
1736
1737         for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
1738                 if (iflags & f2fs_fsflags_map[i].iflag)
1739                         fsflags |= f2fs_fsflags_map[i].fsflag;
1740
1741         return fsflags;
1742 }
1743
1744 /* Convert FS_IOC_{GET,SET}FLAGS flags to f2fs on-disk i_flags */
1745 static inline u32 f2fs_fsflags_to_iflags(u32 fsflags)
1746 {
1747         u32 iflags = 0;
1748         int i;
1749
1750         for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
1751                 if (fsflags & f2fs_fsflags_map[i].fsflag)
1752                         iflags |= f2fs_fsflags_map[i].iflag;
1753
1754         return iflags;
1755 }
1756
1757 static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
1758 {
1759         struct inode *inode = file_inode(filp);
1760         struct f2fs_inode_info *fi = F2FS_I(inode);
1761         u32 fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
1762
1763         if (IS_ENCRYPTED(inode))
1764                 fsflags |= FS_ENCRYPT_FL;
1765         if (IS_VERITY(inode))
1766                 fsflags |= FS_VERITY_FL;
1767         if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
1768                 fsflags |= FS_INLINE_DATA_FL;
1769         if (is_inode_flag_set(inode, FI_PIN_FILE))
1770                 fsflags |= FS_NOCOW_FL;
1771
1772         fsflags &= F2FS_GETTABLE_FS_FL;
1773
1774         return put_user(fsflags, (int __user *)arg);
1775 }
1776
1777 static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
1778 {
1779         struct inode *inode = file_inode(filp);
1780         struct f2fs_inode_info *fi = F2FS_I(inode);
1781         u32 fsflags, old_fsflags;
1782         u32 iflags;
1783         int ret;
1784
1785         if (!inode_owner_or_capable(inode))
1786                 return -EACCES;
1787
1788         if (get_user(fsflags, (int __user *)arg))
1789                 return -EFAULT;
1790
1791         if (fsflags & ~F2FS_GETTABLE_FS_FL)
1792                 return -EOPNOTSUPP;
1793         fsflags &= F2FS_SETTABLE_FS_FL;
1794
1795         iflags = f2fs_fsflags_to_iflags(fsflags);
1796         if (f2fs_mask_flags(inode->i_mode, iflags) != iflags)
1797                 return -EOPNOTSUPP;
1798
1799         ret = mnt_want_write_file(filp);
1800         if (ret)
1801                 return ret;
1802
1803         inode_lock(inode);
1804
1805         old_fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
1806         ret = vfs_ioc_setflags_prepare(inode, old_fsflags, fsflags);
1807         if (ret)
1808                 goto out;
1809
1810         ret = f2fs_setflags_common(inode, iflags,
1811                         f2fs_fsflags_to_iflags(F2FS_SETTABLE_FS_FL));
1812 out:
1813         inode_unlock(inode);
1814         mnt_drop_write_file(filp);
1815         return ret;
1816 }
1817
1818 static int f2fs_ioc_getversion(struct file *filp, unsigned long arg)
1819 {
1820         struct inode *inode = file_inode(filp);
1821
1822         return put_user(inode->i_generation, (int __user *)arg);
1823 }
1824
1825 static int f2fs_ioc_start_atomic_write(struct file *filp)
1826 {
1827         struct inode *inode = file_inode(filp);
1828         int ret;
1829
1830         if (!inode_owner_or_capable(inode))
1831                 return -EACCES;
1832
1833         if (!S_ISREG(inode->i_mode))
1834                 return -EINVAL;
1835
1836         ret = mnt_want_write_file(filp);
1837         if (ret)
1838                 return ret;
1839
1840         inode_lock(inode);
1841
1842         if (f2fs_is_atomic_file(inode)) {
1843                 if (is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST))
1844                         ret = -EINVAL;
1845                 goto out;
1846         }
1847
1848         ret = f2fs_convert_inline_inode(inode);
1849         if (ret)
1850                 goto out;
1851
1852         down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1853
1854         /*
1855          * Should wait end_io to count F2FS_WB_CP_DATA correctly by
1856          * f2fs_is_atomic_file.
1857          */
1858         if (get_dirty_pages(inode))
1859                 f2fs_warn(F2FS_I_SB(inode), "Unexpected flush for atomic writes: ino=%lu, npages=%u",
1860                           inode->i_ino, get_dirty_pages(inode));
1861         ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
1862         if (ret) {
1863                 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1864                 goto out;
1865         }
1866
1867         set_inode_flag(inode, FI_ATOMIC_FILE);
1868         clear_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
1869         up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1870
1871         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
1872         F2FS_I(inode)->inmem_task = current;
1873         stat_inc_atomic_write(inode);
1874         stat_update_max_atomic_write(inode);
1875 out:
1876         inode_unlock(inode);
1877         mnt_drop_write_file(filp);
1878         return ret;
1879 }
1880
1881 static int f2fs_ioc_commit_atomic_write(struct file *filp)
1882 {
1883         struct inode *inode = file_inode(filp);
1884         int ret;
1885
1886         if (!inode_owner_or_capable(inode))
1887                 return -EACCES;
1888
1889         ret = mnt_want_write_file(filp);
1890         if (ret)
1891                 return ret;
1892
1893         f2fs_balance_fs(F2FS_I_SB(inode), true);
1894
1895         inode_lock(inode);
1896
1897         if (f2fs_is_volatile_file(inode)) {
1898                 ret = -EINVAL;
1899                 goto err_out;
1900         }
1901
1902         if (f2fs_is_atomic_file(inode)) {
1903                 ret = f2fs_commit_inmem_pages(inode);
1904                 if (ret)
1905                         goto err_out;
1906
1907                 ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
1908                 if (!ret) {
1909                         clear_inode_flag(inode, FI_ATOMIC_FILE);
1910                         F2FS_I(inode)->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
1911                         stat_dec_atomic_write(inode);
1912                 }
1913         } else {
1914                 ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 1, false);
1915         }
1916 err_out:
1917         if (is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST)) {
1918                 clear_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
1919                 ret = -EINVAL;
1920         }
1921         inode_unlock(inode);
1922         mnt_drop_write_file(filp);
1923         return ret;
1924 }
1925
1926 static int f2fs_ioc_start_volatile_write(struct file *filp)
1927 {
1928         struct inode *inode = file_inode(filp);
1929         int ret;
1930
1931         if (!inode_owner_or_capable(inode))
1932                 return -EACCES;
1933
1934         if (!S_ISREG(inode->i_mode))
1935                 return -EINVAL;
1936
1937         ret = mnt_want_write_file(filp);
1938         if (ret)
1939                 return ret;
1940
1941         inode_lock(inode);
1942
1943         if (f2fs_is_volatile_file(inode))
1944                 goto out;
1945
1946         ret = f2fs_convert_inline_inode(inode);
1947         if (ret)
1948                 goto out;
1949
1950         stat_inc_volatile_write(inode);
1951         stat_update_max_volatile_write(inode);
1952
1953         set_inode_flag(inode, FI_VOLATILE_FILE);
1954         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
1955 out:
1956         inode_unlock(inode);
1957         mnt_drop_write_file(filp);
1958         return ret;
1959 }
1960
1961 static int f2fs_ioc_release_volatile_write(struct file *filp)
1962 {
1963         struct inode *inode = file_inode(filp);
1964         int ret;
1965
1966         if (!inode_owner_or_capable(inode))
1967                 return -EACCES;
1968
1969         ret = mnt_want_write_file(filp);
1970         if (ret)
1971                 return ret;
1972
1973         inode_lock(inode);
1974
1975         if (!f2fs_is_volatile_file(inode))
1976                 goto out;
1977
1978         if (!f2fs_is_first_block_written(inode)) {
1979                 ret = truncate_partial_data_page(inode, 0, true);
1980                 goto out;
1981         }
1982
1983         ret = punch_hole(inode, 0, F2FS_BLKSIZE);
1984 out:
1985         inode_unlock(inode);
1986         mnt_drop_write_file(filp);
1987         return ret;
1988 }
1989
1990 static int f2fs_ioc_abort_volatile_write(struct file *filp)
1991 {
1992         struct inode *inode = file_inode(filp);
1993         int ret;
1994
1995         if (!inode_owner_or_capable(inode))
1996                 return -EACCES;
1997
1998         ret = mnt_want_write_file(filp);
1999         if (ret)
2000                 return ret;
2001
2002         inode_lock(inode);
2003
2004         if (f2fs_is_atomic_file(inode))
2005                 f2fs_drop_inmem_pages(inode);
2006         if (f2fs_is_volatile_file(inode)) {
2007                 clear_inode_flag(inode, FI_VOLATILE_FILE);
2008                 stat_dec_volatile_write(inode);
2009                 ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
2010         }
2011
2012         clear_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
2013
2014         inode_unlock(inode);
2015
2016         mnt_drop_write_file(filp);
2017         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
2018         return ret;
2019 }
2020
2021 static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
2022 {
2023         struct inode *inode = file_inode(filp);
2024         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2025         struct super_block *sb = sbi->sb;
2026         __u32 in;
2027         int ret = 0;
2028
2029         if (!capable(CAP_SYS_ADMIN))
2030                 return -EPERM;
2031
2032         if (get_user(in, (__u32 __user *)arg))
2033                 return -EFAULT;
2034
2035         if (in != F2FS_GOING_DOWN_FULLSYNC) {
2036                 ret = mnt_want_write_file(filp);
2037                 if (ret)
2038                         return ret;
2039         }
2040
2041         switch (in) {
2042         case F2FS_GOING_DOWN_FULLSYNC:
2043                 sb = freeze_bdev(sb->s_bdev);
2044                 if (IS_ERR(sb)) {
2045                         ret = PTR_ERR(sb);
2046                         goto out;
2047                 }
2048                 if (sb) {
2049                         f2fs_stop_checkpoint(sbi, false);
2050                         set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
2051                         thaw_bdev(sb->s_bdev, sb);
2052                 }
2053                 break;
2054         case F2FS_GOING_DOWN_METASYNC:
2055                 /* do checkpoint only */
2056                 ret = f2fs_sync_fs(sb, 1);
2057                 if (ret)
2058                         goto out;
2059                 f2fs_stop_checkpoint(sbi, false);
2060                 set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
2061                 break;
2062         case F2FS_GOING_DOWN_NOSYNC:
2063                 f2fs_stop_checkpoint(sbi, false);
2064                 set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
2065                 break;
2066         case F2FS_GOING_DOWN_METAFLUSH:
2067                 f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_META_IO);
2068                 f2fs_stop_checkpoint(sbi, false);
2069                 set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
2070                 break;
2071         case F2FS_GOING_DOWN_NEED_FSCK:
2072                 set_sbi_flag(sbi, SBI_NEED_FSCK);
2073                 set_sbi_flag(sbi, SBI_CP_DISABLED_QUICK);
2074                 set_sbi_flag(sbi, SBI_IS_DIRTY);
2075                 /* do checkpoint only */
2076                 ret = f2fs_sync_fs(sb, 1);
2077                 goto out;
2078         default:
2079                 ret = -EINVAL;
2080                 goto out;
2081         }
2082
2083         f2fs_stop_gc_thread(sbi);
2084         f2fs_stop_discard_thread(sbi);
2085
2086         f2fs_drop_discard_cmd(sbi);
2087         clear_opt(sbi, DISCARD);
2088
2089         f2fs_update_time(sbi, REQ_TIME);
2090 out:
2091         if (in != F2FS_GOING_DOWN_FULLSYNC)
2092                 mnt_drop_write_file(filp);
2093
2094         trace_f2fs_shutdown(sbi, in, ret);
2095
2096         return ret;
2097 }
2098
2099 static int f2fs_ioc_fitrim(struct file *filp, unsigned long arg)
2100 {
2101         struct inode *inode = file_inode(filp);
2102         struct super_block *sb = inode->i_sb;
2103         struct request_queue *q = bdev_get_queue(sb->s_bdev);
2104         struct fstrim_range range;
2105         int ret;
2106
2107         if (!capable(CAP_SYS_ADMIN))
2108                 return -EPERM;
2109
2110         if (!f2fs_hw_support_discard(F2FS_SB(sb)))
2111                 return -EOPNOTSUPP;
2112
2113         if (copy_from_user(&range, (struct fstrim_range __user *)arg,
2114                                 sizeof(range)))
2115                 return -EFAULT;
2116
2117         ret = mnt_want_write_file(filp);
2118         if (ret)
2119                 return ret;
2120
2121         range.minlen = max((unsigned int)range.minlen,
2122                                 q->limits.discard_granularity);
2123         ret = f2fs_trim_fs(F2FS_SB(sb), &range);
2124         mnt_drop_write_file(filp);
2125         if (ret < 0)
2126                 return ret;
2127
2128         if (copy_to_user((struct fstrim_range __user *)arg, &range,
2129                                 sizeof(range)))
2130                 return -EFAULT;
2131         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
2132         return 0;
2133 }
2134
2135 static bool uuid_is_nonzero(__u8 u[16])
2136 {
2137         int i;
2138
2139         for (i = 0; i < 16; i++)
2140                 if (u[i])
2141                         return true;
2142         return false;
2143 }
2144
2145 static int f2fs_ioc_set_encryption_policy(struct file *filp, unsigned long arg)
2146 {
2147         struct inode *inode = file_inode(filp);
2148
2149         if (!f2fs_sb_has_encrypt(F2FS_I_SB(inode)))
2150                 return -EOPNOTSUPP;
2151
2152         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
2153
2154         return fscrypt_ioctl_set_policy(filp, (const void __user *)arg);
2155 }
2156
2157 static int f2fs_ioc_get_encryption_policy(struct file *filp, unsigned long arg)
2158 {
2159         if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2160                 return -EOPNOTSUPP;
2161         return fscrypt_ioctl_get_policy(filp, (void __user *)arg);
2162 }
2163
2164 static int f2fs_ioc_get_encryption_pwsalt(struct file *filp, unsigned long arg)
2165 {
2166         struct inode *inode = file_inode(filp);
2167         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2168         int err;
2169
2170         if (!f2fs_sb_has_encrypt(sbi))
2171                 return -EOPNOTSUPP;
2172
2173         err = mnt_want_write_file(filp);
2174         if (err)
2175                 return err;
2176
2177         down_write(&sbi->sb_lock);
2178
2179         if (uuid_is_nonzero(sbi->raw_super->encrypt_pw_salt))
2180                 goto got_it;
2181
2182         /* update superblock with uuid */
2183         generate_random_uuid(sbi->raw_super->encrypt_pw_salt);
2184
2185         err = f2fs_commit_super(sbi, false);
2186         if (err) {
2187                 /* undo new data */
2188                 memset(sbi->raw_super->encrypt_pw_salt, 0, 16);
2189                 goto out_err;
2190         }
2191 got_it:
2192         if (copy_to_user((__u8 __user *)arg, sbi->raw_super->encrypt_pw_salt,
2193                                                                         16))
2194                 err = -EFAULT;
2195 out_err:
2196         up_write(&sbi->sb_lock);
2197         mnt_drop_write_file(filp);
2198         return err;
2199 }
2200
2201 static int f2fs_ioc_get_encryption_policy_ex(struct file *filp,
2202                                              unsigned long arg)
2203 {
2204         if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2205                 return -EOPNOTSUPP;
2206
2207         return fscrypt_ioctl_get_policy_ex(filp, (void __user *)arg);
2208 }
2209
2210 static int f2fs_ioc_add_encryption_key(struct file *filp, unsigned long arg)
2211 {
2212         if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2213                 return -EOPNOTSUPP;
2214
2215         return fscrypt_ioctl_add_key(filp, (void __user *)arg);
2216 }
2217
2218 static int f2fs_ioc_remove_encryption_key(struct file *filp, unsigned long arg)
2219 {
2220         if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2221                 return -EOPNOTSUPP;
2222
2223         return fscrypt_ioctl_remove_key(filp, (void __user *)arg);
2224 }
2225
2226 static int f2fs_ioc_remove_encryption_key_all_users(struct file *filp,
2227                                                     unsigned long arg)
2228 {
2229         if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2230                 return -EOPNOTSUPP;
2231
2232         return fscrypt_ioctl_remove_key_all_users(filp, (void __user *)arg);
2233 }
2234
2235 static int f2fs_ioc_get_encryption_key_status(struct file *filp,
2236                                               unsigned long arg)
2237 {
2238         if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2239                 return -EOPNOTSUPP;
2240
2241         return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
2242 }
2243
2244 static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
2245 {
2246         struct inode *inode = file_inode(filp);
2247         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2248         __u32 sync;
2249         int ret;
2250
2251         if (!capable(CAP_SYS_ADMIN))
2252                 return -EPERM;
2253
2254         if (get_user(sync, (__u32 __user *)arg))
2255                 return -EFAULT;
2256
2257         if (f2fs_readonly(sbi->sb))
2258                 return -EROFS;
2259
2260         ret = mnt_want_write_file(filp);
2261         if (ret)
2262                 return ret;
2263
2264         if (!sync) {
2265                 if (!mutex_trylock(&sbi->gc_mutex)) {
2266                         ret = -EBUSY;
2267                         goto out;
2268                 }
2269         } else {
2270                 mutex_lock(&sbi->gc_mutex);
2271         }
2272
2273         ret = f2fs_gc(sbi, sync, true, NULL_SEGNO);
2274 out:
2275         mnt_drop_write_file(filp);
2276         return ret;
2277 }
2278
2279 static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
2280 {
2281         struct inode *inode = file_inode(filp);
2282         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2283         struct f2fs_gc_range range;
2284         u64 end;
2285         int ret;
2286
2287         if (!capable(CAP_SYS_ADMIN))
2288                 return -EPERM;
2289
2290         if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
2291                                                         sizeof(range)))
2292                 return -EFAULT;
2293
2294         if (f2fs_readonly(sbi->sb))
2295                 return -EROFS;
2296
2297         end = range.start + range.len;
2298         if (range.start < MAIN_BLKADDR(sbi) || end >= MAX_BLKADDR(sbi)) {
2299                 return -EINVAL;
2300         }
2301
2302         ret = mnt_want_write_file(filp);
2303         if (ret)
2304                 return ret;
2305
2306 do_more:
2307         if (!range.sync) {
2308                 if (!mutex_trylock(&sbi->gc_mutex)) {
2309                         ret = -EBUSY;
2310                         goto out;
2311                 }
2312         } else {
2313                 mutex_lock(&sbi->gc_mutex);
2314         }
2315
2316         ret = f2fs_gc(sbi, range.sync, true, GET_SEGNO(sbi, range.start));
2317         range.start += BLKS_PER_SEC(sbi);
2318         if (range.start <= end)
2319                 goto do_more;
2320 out:
2321         mnt_drop_write_file(filp);
2322         return ret;
2323 }
2324
2325 static int f2fs_ioc_write_checkpoint(struct file *filp, unsigned long arg)
2326 {
2327         struct inode *inode = file_inode(filp);
2328         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2329         int ret;
2330
2331         if (!capable(CAP_SYS_ADMIN))
2332                 return -EPERM;
2333
2334         if (f2fs_readonly(sbi->sb))
2335                 return -EROFS;
2336
2337         if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
2338                 f2fs_info(sbi, "Skipping Checkpoint. Checkpoints currently disabled.");
2339                 return -EINVAL;
2340         }
2341
2342         ret = mnt_want_write_file(filp);
2343         if (ret)
2344                 return ret;
2345
2346         ret = f2fs_sync_fs(sbi->sb, 1);
2347
2348         mnt_drop_write_file(filp);
2349         return ret;
2350 }
2351
2352 static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
2353                                         struct file *filp,
2354                                         struct f2fs_defragment *range)
2355 {
2356         struct inode *inode = file_inode(filp);
2357         struct f2fs_map_blocks map = { .m_next_extent = NULL,
2358                                         .m_seg_type = NO_CHECK_TYPE ,
2359                                         .m_may_create = false };
2360         struct extent_info ei = {0, 0, 0};
2361         pgoff_t pg_start, pg_end, next_pgofs;
2362         unsigned int blk_per_seg = sbi->blocks_per_seg;
2363         unsigned int total = 0, sec_num;
2364         block_t blk_end = 0;
2365         bool fragmented = false;
2366         int err;
2367
2368         /* if in-place-update policy is enabled, don't waste time here */
2369         if (f2fs_should_update_inplace(inode, NULL))
2370                 return -EINVAL;
2371
2372         pg_start = range->start >> PAGE_SHIFT;
2373         pg_end = (range->start + range->len) >> PAGE_SHIFT;
2374
2375         f2fs_balance_fs(sbi, true);
2376
2377         inode_lock(inode);
2378
2379         /* writeback all dirty pages in the range */
2380         err = filemap_write_and_wait_range(inode->i_mapping, range->start,
2381                                                 range->start + range->len - 1);
2382         if (err)
2383                 goto out;
2384
2385         /*
2386          * lookup mapping info in extent cache, skip defragmenting if physical
2387          * block addresses are continuous.
2388          */
2389         if (f2fs_lookup_extent_cache(inode, pg_start, &ei)) {
2390                 if (ei.fofs + ei.len >= pg_end)
2391                         goto out;
2392         }
2393
2394         map.m_lblk = pg_start;
2395         map.m_next_pgofs = &next_pgofs;
2396
2397         /*
2398          * lookup mapping info in dnode page cache, skip defragmenting if all
2399          * physical block addresses are continuous even if there are hole(s)
2400          * in logical blocks.
2401          */
2402         while (map.m_lblk < pg_end) {
2403                 map.m_len = pg_end - map.m_lblk;
2404                 err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT);
2405                 if (err)
2406                         goto out;
2407
2408                 if (!(map.m_flags & F2FS_MAP_FLAGS)) {
2409                         map.m_lblk = next_pgofs;
2410                         continue;
2411                 }
2412
2413                 if (blk_end && blk_end != map.m_pblk)
2414                         fragmented = true;
2415
2416                 /* record total count of block that we're going to move */
2417                 total += map.m_len;
2418
2419                 blk_end = map.m_pblk + map.m_len;
2420
2421                 map.m_lblk += map.m_len;
2422         }
2423
2424         if (!fragmented)
2425                 goto out;
2426
2427         sec_num = DIV_ROUND_UP(total, BLKS_PER_SEC(sbi));
2428
2429         /*
2430          * make sure there are enough free section for LFS allocation, this can
2431          * avoid defragment running in SSR mode when free section are allocated
2432          * intensively
2433          */
2434         if (has_not_enough_free_secs(sbi, 0, sec_num)) {
2435                 err = -EAGAIN;
2436                 goto out;
2437         }
2438
2439         map.m_lblk = pg_start;
2440         map.m_len = pg_end - pg_start;
2441         total = 0;
2442
2443         while (map.m_lblk < pg_end) {
2444                 pgoff_t idx;
2445                 int cnt = 0;
2446
2447 do_map:
2448                 map.m_len = pg_end - map.m_lblk;
2449                 err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT);
2450                 if (err)
2451                         goto clear_out;
2452
2453                 if (!(map.m_flags & F2FS_MAP_FLAGS)) {
2454                         map.m_lblk = next_pgofs;
2455                         continue;
2456                 }
2457
2458                 set_inode_flag(inode, FI_DO_DEFRAG);
2459
2460                 idx = map.m_lblk;
2461                 while (idx < map.m_lblk + map.m_len && cnt < blk_per_seg) {
2462                         struct page *page;
2463
2464                         page = f2fs_get_lock_data_page(inode, idx, true);
2465                         if (IS_ERR(page)) {
2466                                 err = PTR_ERR(page);
2467                                 goto clear_out;
2468                         }
2469
2470                         set_page_dirty(page);
2471                         f2fs_put_page(page, 1);
2472
2473                         idx++;
2474                         cnt++;
2475                         total++;
2476                 }
2477
2478                 map.m_lblk = idx;
2479
2480                 if (idx < pg_end && cnt < blk_per_seg)
2481                         goto do_map;
2482
2483                 clear_inode_flag(inode, FI_DO_DEFRAG);
2484
2485                 err = filemap_fdatawrite(inode->i_mapping);
2486                 if (err)
2487                         goto out;
2488         }
2489 clear_out:
2490         clear_inode_flag(inode, FI_DO_DEFRAG);
2491 out:
2492         inode_unlock(inode);
2493         if (!err)
2494                 range->len = (u64)total << PAGE_SHIFT;
2495         return err;
2496 }
2497
2498 static int f2fs_ioc_defragment(struct file *filp, unsigned long arg)
2499 {
2500         struct inode *inode = file_inode(filp);
2501         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2502         struct f2fs_defragment range;
2503         int err;
2504
2505         if (!capable(CAP_SYS_ADMIN))
2506                 return -EPERM;
2507
2508         if (!S_ISREG(inode->i_mode) || f2fs_is_atomic_file(inode))
2509                 return -EINVAL;
2510
2511         if (f2fs_readonly(sbi->sb))
2512                 return -EROFS;
2513
2514         if (copy_from_user(&range, (struct f2fs_defragment __user *)arg,
2515                                                         sizeof(range)))
2516                 return -EFAULT;
2517
2518         /* verify alignment of offset & size */
2519         if (range.start & (F2FS_BLKSIZE - 1) || range.len & (F2FS_BLKSIZE - 1))
2520                 return -EINVAL;
2521
2522         if (unlikely((range.start + range.len) >> PAGE_SHIFT >
2523                                         sbi->max_file_blocks))
2524                 return -EINVAL;
2525
2526         err = mnt_want_write_file(filp);
2527         if (err)
2528                 return err;
2529
2530         err = f2fs_defragment_range(sbi, filp, &range);
2531         mnt_drop_write_file(filp);
2532
2533         f2fs_update_time(sbi, REQ_TIME);
2534         if (err < 0)
2535                 return err;
2536
2537         if (copy_to_user((struct f2fs_defragment __user *)arg, &range,
2538                                                         sizeof(range)))
2539                 return -EFAULT;
2540
2541         return 0;
2542 }
2543
2544 static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
2545                         struct file *file_out, loff_t pos_out, size_t len)
2546 {
2547         struct inode *src = file_inode(file_in);
2548         struct inode *dst = file_inode(file_out);
2549         struct f2fs_sb_info *sbi = F2FS_I_SB(src);
2550         size_t olen = len, dst_max_i_size = 0;
2551         size_t dst_osize;
2552         int ret;
2553
2554         if (file_in->f_path.mnt != file_out->f_path.mnt ||
2555                                 src->i_sb != dst->i_sb)
2556                 return -EXDEV;
2557
2558         if (unlikely(f2fs_readonly(src->i_sb)))
2559                 return -EROFS;
2560
2561         if (!S_ISREG(src->i_mode) || !S_ISREG(dst->i_mode))
2562                 return -EINVAL;
2563
2564         if (IS_ENCRYPTED(src) || IS_ENCRYPTED(dst))
2565                 return -EOPNOTSUPP;
2566
2567         if (src == dst) {
2568                 if (pos_in == pos_out)
2569                         return 0;
2570                 if (pos_out > pos_in && pos_out < pos_in + len)
2571                         return -EINVAL;
2572         }
2573
2574         inode_lock(src);
2575         if (src != dst) {
2576                 ret = -EBUSY;
2577                 if (!inode_trylock(dst))
2578                         goto out;
2579         }
2580
2581         ret = -EINVAL;
2582         if (pos_in + len > src->i_size || pos_in + len < pos_in)
2583                 goto out_unlock;
2584         if (len == 0)
2585                 olen = len = src->i_size - pos_in;
2586         if (pos_in + len == src->i_size)
2587                 len = ALIGN(src->i_size, F2FS_BLKSIZE) - pos_in;
2588         if (len == 0) {
2589                 ret = 0;
2590                 goto out_unlock;
2591         }
2592
2593         dst_osize = dst->i_size;
2594         if (pos_out + olen > dst->i_size)
2595                 dst_max_i_size = pos_out + olen;
2596
2597         /* verify the end result is block aligned */
2598         if (!IS_ALIGNED(pos_in, F2FS_BLKSIZE) ||
2599                         !IS_ALIGNED(pos_in + len, F2FS_BLKSIZE) ||
2600                         !IS_ALIGNED(pos_out, F2FS_BLKSIZE))
2601                 goto out_unlock;
2602
2603         ret = f2fs_convert_inline_inode(src);
2604         if (ret)
2605                 goto out_unlock;
2606
2607         ret = f2fs_convert_inline_inode(dst);
2608         if (ret)
2609                 goto out_unlock;
2610
2611         /* write out all dirty pages from offset */
2612         ret = filemap_write_and_wait_range(src->i_mapping,
2613                                         pos_in, pos_in + len);
2614         if (ret)
2615                 goto out_unlock;
2616
2617         ret = filemap_write_and_wait_range(dst->i_mapping,
2618                                         pos_out, pos_out + len);
2619         if (ret)
2620                 goto out_unlock;
2621
2622         f2fs_balance_fs(sbi, true);
2623
2624         down_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
2625         if (src != dst) {
2626                 ret = -EBUSY;
2627                 if (!down_write_trylock(&F2FS_I(dst)->i_gc_rwsem[WRITE]))
2628                         goto out_src;
2629         }
2630
2631         f2fs_lock_op(sbi);
2632         ret = __exchange_data_block(src, dst, pos_in >> F2FS_BLKSIZE_BITS,
2633                                 pos_out >> F2FS_BLKSIZE_BITS,
2634                                 len >> F2FS_BLKSIZE_BITS, false);
2635
2636         if (!ret) {
2637                 if (dst_max_i_size)
2638                         f2fs_i_size_write(dst, dst_max_i_size);
2639                 else if (dst_osize != dst->i_size)
2640                         f2fs_i_size_write(dst, dst_osize);
2641         }
2642         f2fs_unlock_op(sbi);
2643
2644         if (src != dst)
2645                 up_write(&F2FS_I(dst)->i_gc_rwsem[WRITE]);
2646 out_src:
2647         up_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
2648 out_unlock:
2649         if (src != dst)
2650                 inode_unlock(dst);
2651 out:
2652         inode_unlock(src);
2653         return ret;
2654 }
2655
2656 static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
2657 {
2658         struct f2fs_move_range range;
2659         struct fd dst;
2660         int err;
2661
2662         if (!(filp->f_mode & FMODE_READ) ||
2663                         !(filp->f_mode & FMODE_WRITE))
2664                 return -EBADF;
2665
2666         if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
2667                                                         sizeof(range)))
2668                 return -EFAULT;
2669
2670         dst = fdget(range.dst_fd);
2671         if (!dst.file)
2672                 return -EBADF;
2673
2674         if (!(dst.file->f_mode & FMODE_WRITE)) {
2675                 err = -EBADF;
2676                 goto err_out;
2677         }
2678
2679         err = mnt_want_write_file(filp);
2680         if (err)
2681                 goto err_out;
2682
2683         err = f2fs_move_file_range(filp, range.pos_in, dst.file,
2684                                         range.pos_out, range.len);
2685
2686         mnt_drop_write_file(filp);
2687         if (err)
2688                 goto err_out;
2689
2690         if (copy_to_user((struct f2fs_move_range __user *)arg,
2691                                                 &range, sizeof(range)))
2692                 err = -EFAULT;
2693 err_out:
2694         fdput(dst);
2695         return err;
2696 }
2697
2698 static int f2fs_ioc_flush_device(struct file *filp, unsigned long arg)
2699 {
2700         struct inode *inode = file_inode(filp);
2701         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2702         struct sit_info *sm = SIT_I(sbi);
2703         unsigned int start_segno = 0, end_segno = 0;
2704         unsigned int dev_start_segno = 0, dev_end_segno = 0;
2705         struct f2fs_flush_device range;
2706         int ret;
2707
2708         if (!capable(CAP_SYS_ADMIN))
2709                 return -EPERM;
2710
2711         if (f2fs_readonly(sbi->sb))
2712                 return -EROFS;
2713
2714         if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
2715                 return -EINVAL;
2716
2717         if (copy_from_user(&range, (struct f2fs_flush_device __user *)arg,
2718                                                         sizeof(range)))
2719                 return -EFAULT;
2720
2721         if (!f2fs_is_multi_device(sbi) || sbi->s_ndevs - 1 <= range.dev_num ||
2722                         __is_large_section(sbi)) {
2723                 f2fs_warn(sbi, "Can't flush %u in %d for segs_per_sec %u != 1",
2724                           range.dev_num, sbi->s_ndevs, sbi->segs_per_sec);
2725                 return -EINVAL;
2726         }
2727
2728         ret = mnt_want_write_file(filp);
2729         if (ret)
2730                 return ret;
2731
2732         if (range.dev_num != 0)
2733                 dev_start_segno = GET_SEGNO(sbi, FDEV(range.dev_num).start_blk);
2734         dev_end_segno = GET_SEGNO(sbi, FDEV(range.dev_num).end_blk);
2735
2736         start_segno = sm->last_victim[FLUSH_DEVICE];
2737         if (start_segno < dev_start_segno || start_segno >= dev_end_segno)
2738                 start_segno = dev_start_segno;
2739         end_segno = min(start_segno + range.segments, dev_end_segno);
2740
2741         while (start_segno < end_segno) {
2742                 if (!mutex_trylock(&sbi->gc_mutex)) {
2743                         ret = -EBUSY;
2744                         goto out;
2745                 }
2746                 sm->last_victim[GC_CB] = end_segno + 1;
2747                 sm->last_victim[GC_GREEDY] = end_segno + 1;
2748                 sm->last_victim[ALLOC_NEXT] = end_segno + 1;
2749                 ret = f2fs_gc(sbi, true, true, start_segno);
2750                 if (ret == -EAGAIN)
2751                         ret = 0;
2752                 else if (ret < 0)
2753                         break;
2754                 start_segno++;
2755         }
2756 out:
2757         mnt_drop_write_file(filp);
2758         return ret;
2759 }
2760
2761 static int f2fs_ioc_get_features(struct file *filp, unsigned long arg)
2762 {
2763         struct inode *inode = file_inode(filp);
2764         u32 sb_feature = le32_to_cpu(F2FS_I_SB(inode)->raw_super->feature);
2765
2766         /* Must validate to set it with SQLite behavior in Android. */
2767         sb_feature |= F2FS_FEATURE_ATOMIC_WRITE;
2768
2769         return put_user(sb_feature, (u32 __user *)arg);
2770 }
2771
2772 #ifdef CONFIG_QUOTA
2773 int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid)
2774 {
2775         struct dquot *transfer_to[MAXQUOTAS] = {};
2776         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2777         struct super_block *sb = sbi->sb;
2778         int err = 0;
2779
2780         transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid));
2781         if (!IS_ERR(transfer_to[PRJQUOTA])) {
2782                 err = __dquot_transfer(inode, transfer_to);
2783                 if (err)
2784                         set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
2785                 dqput(transfer_to[PRJQUOTA]);
2786         }
2787         return err;
2788 }
2789
2790 static int f2fs_ioc_setproject(struct file *filp, __u32 projid)
2791 {
2792         struct inode *inode = file_inode(filp);
2793         struct f2fs_inode_info *fi = F2FS_I(inode);
2794         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2795         struct page *ipage;
2796         kprojid_t kprojid;
2797         int err;
2798
2799         if (!f2fs_sb_has_project_quota(sbi)) {
2800                 if (projid != F2FS_DEF_PROJID)
2801                         return -EOPNOTSUPP;
2802                 else
2803                         return 0;
2804         }
2805
2806         if (!f2fs_has_extra_attr(inode))
2807                 return -EOPNOTSUPP;
2808
2809         kprojid = make_kprojid(&init_user_ns, (projid_t)projid);
2810
2811         if (projid_eq(kprojid, F2FS_I(inode)->i_projid))
2812                 return 0;
2813
2814         err = -EPERM;
2815         /* Is it quota file? Do not allow user to mess with it */
2816         if (IS_NOQUOTA(inode))
2817                 return err;
2818
2819         ipage = f2fs_get_node_page(sbi, inode->i_ino);
2820         if (IS_ERR(ipage))
2821                 return PTR_ERR(ipage);
2822
2823         if (!F2FS_FITS_IN_INODE(F2FS_INODE(ipage), fi->i_extra_isize,
2824                                                                 i_projid)) {
2825                 err = -EOVERFLOW;
2826                 f2fs_put_page(ipage, 1);
2827                 return err;
2828         }
2829         f2fs_put_page(ipage, 1);
2830
2831         err = dquot_initialize(inode);
2832         if (err)
2833                 return err;
2834
2835         f2fs_lock_op(sbi);
2836         err = f2fs_transfer_project_quota(inode, kprojid);
2837         if (err)
2838                 goto out_unlock;
2839
2840         F2FS_I(inode)->i_projid = kprojid;
2841         inode->i_ctime = current_time(inode);
2842         f2fs_mark_inode_dirty_sync(inode, true);
2843 out_unlock:
2844         f2fs_unlock_op(sbi);
2845         return err;
2846 }
2847 #else
2848 int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid)
2849 {
2850         return 0;
2851 }
2852
2853 static int f2fs_ioc_setproject(struct file *filp, __u32 projid)
2854 {
2855         if (projid != F2FS_DEF_PROJID)
2856                 return -EOPNOTSUPP;
2857         return 0;
2858 }
2859 #endif
2860
2861 /* FS_IOC_FSGETXATTR and FS_IOC_FSSETXATTR support */
2862
2863 /*
2864  * To make a new on-disk f2fs i_flag gettable via FS_IOC_FSGETXATTR and settable
2865  * via FS_IOC_FSSETXATTR, add an entry for it to f2fs_xflags_map[], and add its
2866  * FS_XFLAG_* equivalent to F2FS_SUPPORTED_XFLAGS.
2867  */
2868
2869 static const struct {
2870         u32 iflag;
2871         u32 xflag;
2872 } f2fs_xflags_map[] = {
2873         { F2FS_SYNC_FL,         FS_XFLAG_SYNC },
2874         { F2FS_IMMUTABLE_FL,    FS_XFLAG_IMMUTABLE },
2875         { F2FS_APPEND_FL,       FS_XFLAG_APPEND },
2876         { F2FS_NODUMP_FL,       FS_XFLAG_NODUMP },
2877         { F2FS_NOATIME_FL,      FS_XFLAG_NOATIME },
2878         { F2FS_PROJINHERIT_FL,  FS_XFLAG_PROJINHERIT },
2879 };
2880
2881 #define F2FS_SUPPORTED_XFLAGS (         \
2882                 FS_XFLAG_SYNC |         \
2883                 FS_XFLAG_IMMUTABLE |    \
2884                 FS_XFLAG_APPEND |       \
2885                 FS_XFLAG_NODUMP |       \
2886                 FS_XFLAG_NOATIME |      \
2887                 FS_XFLAG_PROJINHERIT)
2888
2889 /* Convert f2fs on-disk i_flags to FS_IOC_FS{GET,SET}XATTR flags */
2890 static inline u32 f2fs_iflags_to_xflags(u32 iflags)
2891 {
2892         u32 xflags = 0;
2893         int i;
2894
2895         for (i = 0; i < ARRAY_SIZE(f2fs_xflags_map); i++)
2896                 if (iflags & f2fs_xflags_map[i].iflag)
2897                         xflags |= f2fs_xflags_map[i].xflag;
2898
2899         return xflags;
2900 }
2901
2902 /* Convert FS_IOC_FS{GET,SET}XATTR flags to f2fs on-disk i_flags */
2903 static inline u32 f2fs_xflags_to_iflags(u32 xflags)
2904 {
2905         u32 iflags = 0;
2906         int i;
2907
2908         for (i = 0; i < ARRAY_SIZE(f2fs_xflags_map); i++)
2909                 if (xflags & f2fs_xflags_map[i].xflag)
2910                         iflags |= f2fs_xflags_map[i].iflag;
2911
2912         return iflags;
2913 }
2914
2915 static void f2fs_fill_fsxattr(struct inode *inode, struct fsxattr *fa)
2916 {
2917         struct f2fs_inode_info *fi = F2FS_I(inode);
2918
2919         simple_fill_fsxattr(fa, f2fs_iflags_to_xflags(fi->i_flags));
2920
2921         if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
2922                 fa->fsx_projid = from_kprojid(&init_user_ns, fi->i_projid);
2923 }
2924
2925 static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
2926 {
2927         struct inode *inode = file_inode(filp);
2928         struct fsxattr fa;
2929
2930         f2fs_fill_fsxattr(inode, &fa);
2931
2932         if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
2933                 return -EFAULT;
2934         return 0;
2935 }
2936
2937 static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
2938 {
2939         struct inode *inode = file_inode(filp);
2940         struct fsxattr fa, old_fa;
2941         u32 iflags;
2942         int err;
2943
2944         if (copy_from_user(&fa, (struct fsxattr __user *)arg, sizeof(fa)))
2945                 return -EFAULT;
2946
2947         /* Make sure caller has proper permission */
2948         if (!inode_owner_or_capable(inode))
2949                 return -EACCES;
2950
2951         if (fa.fsx_xflags & ~F2FS_SUPPORTED_XFLAGS)
2952                 return -EOPNOTSUPP;
2953
2954         iflags = f2fs_xflags_to_iflags(fa.fsx_xflags);
2955         if (f2fs_mask_flags(inode->i_mode, iflags) != iflags)
2956                 return -EOPNOTSUPP;
2957
2958         err = mnt_want_write_file(filp);
2959         if (err)
2960                 return err;
2961
2962         inode_lock(inode);
2963
2964         f2fs_fill_fsxattr(inode, &old_fa);
2965         err = vfs_ioc_fssetxattr_check(inode, &old_fa, &fa);
2966         if (err)
2967                 goto out;
2968
2969         err = f2fs_setflags_common(inode, iflags,
2970                         f2fs_xflags_to_iflags(F2FS_SUPPORTED_XFLAGS));
2971         if (err)
2972                 goto out;
2973
2974         err = f2fs_ioc_setproject(filp, fa.fsx_projid);
2975 out:
2976         inode_unlock(inode);
2977         mnt_drop_write_file(filp);
2978         return err;
2979 }
2980
2981 int f2fs_pin_file_control(struct inode *inode, bool inc)
2982 {
2983         struct f2fs_inode_info *fi = F2FS_I(inode);
2984         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2985
2986         /* Use i_gc_failures for normal file as a risk signal. */
2987         if (inc)
2988                 f2fs_i_gc_failures_write(inode,
2989                                 fi->i_gc_failures[GC_FAILURE_PIN] + 1);
2990
2991         if (fi->i_gc_failures[GC_FAILURE_PIN] > sbi->gc_pin_file_threshold) {
2992                 f2fs_warn(sbi, "%s: Enable GC = ino %lx after %x GC trials",
2993                           __func__, inode->i_ino,
2994                           fi->i_gc_failures[GC_FAILURE_PIN]);
2995                 clear_inode_flag(inode, FI_PIN_FILE);
2996                 return -EAGAIN;
2997         }
2998         return 0;
2999 }
3000
3001 static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
3002 {
3003         struct inode *inode = file_inode(filp);
3004         __u32 pin;
3005         int ret = 0;
3006
3007         if (get_user(pin, (__u32 __user *)arg))
3008                 return -EFAULT;
3009
3010         if (!S_ISREG(inode->i_mode))
3011                 return -EINVAL;
3012
3013         if (f2fs_readonly(F2FS_I_SB(inode)->sb))
3014                 return -EROFS;
3015
3016         ret = mnt_want_write_file(filp);
3017         if (ret)
3018                 return ret;
3019
3020         inode_lock(inode);
3021
3022         if (f2fs_should_update_outplace(inode, NULL)) {
3023                 ret = -EINVAL;
3024                 goto out;
3025         }
3026
3027         if (!pin) {
3028                 clear_inode_flag(inode, FI_PIN_FILE);
3029                 f2fs_i_gc_failures_write(inode, 0);
3030                 goto done;
3031         }
3032
3033         if (f2fs_pin_file_control(inode, false)) {
3034                 ret = -EAGAIN;
3035                 goto out;
3036         }
3037         ret = f2fs_convert_inline_inode(inode);
3038         if (ret)
3039                 goto out;
3040
3041         set_inode_flag(inode, FI_PIN_FILE);
3042         ret = F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN];
3043 done:
3044         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
3045 out:
3046         inode_unlock(inode);
3047         mnt_drop_write_file(filp);
3048         return ret;
3049 }
3050
3051 static int f2fs_ioc_get_pin_file(struct file *filp, unsigned long arg)
3052 {
3053         struct inode *inode = file_inode(filp);
3054         __u32 pin = 0;
3055
3056         if (is_inode_flag_set(inode, FI_PIN_FILE))
3057                 pin = F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN];
3058         return put_user(pin, (u32 __user *)arg);
3059 }
3060
3061 int f2fs_precache_extents(struct inode *inode)
3062 {
3063         struct f2fs_inode_info *fi = F2FS_I(inode);
3064         struct f2fs_map_blocks map;
3065         pgoff_t m_next_extent;
3066         loff_t end;
3067         int err;
3068
3069         if (is_inode_flag_set(inode, FI_NO_EXTENT))
3070                 return -EOPNOTSUPP;
3071
3072         map.m_lblk = 0;
3073         map.m_next_pgofs = NULL;
3074         map.m_next_extent = &m_next_extent;
3075         map.m_seg_type = NO_CHECK_TYPE;
3076         map.m_may_create = false;
3077         end = F2FS_I_SB(inode)->max_file_blocks;
3078
3079         while (map.m_lblk < end) {
3080                 map.m_len = end - map.m_lblk;
3081
3082                 down_write(&fi->i_gc_rwsem[WRITE]);
3083                 err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_PRECACHE);
3084                 up_write(&fi->i_gc_rwsem[WRITE]);
3085                 if (err)
3086                         return err;
3087
3088                 map.m_lblk = m_next_extent;
3089         }
3090
3091         return err;
3092 }
3093
3094 static int f2fs_ioc_precache_extents(struct file *filp, unsigned long arg)
3095 {
3096         return f2fs_precache_extents(file_inode(filp));
3097 }
3098
3099 static int f2fs_ioc_resize_fs(struct file *filp, unsigned long arg)
3100 {
3101         struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
3102         __u64 block_count;
3103         int ret;
3104
3105         if (!capable(CAP_SYS_ADMIN))
3106                 return -EPERM;
3107
3108         if (f2fs_readonly(sbi->sb))
3109                 return -EROFS;
3110
3111         if (copy_from_user(&block_count, (void __user *)arg,
3112                            sizeof(block_count)))
3113                 return -EFAULT;
3114
3115         ret = f2fs_resize_fs(sbi, block_count);
3116
3117         return ret;
3118 }
3119
3120 static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
3121 {
3122         struct inode *inode = file_inode(filp);
3123
3124         f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
3125
3126         if (!f2fs_sb_has_verity(F2FS_I_SB(inode))) {
3127                 f2fs_warn(F2FS_I_SB(inode),
3128                           "Can't enable fs-verity on inode %lu: the verity feature is not enabled on this filesystem.\n",
3129                           inode->i_ino);
3130                 return -EOPNOTSUPP;
3131         }
3132
3133         return fsverity_ioctl_enable(filp, (const void __user *)arg);
3134 }
3135
3136 static int f2fs_ioc_measure_verity(struct file *filp, unsigned long arg)
3137 {
3138         if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
3139                 return -EOPNOTSUPP;
3140
3141         return fsverity_ioctl_measure(filp, (void __user *)arg);
3142 }
3143
3144 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
3145 {
3146         if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
3147                 return -EIO;
3148
3149         switch (cmd) {
3150         case F2FS_IOC_GETFLAGS:
3151                 return f2fs_ioc_getflags(filp, arg);
3152         case F2FS_IOC_SETFLAGS:
3153                 return f2fs_ioc_setflags(filp, arg);
3154         case F2FS_IOC_GETVERSION:
3155                 return f2fs_ioc_getversion(filp, arg);
3156         case F2FS_IOC_START_ATOMIC_WRITE:
3157                 return f2fs_ioc_start_atomic_write(filp);
3158         case F2FS_IOC_COMMIT_ATOMIC_WRITE:
3159                 return f2fs_ioc_commit_atomic_write(filp);
3160         case F2FS_IOC_START_VOLATILE_WRITE:
3161                 return f2fs_ioc_start_volatile_write(filp);
3162         case F2FS_IOC_RELEASE_VOLATILE_WRITE:
3163                 return f2fs_ioc_release_volatile_write(filp);
3164         case F2FS_IOC_ABORT_VOLATILE_WRITE:
3165                 return f2fs_ioc_abort_volatile_write(filp);
3166         case F2FS_IOC_SHUTDOWN:
3167                 return f2fs_ioc_shutdown(filp, arg);
3168         case FITRIM:
3169                 return f2fs_ioc_fitrim(filp, arg);
3170         case F2FS_IOC_SET_ENCRYPTION_POLICY:
3171                 return f2fs_ioc_set_encryption_policy(filp, arg);
3172         case F2FS_IOC_GET_ENCRYPTION_POLICY:
3173                 return f2fs_ioc_get_encryption_policy(filp, arg);
3174         case F2FS_IOC_GET_ENCRYPTION_PWSALT:
3175                 return f2fs_ioc_get_encryption_pwsalt(filp, arg);
3176         case FS_IOC_GET_ENCRYPTION_POLICY_EX:
3177                 return f2fs_ioc_get_encryption_policy_ex(filp, arg);
3178         case FS_IOC_ADD_ENCRYPTION_KEY:
3179                 return f2fs_ioc_add_encryption_key(filp, arg);
3180         case FS_IOC_REMOVE_ENCRYPTION_KEY:
3181                 return f2fs_ioc_remove_encryption_key(filp, arg);
3182         case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
3183                 return f2fs_ioc_remove_encryption_key_all_users(filp, arg);
3184         case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
3185                 return f2fs_ioc_get_encryption_key_status(filp, arg);
3186         case F2FS_IOC_GARBAGE_COLLECT:
3187                 return f2fs_ioc_gc(filp, arg);
3188         case F2FS_IOC_GARBAGE_COLLECT_RANGE:
3189                 return f2fs_ioc_gc_range(filp, arg);
3190         case F2FS_IOC_WRITE_CHECKPOINT:
3191                 return f2fs_ioc_write_checkpoint(filp, arg);
3192         case F2FS_IOC_DEFRAGMENT:
3193                 return f2fs_ioc_defragment(filp, arg);
3194         case F2FS_IOC_MOVE_RANGE:
3195                 return f2fs_ioc_move_range(filp, arg);
3196         case F2FS_IOC_FLUSH_DEVICE:
3197                 return f2fs_ioc_flush_device(filp, arg);
3198         case F2FS_IOC_GET_FEATURES:
3199                 return f2fs_ioc_get_features(filp, arg);
3200         case F2FS_IOC_FSGETXATTR:
3201                 return f2fs_ioc_fsgetxattr(filp, arg);
3202         case F2FS_IOC_FSSETXATTR:
3203                 return f2fs_ioc_fssetxattr(filp, arg);
3204         case F2FS_IOC_GET_PIN_FILE:
3205                 return f2fs_ioc_get_pin_file(filp, arg);
3206         case F2FS_IOC_SET_PIN_FILE:
3207                 return f2fs_ioc_set_pin_file(filp, arg);
3208         case F2FS_IOC_PRECACHE_EXTENTS:
3209                 return f2fs_ioc_precache_extents(filp, arg);
3210         case F2FS_IOC_RESIZE_FS:
3211                 return f2fs_ioc_resize_fs(filp, arg);
3212         case FS_IOC_ENABLE_VERITY:
3213                 return f2fs_ioc_enable_verity(filp, arg);
3214         case FS_IOC_MEASURE_VERITY:
3215                 return f2fs_ioc_measure_verity(filp, arg);
3216         default:
3217                 return -ENOTTY;
3218         }
3219 }
3220
3221 static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
3222 {
3223         struct file *file = iocb->ki_filp;
3224         struct inode *inode = file_inode(file);
3225         ssize_t ret;
3226
3227         if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) {
3228                 ret = -EIO;
3229                 goto out;
3230         }
3231
3232         if ((iocb->ki_flags & IOCB_NOWAIT) && !(iocb->ki_flags & IOCB_DIRECT)) {
3233                 ret = -EINVAL;
3234                 goto out;
3235         }
3236
3237         if (!inode_trylock(inode)) {
3238                 if (iocb->ki_flags & IOCB_NOWAIT) {
3239                         ret = -EAGAIN;
3240                         goto out;
3241                 }
3242                 inode_lock(inode);
3243         }
3244
3245         ret = generic_write_checks(iocb, from);
3246         if (ret > 0) {
3247                 bool preallocated = false;
3248                 size_t target_size = 0;
3249                 int err;
3250
3251                 if (iov_iter_fault_in_readable(from, iov_iter_count(from)))
3252                         set_inode_flag(inode, FI_NO_PREALLOC);
3253
3254                 if ((iocb->ki_flags & IOCB_NOWAIT)) {
3255                         if (!f2fs_overwrite_io(inode, iocb->ki_pos,
3256                                                 iov_iter_count(from)) ||
3257                                 f2fs_has_inline_data(inode) ||
3258                                 f2fs_force_buffered_io(inode, iocb, from)) {
3259                                 clear_inode_flag(inode, FI_NO_PREALLOC);
3260                                 inode_unlock(inode);
3261                                 ret = -EAGAIN;
3262                                 goto out;
3263                         }
3264                 } else {
3265                         preallocated = true;
3266                         target_size = iocb->ki_pos + iov_iter_count(from);
3267
3268                         err = f2fs_preallocate_blocks(iocb, from);
3269                         if (err) {
3270                                 clear_inode_flag(inode, FI_NO_PREALLOC);
3271                                 inode_unlock(inode);
3272                                 ret = err;
3273                                 goto out;
3274                         }
3275                 }
3276                 ret = __generic_file_write_iter(iocb, from);
3277                 clear_inode_flag(inode, FI_NO_PREALLOC);
3278
3279                 /* if we couldn't write data, we should deallocate blocks. */
3280                 if (preallocated && i_size_read(inode) < target_size)
3281                         f2fs_truncate(inode);
3282
3283                 if (ret > 0)
3284                         f2fs_update_iostat(F2FS_I_SB(inode), APP_WRITE_IO, ret);
3285         }
3286         inode_unlock(inode);
3287 out:
3288         trace_f2fs_file_write_iter(inode, iocb->ki_pos,
3289                                         iov_iter_count(from), ret);
3290         if (ret > 0)
3291                 ret = generic_write_sync(iocb, ret);
3292         return ret;
3293 }
3294
3295 #ifdef CONFIG_COMPAT
3296 long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
3297 {
3298         switch (cmd) {
3299         case F2FS_IOC32_GETFLAGS:
3300                 cmd = F2FS_IOC_GETFLAGS;
3301                 break;
3302         case F2FS_IOC32_SETFLAGS:
3303                 cmd = F2FS_IOC_SETFLAGS;
3304                 break;
3305         case F2FS_IOC32_GETVERSION:
3306                 cmd = F2FS_IOC_GETVERSION;
3307                 break;
3308         case F2FS_IOC_START_ATOMIC_WRITE:
3309         case F2FS_IOC_COMMIT_ATOMIC_WRITE:
3310         case F2FS_IOC_START_VOLATILE_WRITE:
3311         case F2FS_IOC_RELEASE_VOLATILE_WRITE:
3312         case F2FS_IOC_ABORT_VOLATILE_WRITE:
3313         case F2FS_IOC_SHUTDOWN:
3314         case F2FS_IOC_SET_ENCRYPTION_POLICY:
3315         case F2FS_IOC_GET_ENCRYPTION_PWSALT:
3316         case F2FS_IOC_GET_ENCRYPTION_POLICY:
3317         case FS_IOC_GET_ENCRYPTION_POLICY_EX:
3318         case FS_IOC_ADD_ENCRYPTION_KEY:
3319         case FS_IOC_REMOVE_ENCRYPTION_KEY:
3320         case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
3321         case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
3322         case F2FS_IOC_GARBAGE_COLLECT:
3323         case F2FS_IOC_GARBAGE_COLLECT_RANGE:
3324         case F2FS_IOC_WRITE_CHECKPOINT:
3325         case F2FS_IOC_DEFRAGMENT:
3326         case F2FS_IOC_MOVE_RANGE:
3327         case F2FS_IOC_FLUSH_DEVICE:
3328         case F2FS_IOC_GET_FEATURES:
3329         case F2FS_IOC_FSGETXATTR:
3330         case F2FS_IOC_FSSETXATTR:
3331         case F2FS_IOC_GET_PIN_FILE:
3332         case F2FS_IOC_SET_PIN_FILE:
3333         case F2FS_IOC_PRECACHE_EXTENTS:
3334         case F2FS_IOC_RESIZE_FS:
3335         case FS_IOC_ENABLE_VERITY:
3336         case FS_IOC_MEASURE_VERITY:
3337                 break;
3338         default:
3339                 return -ENOIOCTLCMD;
3340         }
3341         return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
3342 }
3343 #endif
3344
3345 const struct file_operations f2fs_file_operations = {
3346         .llseek         = f2fs_llseek,
3347         .read_iter      = generic_file_read_iter,
3348         .write_iter     = f2fs_file_write_iter,
3349         .open           = f2fs_file_open,
3350         .release        = f2fs_release_file,
3351         .mmap           = f2fs_file_mmap,
3352         .flush          = f2fs_file_flush,
3353         .fsync          = f2fs_sync_file,
3354         .fallocate      = f2fs_fallocate,
3355         .unlocked_ioctl = f2fs_ioctl,
3356 #ifdef CONFIG_COMPAT
3357         .compat_ioctl   = f2fs_compat_ioctl,
3358 #endif
3359         .splice_read    = generic_file_splice_read,
3360         .splice_write   = iter_file_splice_write,
3361 };