OSDN Git Service

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