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