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