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