f2fs: introduce macros to convert bytes and blocks in f2fs
[firefly-linux-kernel-4.4.55.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
24 #include "f2fs.h"
25 #include "node.h"
26 #include "segment.h"
27 #include "xattr.h"
28 #include "acl.h"
29 #include "trace.h"
30 #include <trace/events/f2fs.h>
31
32 static int f2fs_vm_page_mkwrite(struct vm_area_struct *vma,
33                                                 struct vm_fault *vmf)
34 {
35         struct page *page = vmf->page;
36         struct inode *inode = file_inode(vma->vm_file);
37         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
38         struct dnode_of_data dn;
39         int err;
40
41         f2fs_balance_fs(sbi);
42
43         sb_start_pagefault(inode->i_sb);
44
45         f2fs_bug_on(sbi, f2fs_has_inline_data(inode));
46
47         /* block allocation */
48         f2fs_lock_op(sbi);
49         set_new_dnode(&dn, inode, NULL, NULL, 0);
50         err = f2fs_reserve_block(&dn, page->index);
51         if (err) {
52                 f2fs_unlock_op(sbi);
53                 goto out;
54         }
55         f2fs_put_dnode(&dn);
56         f2fs_unlock_op(sbi);
57
58         file_update_time(vma->vm_file);
59         lock_page(page);
60         if (unlikely(page->mapping != inode->i_mapping ||
61                         page_offset(page) > i_size_read(inode) ||
62                         !PageUptodate(page))) {
63                 unlock_page(page);
64                 err = -EFAULT;
65                 goto out;
66         }
67
68         /*
69          * check to see if the page is mapped already (no holes)
70          */
71         if (PageMappedToDisk(page))
72                 goto mapped;
73
74         /* page is wholly or partially inside EOF */
75         if (((page->index + 1) << PAGE_CACHE_SHIFT) > i_size_read(inode)) {
76                 unsigned offset;
77                 offset = i_size_read(inode) & ~PAGE_CACHE_MASK;
78                 zero_user_segment(page, offset, PAGE_CACHE_SIZE);
79         }
80         set_page_dirty(page);
81         SetPageUptodate(page);
82
83         trace_f2fs_vm_page_mkwrite(page, DATA);
84 mapped:
85         /* fill the page */
86         f2fs_wait_on_page_writeback(page, DATA);
87 out:
88         sb_end_pagefault(inode->i_sb);
89         return block_page_mkwrite_return(err);
90 }
91
92 static const struct vm_operations_struct f2fs_file_vm_ops = {
93         .fault          = filemap_fault,
94         .map_pages      = filemap_map_pages,
95         .page_mkwrite   = f2fs_vm_page_mkwrite,
96         .remap_pages    = generic_file_remap_pages,
97 };
98
99 static int get_parent_ino(struct inode *inode, nid_t *pino)
100 {
101         struct dentry *dentry;
102
103         inode = igrab(inode);
104         dentry = d_find_any_alias(inode);
105         iput(inode);
106         if (!dentry)
107                 return 0;
108
109         if (update_dent_inode(inode, &dentry->d_name)) {
110                 dput(dentry);
111                 return 0;
112         }
113
114         *pino = parent_ino(dentry);
115         dput(dentry);
116         return 1;
117 }
118
119 static inline bool need_do_checkpoint(struct inode *inode)
120 {
121         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
122         bool need_cp = false;
123
124         if (!S_ISREG(inode->i_mode) || inode->i_nlink != 1)
125                 need_cp = true;
126         else if (file_wrong_pino(inode))
127                 need_cp = true;
128         else if (!space_for_roll_forward(sbi))
129                 need_cp = true;
130         else if (!is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
131                 need_cp = true;
132         else if (F2FS_I(inode)->xattr_ver == cur_cp_version(F2FS_CKPT(sbi)))
133                 need_cp = true;
134         else if (test_opt(sbi, FASTBOOT))
135                 need_cp = true;
136         else if (sbi->active_logs == 2)
137                 need_cp = true;
138
139         return need_cp;
140 }
141
142 static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
143 {
144         struct page *i = find_get_page(NODE_MAPPING(sbi), ino);
145         bool ret = false;
146         /* But we need to avoid that there are some inode updates */
147         if ((i && PageDirty(i)) || need_inode_block_update(sbi, ino))
148                 ret = true;
149         f2fs_put_page(i, 0);
150         return ret;
151 }
152
153 static void try_to_fix_pino(struct inode *inode)
154 {
155         struct f2fs_inode_info *fi = F2FS_I(inode);
156         nid_t pino;
157
158         down_write(&fi->i_sem);
159         fi->xattr_ver = 0;
160         if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
161                         get_parent_ino(inode, &pino)) {
162                 fi->i_pino = pino;
163                 file_got_pino(inode);
164                 up_write(&fi->i_sem);
165
166                 mark_inode_dirty_sync(inode);
167                 f2fs_write_inode(inode, NULL);
168         } else {
169                 up_write(&fi->i_sem);
170         }
171 }
172
173 int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
174 {
175         struct inode *inode = file->f_mapping->host;
176         struct f2fs_inode_info *fi = F2FS_I(inode);
177         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
178         nid_t ino = inode->i_ino;
179         int ret = 0;
180         bool need_cp = false;
181         struct writeback_control wbc = {
182                 .sync_mode = WB_SYNC_ALL,
183                 .nr_to_write = LONG_MAX,
184                 .for_reclaim = 0,
185         };
186
187         if (unlikely(f2fs_readonly(inode->i_sb)))
188                 return 0;
189
190         trace_f2fs_sync_file_enter(inode);
191
192         /* if fdatasync is triggered, let's do in-place-update */
193         if (get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
194                 set_inode_flag(fi, FI_NEED_IPU);
195         ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
196         clear_inode_flag(fi, FI_NEED_IPU);
197
198         if (ret) {
199                 trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
200                 return ret;
201         }
202
203         /* if the inode is dirty, let's recover all the time */
204         if (!datasync && is_inode_flag_set(fi, FI_DIRTY_INODE)) {
205                 update_inode_page(inode);
206                 goto go_write;
207         }
208
209         /*
210          * if there is no written data, don't waste time to write recovery info.
211          */
212         if (!is_inode_flag_set(fi, FI_APPEND_WRITE) &&
213                         !exist_written_data(sbi, ino, APPEND_INO)) {
214
215                 /* it may call write_inode just prior to fsync */
216                 if (need_inode_page_update(sbi, ino))
217                         goto go_write;
218
219                 if (is_inode_flag_set(fi, FI_UPDATE_WRITE) ||
220                                 exist_written_data(sbi, ino, UPDATE_INO))
221                         goto flush_out;
222                 goto out;
223         }
224 go_write:
225         /* guarantee free sections for fsync */
226         f2fs_balance_fs(sbi);
227
228         /*
229          * Both of fdatasync() and fsync() are able to be recovered from
230          * sudden-power-off.
231          */
232         down_read(&fi->i_sem);
233         need_cp = need_do_checkpoint(inode);
234         up_read(&fi->i_sem);
235
236         if (need_cp) {
237                 /* all the dirty node pages should be flushed for POR */
238                 ret = f2fs_sync_fs(inode->i_sb, 1);
239
240                 /*
241                  * We've secured consistency through sync_fs. Following pino
242                  * will be used only for fsynced inodes after checkpoint.
243                  */
244                 try_to_fix_pino(inode);
245                 goto out;
246         }
247 sync_nodes:
248         sync_node_pages(sbi, ino, &wbc);
249
250         /* if cp_error was enabled, we should avoid infinite loop */
251         if (unlikely(f2fs_cp_error(sbi)))
252                 goto out;
253
254         if (need_inode_block_update(sbi, ino)) {
255                 mark_inode_dirty_sync(inode);
256                 f2fs_write_inode(inode, NULL);
257                 goto sync_nodes;
258         }
259
260         ret = wait_on_node_pages_writeback(sbi, ino);
261         if (ret)
262                 goto out;
263
264         /* once recovery info is written, don't need to tack this */
265         remove_dirty_inode(sbi, ino, APPEND_INO);
266         clear_inode_flag(fi, FI_APPEND_WRITE);
267 flush_out:
268         remove_dirty_inode(sbi, ino, UPDATE_INO);
269         clear_inode_flag(fi, FI_UPDATE_WRITE);
270         ret = f2fs_issue_flush(sbi);
271 out:
272         trace_f2fs_sync_file_exit(inode, need_cp, datasync, ret);
273         f2fs_trace_ios(NULL, NULL, 1);
274         return ret;
275 }
276
277 static pgoff_t __get_first_dirty_index(struct address_space *mapping,
278                                                 pgoff_t pgofs, int whence)
279 {
280         struct pagevec pvec;
281         int nr_pages;
282
283         if (whence != SEEK_DATA)
284                 return 0;
285
286         /* find first dirty page index */
287         pagevec_init(&pvec, 0);
288         nr_pages = pagevec_lookup_tag(&pvec, mapping, &pgofs,
289                                         PAGECACHE_TAG_DIRTY, 1);
290         pgofs = nr_pages ? pvec.pages[0]->index : LONG_MAX;
291         pagevec_release(&pvec);
292         return pgofs;
293 }
294
295 static bool __found_offset(block_t blkaddr, pgoff_t dirty, pgoff_t pgofs,
296                                                         int whence)
297 {
298         switch (whence) {
299         case SEEK_DATA:
300                 if ((blkaddr == NEW_ADDR && dirty == pgofs) ||
301                         (blkaddr != NEW_ADDR && blkaddr != NULL_ADDR))
302                         return true;
303                 break;
304         case SEEK_HOLE:
305                 if (blkaddr == NULL_ADDR)
306                         return true;
307                 break;
308         }
309         return false;
310 }
311
312 static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
313 {
314         struct inode *inode = file->f_mapping->host;
315         loff_t maxbytes = inode->i_sb->s_maxbytes;
316         struct dnode_of_data dn;
317         pgoff_t pgofs, end_offset, dirty;
318         loff_t data_ofs = offset;
319         loff_t isize;
320         int err = 0;
321
322         mutex_lock(&inode->i_mutex);
323
324         isize = i_size_read(inode);
325         if (offset >= isize)
326                 goto fail;
327
328         /* handle inline data case */
329         if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
330                 if (whence == SEEK_HOLE)
331                         data_ofs = isize;
332                 goto found;
333         }
334
335         pgofs = (pgoff_t)(offset >> PAGE_CACHE_SHIFT);
336
337         dirty = __get_first_dirty_index(inode->i_mapping, pgofs, whence);
338
339         for (; data_ofs < isize; data_ofs = pgofs << PAGE_CACHE_SHIFT) {
340                 set_new_dnode(&dn, inode, NULL, NULL, 0);
341                 err = get_dnode_of_data(&dn, pgofs, LOOKUP_NODE_RA);
342                 if (err && err != -ENOENT) {
343                         goto fail;
344                 } else if (err == -ENOENT) {
345                         /* direct node does not exists */
346                         if (whence == SEEK_DATA) {
347                                 pgofs = PGOFS_OF_NEXT_DNODE(pgofs,
348                                                         F2FS_I(inode));
349                                 continue;
350                         } else {
351                                 goto found;
352                         }
353                 }
354
355                 end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
356
357                 /* find data/hole in dnode block */
358                 for (; dn.ofs_in_node < end_offset;
359                                 dn.ofs_in_node++, pgofs++,
360                                 data_ofs = (loff_t)pgofs << PAGE_CACHE_SHIFT) {
361                         block_t blkaddr;
362                         blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
363
364                         if (__found_offset(blkaddr, dirty, pgofs, whence)) {
365                                 f2fs_put_dnode(&dn);
366                                 goto found;
367                         }
368                 }
369                 f2fs_put_dnode(&dn);
370         }
371
372         if (whence == SEEK_DATA)
373                 goto fail;
374 found:
375         if (whence == SEEK_HOLE && data_ofs > isize)
376                 data_ofs = isize;
377         mutex_unlock(&inode->i_mutex);
378         return vfs_setpos(file, data_ofs, maxbytes);
379 fail:
380         mutex_unlock(&inode->i_mutex);
381         return -ENXIO;
382 }
383
384 static loff_t f2fs_llseek(struct file *file, loff_t offset, int whence)
385 {
386         struct inode *inode = file->f_mapping->host;
387         loff_t maxbytes = inode->i_sb->s_maxbytes;
388
389         switch (whence) {
390         case SEEK_SET:
391         case SEEK_CUR:
392         case SEEK_END:
393                 return generic_file_llseek_size(file, offset, whence,
394                                                 maxbytes, i_size_read(inode));
395         case SEEK_DATA:
396         case SEEK_HOLE:
397                 if (offset < 0)
398                         return -ENXIO;
399                 return f2fs_seek_block(file, offset, whence);
400         }
401
402         return -EINVAL;
403 }
404
405 static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma)
406 {
407         struct inode *inode = file_inode(file);
408
409         /* we don't need to use inline_data strictly */
410         if (f2fs_has_inline_data(inode)) {
411                 int err = f2fs_convert_inline_inode(inode);
412                 if (err)
413                         return err;
414         }
415
416         file_accessed(file);
417         vma->vm_ops = &f2fs_file_vm_ops;
418         return 0;
419 }
420
421 int truncate_data_blocks_range(struct dnode_of_data *dn, int count)
422 {
423         int nr_free = 0, ofs = dn->ofs_in_node;
424         struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
425         struct f2fs_node *raw_node;
426         __le32 *addr;
427
428         raw_node = F2FS_NODE(dn->node_page);
429         addr = blkaddr_in_node(raw_node) + ofs;
430
431         for (; count > 0; count--, addr++, dn->ofs_in_node++) {
432                 block_t blkaddr = le32_to_cpu(*addr);
433                 if (blkaddr == NULL_ADDR)
434                         continue;
435
436                 dn->data_blkaddr = NULL_ADDR;
437                 update_extent_cache(dn);
438                 invalidate_blocks(sbi, blkaddr);
439                 nr_free++;
440         }
441         if (nr_free) {
442                 dec_valid_block_count(sbi, dn->inode, nr_free);
443                 set_page_dirty(dn->node_page);
444                 sync_inode_page(dn);
445         }
446         dn->ofs_in_node = ofs;
447
448         trace_f2fs_truncate_data_blocks_range(dn->inode, dn->nid,
449                                          dn->ofs_in_node, nr_free);
450         return nr_free;
451 }
452
453 void truncate_data_blocks(struct dnode_of_data *dn)
454 {
455         truncate_data_blocks_range(dn, ADDRS_PER_BLOCK);
456 }
457
458 static int truncate_partial_data_page(struct inode *inode, u64 from)
459 {
460         unsigned offset = from & (PAGE_CACHE_SIZE - 1);
461         struct page *page;
462
463         if (!offset)
464                 return 0;
465
466         page = find_data_page(inode, from >> PAGE_CACHE_SHIFT, false);
467         if (IS_ERR(page))
468                 return 0;
469
470         lock_page(page);
471         if (unlikely(!PageUptodate(page) ||
472                         page->mapping != inode->i_mapping))
473                 goto out;
474
475         f2fs_wait_on_page_writeback(page, DATA);
476         zero_user(page, offset, PAGE_CACHE_SIZE - offset);
477         set_page_dirty(page);
478 out:
479         f2fs_put_page(page, 1);
480         return 0;
481 }
482
483 int truncate_blocks(struct inode *inode, u64 from, bool lock)
484 {
485         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
486         unsigned int blocksize = inode->i_sb->s_blocksize;
487         struct dnode_of_data dn;
488         pgoff_t free_from;
489         int count = 0, err = 0;
490         struct page *ipage;
491
492         trace_f2fs_truncate_blocks_enter(inode, from);
493
494         free_from = (pgoff_t)F2FS_BYTES_TO_BLK(from + blocksize - 1);
495
496         if (lock)
497                 f2fs_lock_op(sbi);
498
499         ipage = get_node_page(sbi, inode->i_ino);
500         if (IS_ERR(ipage)) {
501                 err = PTR_ERR(ipage);
502                 goto out;
503         }
504
505         if (f2fs_has_inline_data(inode)) {
506                 f2fs_put_page(ipage, 1);
507                 goto out;
508         }
509
510         set_new_dnode(&dn, inode, ipage, NULL, 0);
511         err = get_dnode_of_data(&dn, free_from, LOOKUP_NODE);
512         if (err) {
513                 if (err == -ENOENT)
514                         goto free_next;
515                 goto out;
516         }
517
518         count = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode));
519
520         count -= dn.ofs_in_node;
521         f2fs_bug_on(sbi, count < 0);
522
523         if (dn.ofs_in_node || IS_INODE(dn.node_page)) {
524                 truncate_data_blocks_range(&dn, count);
525                 free_from += count;
526         }
527
528         f2fs_put_dnode(&dn);
529 free_next:
530         err = truncate_inode_blocks(inode, free_from);
531 out:
532         if (lock)
533                 f2fs_unlock_op(sbi);
534
535         /* lastly zero out the first data page */
536         if (!err)
537                 err = truncate_partial_data_page(inode, from);
538
539         trace_f2fs_truncate_blocks_exit(inode, err);
540         return err;
541 }
542
543 void f2fs_truncate(struct inode *inode)
544 {
545         if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
546                                 S_ISLNK(inode->i_mode)))
547                 return;
548
549         trace_f2fs_truncate(inode);
550
551         /* we should check inline_data size */
552         if (f2fs_has_inline_data(inode) && !f2fs_may_inline(inode)) {
553                 if (f2fs_convert_inline_inode(inode))
554                         return;
555         }
556
557         if (!truncate_blocks(inode, i_size_read(inode), true)) {
558                 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
559                 mark_inode_dirty(inode);
560         }
561 }
562
563 int f2fs_getattr(struct vfsmount *mnt,
564                          struct dentry *dentry, struct kstat *stat)
565 {
566         struct inode *inode = dentry->d_inode;
567         generic_fillattr(inode, stat);
568         stat->blocks <<= 3;
569         return 0;
570 }
571
572 #ifdef CONFIG_F2FS_FS_POSIX_ACL
573 static void __setattr_copy(struct inode *inode, const struct iattr *attr)
574 {
575         struct f2fs_inode_info *fi = F2FS_I(inode);
576         unsigned int ia_valid = attr->ia_valid;
577
578         if (ia_valid & ATTR_UID)
579                 inode->i_uid = attr->ia_uid;
580         if (ia_valid & ATTR_GID)
581                 inode->i_gid = attr->ia_gid;
582         if (ia_valid & ATTR_ATIME)
583                 inode->i_atime = timespec_trunc(attr->ia_atime,
584                                                 inode->i_sb->s_time_gran);
585         if (ia_valid & ATTR_MTIME)
586                 inode->i_mtime = timespec_trunc(attr->ia_mtime,
587                                                 inode->i_sb->s_time_gran);
588         if (ia_valid & ATTR_CTIME)
589                 inode->i_ctime = timespec_trunc(attr->ia_ctime,
590                                                 inode->i_sb->s_time_gran);
591         if (ia_valid & ATTR_MODE) {
592                 umode_t mode = attr->ia_mode;
593
594                 if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
595                         mode &= ~S_ISGID;
596                 set_acl_inode(fi, mode);
597         }
598 }
599 #else
600 #define __setattr_copy setattr_copy
601 #endif
602
603 int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
604 {
605         struct inode *inode = dentry->d_inode;
606         struct f2fs_inode_info *fi = F2FS_I(inode);
607         int err;
608
609         err = inode_change_ok(inode, attr);
610         if (err)
611                 return err;
612
613         if (attr->ia_valid & ATTR_SIZE) {
614                 if (attr->ia_size != i_size_read(inode)) {
615                         truncate_setsize(inode, attr->ia_size);
616                         f2fs_truncate(inode);
617                         f2fs_balance_fs(F2FS_I_SB(inode));
618                 } else {
619                         /*
620                          * giving a chance to truncate blocks past EOF which
621                          * are fallocated with FALLOC_FL_KEEP_SIZE.
622                          */
623                         f2fs_truncate(inode);
624                 }
625         }
626
627         __setattr_copy(inode, attr);
628
629         if (attr->ia_valid & ATTR_MODE) {
630                 err = posix_acl_chmod(inode, get_inode_mode(inode));
631                 if (err || is_inode_flag_set(fi, FI_ACL_MODE)) {
632                         inode->i_mode = fi->i_acl_mode;
633                         clear_inode_flag(fi, FI_ACL_MODE);
634                 }
635         }
636
637         mark_inode_dirty(inode);
638         return err;
639 }
640
641 const struct inode_operations f2fs_file_inode_operations = {
642         .getattr        = f2fs_getattr,
643         .setattr        = f2fs_setattr,
644         .get_acl        = f2fs_get_acl,
645         .set_acl        = f2fs_set_acl,
646 #ifdef CONFIG_F2FS_FS_XATTR
647         .setxattr       = generic_setxattr,
648         .getxattr       = generic_getxattr,
649         .listxattr      = f2fs_listxattr,
650         .removexattr    = generic_removexattr,
651 #endif
652         .fiemap         = f2fs_fiemap,
653 };
654
655 static void fill_zero(struct inode *inode, pgoff_t index,
656                                         loff_t start, loff_t len)
657 {
658         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
659         struct page *page;
660
661         if (!len)
662                 return;
663
664         f2fs_balance_fs(sbi);
665
666         f2fs_lock_op(sbi);
667         page = get_new_data_page(inode, NULL, index, false);
668         f2fs_unlock_op(sbi);
669
670         if (!IS_ERR(page)) {
671                 f2fs_wait_on_page_writeback(page, DATA);
672                 zero_user(page, start, len);
673                 set_page_dirty(page);
674                 f2fs_put_page(page, 1);
675         }
676 }
677
678 int truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
679 {
680         pgoff_t index;
681         int err;
682
683         for (index = pg_start; index < pg_end; index++) {
684                 struct dnode_of_data dn;
685
686                 set_new_dnode(&dn, inode, NULL, NULL, 0);
687                 err = get_dnode_of_data(&dn, index, LOOKUP_NODE);
688                 if (err) {
689                         if (err == -ENOENT)
690                                 continue;
691                         return err;
692                 }
693
694                 if (dn.data_blkaddr != NULL_ADDR)
695                         truncate_data_blocks_range(&dn, 1);
696                 f2fs_put_dnode(&dn);
697         }
698         return 0;
699 }
700
701 static int punch_hole(struct inode *inode, loff_t offset, loff_t len)
702 {
703         pgoff_t pg_start, pg_end;
704         loff_t off_start, off_end;
705         int ret = 0;
706
707         if (!S_ISREG(inode->i_mode))
708                 return -EOPNOTSUPP;
709
710         /* skip punching hole beyond i_size */
711         if (offset >= inode->i_size)
712                 return ret;
713
714         if (f2fs_has_inline_data(inode)) {
715                 ret = f2fs_convert_inline_inode(inode);
716                 if (ret)
717                         return ret;
718         }
719
720         pg_start = ((unsigned long long) offset) >> PAGE_CACHE_SHIFT;
721         pg_end = ((unsigned long long) offset + len) >> PAGE_CACHE_SHIFT;
722
723         off_start = offset & (PAGE_CACHE_SIZE - 1);
724         off_end = (offset + len) & (PAGE_CACHE_SIZE - 1);
725
726         if (pg_start == pg_end) {
727                 fill_zero(inode, pg_start, off_start,
728                                                 off_end - off_start);
729         } else {
730                 if (off_start)
731                         fill_zero(inode, pg_start++, off_start,
732                                         PAGE_CACHE_SIZE - off_start);
733                 if (off_end)
734                         fill_zero(inode, pg_end, 0, off_end);
735
736                 if (pg_start < pg_end) {
737                         struct address_space *mapping = inode->i_mapping;
738                         loff_t blk_start, blk_end;
739                         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
740
741                         f2fs_balance_fs(sbi);
742
743                         blk_start = pg_start << PAGE_CACHE_SHIFT;
744                         blk_end = pg_end << PAGE_CACHE_SHIFT;
745                         truncate_inode_pages_range(mapping, blk_start,
746                                         blk_end - 1);
747
748                         f2fs_lock_op(sbi);
749                         ret = truncate_hole(inode, pg_start, pg_end);
750                         f2fs_unlock_op(sbi);
751                 }
752         }
753
754         return ret;
755 }
756
757 static int expand_inode_data(struct inode *inode, loff_t offset,
758                                         loff_t len, int mode)
759 {
760         struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
761         pgoff_t index, pg_start, pg_end;
762         loff_t new_size = i_size_read(inode);
763         loff_t off_start, off_end;
764         int ret = 0;
765
766         f2fs_balance_fs(sbi);
767
768         ret = inode_newsize_ok(inode, (len + offset));
769         if (ret)
770                 return ret;
771
772         if (f2fs_has_inline_data(inode)) {
773                 ret = f2fs_convert_inline_inode(inode);
774                 if (ret)
775                         return ret;
776         }
777
778         pg_start = ((unsigned long long) offset) >> PAGE_CACHE_SHIFT;
779         pg_end = ((unsigned long long) offset + len) >> PAGE_CACHE_SHIFT;
780
781         off_start = offset & (PAGE_CACHE_SIZE - 1);
782         off_end = (offset + len) & (PAGE_CACHE_SIZE - 1);
783
784         f2fs_lock_op(sbi);
785
786         for (index = pg_start; index <= pg_end; index++) {
787                 struct dnode_of_data dn;
788
789                 if (index == pg_end && !off_end)
790                         goto noalloc;
791
792                 set_new_dnode(&dn, inode, NULL, NULL, 0);
793                 ret = f2fs_reserve_block(&dn, index);
794                 if (ret)
795                         break;
796 noalloc:
797                 if (pg_start == pg_end)
798                         new_size = offset + len;
799                 else if (index == pg_start && off_start)
800                         new_size = (index + 1) << PAGE_CACHE_SHIFT;
801                 else if (index == pg_end)
802                         new_size = (index << PAGE_CACHE_SHIFT) + off_end;
803                 else
804                         new_size += PAGE_CACHE_SIZE;
805         }
806
807         if (!(mode & FALLOC_FL_KEEP_SIZE) &&
808                 i_size_read(inode) < new_size) {
809                 i_size_write(inode, new_size);
810                 mark_inode_dirty(inode);
811                 update_inode_page(inode);
812         }
813         f2fs_unlock_op(sbi);
814
815         return ret;
816 }
817
818 static long f2fs_fallocate(struct file *file, int mode,
819                                 loff_t offset, loff_t len)
820 {
821         struct inode *inode = file_inode(file);
822         long ret;
823
824         if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
825                 return -EOPNOTSUPP;
826
827         mutex_lock(&inode->i_mutex);
828
829         if (mode & FALLOC_FL_PUNCH_HOLE)
830                 ret = punch_hole(inode, offset, len);
831         else
832                 ret = expand_inode_data(inode, offset, len, mode);
833
834         if (!ret) {
835                 inode->i_mtime = inode->i_ctime = CURRENT_TIME;
836                 mark_inode_dirty(inode);
837         }
838
839         mutex_unlock(&inode->i_mutex);
840
841         trace_f2fs_fallocate(inode, mode, offset, len, ret);
842         return ret;
843 }
844
845 static int f2fs_release_file(struct inode *inode, struct file *filp)
846 {
847         /* some remained atomic pages should discarded */
848         if (f2fs_is_atomic_file(inode))
849                 commit_inmem_pages(inode, true);
850         if (f2fs_is_volatile_file(inode)) {
851                 set_inode_flag(F2FS_I(inode), FI_DROP_CACHE);
852                 filemap_fdatawrite(inode->i_mapping);
853                 clear_inode_flag(F2FS_I(inode), FI_DROP_CACHE);
854         }
855         return 0;
856 }
857
858 #define F2FS_REG_FLMASK         (~(FS_DIRSYNC_FL | FS_TOPDIR_FL))
859 #define F2FS_OTHER_FLMASK       (FS_NODUMP_FL | FS_NOATIME_FL)
860
861 static inline __u32 f2fs_mask_flags(umode_t mode, __u32 flags)
862 {
863         if (S_ISDIR(mode))
864                 return flags;
865         else if (S_ISREG(mode))
866                 return flags & F2FS_REG_FLMASK;
867         else
868                 return flags & F2FS_OTHER_FLMASK;
869 }
870
871 static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
872 {
873         struct inode *inode = file_inode(filp);
874         struct f2fs_inode_info *fi = F2FS_I(inode);
875         unsigned int flags = fi->i_flags & FS_FL_USER_VISIBLE;
876         return put_user(flags, (int __user *)arg);
877 }
878
879 static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
880 {
881         struct inode *inode = file_inode(filp);
882         struct f2fs_inode_info *fi = F2FS_I(inode);
883         unsigned int flags = fi->i_flags & FS_FL_USER_VISIBLE;
884         unsigned int oldflags;
885         int ret;
886
887         ret = mnt_want_write_file(filp);
888         if (ret)
889                 return ret;
890
891         if (!inode_owner_or_capable(inode)) {
892                 ret = -EACCES;
893                 goto out;
894         }
895
896         if (get_user(flags, (int __user *)arg)) {
897                 ret = -EFAULT;
898                 goto out;
899         }
900
901         flags = f2fs_mask_flags(inode->i_mode, flags);
902
903         mutex_lock(&inode->i_mutex);
904
905         oldflags = fi->i_flags;
906
907         if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL)) {
908                 if (!capable(CAP_LINUX_IMMUTABLE)) {
909                         mutex_unlock(&inode->i_mutex);
910                         ret = -EPERM;
911                         goto out;
912                 }
913         }
914
915         flags = flags & FS_FL_USER_MODIFIABLE;
916         flags |= oldflags & ~FS_FL_USER_MODIFIABLE;
917         fi->i_flags = flags;
918         mutex_unlock(&inode->i_mutex);
919
920         f2fs_set_inode_flags(inode);
921         inode->i_ctime = CURRENT_TIME;
922         mark_inode_dirty(inode);
923 out:
924         mnt_drop_write_file(filp);
925         return ret;
926 }
927
928 static int f2fs_ioc_getversion(struct file *filp, unsigned long arg)
929 {
930         struct inode *inode = file_inode(filp);
931
932         return put_user(inode->i_generation, (int __user *)arg);
933 }
934
935 static int f2fs_ioc_start_atomic_write(struct file *filp)
936 {
937         struct inode *inode = file_inode(filp);
938
939         if (!inode_owner_or_capable(inode))
940                 return -EACCES;
941
942         f2fs_balance_fs(F2FS_I_SB(inode));
943
944         if (f2fs_is_atomic_file(inode))
945                 return 0;
946
947         set_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE);
948
949         return f2fs_convert_inline_inode(inode);
950 }
951
952 static int f2fs_ioc_commit_atomic_write(struct file *filp)
953 {
954         struct inode *inode = file_inode(filp);
955         int ret;
956
957         if (!inode_owner_or_capable(inode))
958                 return -EACCES;
959
960         if (f2fs_is_volatile_file(inode))
961                 return 0;
962
963         ret = mnt_want_write_file(filp);
964         if (ret)
965                 return ret;
966
967         if (f2fs_is_atomic_file(inode))
968                 commit_inmem_pages(inode, false);
969
970         ret = f2fs_sync_file(filp, 0, LONG_MAX, 0);
971         mnt_drop_write_file(filp);
972         clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE);
973         return ret;
974 }
975
976 static int f2fs_ioc_start_volatile_write(struct file *filp)
977 {
978         struct inode *inode = file_inode(filp);
979
980         if (!inode_owner_or_capable(inode))
981                 return -EACCES;
982
983         if (f2fs_is_volatile_file(inode))
984                 return 0;
985
986         set_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE);
987
988         return f2fs_convert_inline_inode(inode);
989 }
990
991 static int f2fs_ioc_release_volatile_write(struct file *filp)
992 {
993         struct inode *inode = file_inode(filp);
994
995         if (!inode_owner_or_capable(inode))
996                 return -EACCES;
997
998         if (!f2fs_is_volatile_file(inode))
999                 return 0;
1000
1001         punch_hole(inode, 0, F2FS_BLKSIZE);
1002         return 0;
1003 }
1004
1005 static int f2fs_ioc_abort_volatile_write(struct file *filp)
1006 {
1007         struct inode *inode = file_inode(filp);
1008         int ret;
1009
1010         if (!inode_owner_or_capable(inode))
1011                 return -EACCES;
1012
1013         ret = mnt_want_write_file(filp);
1014         if (ret)
1015                 return ret;
1016
1017         f2fs_balance_fs(F2FS_I_SB(inode));
1018
1019         if (f2fs_is_atomic_file(inode)) {
1020                 commit_inmem_pages(inode, false);
1021                 clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE);
1022         }
1023
1024         if (f2fs_is_volatile_file(inode)) {
1025                 clear_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE);
1026                 filemap_fdatawrite(inode->i_mapping);
1027                 set_inode_flag(F2FS_I(inode), FI_VOLATILE_FILE);
1028         }
1029         mnt_drop_write_file(filp);
1030         return ret;
1031 }
1032
1033 static int f2fs_ioc_fitrim(struct file *filp, unsigned long arg)
1034 {
1035         struct inode *inode = file_inode(filp);
1036         struct super_block *sb = inode->i_sb;
1037         struct request_queue *q = bdev_get_queue(sb->s_bdev);
1038         struct fstrim_range range;
1039         int ret;
1040
1041         if (!capable(CAP_SYS_ADMIN))
1042                 return -EPERM;
1043
1044         if (!blk_queue_discard(q))
1045                 return -EOPNOTSUPP;
1046
1047         if (copy_from_user(&range, (struct fstrim_range __user *)arg,
1048                                 sizeof(range)))
1049                 return -EFAULT;
1050
1051         range.minlen = max((unsigned int)range.minlen,
1052                                 q->limits.discard_granularity);
1053         ret = f2fs_trim_fs(F2FS_SB(sb), &range);
1054         if (ret < 0)
1055                 return ret;
1056
1057         if (copy_to_user((struct fstrim_range __user *)arg, &range,
1058                                 sizeof(range)))
1059                 return -EFAULT;
1060         return 0;
1061 }
1062
1063 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
1064 {
1065         switch (cmd) {
1066         case F2FS_IOC_GETFLAGS:
1067                 return f2fs_ioc_getflags(filp, arg);
1068         case F2FS_IOC_SETFLAGS:
1069                 return f2fs_ioc_setflags(filp, arg);
1070         case F2FS_IOC_GETVERSION:
1071                 return f2fs_ioc_getversion(filp, arg);
1072         case F2FS_IOC_START_ATOMIC_WRITE:
1073                 return f2fs_ioc_start_atomic_write(filp);
1074         case F2FS_IOC_COMMIT_ATOMIC_WRITE:
1075                 return f2fs_ioc_commit_atomic_write(filp);
1076         case F2FS_IOC_START_VOLATILE_WRITE:
1077                 return f2fs_ioc_start_volatile_write(filp);
1078         case F2FS_IOC_RELEASE_VOLATILE_WRITE:
1079                 return f2fs_ioc_release_volatile_write(filp);
1080         case F2FS_IOC_ABORT_VOLATILE_WRITE:
1081                 return f2fs_ioc_abort_volatile_write(filp);
1082         case FITRIM:
1083                 return f2fs_ioc_fitrim(filp, arg);
1084         default:
1085                 return -ENOTTY;
1086         }
1087 }
1088
1089 #ifdef CONFIG_COMPAT
1090 long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1091 {
1092         switch (cmd) {
1093         case F2FS_IOC32_GETFLAGS:
1094                 cmd = F2FS_IOC_GETFLAGS;
1095                 break;
1096         case F2FS_IOC32_SETFLAGS:
1097                 cmd = F2FS_IOC_SETFLAGS;
1098                 break;
1099         default:
1100                 return -ENOIOCTLCMD;
1101         }
1102         return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
1103 }
1104 #endif
1105
1106 const struct file_operations f2fs_file_operations = {
1107         .llseek         = f2fs_llseek,
1108         .read           = new_sync_read,
1109         .write          = new_sync_write,
1110         .read_iter      = generic_file_read_iter,
1111         .write_iter     = generic_file_write_iter,
1112         .open           = generic_file_open,
1113         .release        = f2fs_release_file,
1114         .mmap           = f2fs_file_mmap,
1115         .fsync          = f2fs_sync_file,
1116         .fallocate      = f2fs_fallocate,
1117         .unlocked_ioctl = f2fs_ioctl,
1118 #ifdef CONFIG_COMPAT
1119         .compat_ioctl   = f2fs_compat_ioctl,
1120 #endif
1121         .splice_read    = generic_file_splice_read,
1122         .splice_write   = iter_file_splice_write,
1123 };