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