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