xref: /linux/fs/f2fs/file.c (revision f4cdf7ca9a1fdcca413157df19753f388a5a224e)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * fs/f2fs/file.c
4  *
5  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6  *             http://www.samsung.com/
7  */
8 #include <linux/blk-crypto.h>
9 #include <linux/fs.h>
10 #include <linux/f2fs_fs.h>
11 #include <linux/stat.h>
12 #include <linux/writeback.h>
13 #include <linux/blkdev.h>
14 #include <linux/falloc.h>
15 #include <linux/filelock.h>
16 #include <linux/types.h>
17 #include <linux/compat.h>
18 #include <linux/uaccess.h>
19 #include <linux/mount.h>
20 #include <linux/uio.h>
21 #include <linux/uuid.h>
22 #include <linux/file.h>
23 #include <linux/nls.h>
24 #include <linux/sched/signal.h>
25 #include <linux/fileattr.h>
26 #include <linux/fadvise.h>
27 #include <linux/iomap.h>
28 
29 #include "f2fs.h"
30 #include "node.h"
31 #include "segment.h"
32 #include "xattr.h"
33 #include "acl.h"
34 #include "gc.h"
35 #include "iostat.h"
36 #include <trace/events/f2fs.h>
37 #include <uapi/linux/f2fs.h>
38 
39 static void f2fs_zero_post_eof_page(struct inode *inode,
40 					loff_t new_size, bool lock)
41 {
42 	loff_t old_size = i_size_read(inode);
43 
44 	if (old_size >= new_size)
45 		return;
46 
47 	if (mapping_empty(inode->i_mapping))
48 		return;
49 
50 	if (lock)
51 		filemap_invalidate_lock(inode->i_mapping);
52 	/* zero or drop pages only in range of [old_size, new_size] */
53 	truncate_inode_pages_range(inode->i_mapping, old_size, new_size);
54 	if (lock)
55 		filemap_invalidate_unlock(inode->i_mapping);
56 }
57 
58 static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
59 {
60 	struct inode *inode = file_inode(vmf->vma->vm_file);
61 	vm_flags_t flags = vmf->vma->vm_flags;
62 	vm_fault_t ret;
63 
64 	ret = filemap_fault(vmf);
65 	if (ret & VM_FAULT_LOCKED)
66 		f2fs_update_iostat(F2FS_I_SB(inode), inode,
67 					APP_MAPPED_READ_IO, F2FS_BLKSIZE);
68 
69 	trace_f2fs_filemap_fault(inode, vmf->pgoff, flags, ret);
70 
71 	return ret;
72 }
73 
74 static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
75 {
76 	struct folio *folio = page_folio(vmf->page);
77 	struct inode *inode = file_inode(vmf->vma->vm_file);
78 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
79 	struct dnode_of_data dn;
80 	bool need_alloc = !f2fs_is_pinned_file(inode);
81 	int err = 0;
82 	vm_fault_t ret;
83 
84 	/*
85 	 * We only support large folio on the read case.
86 	 * Don't make any dirty pages.
87 	 */
88 	if (unlikely(IS_IMMUTABLE(inode)) ||
89 	    mapping_large_folio_support(inode->i_mapping)) {
90 		f2fs_err(sbi, "Not expected: immutable: %d large_folio: %d",
91 				IS_IMMUTABLE(inode),
92 				mapping_large_folio_support(inode->i_mapping));
93 		return VM_FAULT_SIGBUS;
94 	}
95 
96 	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
97 		err = -EIO;
98 		goto out;
99 	}
100 
101 	if (unlikely(f2fs_cp_error(sbi))) {
102 		err = -EIO;
103 		goto out;
104 	}
105 
106 	if (!f2fs_is_checkpoint_ready(sbi)) {
107 		err = -ENOSPC;
108 		goto out;
109 	}
110 
111 	err = f2fs_convert_inline_inode(inode);
112 	if (err)
113 		goto out;
114 
115 #ifdef CONFIG_F2FS_FS_COMPRESSION
116 	if (f2fs_compressed_file(inode)) {
117 		int ret = f2fs_is_compressed_cluster(inode, folio->index);
118 
119 		if (ret < 0) {
120 			err = ret;
121 			goto out;
122 		} else if (ret) {
123 			need_alloc = false;
124 		}
125 	}
126 #endif
127 	/* should do out of any locked page */
128 	if (need_alloc)
129 		f2fs_balance_fs(sbi, true);
130 
131 	sb_start_pagefault(inode->i_sb);
132 
133 	f2fs_bug_on(sbi, f2fs_has_inline_data(inode));
134 
135 	f2fs_zero_post_eof_page(inode, (folio->index + 1) << PAGE_SHIFT, true);
136 
137 	file_update_time(vmf->vma->vm_file);
138 	filemap_invalidate_lock_shared(inode->i_mapping);
139 
140 	folio_lock(folio);
141 	if (unlikely(folio->mapping != inode->i_mapping ||
142 			folio_pos(folio) > i_size_read(inode) ||
143 			!folio_test_uptodate(folio))) {
144 		folio_unlock(folio);
145 		err = -EFAULT;
146 		goto out_sem;
147 	}
148 
149 	set_new_dnode(&dn, inode, NULL, NULL, 0);
150 	if (need_alloc) {
151 		/* block allocation */
152 		err = f2fs_get_block_locked(&dn, folio->index);
153 	} else {
154 		err = f2fs_get_dnode_of_data(&dn, folio->index, LOOKUP_NODE);
155 		f2fs_put_dnode(&dn);
156 		if (f2fs_is_pinned_file(inode) &&
157 		    !__is_valid_data_blkaddr(dn.data_blkaddr))
158 			err = -EIO;
159 	}
160 
161 	if (err) {
162 		folio_unlock(folio);
163 		goto out_sem;
164 	}
165 
166 	f2fs_folio_wait_writeback(folio, DATA, false, true);
167 
168 	/* wait for GCed page writeback via META_MAPPING */
169 	f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
170 
171 	/*
172 	 * check to see if the page is mapped already (no holes)
173 	 */
174 	if (folio_test_mappedtodisk(folio))
175 		goto out_sem;
176 
177 	/* page is wholly or partially inside EOF */
178 	if (((loff_t)(folio->index + 1) << PAGE_SHIFT) >
179 						i_size_read(inode)) {
180 		loff_t offset;
181 
182 		offset = i_size_read(inode) & ~PAGE_MASK;
183 		folio_zero_segment(folio, offset, folio_size(folio));
184 	}
185 	folio_mark_dirty(folio);
186 
187 	f2fs_update_iostat(sbi, inode, APP_MAPPED_IO, F2FS_BLKSIZE);
188 	f2fs_update_time(sbi, REQ_TIME);
189 
190 out_sem:
191 	filemap_invalidate_unlock_shared(inode->i_mapping);
192 
193 	sb_end_pagefault(inode->i_sb);
194 out:
195 	ret = vmf_fs_error(err);
196 
197 	trace_f2fs_vm_page_mkwrite(inode, folio->index, vmf->vma->vm_flags, ret);
198 	return ret;
199 }
200 
201 static const struct vm_operations_struct f2fs_file_vm_ops = {
202 	.fault		= f2fs_filemap_fault,
203 	.map_pages	= filemap_map_pages,
204 	.page_mkwrite	= f2fs_vm_page_mkwrite,
205 };
206 
207 static int get_parent_ino(struct inode *inode, nid_t *pino)
208 {
209 	struct dentry *dentry;
210 
211 	/*
212 	 * Make sure to get the non-deleted alias.  The alias associated with
213 	 * the open file descriptor being fsync()'ed may be deleted already.
214 	 */
215 	dentry = d_find_alias(inode);
216 	if (!dentry)
217 		return 0;
218 
219 	*pino = d_parent_ino(dentry);
220 	dput(dentry);
221 	return 1;
222 }
223 
224 static inline enum cp_reason_type need_do_checkpoint(struct inode *inode)
225 {
226 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
227 	enum cp_reason_type cp_reason = CP_NO_NEEDED;
228 
229 	if (!S_ISREG(inode->i_mode))
230 		cp_reason = CP_NON_REGULAR;
231 	else if (f2fs_compressed_file(inode))
232 		cp_reason = CP_COMPRESSED;
233 	else if (inode->i_nlink != 1)
234 		cp_reason = CP_HARDLINK;
235 	else if (is_sbi_flag_set(sbi, SBI_NEED_CP))
236 		cp_reason = CP_SB_NEED_CP;
237 	else if (file_wrong_pino(inode))
238 		cp_reason = CP_WRONG_PINO;
239 	else if (!f2fs_space_for_roll_forward(sbi))
240 		cp_reason = CP_NO_SPC_ROLL;
241 	else if (!f2fs_is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
242 		cp_reason = CP_NODE_NEED_CP;
243 	else if (test_opt(sbi, FASTBOOT))
244 		cp_reason = CP_FASTBOOT_MODE;
245 	else if (F2FS_OPTION(sbi).active_logs == 2)
246 		cp_reason = CP_SPEC_LOG_NUM;
247 	else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT &&
248 		f2fs_need_dentry_mark(sbi, inode->i_ino) &&
249 		f2fs_exist_written_data(sbi, F2FS_I(inode)->i_pino,
250 							TRANS_DIR_INO))
251 		cp_reason = CP_RECOVER_DIR;
252 	else if (f2fs_exist_written_data(sbi, F2FS_I(inode)->i_pino,
253 							XATTR_DIR_INO))
254 		cp_reason = CP_XATTR_DIR;
255 
256 	return cp_reason;
257 }
258 
259 static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
260 {
261 	struct folio *i = filemap_get_folio(NODE_MAPPING(sbi), ino);
262 	bool ret = false;
263 	/* But we need to avoid that there are some inode updates */
264 	if ((!IS_ERR(i) && folio_test_dirty(i)) ||
265 	    f2fs_need_inode_block_update(sbi, ino))
266 		ret = true;
267 	f2fs_folio_put(i, false);
268 	return ret;
269 }
270 
271 static void try_to_fix_pino(struct inode *inode)
272 {
273 	struct f2fs_inode_info *fi = F2FS_I(inode);
274 	nid_t pino;
275 
276 	f2fs_down_write(&fi->i_sem);
277 	if (file_wrong_pino(inode) && inode->i_nlink == 1 &&
278 			get_parent_ino(inode, &pino)) {
279 		f2fs_i_pino_write(inode, pino);
280 		file_got_pino(inode);
281 	}
282 	f2fs_up_write(&fi->i_sem);
283 }
284 
285 static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
286 						int datasync, bool atomic)
287 {
288 	struct inode *inode = file->f_mapping->host;
289 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
290 	nid_t ino = inode->i_ino;
291 	int ret = 0;
292 	enum cp_reason_type cp_reason = 0;
293 	struct writeback_control wbc = {
294 		.sync_mode = WB_SYNC_ALL,
295 		.nr_to_write = LONG_MAX,
296 	};
297 	unsigned int seq_id = 0;
298 
299 	if (unlikely(f2fs_readonly(inode->i_sb)))
300 		return 0;
301 
302 	trace_f2fs_sync_file_enter(inode);
303 
304 	if (S_ISDIR(inode->i_mode))
305 		goto go_write;
306 
307 	/* if fdatasync is triggered, let's do in-place-update */
308 	if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
309 		set_inode_flag(inode, FI_NEED_IPU);
310 	ret = file_write_and_wait_range(file, start, end);
311 	clear_inode_flag(inode, FI_NEED_IPU);
312 
313 	if (ret || is_sbi_flag_set(sbi, SBI_CP_DISABLED)) {
314 		trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
315 		return ret;
316 	}
317 
318 	/* if the inode is dirty, let's recover all the time */
319 	if (!f2fs_skip_inode_update(inode, datasync)) {
320 		f2fs_write_inode(inode, NULL);
321 		goto go_write;
322 	}
323 
324 	/*
325 	 * if there is no written data, don't waste time to write recovery info.
326 	 */
327 	if (!is_inode_flag_set(inode, FI_APPEND_WRITE) &&
328 			!f2fs_exist_written_data(sbi, ino, APPEND_INO)) {
329 
330 		/* it may call write_inode just prior to fsync */
331 		if (need_inode_page_update(sbi, ino))
332 			goto go_write;
333 
334 		if (is_inode_flag_set(inode, FI_UPDATE_WRITE) ||
335 				f2fs_exist_written_data(sbi, ino, UPDATE_INO))
336 			goto flush_out;
337 		goto out;
338 	} else {
339 		/*
340 		 * for OPU case, during fsync(), node can be persisted before
341 		 * data when lower device doesn't support write barrier, result
342 		 * in data corruption after SPO.
343 		 * So for strict fsync mode, force to use atomic write semantics
344 		 * to keep write order in between data/node and last node to
345 		 * avoid potential data corruption.
346 		 */
347 		if (F2FS_OPTION(sbi).fsync_mode ==
348 				FSYNC_MODE_STRICT && !atomic)
349 			atomic = true;
350 	}
351 go_write:
352 	/*
353 	 * Both of fdatasync() and fsync() are able to be recovered from
354 	 * sudden-power-off.
355 	 */
356 	f2fs_down_read(&F2FS_I(inode)->i_sem);
357 	cp_reason = need_do_checkpoint(inode);
358 	f2fs_up_read(&F2FS_I(inode)->i_sem);
359 
360 	if (cp_reason) {
361 		/* all the dirty node pages should be flushed for POR */
362 		ret = f2fs_sync_fs(inode->i_sb, 1);
363 
364 		/*
365 		 * We've secured consistency through sync_fs. Following pino
366 		 * will be used only for fsynced inodes after checkpoint.
367 		 */
368 		try_to_fix_pino(inode);
369 		clear_inode_flag(inode, FI_APPEND_WRITE);
370 		clear_inode_flag(inode, FI_UPDATE_WRITE);
371 		goto out;
372 	}
373 sync_nodes:
374 	atomic_inc(&sbi->wb_sync_req[NODE]);
375 	ret = f2fs_fsync_node_pages(sbi, inode, &wbc, atomic, &seq_id);
376 	atomic_dec(&sbi->wb_sync_req[NODE]);
377 	if (ret)
378 		goto out;
379 
380 	/* if cp_error was enabled, we should avoid infinite loop */
381 	if (unlikely(f2fs_cp_error(sbi))) {
382 		ret = -EIO;
383 		goto out;
384 	}
385 
386 	if (f2fs_need_inode_block_update(sbi, ino)) {
387 		f2fs_mark_inode_dirty_sync(inode, true);
388 		f2fs_write_inode(inode, NULL);
389 		goto sync_nodes;
390 	}
391 
392 	/*
393 	 * If it's atomic_write, it's just fine to keep write ordering. So
394 	 * here we don't need to wait for node write completion, since we use
395 	 * node chain which serializes node blocks. If one of node writes are
396 	 * reordered, we can see simply broken chain, resulting in stopping
397 	 * roll-forward recovery. It means we'll recover all or none node blocks
398 	 * given fsync mark.
399 	 */
400 	if (!atomic) {
401 		ret = f2fs_wait_on_node_pages_writeback(sbi, seq_id);
402 		if (ret)
403 			goto out;
404 	}
405 
406 	/* once recovery info is written, don't need to tack this */
407 	f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
408 	clear_inode_flag(inode, FI_APPEND_WRITE);
409 flush_out:
410 	if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
411 		ret = f2fs_issue_flush(sbi, inode->i_ino);
412 	if (!ret) {
413 		f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
414 		clear_inode_flag(inode, FI_UPDATE_WRITE);
415 		f2fs_remove_ino_entry(sbi, ino, FLUSH_INO);
416 	}
417 	f2fs_update_time(sbi, REQ_TIME);
418 out:
419 	trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
420 	return ret;
421 }
422 
423 int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
424 {
425 	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
426 		return -EIO;
427 	return f2fs_do_sync_file(file, start, end, datasync, false);
428 }
429 
430 static bool __found_offset(struct address_space *mapping,
431 		struct dnode_of_data *dn, pgoff_t index, int whence)
432 {
433 	block_t blkaddr = f2fs_data_blkaddr(dn);
434 	struct inode *inode = mapping->host;
435 	bool compressed_cluster = false;
436 
437 	if (f2fs_compressed_file(inode)) {
438 		block_t first_blkaddr = data_blkaddr(dn->inode, dn->node_folio,
439 		    ALIGN_DOWN(dn->ofs_in_node, F2FS_I(inode)->i_cluster_size));
440 
441 		compressed_cluster = first_blkaddr == COMPRESS_ADDR;
442 	}
443 
444 	switch (whence) {
445 	case SEEK_DATA:
446 		if (__is_valid_data_blkaddr(blkaddr))
447 			return true;
448 		if (blkaddr == NEW_ADDR &&
449 		    xa_get_mark(&mapping->i_pages, index, PAGECACHE_TAG_DIRTY))
450 			return true;
451 		if (compressed_cluster)
452 			return true;
453 		break;
454 	case SEEK_HOLE:
455 		if (compressed_cluster)
456 			return false;
457 		if (blkaddr == NULL_ADDR)
458 			return true;
459 		break;
460 	}
461 	return false;
462 }
463 
464 static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
465 {
466 	struct inode *inode = file->f_mapping->host;
467 	loff_t maxbytes = F2FS_BLK_TO_BYTES(max_file_blocks(inode));
468 	struct dnode_of_data dn;
469 	pgoff_t pgofs, end_offset;
470 	loff_t data_ofs = offset;
471 	loff_t isize;
472 	int err = 0;
473 
474 	inode_lock_shared(inode);
475 
476 	isize = i_size_read(inode);
477 	if (offset >= isize)
478 		goto fail;
479 
480 	/* handle inline data case */
481 	if (f2fs_has_inline_data(inode)) {
482 		if (whence == SEEK_HOLE) {
483 			data_ofs = isize;
484 			goto found;
485 		} else if (whence == SEEK_DATA) {
486 			data_ofs = offset;
487 			goto found;
488 		}
489 	}
490 
491 	pgofs = (pgoff_t)(offset >> PAGE_SHIFT);
492 
493 	for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
494 		set_new_dnode(&dn, inode, NULL, NULL, 0);
495 		err = f2fs_get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
496 		if (err && err != -ENOENT) {
497 			goto fail;
498 		} else if (err == -ENOENT) {
499 			/* direct node does not exists */
500 			if (whence == SEEK_DATA) {
501 				pgofs = f2fs_get_next_page_offset(&dn, pgofs);
502 				continue;
503 			} else {
504 				goto found;
505 			}
506 		}
507 
508 		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
509 
510 		/* find data/hole in dnode block */
511 		for (; dn.ofs_in_node < end_offset;
512 				dn.ofs_in_node++, pgofs++,
513 				data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
514 			block_t blkaddr;
515 
516 			blkaddr = f2fs_data_blkaddr(&dn);
517 
518 			if (__is_valid_data_blkaddr(blkaddr) &&
519 				!f2fs_is_valid_blkaddr(F2FS_I_SB(inode),
520 					blkaddr, DATA_GENERIC_ENHANCE)) {
521 				f2fs_put_dnode(&dn);
522 				goto fail;
523 			}
524 
525 			if (__found_offset(file->f_mapping, &dn,
526 							pgofs, whence)) {
527 				f2fs_put_dnode(&dn);
528 				goto found;
529 			}
530 		}
531 		f2fs_put_dnode(&dn);
532 	}
533 
534 	if (whence == SEEK_DATA)
535 		goto fail;
536 found:
537 	if (whence == SEEK_HOLE && data_ofs > isize)
538 		data_ofs = isize;
539 	inode_unlock_shared(inode);
540 	return vfs_setpos(file, data_ofs, maxbytes);
541 fail:
542 	inode_unlock_shared(inode);
543 	return -ENXIO;
544 }
545 
546 static loff_t f2fs_llseek(struct file *file, loff_t offset, int whence)
547 {
548 	struct inode *inode = file->f_mapping->host;
549 	loff_t maxbytes = F2FS_BLK_TO_BYTES(max_file_blocks(inode));
550 
551 	switch (whence) {
552 	case SEEK_SET:
553 	case SEEK_CUR:
554 	case SEEK_END:
555 		return generic_file_llseek_size(file, offset, whence,
556 						maxbytes, i_size_read(inode));
557 	case SEEK_DATA:
558 	case SEEK_HOLE:
559 		if (offset < 0)
560 			return -ENXIO;
561 		return f2fs_seek_block(file, offset, whence);
562 	}
563 
564 	return -EINVAL;
565 }
566 
567 static int f2fs_file_mmap_prepare(struct vm_area_desc *desc)
568 {
569 	struct file *file = desc->file;
570 	struct inode *inode = file_inode(file);
571 
572 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
573 		return -EIO;
574 
575 	if (!f2fs_is_compress_backend_ready(inode))
576 		return -EOPNOTSUPP;
577 
578 	file_accessed(file);
579 	desc->vm_ops = &f2fs_file_vm_ops;
580 
581 	f2fs_down_read(&F2FS_I(inode)->i_sem);
582 	set_inode_flag(inode, FI_MMAP_FILE);
583 	f2fs_up_read(&F2FS_I(inode)->i_sem);
584 
585 	return 0;
586 }
587 
588 static int finish_preallocate_blocks(struct inode *inode)
589 {
590 	int ret = 0;
591 	bool opened;
592 
593 	f2fs_down_read(&F2FS_I(inode)->i_sem);
594 	opened = is_inode_flag_set(inode, FI_OPENED_FILE);
595 	f2fs_up_read(&F2FS_I(inode)->i_sem);
596 	if (opened)
597 		return 0;
598 
599 	inode_lock(inode);
600 	if (is_inode_flag_set(inode, FI_OPENED_FILE))
601 		goto out_unlock;
602 
603 	if (!file_should_truncate(inode))
604 		goto out_update;
605 
606 	f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
607 	filemap_invalidate_lock(inode->i_mapping);
608 
609 	truncate_setsize(inode, i_size_read(inode));
610 	ret = f2fs_truncate(inode);
611 
612 	filemap_invalidate_unlock(inode->i_mapping);
613 	f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
614 	if (ret)
615 		goto out_unlock;
616 
617 	file_dont_truncate(inode);
618 out_update:
619 	f2fs_down_write(&F2FS_I(inode)->i_sem);
620 	set_inode_flag(inode, FI_OPENED_FILE);
621 	f2fs_up_write(&F2FS_I(inode)->i_sem);
622 out_unlock:
623 	inode_unlock(inode);
624 	return ret;
625 }
626 
627 static int f2fs_file_open(struct inode *inode, struct file *filp)
628 {
629 	int err = fscrypt_file_open(inode, filp);
630 
631 	if (err)
632 		return err;
633 
634 	if (!f2fs_is_compress_backend_ready(inode))
635 		return -EOPNOTSUPP;
636 
637 	if (mapping_large_folio_support(inode->i_mapping) &&
638 	    filp->f_mode & FMODE_WRITE)
639 		return -EOPNOTSUPP;
640 
641 	err = fsverity_file_open(inode, filp);
642 	if (err)
643 		return err;
644 
645 	filp->f_mode |= FMODE_NOWAIT;
646 	filp->f_mode |= FMODE_CAN_ODIRECT;
647 
648 	err = dquot_file_open(inode, filp);
649 	if (err)
650 		return err;
651 
652 	err = finish_preallocate_blocks(inode);
653 	if (!err)
654 		atomic_inc(&F2FS_I(inode)->open_count);
655 	return err;
656 }
657 
658 void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
659 {
660 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
661 	int nr_free = 0, ofs = dn->ofs_in_node, len = count;
662 	__le32 *addr;
663 	bool compressed_cluster = false;
664 	int cluster_index = 0, valid_blocks = 0;
665 	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
666 	bool released = !atomic_read(&F2FS_I(dn->inode)->i_compr_blocks);
667 	block_t blkstart;
668 	int blklen = 0;
669 
670 	addr = get_dnode_addr(dn->inode, dn->node_folio) + ofs;
671 	blkstart = le32_to_cpu(*addr);
672 
673 	/* Assumption: truncation starts with cluster */
674 	for (; count > 0; count--, addr++, dn->ofs_in_node++, cluster_index++) {
675 		block_t blkaddr = le32_to_cpu(*addr);
676 
677 		if (f2fs_compressed_file(dn->inode) &&
678 					!(cluster_index & (cluster_size - 1))) {
679 			if (compressed_cluster)
680 				f2fs_i_compr_blocks_update(dn->inode,
681 							valid_blocks, false);
682 			compressed_cluster = (blkaddr == COMPRESS_ADDR);
683 			valid_blocks = 0;
684 		}
685 
686 		if (blkaddr == NULL_ADDR)
687 			goto next;
688 
689 		f2fs_set_data_blkaddr(dn, NULL_ADDR);
690 
691 		if (__is_valid_data_blkaddr(blkaddr)) {
692 			if (time_to_inject(sbi, FAULT_BLKADDR_CONSISTENCE))
693 				goto next;
694 			if (!f2fs_is_valid_blkaddr_raw(sbi, blkaddr,
695 						DATA_GENERIC_ENHANCE))
696 				goto next;
697 			if (compressed_cluster)
698 				valid_blocks++;
699 		}
700 
701 		if (blkstart + blklen == blkaddr) {
702 			blklen++;
703 		} else {
704 			f2fs_invalidate_blocks(sbi, blkstart, blklen);
705 			blkstart = blkaddr;
706 			blklen = 1;
707 		}
708 
709 		if (!released || blkaddr != COMPRESS_ADDR)
710 			nr_free++;
711 
712 		continue;
713 
714 next:
715 		if (blklen)
716 			f2fs_invalidate_blocks(sbi, blkstart, blklen);
717 
718 		blkstart = le32_to_cpu(*(addr + 1));
719 		blklen = 0;
720 	}
721 
722 	if (blklen)
723 		f2fs_invalidate_blocks(sbi, blkstart, blklen);
724 
725 	if (compressed_cluster)
726 		f2fs_i_compr_blocks_update(dn->inode, valid_blocks, false);
727 
728 	if (nr_free) {
729 		pgoff_t fofs;
730 		/*
731 		 * once we invalidate valid blkaddr in range [ofs, ofs + count],
732 		 * we will invalidate all blkaddr in the whole range.
733 		 */
734 		fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_folio),
735 							dn->inode) + ofs;
736 		f2fs_update_read_extent_cache_range(dn, fofs, 0, len);
737 		f2fs_update_age_extent_cache_range(dn, fofs, len);
738 		dec_valid_block_count(sbi, dn->inode, nr_free);
739 	}
740 	dn->ofs_in_node = ofs;
741 
742 	f2fs_update_time(sbi, REQ_TIME);
743 	trace_f2fs_truncate_data_blocks_range(dn->inode, dn->nid,
744 					 dn->ofs_in_node, nr_free);
745 }
746 
747 static int truncate_partial_data_page(struct inode *inode, u64 from,
748 								bool cache_only)
749 {
750 	loff_t offset = from & (PAGE_SIZE - 1);
751 	pgoff_t index = from >> PAGE_SHIFT;
752 	struct address_space *mapping = inode->i_mapping;
753 	struct folio *folio;
754 
755 	if (!offset && !cache_only)
756 		return 0;
757 
758 	if (cache_only) {
759 		folio = filemap_lock_folio(mapping, index);
760 		if (IS_ERR(folio))
761 		       return 0;
762 		if (folio_test_uptodate(folio))
763 			goto truncate_out;
764 		f2fs_folio_put(folio, true);
765 		return 0;
766 	}
767 
768 	folio = f2fs_get_lock_data_folio(inode, index, true);
769 	if (IS_ERR(folio))
770 		return PTR_ERR(folio) == -ENOENT ? 0 : PTR_ERR(folio);
771 truncate_out:
772 	f2fs_folio_wait_writeback(folio, DATA, true, true);
773 	folio_zero_segment(folio, offset, folio_size(folio));
774 
775 	/* An encrypted inode should have a key and truncate the last page. */
776 	f2fs_bug_on(F2FS_I_SB(inode), cache_only && IS_ENCRYPTED(inode));
777 	if (!cache_only)
778 		folio_mark_dirty(folio);
779 	f2fs_folio_put(folio, true);
780 	return 0;
781 }
782 
783 int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
784 {
785 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
786 	struct dnode_of_data dn;
787 	struct f2fs_lock_context lc;
788 	pgoff_t free_from;
789 	int count = 0, err = 0;
790 	struct folio *ifolio;
791 	bool truncate_page = false;
792 
793 	trace_f2fs_truncate_blocks_enter(inode, from);
794 
795 	if (IS_DEVICE_ALIASING(inode) && from) {
796 		err = -EINVAL;
797 		goto out_err;
798 	}
799 
800 	free_from = (pgoff_t)F2FS_BLK_ALIGN(from);
801 
802 	if (free_from >= max_file_blocks(inode))
803 		goto free_partial;
804 
805 	if (lock)
806 		f2fs_lock_op(sbi, &lc);
807 
808 	ifolio = f2fs_get_inode_folio(sbi, inode->i_ino);
809 	if (IS_ERR(ifolio)) {
810 		err = PTR_ERR(ifolio);
811 		goto out;
812 	}
813 
814 	if (IS_DEVICE_ALIASING(inode)) {
815 		struct extent_tree *et = F2FS_I(inode)->extent_tree[EX_READ];
816 		struct extent_info ei = et->largest;
817 
818 		f2fs_invalidate_blocks(sbi, ei.blk, ei.len);
819 
820 		dec_valid_block_count(sbi, inode, ei.len);
821 		f2fs_update_time(sbi, REQ_TIME);
822 
823 		f2fs_folio_put(ifolio, true);
824 		goto out;
825 	}
826 
827 	if (f2fs_has_inline_data(inode)) {
828 		f2fs_truncate_inline_inode(inode, ifolio, from);
829 		f2fs_folio_put(ifolio, true);
830 		truncate_page = true;
831 		goto out;
832 	}
833 
834 	set_new_dnode(&dn, inode, ifolio, NULL, 0);
835 	err = f2fs_get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
836 	if (err) {
837 		if (err == -ENOENT)
838 			goto free_next;
839 		goto out;
840 	}
841 
842 	count = ADDRS_PER_PAGE(dn.node_folio, inode);
843 
844 	count -= dn.ofs_in_node;
845 	f2fs_bug_on(sbi, count < 0);
846 
847 	if (dn.ofs_in_node || IS_INODE(dn.node_folio)) {
848 		f2fs_truncate_data_blocks_range(&dn, count);
849 		free_from += count;
850 	}
851 
852 	f2fs_put_dnode(&dn);
853 free_next:
854 	err = f2fs_truncate_inode_blocks(inode, free_from);
855 out:
856 	if (lock)
857 		f2fs_unlock_op(sbi, &lc);
858 free_partial:
859 	/* lastly zero out the first data page */
860 	if (!err)
861 		err = truncate_partial_data_page(inode, from, truncate_page);
862 out_err:
863 	trace_f2fs_truncate_blocks_exit(inode, err);
864 	return err;
865 }
866 
867 int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
868 {
869 	u64 free_from = from;
870 	int err;
871 
872 #ifdef CONFIG_F2FS_FS_COMPRESSION
873 	/*
874 	 * for compressed file, only support cluster size
875 	 * aligned truncation.
876 	 */
877 	if (f2fs_compressed_file(inode))
878 		free_from = round_up(from,
879 				F2FS_I(inode)->i_cluster_size << PAGE_SHIFT);
880 #endif
881 
882 	err = f2fs_do_truncate_blocks(inode, free_from, lock);
883 	if (err)
884 		return err;
885 
886 #ifdef CONFIG_F2FS_FS_COMPRESSION
887 	/*
888 	 * For compressed file, after release compress blocks, don't allow write
889 	 * direct, but we should allow write direct after truncate to zero.
890 	 */
891 	if (f2fs_compressed_file(inode) && !free_from
892 			&& is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
893 		clear_inode_flag(inode, FI_COMPRESS_RELEASED);
894 
895 	if (from != free_from) {
896 		err = f2fs_truncate_partial_cluster(inode, from, lock);
897 		if (err)
898 			return err;
899 	}
900 #endif
901 
902 	return 0;
903 }
904 
905 int f2fs_truncate(struct inode *inode)
906 {
907 	int err;
908 
909 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
910 		return -EIO;
911 
912 	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
913 				S_ISLNK(inode->i_mode)))
914 		return 0;
915 
916 	trace_f2fs_truncate(inode);
917 
918 	if (time_to_inject(F2FS_I_SB(inode), FAULT_TRUNCATE))
919 		return -EIO;
920 
921 	err = f2fs_dquot_initialize(inode);
922 	if (err)
923 		return err;
924 
925 	/* we should check inline_data size */
926 	if (!f2fs_may_inline_data(inode)) {
927 		err = f2fs_convert_inline_inode(inode);
928 		if (err) {
929 			/*
930 			 * Always truncate page #0 to avoid page cache
931 			 * leak in evict() path.
932 			 */
933 			truncate_inode_pages_range(inode->i_mapping,
934 					F2FS_BLK_TO_BYTES(0),
935 					F2FS_BLK_END_BYTES(0));
936 			return err;
937 		}
938 	}
939 
940 	err = f2fs_truncate_blocks(inode, i_size_read(inode), true);
941 	if (err)
942 		return err;
943 
944 	inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
945 	f2fs_mark_inode_dirty_sync(inode, false);
946 	return 0;
947 }
948 
949 static bool f2fs_force_buffered_io(struct inode *inode, int rw)
950 {
951 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
952 
953 	if (fsverity_active(inode))
954 		return true;
955 	if (f2fs_compressed_file(inode))
956 		return true;
957 	/*
958 	 * only force direct read to use buffered IO, for direct write,
959 	 * it expects inline data conversion before committing IO.
960 	 */
961 	if (f2fs_has_inline_data(inode) && rw == READ)
962 		return true;
963 
964 	/* disallow direct IO if any of devices has unaligned blksize */
965 	if (f2fs_is_multi_device(sbi) && !sbi->aligned_blksize)
966 		return true;
967 	/*
968 	 * for blkzoned device, fallback direct IO to buffered IO, so
969 	 * all IOs can be serialized by log-structured write.
970 	 */
971 	if (f2fs_sb_has_blkzoned(sbi) && (rw == WRITE) &&
972 	    !f2fs_is_pinned_file(inode))
973 		return true;
974 	if (is_sbi_flag_set(sbi, SBI_CP_DISABLED))
975 		return true;
976 
977 	return false;
978 }
979 
980 int f2fs_getattr(struct mnt_idmap *idmap, const struct path *path,
981 		 struct kstat *stat, u32 request_mask, unsigned int query_flags)
982 {
983 	struct inode *inode = d_inode(path->dentry);
984 	struct f2fs_inode_info *fi = F2FS_I(inode);
985 	struct f2fs_inode *ri = NULL;
986 	unsigned int flags;
987 
988 	if (f2fs_has_extra_attr(inode) &&
989 			f2fs_sb_has_inode_crtime(F2FS_I_SB(inode)) &&
990 			F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, i_crtime)) {
991 		stat->result_mask |= STATX_BTIME;
992 		stat->btime.tv_sec = fi->i_crtime.tv_sec;
993 		stat->btime.tv_nsec = fi->i_crtime.tv_nsec;
994 	}
995 
996 	/*
997 	 * Return the DIO alignment restrictions if requested.
998 	 *
999 	 * f2fs sometimes supports DIO reads but not DIO writes.  STATX_DIOALIGN
1000 	 * cannot represent that, so in that case we report no DIO support.
1001 	 */
1002 	if ((request_mask & STATX_DIOALIGN) && S_ISREG(inode->i_mode)) {
1003 		unsigned int bsize = i_blocksize(inode);
1004 
1005 		stat->result_mask |= STATX_DIOALIGN;
1006 		if (!f2fs_force_buffered_io(inode, WRITE)) {
1007 			stat->dio_mem_align = bsize;
1008 			stat->dio_offset_align = bsize;
1009 		}
1010 	}
1011 
1012 	flags = fi->i_flags;
1013 	if (flags & F2FS_COMPR_FL)
1014 		stat->attributes |= STATX_ATTR_COMPRESSED;
1015 	if (flags & F2FS_APPEND_FL)
1016 		stat->attributes |= STATX_ATTR_APPEND;
1017 	if (IS_ENCRYPTED(inode))
1018 		stat->attributes |= STATX_ATTR_ENCRYPTED;
1019 	if (flags & F2FS_IMMUTABLE_FL)
1020 		stat->attributes |= STATX_ATTR_IMMUTABLE;
1021 	if (flags & F2FS_NODUMP_FL)
1022 		stat->attributes |= STATX_ATTR_NODUMP;
1023 	if (IS_VERITY(inode))
1024 		stat->attributes |= STATX_ATTR_VERITY;
1025 
1026 	stat->attributes_mask |= (STATX_ATTR_COMPRESSED |
1027 				  STATX_ATTR_APPEND |
1028 				  STATX_ATTR_ENCRYPTED |
1029 				  STATX_ATTR_IMMUTABLE |
1030 				  STATX_ATTR_NODUMP |
1031 				  STATX_ATTR_VERITY);
1032 
1033 	generic_fillattr(idmap, request_mask, inode, stat);
1034 
1035 	/* we need to show initial sectors used for inline_data/dentries */
1036 	if ((S_ISREG(inode->i_mode) && f2fs_has_inline_data(inode)) ||
1037 					f2fs_has_inline_dentry(inode))
1038 		stat->blocks += (stat->size + 511) >> 9;
1039 
1040 	return 0;
1041 }
1042 
1043 #ifdef CONFIG_F2FS_FS_POSIX_ACL
1044 static void __setattr_copy(struct mnt_idmap *idmap,
1045 			   struct inode *inode, const struct iattr *attr)
1046 {
1047 	unsigned int ia_valid = attr->ia_valid;
1048 
1049 	i_uid_update(idmap, attr, inode);
1050 	i_gid_update(idmap, attr, inode);
1051 	if (ia_valid & ATTR_ATIME)
1052 		inode_set_atime_to_ts(inode, attr->ia_atime);
1053 	if (ia_valid & ATTR_MTIME)
1054 		inode_set_mtime_to_ts(inode, attr->ia_mtime);
1055 	if (ia_valid & ATTR_CTIME)
1056 		inode_set_ctime_to_ts(inode, attr->ia_ctime);
1057 	if (ia_valid & ATTR_MODE) {
1058 		umode_t mode = attr->ia_mode;
1059 
1060 		if (!in_group_or_capable(idmap, inode, i_gid_into_vfsgid(idmap, inode)))
1061 			mode &= ~S_ISGID;
1062 		set_acl_inode(inode, mode);
1063 	}
1064 }
1065 #else
1066 #define __setattr_copy setattr_copy
1067 #endif
1068 
1069 int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
1070 		 struct iattr *attr)
1071 {
1072 	struct inode *inode = d_inode(dentry);
1073 	struct f2fs_inode_info *fi = F2FS_I(inode);
1074 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1075 	int err;
1076 
1077 	if (unlikely(f2fs_cp_error(sbi)))
1078 		return -EIO;
1079 
1080 	err = setattr_prepare(idmap, dentry, attr);
1081 	if (err)
1082 		return err;
1083 
1084 	err = fscrypt_prepare_setattr(dentry, attr);
1085 	if (err)
1086 		return err;
1087 
1088 	if (unlikely(IS_IMMUTABLE(inode)))
1089 		return -EPERM;
1090 
1091 	if (unlikely(IS_APPEND(inode) &&
1092 			(attr->ia_valid & (ATTR_MODE | ATTR_UID |
1093 				  ATTR_GID | ATTR_TIMES_SET))))
1094 		return -EPERM;
1095 
1096 	if ((attr->ia_valid & ATTR_SIZE)) {
1097 		if (mapping_large_folio_support(inode->i_mapping))
1098 			return -EOPNOTSUPP;
1099 		if (!f2fs_is_compress_backend_ready(inode) ||
1100 				IS_DEVICE_ALIASING(inode))
1101 			return -EOPNOTSUPP;
1102 		if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED) &&
1103 			!IS_ALIGNED(attr->ia_size,
1104 			F2FS_BLK_TO_BYTES(fi->i_cluster_size)))
1105 			return -EINVAL;
1106 		/*
1107 		 * To prevent scattered pin block generation, we don't allow
1108 		 * smaller/equal size unaligned truncation for pinned file.
1109 		 * We only support overwrite IO to pinned file, so don't
1110 		 * care about larger size truncation.
1111 		 */
1112 		if (f2fs_is_pinned_file(inode) &&
1113 			attr->ia_size <= i_size_read(inode) &&
1114 			!IS_ALIGNED(attr->ia_size,
1115 			F2FS_BLK_TO_BYTES(CAP_BLKS_PER_SEC(sbi))))
1116 			return -EINVAL;
1117 	}
1118 
1119 	if (is_quota_modification(idmap, inode, attr)) {
1120 		err = f2fs_dquot_initialize(inode);
1121 		if (err)
1122 			return err;
1123 	}
1124 	if (i_uid_needs_update(idmap, attr, inode) ||
1125 	    i_gid_needs_update(idmap, attr, inode)) {
1126 		struct f2fs_lock_context lc;
1127 
1128 		f2fs_lock_op(sbi, &lc);
1129 		err = dquot_transfer(idmap, inode, attr);
1130 		if (err) {
1131 			set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
1132 			f2fs_unlock_op(sbi, &lc);
1133 			return err;
1134 		}
1135 		/*
1136 		 * update uid/gid under lock_op(), so that dquot and inode can
1137 		 * be updated atomically.
1138 		 */
1139 		i_uid_update(idmap, attr, inode);
1140 		i_gid_update(idmap, attr, inode);
1141 		f2fs_mark_inode_dirty_sync(inode, true);
1142 		f2fs_unlock_op(sbi, &lc);
1143 	}
1144 
1145 	if (attr->ia_valid & ATTR_SIZE) {
1146 		loff_t old_size = i_size_read(inode);
1147 
1148 		if (attr->ia_size > MAX_INLINE_DATA(inode)) {
1149 			/*
1150 			 * should convert inline inode before i_size_write to
1151 			 * keep smaller than inline_data size with inline flag.
1152 			 */
1153 			err = f2fs_convert_inline_inode(inode);
1154 			if (err)
1155 				return err;
1156 		}
1157 
1158 		/*
1159 		 * wait for inflight dio, blocks should be removed after
1160 		 * IO completion.
1161 		 */
1162 		if (attr->ia_size < old_size)
1163 			inode_dio_wait(inode);
1164 
1165 		f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
1166 		filemap_invalidate_lock(inode->i_mapping);
1167 
1168 		if (attr->ia_size > old_size)
1169 			f2fs_zero_post_eof_page(inode, attr->ia_size, false);
1170 		truncate_setsize(inode, attr->ia_size);
1171 
1172 		if (attr->ia_size <= old_size)
1173 			err = f2fs_truncate(inode);
1174 		/*
1175 		 * do not trim all blocks after i_size if target size is
1176 		 * larger than i_size.
1177 		 */
1178 		filemap_invalidate_unlock(inode->i_mapping);
1179 		f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
1180 		if (err)
1181 			return err;
1182 
1183 		spin_lock(&fi->i_size_lock);
1184 		inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
1185 		fi->last_disk_size = i_size_read(inode);
1186 		spin_unlock(&fi->i_size_lock);
1187 	}
1188 
1189 	__setattr_copy(idmap, inode, attr);
1190 
1191 	if (attr->ia_valid & ATTR_MODE) {
1192 		err = posix_acl_chmod(idmap, dentry, f2fs_get_inode_mode(inode));
1193 
1194 		if (is_inode_flag_set(inode, FI_ACL_MODE)) {
1195 			if (!err)
1196 				inode->i_mode = fi->i_acl_mode;
1197 			clear_inode_flag(inode, FI_ACL_MODE);
1198 		}
1199 	}
1200 
1201 	/* file size may changed here */
1202 	f2fs_mark_inode_dirty_sync(inode, true);
1203 
1204 	/* inode change will produce dirty node pages flushed by checkpoint */
1205 	f2fs_balance_fs(sbi, true);
1206 
1207 	return err;
1208 }
1209 
1210 const struct inode_operations f2fs_file_inode_operations = {
1211 	.getattr	= f2fs_getattr,
1212 	.setattr	= f2fs_setattr,
1213 	.get_inode_acl	= f2fs_get_acl,
1214 	.set_acl	= f2fs_set_acl,
1215 	.listxattr	= f2fs_listxattr,
1216 	.fiemap		= f2fs_fiemap,
1217 	.fileattr_get	= f2fs_fileattr_get,
1218 	.fileattr_set	= f2fs_fileattr_set,
1219 };
1220 
1221 static int fill_zero(struct inode *inode, pgoff_t index,
1222 					loff_t start, loff_t len)
1223 {
1224 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1225 	struct folio *folio;
1226 	struct f2fs_lock_context lc;
1227 
1228 	if (!len)
1229 		return 0;
1230 
1231 	f2fs_balance_fs(sbi, true);
1232 
1233 	f2fs_lock_op(sbi, &lc);
1234 	folio = f2fs_get_new_data_folio(inode, NULL, index, false);
1235 	f2fs_unlock_op(sbi, &lc);
1236 
1237 	if (IS_ERR(folio))
1238 		return PTR_ERR(folio);
1239 
1240 	f2fs_folio_wait_writeback(folio, DATA, true, true);
1241 	folio_zero_range(folio, start, len);
1242 	folio_mark_dirty(folio);
1243 	f2fs_folio_put(folio, true);
1244 	return 0;
1245 }
1246 
1247 int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
1248 {
1249 	int err;
1250 
1251 	while (pg_start < pg_end) {
1252 		struct dnode_of_data dn;
1253 		pgoff_t end_offset, count;
1254 
1255 		set_new_dnode(&dn, inode, NULL, NULL, 0);
1256 		err = f2fs_get_dnode_of_data(&dn, pg_start, LOOKUP_NODE);
1257 		if (err) {
1258 			if (err == -ENOENT) {
1259 				pg_start = f2fs_get_next_page_offset(&dn,
1260 								pg_start);
1261 				continue;
1262 			}
1263 			return err;
1264 		}
1265 
1266 		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
1267 		count = min(end_offset - dn.ofs_in_node, pg_end - pg_start);
1268 
1269 		f2fs_bug_on(F2FS_I_SB(inode), count == 0 || count > end_offset);
1270 
1271 		f2fs_truncate_data_blocks_range(&dn, count);
1272 		f2fs_put_dnode(&dn);
1273 
1274 		pg_start += count;
1275 	}
1276 	return 0;
1277 }
1278 
1279 static int f2fs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
1280 {
1281 	pgoff_t pg_start, pg_end;
1282 	loff_t off_start, off_end;
1283 	int ret;
1284 
1285 	ret = f2fs_convert_inline_inode(inode);
1286 	if (ret)
1287 		return ret;
1288 
1289 	f2fs_zero_post_eof_page(inode, offset + len, true);
1290 
1291 	pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
1292 	pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
1293 
1294 	off_start = offset & (PAGE_SIZE - 1);
1295 	off_end = (offset + len) & (PAGE_SIZE - 1);
1296 
1297 	if (pg_start == pg_end) {
1298 		ret = fill_zero(inode, pg_start, off_start,
1299 						off_end - off_start);
1300 		if (ret)
1301 			return ret;
1302 	} else {
1303 		if (off_start) {
1304 			ret = fill_zero(inode, pg_start++, off_start,
1305 						PAGE_SIZE - off_start);
1306 			if (ret)
1307 				return ret;
1308 		}
1309 		if (off_end) {
1310 			ret = fill_zero(inode, pg_end, 0, off_end);
1311 			if (ret)
1312 				return ret;
1313 		}
1314 
1315 		if (pg_start < pg_end) {
1316 			loff_t blk_start, blk_end;
1317 			struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1318 			struct f2fs_lock_context lc;
1319 
1320 			f2fs_balance_fs(sbi, true);
1321 
1322 			blk_start = (loff_t)pg_start << PAGE_SHIFT;
1323 			blk_end = (loff_t)pg_end << PAGE_SHIFT;
1324 
1325 			f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1326 			filemap_invalidate_lock(inode->i_mapping);
1327 
1328 			truncate_pagecache_range(inode, blk_start, blk_end - 1);
1329 
1330 			f2fs_lock_op(sbi, &lc);
1331 			ret = f2fs_truncate_hole(inode, pg_start, pg_end);
1332 			f2fs_unlock_op(sbi, &lc);
1333 
1334 			filemap_invalidate_unlock(inode->i_mapping);
1335 			f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1336 		}
1337 	}
1338 
1339 	return ret;
1340 }
1341 
1342 static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
1343 				int *do_replace, pgoff_t off, pgoff_t len)
1344 {
1345 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1346 	struct dnode_of_data dn;
1347 	int ret, done, i;
1348 
1349 next_dnode:
1350 	set_new_dnode(&dn, inode, NULL, NULL, 0);
1351 	ret = f2fs_get_dnode_of_data(&dn, off, LOOKUP_NODE_RA);
1352 	if (ret && ret != -ENOENT) {
1353 		return ret;
1354 	} else if (ret == -ENOENT) {
1355 		if (dn.max_level == 0)
1356 			return -ENOENT;
1357 		done = min((pgoff_t)ADDRS_PER_BLOCK(inode) -
1358 						dn.ofs_in_node, len);
1359 		blkaddr += done;
1360 		do_replace += done;
1361 		goto next;
1362 	}
1363 
1364 	done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_folio, inode) -
1365 							dn.ofs_in_node, len);
1366 	for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
1367 		*blkaddr = f2fs_data_blkaddr(&dn);
1368 
1369 		if (__is_valid_data_blkaddr(*blkaddr) &&
1370 			!f2fs_is_valid_blkaddr(sbi, *blkaddr,
1371 					DATA_GENERIC_ENHANCE)) {
1372 			f2fs_put_dnode(&dn);
1373 			return -EFSCORRUPTED;
1374 		}
1375 
1376 		if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
1377 
1378 			if (f2fs_lfs_mode(sbi)) {
1379 				f2fs_put_dnode(&dn);
1380 				return -EOPNOTSUPP;
1381 			}
1382 
1383 			/* do not invalidate this block address */
1384 			f2fs_update_data_blkaddr(&dn, NULL_ADDR);
1385 			*do_replace = 1;
1386 		}
1387 	}
1388 	f2fs_put_dnode(&dn);
1389 next:
1390 	len -= done;
1391 	off += done;
1392 	if (len)
1393 		goto next_dnode;
1394 	return 0;
1395 }
1396 
1397 static int __roll_back_blkaddrs(struct inode *inode, block_t *blkaddr,
1398 				int *do_replace, pgoff_t off, int len)
1399 {
1400 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1401 	struct dnode_of_data dn;
1402 	int ret, i;
1403 
1404 	for (i = 0; i < len; i++, do_replace++, blkaddr++) {
1405 		if (*do_replace == 0)
1406 			continue;
1407 
1408 		set_new_dnode(&dn, inode, NULL, NULL, 0);
1409 		ret = f2fs_get_dnode_of_data(&dn, off + i, LOOKUP_NODE_RA);
1410 		if (ret) {
1411 			dec_valid_block_count(sbi, inode, 1);
1412 			f2fs_invalidate_blocks(sbi, *blkaddr, 1);
1413 		} else {
1414 			f2fs_update_data_blkaddr(&dn, *blkaddr);
1415 		}
1416 		f2fs_put_dnode(&dn);
1417 	}
1418 	return 0;
1419 }
1420 
1421 static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
1422 			block_t *blkaddr, int *do_replace,
1423 			pgoff_t src, pgoff_t dst, pgoff_t len, bool full)
1424 {
1425 	struct f2fs_sb_info *sbi = F2FS_I_SB(src_inode);
1426 	pgoff_t i = 0;
1427 	int ret;
1428 
1429 	while (i < len) {
1430 		if (blkaddr[i] == NULL_ADDR && !full) {
1431 			i++;
1432 			continue;
1433 		}
1434 
1435 		if (do_replace[i] || blkaddr[i] == NULL_ADDR) {
1436 			struct dnode_of_data dn;
1437 			struct node_info ni;
1438 			size_t new_size;
1439 			pgoff_t ilen;
1440 
1441 			set_new_dnode(&dn, dst_inode, NULL, NULL, 0);
1442 			ret = f2fs_get_dnode_of_data(&dn, dst + i, ALLOC_NODE);
1443 			if (ret)
1444 				return ret;
1445 
1446 			ret = f2fs_get_node_info(sbi, dn.nid, &ni, false);
1447 			if (ret) {
1448 				f2fs_put_dnode(&dn);
1449 				return ret;
1450 			}
1451 
1452 			ilen = min((pgoff_t)
1453 				ADDRS_PER_PAGE(dn.node_folio, dst_inode) -
1454 						dn.ofs_in_node, len - i);
1455 			do {
1456 				dn.data_blkaddr = f2fs_data_blkaddr(&dn);
1457 				f2fs_truncate_data_blocks_range(&dn, 1);
1458 
1459 				if (do_replace[i]) {
1460 					f2fs_i_blocks_write(src_inode,
1461 							1, false, false);
1462 					f2fs_i_blocks_write(dst_inode,
1463 							1, true, false);
1464 					f2fs_replace_block(sbi, &dn, dn.data_blkaddr,
1465 					blkaddr[i], ni.version, true, false);
1466 
1467 					do_replace[i] = 0;
1468 				}
1469 				dn.ofs_in_node++;
1470 				i++;
1471 				new_size = (loff_t)(dst + i) << PAGE_SHIFT;
1472 				if (dst_inode->i_size < new_size)
1473 					f2fs_i_size_write(dst_inode, new_size);
1474 			} while (--ilen && (do_replace[i] || blkaddr[i] == NULL_ADDR));
1475 
1476 			f2fs_put_dnode(&dn);
1477 		} else {
1478 			struct folio *fsrc, *fdst;
1479 
1480 			fsrc = f2fs_get_lock_data_folio(src_inode,
1481 							src + i, true);
1482 			if (IS_ERR(fsrc))
1483 				return PTR_ERR(fsrc);
1484 			fdst = f2fs_get_new_data_folio(dst_inode, NULL, dst + i,
1485 								true);
1486 			if (IS_ERR(fdst)) {
1487 				f2fs_folio_put(fsrc, true);
1488 				return PTR_ERR(fdst);
1489 			}
1490 
1491 			f2fs_folio_wait_writeback(fdst, DATA, true, true);
1492 
1493 			memcpy_folio(fdst, 0, fsrc, 0, PAGE_SIZE);
1494 			folio_mark_dirty(fdst);
1495 			folio_set_f2fs_gcing(fdst);
1496 			f2fs_folio_put(fdst, true);
1497 			f2fs_folio_put(fsrc, true);
1498 
1499 			ret = f2fs_truncate_hole(src_inode,
1500 						src + i, src + i + 1);
1501 			if (ret)
1502 				return ret;
1503 			i++;
1504 		}
1505 	}
1506 	return 0;
1507 }
1508 
1509 static int __exchange_data_block(struct inode *src_inode,
1510 			struct inode *dst_inode, pgoff_t src, pgoff_t dst,
1511 			pgoff_t len, bool full)
1512 {
1513 	block_t *src_blkaddr;
1514 	int *do_replace;
1515 	pgoff_t olen;
1516 	int ret;
1517 
1518 	while (len) {
1519 		olen = min((pgoff_t)4 * ADDRS_PER_BLOCK(src_inode), len);
1520 
1521 		src_blkaddr = f2fs_kvzalloc(F2FS_I_SB(src_inode),
1522 					array_size(olen, sizeof(block_t)),
1523 					GFP_NOFS);
1524 		if (!src_blkaddr)
1525 			return -ENOMEM;
1526 
1527 		do_replace = f2fs_kvzalloc(F2FS_I_SB(src_inode),
1528 					array_size(olen, sizeof(int)),
1529 					GFP_NOFS);
1530 		if (!do_replace) {
1531 			kvfree(src_blkaddr);
1532 			return -ENOMEM;
1533 		}
1534 
1535 		ret = __read_out_blkaddrs(src_inode, src_blkaddr,
1536 					do_replace, src, olen);
1537 		if (ret)
1538 			goto roll_back;
1539 
1540 		ret = __clone_blkaddrs(src_inode, dst_inode, src_blkaddr,
1541 					do_replace, src, dst, olen, full);
1542 		if (ret)
1543 			goto roll_back;
1544 
1545 		src += olen;
1546 		dst += olen;
1547 		len -= olen;
1548 
1549 		kvfree(src_blkaddr);
1550 		kvfree(do_replace);
1551 	}
1552 	return 0;
1553 
1554 roll_back:
1555 	__roll_back_blkaddrs(src_inode, src_blkaddr, do_replace, src, olen);
1556 	kvfree(src_blkaddr);
1557 	kvfree(do_replace);
1558 	return ret;
1559 }
1560 
1561 static int f2fs_do_collapse(struct inode *inode, loff_t offset, loff_t len)
1562 {
1563 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1564 	struct f2fs_lock_context lc;
1565 	pgoff_t nrpages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1566 	pgoff_t start = offset >> PAGE_SHIFT;
1567 	pgoff_t end = (offset + len) >> PAGE_SHIFT;
1568 	int ret;
1569 
1570 	f2fs_balance_fs(sbi, true);
1571 
1572 	/* avoid gc operation during block exchange */
1573 	f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1574 	filemap_invalidate_lock(inode->i_mapping);
1575 
1576 	f2fs_zero_post_eof_page(inode, offset + len, false);
1577 
1578 	f2fs_lock_op(sbi, &lc);
1579 	f2fs_drop_extent_tree(inode);
1580 	truncate_pagecache(inode, offset);
1581 	ret = __exchange_data_block(inode, inode, end, start, nrpages - end, true);
1582 	f2fs_unlock_op(sbi, &lc);
1583 
1584 	filemap_invalidate_unlock(inode->i_mapping);
1585 	f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1586 	return ret;
1587 }
1588 
1589 static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
1590 {
1591 	loff_t new_size;
1592 	int ret;
1593 
1594 	if (offset + len >= i_size_read(inode))
1595 		return -EINVAL;
1596 
1597 	/* collapse range should be aligned to block size of f2fs. */
1598 	if (offset & (F2FS_BLKSIZE - 1) || len & (F2FS_BLKSIZE - 1))
1599 		return -EINVAL;
1600 
1601 	ret = f2fs_convert_inline_inode(inode);
1602 	if (ret)
1603 		return ret;
1604 
1605 	/* write out all dirty pages from offset */
1606 	ret = filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
1607 	if (ret)
1608 		return ret;
1609 
1610 	ret = f2fs_do_collapse(inode, offset, len);
1611 	if (ret)
1612 		return ret;
1613 
1614 	/* write out all moved pages, if possible */
1615 	filemap_invalidate_lock(inode->i_mapping);
1616 	filemap_write_and_wait_range(inode->i_mapping, offset, LLONG_MAX);
1617 	truncate_pagecache(inode, offset);
1618 
1619 	new_size = i_size_read(inode) - len;
1620 	ret = f2fs_truncate_blocks(inode, new_size, true);
1621 	filemap_invalidate_unlock(inode->i_mapping);
1622 	if (!ret)
1623 		f2fs_i_size_write(inode, new_size);
1624 	return ret;
1625 }
1626 
1627 static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
1628 								pgoff_t end)
1629 {
1630 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
1631 	pgoff_t index = start;
1632 	unsigned int ofs_in_node = dn->ofs_in_node;
1633 	blkcnt_t count = 0;
1634 	int ret;
1635 
1636 	for (; index < end; index++, dn->ofs_in_node++) {
1637 		if (f2fs_data_blkaddr(dn) == NULL_ADDR)
1638 			count++;
1639 	}
1640 
1641 	dn->ofs_in_node = ofs_in_node;
1642 	ret = f2fs_reserve_new_blocks(dn, count);
1643 	if (ret)
1644 		return ret;
1645 
1646 	dn->ofs_in_node = ofs_in_node;
1647 	for (index = start; index < end; index++, dn->ofs_in_node++) {
1648 		dn->data_blkaddr = f2fs_data_blkaddr(dn);
1649 		/*
1650 		 * f2fs_reserve_new_blocks will not guarantee entire block
1651 		 * allocation.
1652 		 */
1653 		if (dn->data_blkaddr == NULL_ADDR) {
1654 			ret = -ENOSPC;
1655 			break;
1656 		}
1657 
1658 		if (dn->data_blkaddr == NEW_ADDR)
1659 			continue;
1660 
1661 		if (!f2fs_is_valid_blkaddr(sbi, dn->data_blkaddr,
1662 					DATA_GENERIC_ENHANCE)) {
1663 			ret = -EFSCORRUPTED;
1664 			break;
1665 		}
1666 
1667 		f2fs_invalidate_blocks(sbi, dn->data_blkaddr, 1);
1668 		f2fs_set_data_blkaddr(dn, NEW_ADDR);
1669 	}
1670 
1671 	if (index > start) {
1672 		f2fs_update_read_extent_cache_range(dn, start, 0,
1673 							index - start);
1674 		f2fs_update_age_extent_cache_range(dn, start, index - start);
1675 	}
1676 
1677 	return ret;
1678 }
1679 
1680 static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
1681 								int mode)
1682 {
1683 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1684 	struct address_space *mapping = inode->i_mapping;
1685 	pgoff_t index, pg_start, pg_end;
1686 	loff_t new_size = i_size_read(inode);
1687 	loff_t off_start, off_end;
1688 	int ret = 0;
1689 
1690 	ret = inode_newsize_ok(inode, (len + offset));
1691 	if (ret)
1692 		return ret;
1693 
1694 	ret = f2fs_convert_inline_inode(inode);
1695 	if (ret)
1696 		return ret;
1697 
1698 	ret = filemap_write_and_wait_range(mapping, offset, offset + len - 1);
1699 	if (ret)
1700 		return ret;
1701 
1702 	f2fs_zero_post_eof_page(inode, offset + len, true);
1703 
1704 	pg_start = ((unsigned long long) offset) >> PAGE_SHIFT;
1705 	pg_end = ((unsigned long long) offset + len) >> PAGE_SHIFT;
1706 
1707 	off_start = offset & (PAGE_SIZE - 1);
1708 	off_end = (offset + len) & (PAGE_SIZE - 1);
1709 
1710 	if (pg_start == pg_end) {
1711 		ret = fill_zero(inode, pg_start, off_start,
1712 						off_end - off_start);
1713 		if (ret)
1714 			return ret;
1715 
1716 		new_size = max_t(loff_t, new_size, offset + len);
1717 	} else {
1718 		if (off_start) {
1719 			ret = fill_zero(inode, pg_start++, off_start,
1720 						PAGE_SIZE - off_start);
1721 			if (ret)
1722 				return ret;
1723 
1724 			new_size = max_t(loff_t, new_size,
1725 					(loff_t)pg_start << PAGE_SHIFT);
1726 		}
1727 
1728 		for (index = pg_start; index < pg_end;) {
1729 			struct dnode_of_data dn;
1730 			struct f2fs_lock_context lc;
1731 			unsigned int end_offset;
1732 			pgoff_t end;
1733 
1734 			f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1735 			filemap_invalidate_lock(mapping);
1736 
1737 			truncate_pagecache_range(inode,
1738 				(loff_t)index << PAGE_SHIFT,
1739 				((loff_t)pg_end << PAGE_SHIFT) - 1);
1740 
1741 			f2fs_lock_op(sbi, &lc);
1742 
1743 			set_new_dnode(&dn, inode, NULL, NULL, 0);
1744 			ret = f2fs_get_dnode_of_data(&dn, index, ALLOC_NODE);
1745 			if (ret) {
1746 				f2fs_unlock_op(sbi, &lc);
1747 				filemap_invalidate_unlock(mapping);
1748 				f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1749 				goto out;
1750 			}
1751 
1752 			end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
1753 			end = min(pg_end, end_offset - dn.ofs_in_node + index);
1754 
1755 			ret = f2fs_do_zero_range(&dn, index, end);
1756 			f2fs_put_dnode(&dn);
1757 
1758 			f2fs_unlock_op(sbi, &lc);
1759 			filemap_invalidate_unlock(mapping);
1760 			f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1761 
1762 			f2fs_balance_fs(sbi, dn.node_changed);
1763 
1764 			if (ret)
1765 				goto out;
1766 
1767 			index = end;
1768 			new_size = max_t(loff_t, new_size,
1769 					(loff_t)index << PAGE_SHIFT);
1770 		}
1771 
1772 		if (off_end) {
1773 			ret = fill_zero(inode, pg_end, 0, off_end);
1774 			if (ret)
1775 				goto out;
1776 
1777 			new_size = max_t(loff_t, new_size, offset + len);
1778 		}
1779 	}
1780 
1781 out:
1782 	if (new_size > i_size_read(inode)) {
1783 		if (mode & FALLOC_FL_KEEP_SIZE)
1784 			file_set_keep_isize(inode);
1785 		else
1786 			f2fs_i_size_write(inode, new_size);
1787 	}
1788 	return ret;
1789 }
1790 
1791 static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len)
1792 {
1793 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1794 	struct address_space *mapping = inode->i_mapping;
1795 	pgoff_t nr, pg_start, pg_end, delta, idx;
1796 	loff_t new_size;
1797 	int ret = 0;
1798 
1799 	new_size = i_size_read(inode) + len;
1800 	ret = inode_newsize_ok(inode, new_size);
1801 	if (ret)
1802 		return ret;
1803 
1804 	if (offset >= i_size_read(inode))
1805 		return -EINVAL;
1806 
1807 	/* insert range should be aligned to block size of f2fs. */
1808 	if (offset & (F2FS_BLKSIZE - 1) || len & (F2FS_BLKSIZE - 1))
1809 		return -EINVAL;
1810 
1811 	ret = f2fs_convert_inline_inode(inode);
1812 	if (ret)
1813 		return ret;
1814 
1815 	f2fs_balance_fs(sbi, true);
1816 
1817 	filemap_invalidate_lock(mapping);
1818 	ret = f2fs_truncate_blocks(inode, i_size_read(inode), true);
1819 	filemap_invalidate_unlock(mapping);
1820 	if (ret)
1821 		return ret;
1822 
1823 	/* write out all dirty pages from offset */
1824 	ret = filemap_write_and_wait_range(mapping, offset, LLONG_MAX);
1825 	if (ret)
1826 		return ret;
1827 
1828 	pg_start = offset >> PAGE_SHIFT;
1829 	pg_end = (offset + len) >> PAGE_SHIFT;
1830 	delta = pg_end - pg_start;
1831 	idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
1832 
1833 	/* avoid gc operation during block exchange */
1834 	f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1835 	filemap_invalidate_lock(mapping);
1836 
1837 	f2fs_zero_post_eof_page(inode, offset + len, false);
1838 	truncate_pagecache(inode, offset);
1839 
1840 	while (!ret && idx > pg_start) {
1841 		struct f2fs_lock_context lc;
1842 
1843 		nr = idx - pg_start;
1844 		if (nr > delta)
1845 			nr = delta;
1846 		idx -= nr;
1847 
1848 		f2fs_lock_op(sbi, &lc);
1849 		f2fs_drop_extent_tree(inode);
1850 
1851 		ret = __exchange_data_block(inode, inode, idx,
1852 					idx + delta, nr, false);
1853 		f2fs_unlock_op(sbi, &lc);
1854 	}
1855 	filemap_invalidate_unlock(mapping);
1856 	f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
1857 	if (ret)
1858 		return ret;
1859 
1860 	/* write out all moved pages, if possible */
1861 	filemap_invalidate_lock(mapping);
1862 	ret = filemap_write_and_wait_range(mapping, offset, LLONG_MAX);
1863 	truncate_pagecache(inode, offset);
1864 	filemap_invalidate_unlock(mapping);
1865 
1866 	if (!ret)
1867 		f2fs_i_size_write(inode, new_size);
1868 	return ret;
1869 }
1870 
1871 static int f2fs_expand_inode_data(struct inode *inode, loff_t offset,
1872 					loff_t len, int mode)
1873 {
1874 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1875 	struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
1876 			.m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE,
1877 			.m_may_create = true };
1878 	struct f2fs_gc_control gc_control = { .victim_segno = NULL_SEGNO,
1879 			.init_gc_type = FG_GC,
1880 			.should_migrate_blocks = false,
1881 			.err_gc_skipped = true,
1882 			.nr_free_secs = 0 };
1883 	pgoff_t pg_start, pg_end;
1884 	loff_t new_size;
1885 	loff_t off_end;
1886 	block_t expanded = 0;
1887 	int err;
1888 
1889 	err = inode_newsize_ok(inode, (len + offset));
1890 	if (err)
1891 		return err;
1892 
1893 	err = f2fs_convert_inline_inode(inode);
1894 	if (err)
1895 		return err;
1896 
1897 	f2fs_zero_post_eof_page(inode, offset + len, true);
1898 
1899 	f2fs_balance_fs(sbi, true);
1900 
1901 	pg_start = ((unsigned long long)offset) >> PAGE_SHIFT;
1902 	pg_end = ((unsigned long long)offset + len) >> PAGE_SHIFT;
1903 	off_end = (offset + len) & (PAGE_SIZE - 1);
1904 
1905 	map.m_lblk = pg_start;
1906 	map.m_len = pg_end - pg_start;
1907 	if (off_end)
1908 		map.m_len++;
1909 
1910 	if (!map.m_len)
1911 		return 0;
1912 
1913 	if (f2fs_is_pinned_file(inode)) {
1914 		block_t sec_blks = CAP_BLKS_PER_SEC(sbi);
1915 		block_t sec_len;
1916 
1917 		if (map.m_lblk % sec_blks) {
1918 			map.m_lblk = rounddown(map.m_lblk, sec_blks);
1919 			map.m_len = pg_end - map.m_lblk;
1920 			if (off_end)
1921 				map.m_len++;
1922 		}
1923 		sec_len = roundup(map.m_len, sec_blks);
1924 		map.m_len = sec_blks;
1925 next_alloc:
1926 		f2fs_down_write(&sbi->pin_sem);
1927 
1928 		if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
1929 			if (has_not_enough_free_secs(sbi, 0, 0)) {
1930 				f2fs_up_write(&sbi->pin_sem);
1931 				err = -ENOSPC;
1932 				f2fs_warn_ratelimited(sbi,
1933 					"ino:%llu, start:%lu, end:%lu, need to trigger GC to "
1934 					"reclaim enough free segment when checkpoint is enabled",
1935 					inode->i_ino, pg_start, pg_end);
1936 				goto out_err;
1937 			}
1938 		}
1939 
1940 		if (has_not_enough_free_secs(sbi, 0,
1941 				sbi->reserved_pin_section)) {
1942 			f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc);
1943 			stat_inc_gc_call_count(sbi, FOREGROUND);
1944 			err = f2fs_gc(sbi, &gc_control);
1945 			if (err && err != -ENODATA) {
1946 				f2fs_up_write(&sbi->pin_sem);
1947 				goto out_err;
1948 			}
1949 		}
1950 
1951 		err = f2fs_allocate_pinning_section(sbi);
1952 		if (err) {
1953 			f2fs_up_write(&sbi->pin_sem);
1954 			goto out_err;
1955 		}
1956 
1957 		map.m_seg_type = CURSEG_COLD_DATA_PINNED;
1958 		err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRE_DIO);
1959 		file_dont_truncate(inode);
1960 
1961 		f2fs_up_write(&sbi->pin_sem);
1962 
1963 		expanded += map.m_len;
1964 		sec_len -= map.m_len;
1965 		map.m_lblk += map.m_len;
1966 		if (!err && sec_len)
1967 			goto next_alloc;
1968 
1969 		map.m_len = expanded;
1970 	} else {
1971 		err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRE_AIO);
1972 		expanded = map.m_len;
1973 	}
1974 out_err:
1975 	if (err) {
1976 		pgoff_t last_off;
1977 
1978 		if (!expanded)
1979 			return err;
1980 
1981 		last_off = pg_start + expanded - 1;
1982 
1983 		/* update new size to the failed position */
1984 		new_size = (last_off == pg_end) ? offset + len :
1985 					(loff_t)(last_off + 1) << PAGE_SHIFT;
1986 	} else {
1987 		new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end;
1988 	}
1989 
1990 	if (new_size > i_size_read(inode)) {
1991 		if (mode & FALLOC_FL_KEEP_SIZE)
1992 			file_set_keep_isize(inode);
1993 		else
1994 			f2fs_i_size_write(inode, new_size);
1995 	}
1996 
1997 	return err;
1998 }
1999 
2000 static long f2fs_fallocate(struct file *file, int mode,
2001 				loff_t offset, loff_t len)
2002 {
2003 	struct inode *inode = file_inode(file);
2004 	long ret = 0;
2005 
2006 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
2007 		return -EIO;
2008 	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
2009 		return -ENOSPC;
2010 	if (!f2fs_is_compress_backend_ready(inode) || IS_DEVICE_ALIASING(inode))
2011 		return -EOPNOTSUPP;
2012 
2013 	/* f2fs only support ->fallocate for regular file */
2014 	if (!S_ISREG(inode->i_mode))
2015 		return -EINVAL;
2016 
2017 	if (IS_ENCRYPTED(inode) &&
2018 		(mode & (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE)))
2019 		return -EOPNOTSUPP;
2020 
2021 	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
2022 			FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE |
2023 			FALLOC_FL_INSERT_RANGE))
2024 		return -EOPNOTSUPP;
2025 
2026 	inode_lock(inode);
2027 
2028 	/*
2029 	 * Pinned file should not support partial truncation since the block
2030 	 * can be used by applications.
2031 	 */
2032 	if ((f2fs_compressed_file(inode) || f2fs_is_pinned_file(inode)) &&
2033 		(mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_COLLAPSE_RANGE |
2034 			FALLOC_FL_ZERO_RANGE | FALLOC_FL_INSERT_RANGE))) {
2035 		ret = -EOPNOTSUPP;
2036 		goto out;
2037 	}
2038 
2039 	ret = file_modified(file);
2040 	if (ret)
2041 		goto out;
2042 
2043 	/*
2044 	 * wait for inflight dio, blocks should be removed after IO
2045 	 * completion.
2046 	 */
2047 	inode_dio_wait(inode);
2048 
2049 	if (mode & FALLOC_FL_PUNCH_HOLE) {
2050 		if (offset >= inode->i_size)
2051 			goto out;
2052 
2053 		ret = f2fs_punch_hole(inode, offset, len);
2054 	} else if (mode & FALLOC_FL_COLLAPSE_RANGE) {
2055 		ret = f2fs_collapse_range(inode, offset, len);
2056 	} else if (mode & FALLOC_FL_ZERO_RANGE) {
2057 		ret = f2fs_zero_range(inode, offset, len, mode);
2058 	} else if (mode & FALLOC_FL_INSERT_RANGE) {
2059 		ret = f2fs_insert_range(inode, offset, len);
2060 	} else {
2061 		ret = f2fs_expand_inode_data(inode, offset, len, mode);
2062 	}
2063 
2064 	if (!ret) {
2065 		inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
2066 		f2fs_mark_inode_dirty_sync(inode, false);
2067 		f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
2068 	}
2069 
2070 out:
2071 	inode_unlock(inode);
2072 
2073 	trace_f2fs_fallocate(inode, mode, offset, len, ret);
2074 	return ret;
2075 }
2076 
2077 static int f2fs_release_file(struct inode *inode, struct file *filp)
2078 {
2079 	if (atomic_dec_and_test(&F2FS_I(inode)->open_count))
2080 		f2fs_remove_donate_inode(inode);
2081 
2082 	/*
2083 	 * f2fs_release_file is called at every close calls. So we should
2084 	 * not drop any inmemory pages by close called by other process.
2085 	 */
2086 	if (!(filp->f_mode & FMODE_WRITE) ||
2087 			atomic_read(&inode->i_writecount) != 1)
2088 		return 0;
2089 
2090 	inode_lock(inode);
2091 	f2fs_abort_atomic_write(inode, true);
2092 	inode_unlock(inode);
2093 
2094 	return 0;
2095 }
2096 
2097 static int f2fs_file_flush(struct file *file, fl_owner_t id)
2098 {
2099 	struct inode *inode = file_inode(file);
2100 
2101 	/*
2102 	 * If the process doing a transaction is crashed, we should do
2103 	 * roll-back. Otherwise, other reader/write can see corrupted database
2104 	 * until all the writers close its file. Since this should be done
2105 	 * before dropping file lock, it needs to do in ->flush.
2106 	 */
2107 	if (F2FS_I(inode)->atomic_write_task == current &&
2108 				(current->flags & PF_EXITING)) {
2109 		inode_lock(inode);
2110 		f2fs_abort_atomic_write(inode, true);
2111 		inode_unlock(inode);
2112 	}
2113 
2114 	return 0;
2115 }
2116 
2117 static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
2118 {
2119 	struct f2fs_inode_info *fi = F2FS_I(inode);
2120 	u32 masked_flags = fi->i_flags & mask;
2121 
2122 	/* mask can be shrunk by flags_valid selector */
2123 	iflags &= mask;
2124 
2125 	/* Is it quota file? Do not allow user to mess with it */
2126 	if (IS_NOQUOTA(inode))
2127 		return -EPERM;
2128 
2129 	if ((iflags ^ masked_flags) & F2FS_CASEFOLD_FL) {
2130 		if (!f2fs_sb_has_casefold(F2FS_I_SB(inode)))
2131 			return -EOPNOTSUPP;
2132 		if (!f2fs_empty_dir(inode))
2133 			return -ENOTEMPTY;
2134 	}
2135 
2136 	if (iflags & (F2FS_COMPR_FL | F2FS_NOCOMP_FL)) {
2137 		if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
2138 			return -EOPNOTSUPP;
2139 		if ((iflags & F2FS_COMPR_FL) && (iflags & F2FS_NOCOMP_FL))
2140 			return -EINVAL;
2141 	}
2142 
2143 	if ((iflags ^ masked_flags) & F2FS_COMPR_FL) {
2144 		if (masked_flags & F2FS_COMPR_FL) {
2145 			if (!f2fs_disable_compressed_file(inode))
2146 				return -EINVAL;
2147 		} else {
2148 			/* try to convert inline_data to support compression */
2149 			int err = f2fs_convert_inline_inode(inode);
2150 			if (err)
2151 				return err;
2152 
2153 			f2fs_down_write(&fi->i_sem);
2154 			if (!f2fs_may_compress(inode) ||
2155 				atomic_read(&fi->writeback) ||
2156 				(S_ISREG(inode->i_mode) &&
2157 				F2FS_HAS_BLOCKS(inode))) {
2158 				f2fs_up_write(&fi->i_sem);
2159 				return -EINVAL;
2160 			}
2161 			err = set_compress_context(inode);
2162 			f2fs_up_write(&fi->i_sem);
2163 
2164 			if (err)
2165 				return err;
2166 		}
2167 	}
2168 
2169 	fi->i_flags = iflags | (fi->i_flags & ~mask);
2170 	f2fs_bug_on(F2FS_I_SB(inode), (fi->i_flags & F2FS_COMPR_FL) &&
2171 					(fi->i_flags & F2FS_NOCOMP_FL));
2172 
2173 	if (fi->i_flags & F2FS_PROJINHERIT_FL)
2174 		set_inode_flag(inode, FI_PROJ_INHERIT);
2175 	else
2176 		clear_inode_flag(inode, FI_PROJ_INHERIT);
2177 
2178 	inode_set_ctime_current(inode);
2179 	f2fs_set_inode_flags(inode);
2180 	f2fs_mark_inode_dirty_sync(inode, true);
2181 	return 0;
2182 }
2183 
2184 /* FS_IOC_[GS]ETFLAGS and FS_IOC_FS[GS]ETXATTR support */
2185 
2186 /*
2187  * To make a new on-disk f2fs i_flag gettable via FS_IOC_GETFLAGS, add an entry
2188  * for it to f2fs_fsflags_map[], and add its FS_*_FL equivalent to
2189  * F2FS_GETTABLE_FS_FL.  To also make it settable via FS_IOC_SETFLAGS, also add
2190  * its FS_*_FL equivalent to F2FS_SETTABLE_FS_FL.
2191  *
2192  * Translating flags to fsx_flags value used by FS_IOC_FSGETXATTR and
2193  * FS_IOC_FSSETXATTR is done by the VFS.
2194  */
2195 
2196 static const struct {
2197 	u32 iflag;
2198 	u32 fsflag;
2199 } f2fs_fsflags_map[] = {
2200 	{ F2FS_COMPR_FL,	FS_COMPR_FL },
2201 	{ F2FS_SYNC_FL,		FS_SYNC_FL },
2202 	{ F2FS_IMMUTABLE_FL,	FS_IMMUTABLE_FL },
2203 	{ F2FS_APPEND_FL,	FS_APPEND_FL },
2204 	{ F2FS_NODUMP_FL,	FS_NODUMP_FL },
2205 	{ F2FS_NOATIME_FL,	FS_NOATIME_FL },
2206 	{ F2FS_NOCOMP_FL,	FS_NOCOMP_FL },
2207 	{ F2FS_INDEX_FL,	FS_INDEX_FL },
2208 	{ F2FS_DIRSYNC_FL,	FS_DIRSYNC_FL },
2209 	{ F2FS_PROJINHERIT_FL,	FS_PROJINHERIT_FL },
2210 	{ F2FS_CASEFOLD_FL,	FS_CASEFOLD_FL },
2211 };
2212 
2213 #define F2FS_GETTABLE_FS_FL (		\
2214 		FS_COMPR_FL |		\
2215 		FS_SYNC_FL |		\
2216 		FS_IMMUTABLE_FL |	\
2217 		FS_APPEND_FL |		\
2218 		FS_NODUMP_FL |		\
2219 		FS_NOATIME_FL |		\
2220 		FS_NOCOMP_FL |		\
2221 		FS_INDEX_FL |		\
2222 		FS_DIRSYNC_FL |		\
2223 		FS_PROJINHERIT_FL |	\
2224 		FS_ENCRYPT_FL |		\
2225 		FS_INLINE_DATA_FL |	\
2226 		FS_NOCOW_FL |		\
2227 		FS_VERITY_FL |		\
2228 		FS_CASEFOLD_FL)
2229 
2230 #define F2FS_SETTABLE_FS_FL (		\
2231 		FS_COMPR_FL |		\
2232 		FS_SYNC_FL |		\
2233 		FS_IMMUTABLE_FL |	\
2234 		FS_APPEND_FL |		\
2235 		FS_NODUMP_FL |		\
2236 		FS_NOATIME_FL |		\
2237 		FS_NOCOMP_FL |		\
2238 		FS_DIRSYNC_FL |		\
2239 		FS_PROJINHERIT_FL |	\
2240 		FS_CASEFOLD_FL)
2241 
2242 /* Convert f2fs on-disk i_flags to FS_IOC_{GET,SET}FLAGS flags */
2243 static inline u32 f2fs_iflags_to_fsflags(u32 iflags)
2244 {
2245 	u32 fsflags = 0;
2246 	int i;
2247 
2248 	for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
2249 		if (iflags & f2fs_fsflags_map[i].iflag)
2250 			fsflags |= f2fs_fsflags_map[i].fsflag;
2251 
2252 	return fsflags;
2253 }
2254 
2255 /* Convert FS_IOC_{GET,SET}FLAGS flags to f2fs on-disk i_flags */
2256 static inline u32 f2fs_fsflags_to_iflags(u32 fsflags)
2257 {
2258 	u32 iflags = 0;
2259 	int i;
2260 
2261 	for (i = 0; i < ARRAY_SIZE(f2fs_fsflags_map); i++)
2262 		if (fsflags & f2fs_fsflags_map[i].fsflag)
2263 			iflags |= f2fs_fsflags_map[i].iflag;
2264 
2265 	return iflags;
2266 }
2267 
2268 static int f2fs_ioc_getversion(struct file *filp, unsigned long arg)
2269 {
2270 	struct inode *inode = file_inode(filp);
2271 
2272 	return put_user(inode->i_generation, (int __user *)arg);
2273 }
2274 
2275 static int f2fs_ioc_start_atomic_write(struct file *filp, bool truncate)
2276 {
2277 	struct inode *inode = file_inode(filp);
2278 	struct mnt_idmap *idmap = file_mnt_idmap(filp);
2279 	struct f2fs_inode_info *fi = F2FS_I(inode);
2280 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2281 	loff_t isize;
2282 	int ret;
2283 
2284 	if (!(filp->f_mode & FMODE_WRITE))
2285 		return -EBADF;
2286 
2287 	if (!inode_owner_or_capable(idmap, inode))
2288 		return -EACCES;
2289 
2290 	if (!S_ISREG(inode->i_mode))
2291 		return -EINVAL;
2292 
2293 	if (filp->f_flags & O_DIRECT)
2294 		return -EINVAL;
2295 
2296 	ret = mnt_want_write_file(filp);
2297 	if (ret)
2298 		return ret;
2299 
2300 	inode_lock(inode);
2301 
2302 	if (!f2fs_disable_compressed_file(inode) ||
2303 			f2fs_is_pinned_file(inode)) {
2304 		ret = -EINVAL;
2305 		goto out;
2306 	}
2307 
2308 	if (f2fs_is_atomic_file(inode))
2309 		goto out;
2310 
2311 	ret = f2fs_convert_inline_inode(inode);
2312 	if (ret)
2313 		goto out;
2314 
2315 	f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
2316 	f2fs_down_write(&fi->i_gc_rwsem[READ]);
2317 
2318 	/*
2319 	 * Should wait end_io to count F2FS_WB_CP_DATA correctly by
2320 	 * f2fs_is_atomic_file.
2321 	 */
2322 	if (get_dirty_pages(inode))
2323 		f2fs_warn(sbi, "Unexpected flush for atomic writes: ino=%llu, npages=%u",
2324 			  inode->i_ino, get_dirty_pages(inode));
2325 	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
2326 	if (ret)
2327 		goto out_unlock;
2328 
2329 	/* Check if the inode already has a COW inode */
2330 	if (fi->cow_inode == NULL) {
2331 		/* Create a COW inode for atomic write */
2332 		struct dentry *dentry = file_dentry(filp);
2333 		struct inode *dir = d_inode(dentry->d_parent);
2334 
2335 		ret = f2fs_get_tmpfile(idmap, dir, &fi->cow_inode);
2336 		if (ret)
2337 			goto out_unlock;
2338 
2339 		set_inode_flag(fi->cow_inode, FI_COW_FILE);
2340 		clear_inode_flag(fi->cow_inode, FI_INLINE_DATA);
2341 
2342 		/* Set the COW inode's atomic_inode to the atomic inode */
2343 		F2FS_I(fi->cow_inode)->atomic_inode = inode;
2344 	} else {
2345 		/* Reuse the already created COW inode */
2346 		f2fs_bug_on(sbi, get_dirty_pages(fi->cow_inode));
2347 
2348 		invalidate_mapping_pages(fi->cow_inode->i_mapping, 0, -1);
2349 
2350 		ret = f2fs_do_truncate_blocks(fi->cow_inode, 0, true);
2351 		if (ret)
2352 			goto out_unlock;
2353 	}
2354 
2355 	f2fs_write_inode(inode, NULL);
2356 
2357 	stat_inc_atomic_inode(inode);
2358 
2359 	set_inode_flag(inode, FI_ATOMIC_FILE);
2360 
2361 	isize = i_size_read(inode);
2362 	fi->original_i_size = isize;
2363 	if (truncate) {
2364 		set_inode_flag(inode, FI_ATOMIC_REPLACE);
2365 		truncate_inode_pages_final(inode->i_mapping);
2366 		f2fs_i_size_write(inode, 0);
2367 		isize = 0;
2368 	}
2369 	f2fs_i_size_write(fi->cow_inode, isize);
2370 
2371 out_unlock:
2372 	f2fs_up_write(&fi->i_gc_rwsem[READ]);
2373 	f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
2374 	if (ret)
2375 		goto out;
2376 
2377 	f2fs_update_time(sbi, REQ_TIME);
2378 	fi->atomic_write_task = current;
2379 	stat_update_max_atomic_write(inode);
2380 	fi->atomic_write_cnt = 0;
2381 out:
2382 	inode_unlock(inode);
2383 	mnt_drop_write_file(filp);
2384 	return ret;
2385 }
2386 
2387 static int f2fs_ioc_commit_atomic_write(struct file *filp)
2388 {
2389 	struct inode *inode = file_inode(filp);
2390 	struct mnt_idmap *idmap = file_mnt_idmap(filp);
2391 	int ret;
2392 
2393 	if (!(filp->f_mode & FMODE_WRITE))
2394 		return -EBADF;
2395 
2396 	if (!inode_owner_or_capable(idmap, inode))
2397 		return -EACCES;
2398 
2399 	ret = mnt_want_write_file(filp);
2400 	if (ret)
2401 		return ret;
2402 
2403 	f2fs_balance_fs(F2FS_I_SB(inode), true);
2404 
2405 	inode_lock(inode);
2406 
2407 	if (f2fs_is_atomic_file(inode)) {
2408 		ret = f2fs_commit_atomic_write(inode);
2409 		if (!ret)
2410 			ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
2411 
2412 		f2fs_abort_atomic_write(inode, ret);
2413 	} else {
2414 		ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 1, false);
2415 	}
2416 
2417 	inode_unlock(inode);
2418 	mnt_drop_write_file(filp);
2419 	return ret;
2420 }
2421 
2422 static int f2fs_ioc_abort_atomic_write(struct file *filp)
2423 {
2424 	struct inode *inode = file_inode(filp);
2425 	struct mnt_idmap *idmap = file_mnt_idmap(filp);
2426 	int ret;
2427 
2428 	if (!(filp->f_mode & FMODE_WRITE))
2429 		return -EBADF;
2430 
2431 	if (!inode_owner_or_capable(idmap, inode))
2432 		return -EACCES;
2433 
2434 	ret = mnt_want_write_file(filp);
2435 	if (ret)
2436 		return ret;
2437 
2438 	inode_lock(inode);
2439 
2440 	f2fs_abort_atomic_write(inode, true);
2441 
2442 	inode_unlock(inode);
2443 
2444 	mnt_drop_write_file(filp);
2445 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
2446 	return ret;
2447 }
2448 
2449 int f2fs_do_shutdown(struct f2fs_sb_info *sbi, unsigned int flag,
2450 						bool readonly, bool need_lock)
2451 {
2452 	struct super_block *sb = sbi->sb;
2453 	int ret = 0;
2454 
2455 	switch (flag) {
2456 	case F2FS_GOING_DOWN_FULLSYNC:
2457 		ret = bdev_freeze(sb->s_bdev);
2458 		if (ret)
2459 			goto out;
2460 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
2461 		bdev_thaw(sb->s_bdev);
2462 		break;
2463 	case F2FS_GOING_DOWN_METASYNC:
2464 		/* do checkpoint only */
2465 		ret = f2fs_sync_fs(sb, 1);
2466 		if (ret) {
2467 			if (ret == -EIO)
2468 				ret = 0;
2469 			goto out;
2470 		}
2471 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
2472 		break;
2473 	case F2FS_GOING_DOWN_NOSYNC:
2474 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
2475 		break;
2476 	case F2FS_GOING_DOWN_METAFLUSH:
2477 		f2fs_sync_meta_pages(sbi, LONG_MAX, FS_META_IO);
2478 		f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
2479 		break;
2480 	case F2FS_GOING_DOWN_NEED_FSCK:
2481 		set_sbi_flag(sbi, SBI_NEED_FSCK);
2482 		set_sbi_flag(sbi, SBI_CP_DISABLED_QUICK);
2483 		set_sbi_flag(sbi, SBI_IS_DIRTY);
2484 		/* do checkpoint only */
2485 		ret = f2fs_sync_fs(sb, 1);
2486 		if (ret == -EIO)
2487 			ret = 0;
2488 		goto out;
2489 	default:
2490 		ret = -EINVAL;
2491 		goto out;
2492 	}
2493 
2494 	if (readonly)
2495 		goto out;
2496 
2497 	/*
2498 	 * grab sb->s_umount to avoid racing w/ remount() and other shutdown
2499 	 * paths.
2500 	 */
2501 	if (need_lock)
2502 		down_write(&sbi->sb->s_umount);
2503 
2504 	f2fs_stop_gc_thread(sbi);
2505 	f2fs_stop_discard_thread(sbi);
2506 
2507 	f2fs_drop_discard_cmd(sbi);
2508 	clear_opt(sbi, DISCARD);
2509 
2510 	if (need_lock)
2511 		up_write(&sbi->sb->s_umount);
2512 
2513 	f2fs_update_time(sbi, REQ_TIME);
2514 out:
2515 
2516 	trace_f2fs_shutdown(sbi, flag, ret);
2517 
2518 	return ret;
2519 }
2520 
2521 static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
2522 {
2523 	struct inode *inode = file_inode(filp);
2524 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2525 	__u32 in;
2526 	int ret;
2527 	bool need_drop = false, readonly = false;
2528 
2529 	if (!capable(CAP_SYS_ADMIN))
2530 		return -EPERM;
2531 
2532 	if (get_user(in, (__u32 __user *)arg))
2533 		return -EFAULT;
2534 
2535 	if (in != F2FS_GOING_DOWN_FULLSYNC) {
2536 		ret = mnt_want_write_file(filp);
2537 		if (ret) {
2538 			if (ret != -EROFS)
2539 				return ret;
2540 
2541 			/* fallback to nosync shutdown for readonly fs */
2542 			in = F2FS_GOING_DOWN_NOSYNC;
2543 			readonly = true;
2544 		} else {
2545 			need_drop = true;
2546 		}
2547 	}
2548 
2549 	ret = f2fs_do_shutdown(sbi, in, readonly, true);
2550 
2551 	if (need_drop)
2552 		mnt_drop_write_file(filp);
2553 
2554 	return ret;
2555 }
2556 
2557 static int f2fs_keep_noreuse_range(struct inode *inode,
2558 				loff_t offset, loff_t len)
2559 {
2560 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2561 	u64 max_bytes = F2FS_BLK_TO_BYTES(max_file_blocks(inode));
2562 	u64 start, end;
2563 	int ret = 0;
2564 
2565 	if (!S_ISREG(inode->i_mode))
2566 		return 0;
2567 
2568 	if (offset >= max_bytes || len > max_bytes ||
2569 	    (offset + len) > max_bytes)
2570 		return 0;
2571 
2572 	start = offset >> PAGE_SHIFT;
2573 	end = DIV_ROUND_UP(offset + len, PAGE_SIZE);
2574 
2575 	inode_lock(inode);
2576 	if (f2fs_is_atomic_file(inode)) {
2577 		inode_unlock(inode);
2578 		return 0;
2579 	}
2580 
2581 	spin_lock(&sbi->inode_lock[DONATE_INODE]);
2582 	/* let's remove the range, if len = 0 */
2583 	if (!len) {
2584 		if (!list_empty(&F2FS_I(inode)->gdonate_list)) {
2585 			list_del_init(&F2FS_I(inode)->gdonate_list);
2586 			sbi->donate_files--;
2587 			if (is_inode_flag_set(inode, FI_DONATE_FINISHED))
2588 				ret = -EALREADY;
2589 			else
2590 				set_inode_flag(inode, FI_DONATE_FINISHED);
2591 		} else
2592 			ret = -ENOENT;
2593 	} else {
2594 		if (list_empty(&F2FS_I(inode)->gdonate_list)) {
2595 			list_add_tail(&F2FS_I(inode)->gdonate_list,
2596 					&sbi->inode_list[DONATE_INODE]);
2597 			sbi->donate_files++;
2598 		} else {
2599 			list_move_tail(&F2FS_I(inode)->gdonate_list,
2600 					&sbi->inode_list[DONATE_INODE]);
2601 		}
2602 		F2FS_I(inode)->donate_start = start;
2603 		F2FS_I(inode)->donate_end = end - 1;
2604 		clear_inode_flag(inode, FI_DONATE_FINISHED);
2605 	}
2606 	spin_unlock(&sbi->inode_lock[DONATE_INODE]);
2607 	inode_unlock(inode);
2608 
2609 	return ret;
2610 }
2611 
2612 static int f2fs_ioc_fitrim(struct file *filp, unsigned long arg)
2613 {
2614 	struct inode *inode = file_inode(filp);
2615 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2616 	struct fstrim_range range;
2617 	int ret;
2618 
2619 	if (!capable(CAP_SYS_ADMIN))
2620 		return -EPERM;
2621 
2622 	if (!f2fs_hw_support_discard(sbi))
2623 		return -EOPNOTSUPP;
2624 
2625 	if (copy_from_user(&range, (struct fstrim_range __user *)arg,
2626 				sizeof(range)))
2627 		return -EFAULT;
2628 
2629 	ret = mnt_want_write_file(filp);
2630 	if (ret)
2631 		return ret;
2632 
2633 	range.minlen = max_t(unsigned int, range.minlen,
2634 			f2fs_hw_discard_granularity(sbi));
2635 	ret = f2fs_trim_fs(sbi, &range);
2636 	mnt_drop_write_file(filp);
2637 	if (ret < 0)
2638 		return ret;
2639 
2640 	if (copy_to_user((struct fstrim_range __user *)arg, &range,
2641 				sizeof(range)))
2642 		return -EFAULT;
2643 	f2fs_update_time(sbi, REQ_TIME);
2644 	return 0;
2645 }
2646 
2647 static bool uuid_is_nonzero(__u8 u[16])
2648 {
2649 	int i;
2650 
2651 	for (i = 0; i < 16; i++)
2652 		if (u[i])
2653 			return true;
2654 	return false;
2655 }
2656 
2657 static int f2fs_ioc_set_encryption_policy(struct file *filp, unsigned long arg)
2658 {
2659 	struct inode *inode = file_inode(filp);
2660 	int ret;
2661 
2662 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(inode)))
2663 		return -EOPNOTSUPP;
2664 
2665 	ret = fscrypt_ioctl_set_policy(filp, (const void __user *)arg);
2666 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
2667 	return ret;
2668 }
2669 
2670 static int f2fs_ioc_get_encryption_policy(struct file *filp, unsigned long arg)
2671 {
2672 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2673 		return -EOPNOTSUPP;
2674 	return fscrypt_ioctl_get_policy(filp, (void __user *)arg);
2675 }
2676 
2677 static int f2fs_ioc_get_encryption_pwsalt(struct file *filp, unsigned long arg)
2678 {
2679 	struct inode *inode = file_inode(filp);
2680 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2681 	u8 encrypt_pw_salt[16];
2682 	int err;
2683 
2684 	if (!f2fs_sb_has_encrypt(sbi))
2685 		return -EOPNOTSUPP;
2686 
2687 	err = mnt_want_write_file(filp);
2688 	if (err)
2689 		return err;
2690 
2691 	f2fs_down_write(&sbi->sb_lock);
2692 
2693 	if (uuid_is_nonzero(sbi->raw_super->encrypt_pw_salt))
2694 		goto got_it;
2695 
2696 	/* update superblock with uuid */
2697 	generate_random_uuid(sbi->raw_super->encrypt_pw_salt);
2698 
2699 	err = f2fs_commit_super(sbi, false);
2700 	if (err) {
2701 		/* undo new data */
2702 		memset(sbi->raw_super->encrypt_pw_salt, 0, 16);
2703 		goto out_err;
2704 	}
2705 got_it:
2706 	memcpy(encrypt_pw_salt, sbi->raw_super->encrypt_pw_salt, 16);
2707 out_err:
2708 	f2fs_up_write(&sbi->sb_lock);
2709 	mnt_drop_write_file(filp);
2710 
2711 	if (!err && copy_to_user((__u8 __user *)arg, encrypt_pw_salt, 16))
2712 		err = -EFAULT;
2713 
2714 	return err;
2715 }
2716 
2717 static int f2fs_ioc_get_encryption_policy_ex(struct file *filp,
2718 					     unsigned long arg)
2719 {
2720 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2721 		return -EOPNOTSUPP;
2722 
2723 	return fscrypt_ioctl_get_policy_ex(filp, (void __user *)arg);
2724 }
2725 
2726 static int f2fs_ioc_add_encryption_key(struct file *filp, unsigned long arg)
2727 {
2728 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2729 		return -EOPNOTSUPP;
2730 
2731 	return fscrypt_ioctl_add_key(filp, (void __user *)arg);
2732 }
2733 
2734 static int f2fs_ioc_remove_encryption_key(struct file *filp, unsigned long arg)
2735 {
2736 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2737 		return -EOPNOTSUPP;
2738 
2739 	return fscrypt_ioctl_remove_key(filp, (void __user *)arg);
2740 }
2741 
2742 static int f2fs_ioc_remove_encryption_key_all_users(struct file *filp,
2743 						    unsigned long arg)
2744 {
2745 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2746 		return -EOPNOTSUPP;
2747 
2748 	return fscrypt_ioctl_remove_key_all_users(filp, (void __user *)arg);
2749 }
2750 
2751 static int f2fs_ioc_get_encryption_key_status(struct file *filp,
2752 					      unsigned long arg)
2753 {
2754 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2755 		return -EOPNOTSUPP;
2756 
2757 	return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
2758 }
2759 
2760 static int f2fs_ioc_get_encryption_nonce(struct file *filp, unsigned long arg)
2761 {
2762 	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
2763 		return -EOPNOTSUPP;
2764 
2765 	return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
2766 }
2767 
2768 static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
2769 {
2770 	struct inode *inode = file_inode(filp);
2771 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2772 	struct f2fs_gc_control gc_control = { .victim_segno = NULL_SEGNO,
2773 			.no_bg_gc = false,
2774 			.should_migrate_blocks = false,
2775 			.nr_free_secs = 0 };
2776 	__u32 sync;
2777 	int ret;
2778 
2779 	if (!capable(CAP_SYS_ADMIN))
2780 		return -EPERM;
2781 
2782 	if (get_user(sync, (__u32 __user *)arg))
2783 		return -EFAULT;
2784 
2785 	if (f2fs_readonly(sbi->sb))
2786 		return -EROFS;
2787 
2788 	ret = mnt_want_write_file(filp);
2789 	if (ret)
2790 		return ret;
2791 
2792 	if (!sync) {
2793 		if (!f2fs_down_write_trylock_trace(&sbi->gc_lock,
2794 						&gc_control.lc)) {
2795 			ret = -EBUSY;
2796 			goto out;
2797 		}
2798 	} else {
2799 		f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc);
2800 	}
2801 
2802 	gc_control.init_gc_type = sync ? FG_GC : BG_GC;
2803 	gc_control.err_gc_skipped = sync;
2804 	stat_inc_gc_call_count(sbi, FOREGROUND);
2805 	ret = f2fs_gc(sbi, &gc_control);
2806 out:
2807 	mnt_drop_write_file(filp);
2808 	return ret;
2809 }
2810 
2811 static int __f2fs_ioc_gc_range(struct file *filp, struct f2fs_gc_range *range)
2812 {
2813 	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
2814 	struct f2fs_gc_control gc_control = {
2815 			.init_gc_type = range->sync ? FG_GC : BG_GC,
2816 			.no_bg_gc = false,
2817 			.should_migrate_blocks = false,
2818 			.err_gc_skipped = range->sync,
2819 			.nr_free_secs = 0 };
2820 	u64 end;
2821 	int ret;
2822 
2823 	if (!capable(CAP_SYS_ADMIN))
2824 		return -EPERM;
2825 	if (f2fs_readonly(sbi->sb))
2826 		return -EROFS;
2827 
2828 	end = range->start + range->len;
2829 	if (end < range->start || range->start < MAIN_BLKADDR(sbi) ||
2830 					end >= MAX_BLKADDR(sbi))
2831 		return -EINVAL;
2832 
2833 	ret = mnt_want_write_file(filp);
2834 	if (ret)
2835 		return ret;
2836 
2837 do_more:
2838 	if (!range->sync) {
2839 		if (!f2fs_down_write_trylock_trace(&sbi->gc_lock, &gc_control.lc)) {
2840 			ret = -EBUSY;
2841 			goto out;
2842 		}
2843 	} else {
2844 		f2fs_down_write_trace(&sbi->gc_lock, &gc_control.lc);
2845 	}
2846 
2847 	gc_control.victim_segno = GET_SEGNO(sbi, range->start);
2848 	stat_inc_gc_call_count(sbi, FOREGROUND);
2849 	ret = f2fs_gc(sbi, &gc_control);
2850 	if (ret) {
2851 		if (ret == -EBUSY)
2852 			ret = -EAGAIN;
2853 		goto out;
2854 	}
2855 	range->start += CAP_BLKS_PER_SEC(sbi);
2856 	if (range->start <= end)
2857 		goto do_more;
2858 out:
2859 	mnt_drop_write_file(filp);
2860 	return ret;
2861 }
2862 
2863 static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
2864 {
2865 	struct f2fs_gc_range range;
2866 
2867 	if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
2868 							sizeof(range)))
2869 		return -EFAULT;
2870 	return __f2fs_ioc_gc_range(filp, &range);
2871 }
2872 
2873 static int f2fs_ioc_write_checkpoint(struct file *filp)
2874 {
2875 	struct inode *inode = file_inode(filp);
2876 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
2877 	int ret;
2878 
2879 	if (!capable(CAP_SYS_ADMIN))
2880 		return -EPERM;
2881 
2882 	if (f2fs_readonly(sbi->sb))
2883 		return -EROFS;
2884 
2885 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
2886 		f2fs_info(sbi, "Skipping Checkpoint. Checkpoints currently disabled.");
2887 		return -EINVAL;
2888 	}
2889 
2890 	ret = mnt_want_write_file(filp);
2891 	if (ret)
2892 		return ret;
2893 
2894 	ret = f2fs_sync_fs(sbi->sb, 1);
2895 
2896 	mnt_drop_write_file(filp);
2897 	return ret;
2898 }
2899 
2900 static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
2901 					struct file *filp,
2902 					struct f2fs_defragment *range)
2903 {
2904 	struct inode *inode = file_inode(filp);
2905 	struct f2fs_map_blocks map = { .m_next_extent = NULL,
2906 					.m_seg_type = NO_CHECK_TYPE,
2907 					.m_may_create = false };
2908 	struct extent_info ei = {};
2909 	pgoff_t pg_start, pg_end, next_pgofs;
2910 	unsigned int total = 0, sec_num;
2911 	block_t blk_end = 0;
2912 	bool fragmented = false;
2913 	int err;
2914 
2915 	f2fs_balance_fs(sbi, true);
2916 
2917 	inode_lock(inode);
2918 	pg_start = range->start >> PAGE_SHIFT;
2919 	pg_end = min_t(pgoff_t,
2920 				(range->start + range->len) >> PAGE_SHIFT,
2921 				DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE));
2922 
2923 	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED) ||
2924 		f2fs_is_atomic_file(inode)) {
2925 		err = -EINVAL;
2926 		goto unlock_out;
2927 	}
2928 
2929 	/* if in-place-update policy is enabled, don't waste time here */
2930 	set_inode_flag(inode, FI_OPU_WRITE);
2931 	if (f2fs_should_update_inplace(inode, NULL)) {
2932 		err = -EINVAL;
2933 		goto out;
2934 	}
2935 
2936 	/* writeback all dirty pages in the range */
2937 	err = filemap_write_and_wait_range(inode->i_mapping,
2938 						pg_start << PAGE_SHIFT,
2939 						(pg_end << PAGE_SHIFT) - 1);
2940 	if (err)
2941 		goto out;
2942 
2943 	/*
2944 	 * lookup mapping info in extent cache, skip defragmenting if physical
2945 	 * block addresses are continuous.
2946 	 */
2947 	if (f2fs_lookup_read_extent_cache(inode, pg_start, &ei)) {
2948 		if ((pgoff_t)ei.fofs + ei.len >= pg_end)
2949 			goto out;
2950 	}
2951 
2952 	map.m_lblk = pg_start;
2953 	map.m_next_pgofs = &next_pgofs;
2954 
2955 	/*
2956 	 * lookup mapping info in dnode page cache, skip defragmenting if all
2957 	 * physical block addresses are continuous even if there are hole(s)
2958 	 * in logical blocks.
2959 	 */
2960 	while (map.m_lblk < pg_end) {
2961 		map.m_len = pg_end - map.m_lblk;
2962 		err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT);
2963 		if (err)
2964 			goto out;
2965 
2966 		if (!(map.m_flags & F2FS_MAP_FLAGS)) {
2967 			map.m_lblk = next_pgofs;
2968 			continue;
2969 		}
2970 
2971 		if (blk_end && blk_end != map.m_pblk)
2972 			fragmented = true;
2973 
2974 		/* record total count of block that we're going to move */
2975 		total += map.m_len;
2976 
2977 		blk_end = map.m_pblk + map.m_len;
2978 
2979 		map.m_lblk += map.m_len;
2980 	}
2981 
2982 	if (!fragmented) {
2983 		total = 0;
2984 		goto out;
2985 	}
2986 
2987 	sec_num = DIV_ROUND_UP(total, CAP_BLKS_PER_SEC(sbi));
2988 
2989 	/*
2990 	 * make sure there are enough free section for LFS allocation, this can
2991 	 * avoid defragment running in SSR mode when free section are allocated
2992 	 * intensively
2993 	 */
2994 	if (has_not_enough_free_secs(sbi, 0, sec_num)) {
2995 		err = -EAGAIN;
2996 		goto out;
2997 	}
2998 
2999 	map.m_lblk = pg_start;
3000 	map.m_len = pg_end - pg_start;
3001 	total = 0;
3002 
3003 	while (map.m_lblk < pg_end) {
3004 		pgoff_t idx;
3005 		int cnt = 0;
3006 
3007 do_map:
3008 		map.m_len = pg_end - map.m_lblk;
3009 		err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT);
3010 		if (err)
3011 			goto clear_out;
3012 
3013 		if (!(map.m_flags & F2FS_MAP_FLAGS)) {
3014 			map.m_lblk = next_pgofs;
3015 			goto check;
3016 		}
3017 
3018 		set_inode_flag(inode, FI_SKIP_WRITES);
3019 
3020 		idx = map.m_lblk;
3021 		while (idx < map.m_lblk + map.m_len &&
3022 						cnt < BLKS_PER_SEG(sbi)) {
3023 			struct folio *folio;
3024 
3025 			folio = f2fs_get_lock_data_folio(inode, idx, true);
3026 			if (IS_ERR(folio)) {
3027 				err = PTR_ERR(folio);
3028 				goto clear_out;
3029 			}
3030 
3031 			f2fs_folio_wait_writeback(folio, DATA, true, true);
3032 
3033 			folio_mark_dirty(folio);
3034 			folio_set_f2fs_gcing(folio);
3035 			f2fs_folio_put(folio, true);
3036 
3037 			idx++;
3038 			cnt++;
3039 			total++;
3040 		}
3041 
3042 		map.m_lblk = idx;
3043 check:
3044 		if (map.m_lblk < pg_end && cnt < BLKS_PER_SEG(sbi))
3045 			goto do_map;
3046 
3047 		clear_inode_flag(inode, FI_SKIP_WRITES);
3048 
3049 		err = filemap_fdatawrite(inode->i_mapping);
3050 		if (err)
3051 			goto out;
3052 	}
3053 clear_out:
3054 	clear_inode_flag(inode, FI_SKIP_WRITES);
3055 out:
3056 	clear_inode_flag(inode, FI_OPU_WRITE);
3057 unlock_out:
3058 	inode_unlock(inode);
3059 	if (!err) {
3060 		range->len = (u64)total << PAGE_SHIFT;
3061 		stat_inc_defrag_blk_count(sbi, total);
3062 	}
3063 	return err;
3064 }
3065 
3066 static int f2fs_ioc_defragment(struct file *filp, unsigned long arg)
3067 {
3068 	struct inode *inode = file_inode(filp);
3069 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3070 	struct f2fs_defragment range;
3071 	int err;
3072 
3073 	if (!capable(CAP_SYS_ADMIN))
3074 		return -EPERM;
3075 
3076 	if (!S_ISREG(inode->i_mode))
3077 		return -EINVAL;
3078 
3079 	if (f2fs_readonly(sbi->sb))
3080 		return -EROFS;
3081 
3082 	if (copy_from_user(&range, (struct f2fs_defragment __user *)arg,
3083 							sizeof(range)))
3084 		return -EFAULT;
3085 
3086 	/* verify alignment of offset & size */
3087 	if (range.start & (F2FS_BLKSIZE - 1) || range.len & (F2FS_BLKSIZE - 1))
3088 		return -EINVAL;
3089 
3090 	if (unlikely((range.start + range.len) >> PAGE_SHIFT >
3091 					max_file_blocks(inode)))
3092 		return -EINVAL;
3093 
3094 	err = mnt_want_write_file(filp);
3095 	if (err)
3096 		return err;
3097 
3098 	err = f2fs_defragment_range(sbi, filp, &range);
3099 	mnt_drop_write_file(filp);
3100 
3101 	if (range.len)
3102 		f2fs_update_time(sbi, REQ_TIME);
3103 	if (err < 0)
3104 		return err;
3105 
3106 	if (copy_to_user((struct f2fs_defragment __user *)arg, &range,
3107 							sizeof(range)))
3108 		return -EFAULT;
3109 
3110 	return 0;
3111 }
3112 
3113 static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
3114 			struct file *file_out, loff_t pos_out, size_t len)
3115 {
3116 	struct inode *src = file_inode(file_in);
3117 	struct inode *dst = file_inode(file_out);
3118 	struct f2fs_sb_info *sbi = F2FS_I_SB(src);
3119 	struct f2fs_lock_context lc;
3120 	size_t olen = len, dst_max_i_size = 0;
3121 	size_t dst_osize;
3122 	int ret;
3123 
3124 	if (file_in->f_path.mnt != file_out->f_path.mnt ||
3125 				src->i_sb != dst->i_sb)
3126 		return -EXDEV;
3127 
3128 	if (unlikely(f2fs_readonly(src->i_sb)))
3129 		return -EROFS;
3130 
3131 	if (!S_ISREG(src->i_mode) || !S_ISREG(dst->i_mode))
3132 		return -EINVAL;
3133 
3134 	if (IS_ENCRYPTED(src) || IS_ENCRYPTED(dst))
3135 		return -EOPNOTSUPP;
3136 
3137 	if (pos_out < 0 || pos_in < 0)
3138 		return -EINVAL;
3139 
3140 	if (src == dst) {
3141 		if (pos_in == pos_out)
3142 			return 0;
3143 		if (pos_out > pos_in && pos_out < pos_in + len)
3144 			return -EINVAL;
3145 	}
3146 
3147 	inode_lock(src);
3148 	if (src != dst) {
3149 		ret = -EBUSY;
3150 		if (!inode_trylock(dst))
3151 			goto out;
3152 	}
3153 
3154 	if (f2fs_compressed_file(src) || f2fs_compressed_file(dst) ||
3155 		f2fs_is_pinned_file(src) || f2fs_is_pinned_file(dst)) {
3156 		ret = -EOPNOTSUPP;
3157 		goto out_unlock;
3158 	}
3159 
3160 	if (f2fs_is_atomic_file(src) || f2fs_is_atomic_file(dst)) {
3161 		ret = -EINVAL;
3162 		goto out_unlock;
3163 	}
3164 
3165 	ret = -EINVAL;
3166 	if (pos_in + len > src->i_size || pos_in + len < pos_in)
3167 		goto out_unlock;
3168 	if (len == 0)
3169 		olen = len = src->i_size - pos_in;
3170 	if (pos_in + len == src->i_size)
3171 		len = ALIGN(src->i_size, F2FS_BLKSIZE) - pos_in;
3172 	if (len == 0) {
3173 		ret = 0;
3174 		goto out_unlock;
3175 	}
3176 
3177 	dst_osize = dst->i_size;
3178 	if (pos_out + olen > dst->i_size)
3179 		dst_max_i_size = pos_out + olen;
3180 
3181 	/* verify the end result is block aligned */
3182 	if (!IS_ALIGNED(pos_in, F2FS_BLKSIZE) ||
3183 			!IS_ALIGNED(pos_in + len, F2FS_BLKSIZE) ||
3184 			!IS_ALIGNED(pos_out, F2FS_BLKSIZE))
3185 		goto out_unlock;
3186 
3187 	ret = f2fs_convert_inline_inode(src);
3188 	if (ret)
3189 		goto out_unlock;
3190 
3191 	ret = f2fs_convert_inline_inode(dst);
3192 	if (ret)
3193 		goto out_unlock;
3194 
3195 	/* write out all dirty pages from offset */
3196 	ret = filemap_write_and_wait_range(src->i_mapping,
3197 					pos_in, pos_in + len);
3198 	if (ret)
3199 		goto out_unlock;
3200 
3201 	ret = filemap_write_and_wait_range(dst->i_mapping,
3202 					pos_out, pos_out + len);
3203 	if (ret)
3204 		goto out_unlock;
3205 
3206 	f2fs_balance_fs(sbi, true);
3207 
3208 	f2fs_down_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
3209 	if (src != dst) {
3210 		ret = -EBUSY;
3211 		if (!f2fs_down_write_trylock(&F2FS_I(dst)->i_gc_rwsem[WRITE]))
3212 			goto out_src;
3213 	}
3214 
3215 	f2fs_lock_op(sbi, &lc);
3216 	ret = __exchange_data_block(src, dst, F2FS_BYTES_TO_BLK(pos_in),
3217 				F2FS_BYTES_TO_BLK(pos_out),
3218 				F2FS_BYTES_TO_BLK(len), false);
3219 
3220 	if (!ret) {
3221 		if (dst_max_i_size)
3222 			f2fs_i_size_write(dst, dst_max_i_size);
3223 		else if (dst_osize != dst->i_size)
3224 			f2fs_i_size_write(dst, dst_osize);
3225 	}
3226 	f2fs_unlock_op(sbi, &lc);
3227 
3228 	if (src != dst)
3229 		f2fs_up_write(&F2FS_I(dst)->i_gc_rwsem[WRITE]);
3230 out_src:
3231 	f2fs_up_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
3232 	if (ret)
3233 		goto out_unlock;
3234 
3235 	inode_set_mtime_to_ts(src, inode_set_ctime_current(src));
3236 	f2fs_mark_inode_dirty_sync(src, false);
3237 	if (src != dst) {
3238 		inode_set_mtime_to_ts(dst, inode_set_ctime_current(dst));
3239 		f2fs_mark_inode_dirty_sync(dst, false);
3240 	}
3241 	f2fs_update_time(sbi, REQ_TIME);
3242 
3243 out_unlock:
3244 	if (src != dst)
3245 		inode_unlock(dst);
3246 out:
3247 	inode_unlock(src);
3248 	return ret;
3249 }
3250 
3251 static int __f2fs_ioc_move_range(struct file *filp,
3252 				struct f2fs_move_range *range)
3253 {
3254 	int err;
3255 
3256 	if (!(filp->f_mode & FMODE_READ) ||
3257 			!(filp->f_mode & FMODE_WRITE))
3258 		return -EBADF;
3259 
3260 	CLASS(fd, dst)(range->dst_fd);
3261 	if (fd_empty(dst))
3262 		return -EBADF;
3263 
3264 	if (!(fd_file(dst)->f_mode & FMODE_WRITE))
3265 		return -EBADF;
3266 
3267 	err = mnt_want_write_file(filp);
3268 	if (err)
3269 		return err;
3270 
3271 	err = f2fs_move_file_range(filp, range->pos_in, fd_file(dst),
3272 					range->pos_out, range->len);
3273 
3274 	mnt_drop_write_file(filp);
3275 	return err;
3276 }
3277 
3278 static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
3279 {
3280 	struct f2fs_move_range range;
3281 
3282 	if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
3283 							sizeof(range)))
3284 		return -EFAULT;
3285 	return __f2fs_ioc_move_range(filp, &range);
3286 }
3287 
3288 static int f2fs_ioc_flush_device(struct file *filp, unsigned long arg)
3289 {
3290 	struct inode *inode = file_inode(filp);
3291 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3292 	struct sit_info *sm = SIT_I(sbi);
3293 	unsigned int start_segno = 0, end_segno = 0;
3294 	unsigned int dev_start_segno = 0, dev_end_segno = 0;
3295 	struct f2fs_flush_device range;
3296 	struct f2fs_gc_control gc_control = {
3297 			.init_gc_type = FG_GC,
3298 			.should_migrate_blocks = true,
3299 			.err_gc_skipped = true,
3300 			.nr_free_secs = 0 };
3301 	int ret;
3302 
3303 	if (!capable(CAP_SYS_ADMIN))
3304 		return -EPERM;
3305 
3306 	if (f2fs_readonly(sbi->sb))
3307 		return -EROFS;
3308 
3309 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
3310 		return -EINVAL;
3311 
3312 	if (copy_from_user(&range, (struct f2fs_flush_device __user *)arg,
3313 							sizeof(range)))
3314 		return -EFAULT;
3315 
3316 	if (!f2fs_is_multi_device(sbi) || sbi->s_ndevs - 1 <= range.dev_num ||
3317 			__is_large_section(sbi)) {
3318 		f2fs_warn(sbi, "Can't flush %u in %d for SEGS_PER_SEC %u != 1",
3319 			  range.dev_num, sbi->s_ndevs, SEGS_PER_SEC(sbi));
3320 		return -EINVAL;
3321 	}
3322 
3323 	ret = mnt_want_write_file(filp);
3324 	if (ret)
3325 		return ret;
3326 
3327 	if (range.dev_num != 0)
3328 		dev_start_segno = GET_SEGNO(sbi, FDEV(range.dev_num).start_blk);
3329 	dev_end_segno = GET_SEGNO(sbi, FDEV(range.dev_num).end_blk);
3330 
3331 	start_segno = sm->last_victim[FLUSH_DEVICE];
3332 	if (start_segno < dev_start_segno || start_segno >= dev_end_segno)
3333 		start_segno = dev_start_segno;
3334 	end_segno = min(start_segno + range.segments, dev_end_segno);
3335 
3336 	while (start_segno < end_segno) {
3337 		if (!f2fs_down_write_trylock_trace(&sbi->gc_lock, &gc_control.lc)) {
3338 			ret = -EBUSY;
3339 			goto out;
3340 		}
3341 		sm->last_victim[GC_CB] = end_segno + 1;
3342 		sm->last_victim[GC_GREEDY] = end_segno + 1;
3343 		sm->last_victim[ALLOC_NEXT] = end_segno + 1;
3344 
3345 		gc_control.victim_segno = start_segno;
3346 		stat_inc_gc_call_count(sbi, FOREGROUND);
3347 		ret = f2fs_gc(sbi, &gc_control);
3348 		if (ret == -EAGAIN)
3349 			ret = 0;
3350 		else if (ret < 0)
3351 			break;
3352 		start_segno++;
3353 	}
3354 out:
3355 	mnt_drop_write_file(filp);
3356 	return ret;
3357 }
3358 
3359 static int f2fs_ioc_get_features(struct file *filp, unsigned long arg)
3360 {
3361 	struct inode *inode = file_inode(filp);
3362 	u32 sb_feature = le32_to_cpu(F2FS_I_SB(inode)->raw_super->feature);
3363 
3364 	/* Must validate to set it with SQLite behavior in Android. */
3365 	sb_feature |= F2FS_FEATURE_ATOMIC_WRITE;
3366 
3367 	return put_user(sb_feature, (u32 __user *)arg);
3368 }
3369 
3370 #ifdef CONFIG_QUOTA
3371 int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid)
3372 {
3373 	struct dquot *transfer_to[MAXQUOTAS] = {};
3374 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3375 	struct super_block *sb = sbi->sb;
3376 	int err;
3377 
3378 	transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid));
3379 	if (IS_ERR(transfer_to[PRJQUOTA]))
3380 		return PTR_ERR(transfer_to[PRJQUOTA]);
3381 
3382 	err = __dquot_transfer(inode, transfer_to);
3383 	if (err)
3384 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
3385 	dqput(transfer_to[PRJQUOTA]);
3386 	return err;
3387 }
3388 
3389 static int f2fs_ioc_setproject(struct inode *inode, __u32 projid)
3390 {
3391 	struct f2fs_inode_info *fi = F2FS_I(inode);
3392 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3393 	struct f2fs_inode *ri = NULL;
3394 	struct f2fs_lock_context lc;
3395 	kprojid_t kprojid;
3396 	int err;
3397 
3398 	if (!f2fs_sb_has_project_quota(sbi)) {
3399 		if (projid != F2FS_DEF_PROJID)
3400 			return -EOPNOTSUPP;
3401 		else
3402 			return 0;
3403 	}
3404 
3405 	if (!f2fs_has_extra_attr(inode))
3406 		return -EOPNOTSUPP;
3407 
3408 	kprojid = make_kprojid(&init_user_ns, (projid_t)projid);
3409 
3410 	if (projid_eq(kprojid, fi->i_projid))
3411 		return 0;
3412 
3413 	err = -EPERM;
3414 	/* Is it quota file? Do not allow user to mess with it */
3415 	if (IS_NOQUOTA(inode))
3416 		return err;
3417 
3418 	if (!F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, i_projid))
3419 		return -EOVERFLOW;
3420 
3421 	err = f2fs_dquot_initialize(inode);
3422 	if (err)
3423 		return err;
3424 
3425 	f2fs_lock_op(sbi, &lc);
3426 	err = f2fs_transfer_project_quota(inode, kprojid);
3427 	if (err)
3428 		goto out_unlock;
3429 
3430 	fi->i_projid = kprojid;
3431 	inode_set_ctime_current(inode);
3432 	f2fs_mark_inode_dirty_sync(inode, true);
3433 out_unlock:
3434 	f2fs_unlock_op(sbi, &lc);
3435 	return err;
3436 }
3437 #else
3438 int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid)
3439 {
3440 	return 0;
3441 }
3442 
3443 static int f2fs_ioc_setproject(struct inode *inode, __u32 projid)
3444 {
3445 	if (projid != F2FS_DEF_PROJID)
3446 		return -EOPNOTSUPP;
3447 	return 0;
3448 }
3449 #endif
3450 
3451 int f2fs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
3452 {
3453 	struct inode *inode = d_inode(dentry);
3454 	struct f2fs_inode_info *fi = F2FS_I(inode);
3455 	u32 fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
3456 
3457 	if (IS_ENCRYPTED(inode))
3458 		fsflags |= FS_ENCRYPT_FL;
3459 	if (IS_VERITY(inode))
3460 		fsflags |= FS_VERITY_FL;
3461 	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
3462 		fsflags |= FS_INLINE_DATA_FL;
3463 	if (is_inode_flag_set(inode, FI_PIN_FILE))
3464 		fsflags |= FS_NOCOW_FL;
3465 
3466 	fileattr_fill_flags(fa, fsflags & F2FS_GETTABLE_FS_FL);
3467 
3468 	if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
3469 		fa->fsx_projid = from_kprojid(&init_user_ns, fi->i_projid);
3470 
3471 	return 0;
3472 }
3473 
3474 int f2fs_fileattr_set(struct mnt_idmap *idmap,
3475 		      struct dentry *dentry, struct file_kattr *fa)
3476 {
3477 	struct inode *inode = d_inode(dentry);
3478 	u32 fsflags = fa->flags, mask = F2FS_SETTABLE_FS_FL;
3479 	u32 iflags;
3480 	int err;
3481 
3482 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
3483 		return -EIO;
3484 	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
3485 		return -ENOSPC;
3486 	if (fsflags & ~F2FS_GETTABLE_FS_FL)
3487 		return -EOPNOTSUPP;
3488 	fsflags &= F2FS_SETTABLE_FS_FL;
3489 	if (!fa->flags_valid)
3490 		mask &= FS_COMMON_FL;
3491 
3492 	iflags = f2fs_fsflags_to_iflags(fsflags);
3493 	if (f2fs_mask_flags(inode->i_mode, iflags) != iflags)
3494 		return -EOPNOTSUPP;
3495 
3496 	err = f2fs_setflags_common(inode, iflags, f2fs_fsflags_to_iflags(mask));
3497 	if (!err)
3498 		err = f2fs_ioc_setproject(inode, fa->fsx_projid);
3499 
3500 	return err;
3501 }
3502 
3503 int f2fs_pin_file_control(struct inode *inode, bool inc)
3504 {
3505 	struct f2fs_inode_info *fi = F2FS_I(inode);
3506 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3507 
3508 	if (IS_DEVICE_ALIASING(inode))
3509 		return -EINVAL;
3510 
3511 	if (fi->i_gc_failures >= sbi->gc_pin_file_threshold) {
3512 		f2fs_warn(sbi, "%s: Enable GC = ino %llx after %x GC trials",
3513 			  __func__, inode->i_ino, fi->i_gc_failures);
3514 		clear_inode_flag(inode, FI_PIN_FILE);
3515 		return -EAGAIN;
3516 	}
3517 
3518 	/* Use i_gc_failures for normal file as a risk signal. */
3519 	if (inc)
3520 		f2fs_i_gc_failures_write(inode, fi->i_gc_failures + 1);
3521 
3522 	return 0;
3523 }
3524 
3525 static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
3526 {
3527 	struct inode *inode = file_inode(filp);
3528 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3529 	__u32 pin;
3530 	int ret = 0;
3531 
3532 	if (get_user(pin, (__u32 __user *)arg))
3533 		return -EFAULT;
3534 
3535 	if (!S_ISREG(inode->i_mode))
3536 		return -EINVAL;
3537 
3538 	if (f2fs_readonly(sbi->sb))
3539 		return -EROFS;
3540 
3541 	if (!pin && IS_DEVICE_ALIASING(inode))
3542 		return -EOPNOTSUPP;
3543 
3544 	ret = mnt_want_write_file(filp);
3545 	if (ret)
3546 		return ret;
3547 
3548 	inode_lock(inode);
3549 
3550 	if (f2fs_is_atomic_file(inode)) {
3551 		ret = -EINVAL;
3552 		goto out;
3553 	}
3554 
3555 	if (!pin) {
3556 		clear_inode_flag(inode, FI_PIN_FILE);
3557 		f2fs_i_gc_failures_write(inode, 0);
3558 		goto done;
3559 	} else if (f2fs_is_pinned_file(inode)) {
3560 		goto done;
3561 	}
3562 
3563 	if (F2FS_HAS_BLOCKS(inode)) {
3564 		ret = -EFBIG;
3565 		goto out;
3566 	}
3567 
3568 	/* Let's allow file pinning on zoned device. */
3569 	if (!f2fs_sb_has_blkzoned(sbi) &&
3570 	    f2fs_should_update_outplace(inode, NULL)) {
3571 		ret = -EINVAL;
3572 		goto out;
3573 	}
3574 
3575 	if (f2fs_pin_file_control(inode, false)) {
3576 		ret = -EAGAIN;
3577 		goto out;
3578 	}
3579 
3580 	ret = f2fs_convert_inline_inode(inode);
3581 	if (ret)
3582 		goto out;
3583 
3584 	if (!f2fs_disable_compressed_file(inode)) {
3585 		ret = -EOPNOTSUPP;
3586 		goto out;
3587 	}
3588 
3589 	set_inode_flag(inode, FI_PIN_FILE);
3590 	ret = F2FS_I(inode)->i_gc_failures;
3591 done:
3592 	f2fs_update_time(sbi, REQ_TIME);
3593 out:
3594 	inode_unlock(inode);
3595 	mnt_drop_write_file(filp);
3596 	return ret;
3597 }
3598 
3599 static int f2fs_ioc_get_pin_file(struct file *filp, unsigned long arg)
3600 {
3601 	struct inode *inode = file_inode(filp);
3602 	__u32 pin = 0;
3603 
3604 	if (is_inode_flag_set(inode, FI_PIN_FILE))
3605 		pin = F2FS_I(inode)->i_gc_failures;
3606 	return put_user(pin, (u32 __user *)arg);
3607 }
3608 
3609 static int f2fs_ioc_get_dev_alias_file(struct file *filp, unsigned long arg)
3610 {
3611 	return put_user(IS_DEVICE_ALIASING(file_inode(filp)) ? 1 : 0,
3612 			(u32 __user *)arg);
3613 }
3614 
3615 static int f2fs_ioc_io_prio(struct file *filp, unsigned long arg)
3616 {
3617 	struct inode *inode = file_inode(filp);
3618 	__u32 level;
3619 
3620 	if (get_user(level, (__u32 __user *)arg))
3621 		return -EFAULT;
3622 
3623 	if (!S_ISREG(inode->i_mode) || level >= F2FS_IOPRIO_MAX)
3624 		return -EINVAL;
3625 
3626 	inode_lock(inode);
3627 	F2FS_I(inode)->ioprio_hint = level;
3628 	inode_unlock(inode);
3629 	return 0;
3630 }
3631 
3632 int f2fs_precache_extents(struct inode *inode)
3633 {
3634 	struct f2fs_inode_info *fi = F2FS_I(inode);
3635 	struct f2fs_map_blocks map;
3636 	pgoff_t m_next_extent;
3637 	loff_t end;
3638 	int err;
3639 
3640 	if (is_inode_flag_set(inode, FI_NO_EXTENT))
3641 		return -EOPNOTSUPP;
3642 
3643 	map.m_lblk = 0;
3644 	map.m_pblk = 0;
3645 	map.m_next_pgofs = NULL;
3646 	map.m_next_extent = &m_next_extent;
3647 	map.m_seg_type = NO_CHECK_TYPE;
3648 	map.m_may_create = false;
3649 	end = F2FS_BLK_ALIGN(i_size_read(inode));
3650 
3651 	while (map.m_lblk < end) {
3652 		map.m_len = end - map.m_lblk;
3653 
3654 		f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
3655 		err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRECACHE);
3656 		f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
3657 		if (err || !map.m_len)
3658 			return err;
3659 
3660 		map.m_lblk = m_next_extent;
3661 	}
3662 
3663 	return 0;
3664 }
3665 
3666 static int f2fs_ioc_precache_extents(struct file *filp)
3667 {
3668 	return f2fs_precache_extents(file_inode(filp));
3669 }
3670 
3671 static int f2fs_ioc_resize_fs(struct file *filp, unsigned long arg)
3672 {
3673 	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
3674 	__u64 block_count;
3675 
3676 	if (!capable(CAP_SYS_ADMIN))
3677 		return -EPERM;
3678 
3679 	if (f2fs_readonly(sbi->sb))
3680 		return -EROFS;
3681 
3682 	if (copy_from_user(&block_count, (void __user *)arg,
3683 			   sizeof(block_count)))
3684 		return -EFAULT;
3685 
3686 	return f2fs_resize_fs(filp, block_count);
3687 }
3688 
3689 static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
3690 {
3691 	struct inode *inode = file_inode(filp);
3692 
3693 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
3694 
3695 	if (!f2fs_sb_has_verity(F2FS_I_SB(inode))) {
3696 		f2fs_warn(F2FS_I_SB(inode),
3697 			  "Can't enable fs-verity on inode %llu: the verity feature is not enabled on this filesystem",
3698 			  inode->i_ino);
3699 		return -EOPNOTSUPP;
3700 	}
3701 
3702 	return fsverity_ioctl_enable(filp, (const void __user *)arg);
3703 }
3704 
3705 static int f2fs_ioc_measure_verity(struct file *filp, unsigned long arg)
3706 {
3707 	if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
3708 		return -EOPNOTSUPP;
3709 
3710 	return fsverity_ioctl_measure(filp, (void __user *)arg);
3711 }
3712 
3713 static int f2fs_ioc_read_verity_metadata(struct file *filp, unsigned long arg)
3714 {
3715 	if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
3716 		return -EOPNOTSUPP;
3717 
3718 	return fsverity_ioctl_read_metadata(filp, (const void __user *)arg);
3719 }
3720 
3721 static int f2fs_ioc_getfslabel(struct file *filp, unsigned long arg)
3722 {
3723 	struct inode *inode = file_inode(filp);
3724 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3725 	char *vbuf;
3726 	int count;
3727 	int err = 0;
3728 
3729 	vbuf = f2fs_kzalloc(sbi, MAX_VOLUME_NAME, GFP_KERNEL);
3730 	if (!vbuf)
3731 		return -ENOMEM;
3732 
3733 	f2fs_down_read(&sbi->sb_lock);
3734 	count = utf16s_to_utf8s(sbi->raw_super->volume_name,
3735 			ARRAY_SIZE(sbi->raw_super->volume_name),
3736 			UTF16_LITTLE_ENDIAN, vbuf, MAX_VOLUME_NAME);
3737 	f2fs_up_read(&sbi->sb_lock);
3738 
3739 	if (copy_to_user((char __user *)arg, vbuf,
3740 				min(FSLABEL_MAX, count)))
3741 		err = -EFAULT;
3742 
3743 	kfree(vbuf);
3744 	return err;
3745 }
3746 
3747 static int f2fs_ioc_setfslabel(struct file *filp, unsigned long arg)
3748 {
3749 	struct inode *inode = file_inode(filp);
3750 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3751 	char *vbuf;
3752 	int err = 0;
3753 
3754 	if (!capable(CAP_SYS_ADMIN))
3755 		return -EPERM;
3756 
3757 	vbuf = strndup_user((const char __user *)arg, FSLABEL_MAX);
3758 	if (IS_ERR(vbuf))
3759 		return PTR_ERR(vbuf);
3760 
3761 	err = mnt_want_write_file(filp);
3762 	if (err)
3763 		goto out;
3764 
3765 	f2fs_down_write(&sbi->sb_lock);
3766 
3767 	memset(sbi->raw_super->volume_name, 0,
3768 			sizeof(sbi->raw_super->volume_name));
3769 	utf8s_to_utf16s(vbuf, strlen(vbuf), UTF16_LITTLE_ENDIAN,
3770 			sbi->raw_super->volume_name,
3771 			ARRAY_SIZE(sbi->raw_super->volume_name));
3772 
3773 	err = f2fs_commit_super(sbi, false);
3774 
3775 	f2fs_up_write(&sbi->sb_lock);
3776 
3777 	mnt_drop_write_file(filp);
3778 out:
3779 	kfree(vbuf);
3780 	return err;
3781 }
3782 
3783 static int f2fs_get_compress_blocks(struct inode *inode, __u64 *blocks)
3784 {
3785 	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
3786 		return -EOPNOTSUPP;
3787 
3788 	if (!f2fs_compressed_file(inode))
3789 		return -EINVAL;
3790 
3791 	*blocks = atomic_read(&F2FS_I(inode)->i_compr_blocks);
3792 
3793 	return 0;
3794 }
3795 
3796 static int f2fs_ioc_get_compress_blocks(struct file *filp, unsigned long arg)
3797 {
3798 	struct inode *inode = file_inode(filp);
3799 	__u64 blocks;
3800 	int ret;
3801 
3802 	ret = f2fs_get_compress_blocks(inode, &blocks);
3803 	if (ret < 0)
3804 		return ret;
3805 
3806 	return put_user(blocks, (u64 __user *)arg);
3807 }
3808 
3809 static int release_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
3810 {
3811 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
3812 	unsigned int released_blocks = 0;
3813 	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
3814 	block_t blkaddr;
3815 	int i;
3816 
3817 	for (i = 0; i < count; i++) {
3818 		blkaddr = data_blkaddr(dn->inode, dn->node_folio,
3819 						dn->ofs_in_node + i);
3820 
3821 		if (!__is_valid_data_blkaddr(blkaddr))
3822 			continue;
3823 		if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
3824 					DATA_GENERIC_ENHANCE)))
3825 			return -EFSCORRUPTED;
3826 	}
3827 
3828 	while (count) {
3829 		int compr_blocks = 0;
3830 
3831 		for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
3832 			blkaddr = f2fs_data_blkaddr(dn);
3833 
3834 			if (i == 0) {
3835 				if (blkaddr == COMPRESS_ADDR)
3836 					continue;
3837 				dn->ofs_in_node += cluster_size;
3838 				goto next;
3839 			}
3840 
3841 			if (__is_valid_data_blkaddr(blkaddr))
3842 				compr_blocks++;
3843 
3844 			if (blkaddr != NEW_ADDR)
3845 				continue;
3846 
3847 			f2fs_set_data_blkaddr(dn, NULL_ADDR);
3848 		}
3849 
3850 		f2fs_i_compr_blocks_update(dn->inode, compr_blocks, false);
3851 		dec_valid_block_count(sbi, dn->inode,
3852 					cluster_size - compr_blocks);
3853 
3854 		released_blocks += cluster_size - compr_blocks;
3855 next:
3856 		count -= cluster_size;
3857 	}
3858 
3859 	return released_blocks;
3860 }
3861 
3862 static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
3863 {
3864 	struct inode *inode = file_inode(filp);
3865 	struct f2fs_inode_info *fi = F2FS_I(inode);
3866 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3867 	struct f2fs_lock_context lc;
3868 	pgoff_t page_idx = 0, last_idx;
3869 	unsigned int released_blocks = 0;
3870 	int ret;
3871 	int writecount;
3872 
3873 	if (!f2fs_sb_has_compression(sbi))
3874 		return -EOPNOTSUPP;
3875 
3876 	if (f2fs_readonly(sbi->sb))
3877 		return -EROFS;
3878 
3879 	ret = mnt_want_write_file(filp);
3880 	if (ret)
3881 		return ret;
3882 
3883 	f2fs_balance_fs(sbi, true);
3884 
3885 	inode_lock(inode);
3886 
3887 	writecount = atomic_read(&inode->i_writecount);
3888 	if ((filp->f_mode & FMODE_WRITE && writecount != 1) ||
3889 			(!(filp->f_mode & FMODE_WRITE) && writecount)) {
3890 		ret = -EBUSY;
3891 		goto out;
3892 	}
3893 
3894 	if (!f2fs_compressed_file(inode) ||
3895 		is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
3896 		ret = -EINVAL;
3897 		goto out;
3898 	}
3899 
3900 	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
3901 	if (ret)
3902 		goto out;
3903 
3904 	if (!atomic_read(&fi->i_compr_blocks)) {
3905 		ret = -EPERM;
3906 		goto out;
3907 	}
3908 
3909 	set_inode_flag(inode, FI_COMPRESS_RELEASED);
3910 	inode_set_ctime_current(inode);
3911 	f2fs_mark_inode_dirty_sync(inode, true);
3912 
3913 	f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
3914 	filemap_invalidate_lock(inode->i_mapping);
3915 
3916 	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
3917 
3918 	while (page_idx < last_idx) {
3919 		struct dnode_of_data dn;
3920 		pgoff_t end_offset, count;
3921 
3922 		f2fs_lock_op(sbi, &lc);
3923 
3924 		set_new_dnode(&dn, inode, NULL, NULL, 0);
3925 		ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
3926 		if (ret) {
3927 			f2fs_unlock_op(sbi, &lc);
3928 			if (ret == -ENOENT) {
3929 				page_idx = f2fs_get_next_page_offset(&dn,
3930 								page_idx);
3931 				ret = 0;
3932 				continue;
3933 			}
3934 			break;
3935 		}
3936 
3937 		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
3938 		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
3939 		count = round_up(count, fi->i_cluster_size);
3940 
3941 		ret = release_compress_blocks(&dn, count);
3942 
3943 		f2fs_put_dnode(&dn);
3944 
3945 		f2fs_unlock_op(sbi, &lc);
3946 
3947 		if (ret < 0)
3948 			break;
3949 
3950 		page_idx += count;
3951 		released_blocks += ret;
3952 	}
3953 
3954 	filemap_invalidate_unlock(inode->i_mapping);
3955 	f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
3956 out:
3957 	if (released_blocks)
3958 		f2fs_update_time(sbi, REQ_TIME);
3959 	inode_unlock(inode);
3960 
3961 	mnt_drop_write_file(filp);
3962 
3963 	if (ret >= 0) {
3964 		ret = put_user(released_blocks, (u64 __user *)arg);
3965 	} else if (released_blocks &&
3966 			atomic_read(&fi->i_compr_blocks)) {
3967 		set_sbi_flag(sbi, SBI_NEED_FSCK);
3968 		f2fs_warn(sbi, "%s: partial blocks were released i_ino=%llx "
3969 			"iblocks=%llu, released=%u, compr_blocks=%u, "
3970 			"run fsck to fix.",
3971 			__func__, inode->i_ino, inode->i_blocks,
3972 			released_blocks,
3973 			atomic_read(&fi->i_compr_blocks));
3974 	}
3975 
3976 	return ret;
3977 }
3978 
3979 static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count,
3980 		unsigned int *reserved_blocks)
3981 {
3982 	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
3983 	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
3984 	block_t blkaddr;
3985 	int i;
3986 
3987 	for (i = 0; i < count; i++) {
3988 		blkaddr = data_blkaddr(dn->inode, dn->node_folio,
3989 						dn->ofs_in_node + i);
3990 
3991 		if (!__is_valid_data_blkaddr(blkaddr))
3992 			continue;
3993 		if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
3994 					DATA_GENERIC_ENHANCE)))
3995 			return -EFSCORRUPTED;
3996 	}
3997 
3998 	while (count) {
3999 		int compr_blocks = 0;
4000 		blkcnt_t reserved = 0;
4001 		blkcnt_t to_reserved;
4002 		int ret;
4003 
4004 		for (i = 0; i < cluster_size; i++) {
4005 			blkaddr = data_blkaddr(dn->inode, dn->node_folio,
4006 						dn->ofs_in_node + i);
4007 
4008 			if (i == 0) {
4009 				if (blkaddr != COMPRESS_ADDR) {
4010 					dn->ofs_in_node += cluster_size;
4011 					goto next;
4012 				}
4013 				continue;
4014 			}
4015 
4016 			/*
4017 			 * compressed cluster was not released due to it
4018 			 * fails in release_compress_blocks(), so NEW_ADDR
4019 			 * is a possible case.
4020 			 */
4021 			if (blkaddr == NEW_ADDR) {
4022 				reserved++;
4023 				continue;
4024 			}
4025 			if (__is_valid_data_blkaddr(blkaddr)) {
4026 				compr_blocks++;
4027 				continue;
4028 			}
4029 		}
4030 
4031 		to_reserved = cluster_size - compr_blocks - reserved;
4032 
4033 		/* for the case all blocks in cluster were reserved */
4034 		if (reserved && to_reserved == 1) {
4035 			dn->ofs_in_node += cluster_size;
4036 			goto next;
4037 		}
4038 
4039 		ret = inc_valid_block_count(sbi, dn->inode,
4040 						&to_reserved, false);
4041 		if (unlikely(ret))
4042 			return ret;
4043 
4044 		for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
4045 			if (f2fs_data_blkaddr(dn) == NULL_ADDR)
4046 				f2fs_set_data_blkaddr(dn, NEW_ADDR);
4047 		}
4048 
4049 		f2fs_i_compr_blocks_update(dn->inode, compr_blocks, true);
4050 
4051 		*reserved_blocks += to_reserved;
4052 next:
4053 		count -= cluster_size;
4054 	}
4055 
4056 	return 0;
4057 }
4058 
4059 static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
4060 {
4061 	struct inode *inode = file_inode(filp);
4062 	struct f2fs_inode_info *fi = F2FS_I(inode);
4063 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4064 	pgoff_t page_idx = 0, last_idx;
4065 	unsigned int reserved_blocks = 0;
4066 	int ret;
4067 
4068 	if (!f2fs_sb_has_compression(sbi))
4069 		return -EOPNOTSUPP;
4070 
4071 	if (f2fs_readonly(sbi->sb))
4072 		return -EROFS;
4073 
4074 	ret = mnt_want_write_file(filp);
4075 	if (ret)
4076 		return ret;
4077 
4078 	f2fs_balance_fs(sbi, true);
4079 
4080 	inode_lock(inode);
4081 
4082 	if (!f2fs_compressed_file(inode) ||
4083 		!is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
4084 		ret = -EINVAL;
4085 		goto unlock_inode;
4086 	}
4087 
4088 	if (atomic_read(&fi->i_compr_blocks))
4089 		goto unlock_inode;
4090 
4091 	f2fs_down_write(&fi->i_gc_rwsem[WRITE]);
4092 	filemap_invalidate_lock(inode->i_mapping);
4093 
4094 	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
4095 
4096 	while (page_idx < last_idx) {
4097 		struct dnode_of_data dn;
4098 		struct f2fs_lock_context lc;
4099 		pgoff_t end_offset, count;
4100 
4101 		f2fs_lock_op(sbi, &lc);
4102 
4103 		set_new_dnode(&dn, inode, NULL, NULL, 0);
4104 		ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
4105 		if (ret) {
4106 			f2fs_unlock_op(sbi, &lc);
4107 			if (ret == -ENOENT) {
4108 				page_idx = f2fs_get_next_page_offset(&dn,
4109 								page_idx);
4110 				ret = 0;
4111 				continue;
4112 			}
4113 			break;
4114 		}
4115 
4116 		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
4117 		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
4118 		count = round_up(count, fi->i_cluster_size);
4119 
4120 		ret = reserve_compress_blocks(&dn, count, &reserved_blocks);
4121 
4122 		f2fs_put_dnode(&dn);
4123 
4124 		f2fs_unlock_op(sbi, &lc);
4125 
4126 		if (ret < 0)
4127 			break;
4128 
4129 		page_idx += count;
4130 	}
4131 
4132 	filemap_invalidate_unlock(inode->i_mapping);
4133 	f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
4134 
4135 	if (!ret) {
4136 		clear_inode_flag(inode, FI_COMPRESS_RELEASED);
4137 		inode_set_ctime_current(inode);
4138 		f2fs_mark_inode_dirty_sync(inode, true);
4139 	}
4140 unlock_inode:
4141 	if (reserved_blocks)
4142 		f2fs_update_time(sbi, REQ_TIME);
4143 	inode_unlock(inode);
4144 	mnt_drop_write_file(filp);
4145 
4146 	if (!ret) {
4147 		ret = put_user(reserved_blocks, (u64 __user *)arg);
4148 	} else if (reserved_blocks &&
4149 			atomic_read(&fi->i_compr_blocks)) {
4150 		set_sbi_flag(sbi, SBI_NEED_FSCK);
4151 		f2fs_warn(sbi, "%s: partial blocks were reserved i_ino=%llx "
4152 			"iblocks=%llu, reserved=%u, compr_blocks=%u, "
4153 			"run fsck to fix.",
4154 			__func__, inode->i_ino, inode->i_blocks,
4155 			reserved_blocks,
4156 			atomic_read(&fi->i_compr_blocks));
4157 	}
4158 
4159 	return ret;
4160 }
4161 
4162 static int f2fs_secure_erase(struct block_device *bdev, struct inode *inode,
4163 		pgoff_t off, block_t block, block_t len, u32 flags)
4164 {
4165 	sector_t sector = SECTOR_FROM_BLOCK(block);
4166 	sector_t nr_sects = SECTOR_FROM_BLOCK(len);
4167 	int ret = 0;
4168 
4169 	if (flags & F2FS_TRIM_FILE_DISCARD) {
4170 		if (bdev_max_secure_erase_sectors(bdev))
4171 			ret = blkdev_issue_secure_erase(bdev, sector, nr_sects,
4172 					GFP_NOFS);
4173 		else
4174 			ret = blkdev_issue_discard(bdev, sector, nr_sects,
4175 					GFP_NOFS);
4176 	}
4177 
4178 	if (!ret && (flags & F2FS_TRIM_FILE_ZEROOUT)) {
4179 		if (IS_ENCRYPTED(inode))
4180 			ret = fscrypt_zeroout_range(inode,
4181 					(loff_t)off << inode->i_blkbits, sector,
4182 					(u64)len << inode->i_blkbits);
4183 		else
4184 			ret = blkdev_issue_zeroout(bdev, sector, nr_sects,
4185 					GFP_NOFS, 0);
4186 	}
4187 
4188 	return ret;
4189 }
4190 
4191 static int f2fs_sec_trim_file(struct file *filp, unsigned long arg)
4192 {
4193 	struct inode *inode = file_inode(filp);
4194 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4195 	struct address_space *mapping = inode->i_mapping;
4196 	struct block_device *prev_bdev = NULL;
4197 	struct f2fs_sectrim_range range;
4198 	pgoff_t index, pg_end, prev_index = 0;
4199 	block_t prev_block = 0, len = 0;
4200 	loff_t end_addr;
4201 	bool to_end = false;
4202 	int ret = 0;
4203 
4204 	if (!(filp->f_mode & FMODE_WRITE))
4205 		return -EBADF;
4206 
4207 	if (copy_from_user(&range, (struct f2fs_sectrim_range __user *)arg,
4208 				sizeof(range)))
4209 		return -EFAULT;
4210 
4211 	if (range.flags == 0 || (range.flags & ~F2FS_TRIM_FILE_MASK) ||
4212 			!S_ISREG(inode->i_mode))
4213 		return -EINVAL;
4214 
4215 	if (((range.flags & F2FS_TRIM_FILE_DISCARD) &&
4216 			!f2fs_hw_support_discard(sbi)) ||
4217 			((range.flags & F2FS_TRIM_FILE_ZEROOUT) &&
4218 			 IS_ENCRYPTED(inode) && f2fs_is_multi_device(sbi)))
4219 		return -EOPNOTSUPP;
4220 
4221 	ret = mnt_want_write_file(filp);
4222 	if (ret)
4223 		return ret;
4224 	inode_lock(inode);
4225 
4226 	if (f2fs_is_atomic_file(inode) || f2fs_compressed_file(inode) ||
4227 			range.start >= inode->i_size) {
4228 		ret = -EINVAL;
4229 		goto err;
4230 	}
4231 
4232 	if (range.len == 0)
4233 		goto err;
4234 
4235 	if (inode->i_size - range.start > range.len) {
4236 		end_addr = range.start + range.len;
4237 	} else {
4238 		end_addr = range.len == (u64)-1 ?
4239 			sbi->sb->s_maxbytes : inode->i_size;
4240 		to_end = true;
4241 	}
4242 
4243 	if (!IS_ALIGNED(range.start, F2FS_BLKSIZE) ||
4244 			(!to_end && !IS_ALIGNED(end_addr, F2FS_BLKSIZE))) {
4245 		ret = -EINVAL;
4246 		goto err;
4247 	}
4248 
4249 	index = F2FS_BYTES_TO_BLK(range.start);
4250 	pg_end = DIV_ROUND_UP(end_addr, F2FS_BLKSIZE);
4251 
4252 	ret = f2fs_convert_inline_inode(inode);
4253 	if (ret)
4254 		goto err;
4255 
4256 	f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
4257 	filemap_invalidate_lock(mapping);
4258 
4259 	ret = filemap_write_and_wait_range(mapping, range.start,
4260 			to_end ? LLONG_MAX : end_addr - 1);
4261 	if (ret)
4262 		goto out;
4263 
4264 	truncate_inode_pages_range(mapping, range.start,
4265 			to_end ? -1 : end_addr - 1);
4266 
4267 	while (index < pg_end) {
4268 		struct dnode_of_data dn;
4269 		pgoff_t end_offset, count;
4270 		int i;
4271 
4272 		set_new_dnode(&dn, inode, NULL, NULL, 0);
4273 		ret = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
4274 		if (ret) {
4275 			if (ret == -ENOENT) {
4276 				index = f2fs_get_next_page_offset(&dn, index);
4277 				continue;
4278 			}
4279 			goto out;
4280 		}
4281 
4282 		end_offset = ADDRS_PER_PAGE(dn.node_folio, inode);
4283 		count = min(end_offset - dn.ofs_in_node, pg_end - index);
4284 		for (i = 0; i < count; i++, index++, dn.ofs_in_node++) {
4285 			struct block_device *cur_bdev;
4286 			block_t blkaddr = f2fs_data_blkaddr(&dn);
4287 
4288 			if (!__is_valid_data_blkaddr(blkaddr))
4289 				continue;
4290 
4291 			if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
4292 						DATA_GENERIC_ENHANCE)) {
4293 				ret = -EFSCORRUPTED;
4294 				f2fs_put_dnode(&dn);
4295 				goto out;
4296 			}
4297 
4298 			cur_bdev = f2fs_target_device(sbi, blkaddr, NULL);
4299 			if (f2fs_is_multi_device(sbi)) {
4300 				int di = f2fs_target_device_index(sbi, blkaddr);
4301 
4302 				blkaddr -= FDEV(di).start_blk;
4303 			}
4304 
4305 			if (len) {
4306 				if (prev_bdev == cur_bdev &&
4307 						index == prev_index + len &&
4308 						blkaddr == prev_block + len) {
4309 					len++;
4310 				} else {
4311 					ret = f2fs_secure_erase(prev_bdev,
4312 						inode, prev_index, prev_block,
4313 						len, range.flags);
4314 					if (ret) {
4315 						f2fs_put_dnode(&dn);
4316 						goto out;
4317 					}
4318 
4319 					len = 0;
4320 				}
4321 			}
4322 
4323 			if (!len) {
4324 				prev_bdev = cur_bdev;
4325 				prev_index = index;
4326 				prev_block = blkaddr;
4327 				len = 1;
4328 			}
4329 		}
4330 
4331 		f2fs_put_dnode(&dn);
4332 
4333 		if (fatal_signal_pending(current)) {
4334 			ret = -EINTR;
4335 			goto out;
4336 		}
4337 		cond_resched();
4338 	}
4339 
4340 	if (len)
4341 		ret = f2fs_secure_erase(prev_bdev, inode, prev_index,
4342 				prev_block, len, range.flags);
4343 	f2fs_update_time(sbi, REQ_TIME);
4344 out:
4345 	filemap_invalidate_unlock(mapping);
4346 	f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
4347 err:
4348 	inode_unlock(inode);
4349 	mnt_drop_write_file(filp);
4350 
4351 	return ret;
4352 }
4353 
4354 static int f2fs_ioc_get_compress_option(struct file *filp, unsigned long arg)
4355 {
4356 	struct inode *inode = file_inode(filp);
4357 	struct f2fs_comp_option option;
4358 
4359 	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
4360 		return -EOPNOTSUPP;
4361 
4362 	inode_lock_shared(inode);
4363 
4364 	if (!f2fs_compressed_file(inode)) {
4365 		inode_unlock_shared(inode);
4366 		return -ENODATA;
4367 	}
4368 
4369 	option.algorithm = F2FS_I(inode)->i_compress_algorithm;
4370 	option.log_cluster_size = F2FS_I(inode)->i_log_cluster_size;
4371 
4372 	inode_unlock_shared(inode);
4373 
4374 	if (copy_to_user((struct f2fs_comp_option __user *)arg, &option,
4375 				sizeof(option)))
4376 		return -EFAULT;
4377 
4378 	return 0;
4379 }
4380 
4381 static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg)
4382 {
4383 	struct inode *inode = file_inode(filp);
4384 	struct f2fs_inode_info *fi = F2FS_I(inode);
4385 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4386 	struct f2fs_comp_option option;
4387 	int ret = 0;
4388 
4389 	if (!f2fs_sb_has_compression(sbi))
4390 		return -EOPNOTSUPP;
4391 
4392 	if (!(filp->f_mode & FMODE_WRITE))
4393 		return -EBADF;
4394 
4395 	if (copy_from_user(&option, (struct f2fs_comp_option __user *)arg,
4396 				sizeof(option)))
4397 		return -EFAULT;
4398 
4399 	if (option.log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
4400 		option.log_cluster_size > MAX_COMPRESS_LOG_SIZE ||
4401 		option.algorithm >= COMPRESS_MAX)
4402 		return -EINVAL;
4403 
4404 	ret = mnt_want_write_file(filp);
4405 	if (ret)
4406 		return ret;
4407 	inode_lock(inode);
4408 
4409 	f2fs_down_write(&F2FS_I(inode)->i_sem);
4410 	if (!f2fs_compressed_file(inode)) {
4411 		ret = -EINVAL;
4412 		goto out;
4413 	}
4414 
4415 	if (f2fs_is_mmap_file(inode) || get_dirty_pages(inode)) {
4416 		ret = -EBUSY;
4417 		goto out;
4418 	}
4419 
4420 	if (F2FS_HAS_BLOCKS(inode)) {
4421 		ret = -EFBIG;
4422 		goto out;
4423 	}
4424 
4425 	fi->i_compress_algorithm = option.algorithm;
4426 	fi->i_log_cluster_size = option.log_cluster_size;
4427 	fi->i_cluster_size = BIT(option.log_cluster_size);
4428 	/* Set default level */
4429 	if (fi->i_compress_algorithm == COMPRESS_ZSTD)
4430 		fi->i_compress_level = F2FS_ZSTD_DEFAULT_CLEVEL;
4431 	else
4432 		fi->i_compress_level = 0;
4433 	/* Adjust mount option level */
4434 	if (option.algorithm == F2FS_OPTION(sbi).compress_algorithm &&
4435 	    F2FS_OPTION(sbi).compress_level)
4436 		fi->i_compress_level = F2FS_OPTION(sbi).compress_level;
4437 	f2fs_mark_inode_dirty_sync(inode, true);
4438 
4439 	if (!f2fs_is_compress_backend_ready(inode))
4440 		f2fs_warn(sbi, "compression algorithm is successfully set, "
4441 			"but current kernel doesn't support this algorithm.");
4442 out:
4443 	f2fs_up_write(&fi->i_sem);
4444 	inode_unlock(inode);
4445 	mnt_drop_write_file(filp);
4446 
4447 	return ret;
4448 }
4449 
4450 static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
4451 {
4452 	DEFINE_READAHEAD(ractl, NULL, NULL, inode->i_mapping, page_idx);
4453 	struct address_space *mapping = inode->i_mapping;
4454 	struct folio *folio;
4455 	pgoff_t redirty_idx = page_idx;
4456 	int page_len = 0, ret = 0;
4457 
4458 	filemap_invalidate_lock_shared(mapping);
4459 	page_cache_ra_unbounded(&ractl, len, 0);
4460 	filemap_invalidate_unlock_shared(mapping);
4461 
4462 	do {
4463 		folio = read_cache_folio(mapping, page_idx, NULL, NULL);
4464 		if (IS_ERR(folio)) {
4465 			ret = PTR_ERR(folio);
4466 			break;
4467 		}
4468 		page_len += folio_nr_pages(folio) - (page_idx - folio->index);
4469 		page_idx = folio_next_index(folio);
4470 	} while (page_len < len);
4471 
4472 	do {
4473 		folio = filemap_lock_folio(mapping, redirty_idx);
4474 
4475 		/* It will never fail, when folio has pinned above */
4476 		f2fs_bug_on(F2FS_I_SB(inode), IS_ERR(folio));
4477 
4478 		f2fs_folio_wait_writeback(folio, DATA, true, true);
4479 
4480 		folio_mark_dirty(folio);
4481 		folio_set_f2fs_gcing(folio);
4482 		redirty_idx = folio_next_index(folio);
4483 		folio_unlock(folio);
4484 		folio_put_refs(folio, 2);
4485 	} while (redirty_idx < page_idx);
4486 
4487 	return ret;
4488 }
4489 
4490 static int f2fs_ioc_decompress_file(struct file *filp)
4491 {
4492 	struct inode *inode = file_inode(filp);
4493 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4494 	struct f2fs_inode_info *fi = F2FS_I(inode);
4495 	pgoff_t page_idx = 0, last_idx, cluster_idx;
4496 	int ret;
4497 
4498 	if (!f2fs_sb_has_compression(sbi) ||
4499 			F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
4500 		return -EOPNOTSUPP;
4501 
4502 	if (!(filp->f_mode & FMODE_WRITE))
4503 		return -EBADF;
4504 
4505 	f2fs_balance_fs(sbi, true);
4506 
4507 	ret = mnt_want_write_file(filp);
4508 	if (ret)
4509 		return ret;
4510 	inode_lock(inode);
4511 
4512 	if (!f2fs_is_compress_backend_ready(inode)) {
4513 		ret = -EOPNOTSUPP;
4514 		goto out;
4515 	}
4516 
4517 	if (!f2fs_compressed_file(inode) ||
4518 		is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
4519 		ret = -EINVAL;
4520 		goto out;
4521 	}
4522 
4523 	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
4524 	if (ret)
4525 		goto out;
4526 
4527 	if (!atomic_read(&fi->i_compr_blocks))
4528 		goto out;
4529 
4530 	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
4531 	last_idx >>= fi->i_log_cluster_size;
4532 
4533 	for (cluster_idx = 0; cluster_idx < last_idx; cluster_idx++) {
4534 		page_idx = cluster_idx << fi->i_log_cluster_size;
4535 
4536 		if (!f2fs_is_compressed_cluster(inode, page_idx))
4537 			continue;
4538 
4539 		ret = redirty_blocks(inode, page_idx, fi->i_cluster_size);
4540 		if (ret < 0)
4541 			break;
4542 
4543 		if (get_dirty_pages(inode) >= BLKS_PER_SEG(sbi)) {
4544 			ret = filemap_fdatawrite(inode->i_mapping);
4545 			if (ret < 0)
4546 				break;
4547 		}
4548 
4549 		cond_resched();
4550 		if (fatal_signal_pending(current)) {
4551 			ret = -EINTR;
4552 			break;
4553 		}
4554 	}
4555 
4556 	if (!ret)
4557 		ret = filemap_write_and_wait_range(inode->i_mapping, 0,
4558 							LLONG_MAX);
4559 
4560 	if (ret)
4561 		f2fs_warn(sbi, "%s: The file might be partially decompressed (errno=%d). Please delete the file.",
4562 			  __func__, ret);
4563 	f2fs_update_time(sbi, REQ_TIME);
4564 out:
4565 	inode_unlock(inode);
4566 	mnt_drop_write_file(filp);
4567 
4568 	return ret;
4569 }
4570 
4571 static int f2fs_ioc_compress_file(struct file *filp)
4572 {
4573 	struct inode *inode = file_inode(filp);
4574 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4575 	struct f2fs_inode_info *fi = F2FS_I(inode);
4576 	pgoff_t page_idx = 0, last_idx, cluster_idx;
4577 	int ret;
4578 
4579 	if (!f2fs_sb_has_compression(sbi) ||
4580 			F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
4581 		return -EOPNOTSUPP;
4582 
4583 	if (!(filp->f_mode & FMODE_WRITE))
4584 		return -EBADF;
4585 
4586 	f2fs_balance_fs(sbi, true);
4587 
4588 	ret = mnt_want_write_file(filp);
4589 	if (ret)
4590 		return ret;
4591 	inode_lock(inode);
4592 
4593 	if (!f2fs_is_compress_backend_ready(inode)) {
4594 		ret = -EOPNOTSUPP;
4595 		goto out;
4596 	}
4597 
4598 	if (!f2fs_compressed_file(inode) ||
4599 		is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
4600 		ret = -EINVAL;
4601 		goto out;
4602 	}
4603 
4604 	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
4605 	if (ret)
4606 		goto out;
4607 
4608 	set_inode_flag(inode, FI_ENABLE_COMPRESS);
4609 
4610 	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
4611 	last_idx >>= fi->i_log_cluster_size;
4612 
4613 	for (cluster_idx = 0; cluster_idx < last_idx; cluster_idx++) {
4614 		page_idx = cluster_idx << fi->i_log_cluster_size;
4615 
4616 		if (f2fs_is_sparse_cluster(inode, page_idx))
4617 			continue;
4618 
4619 		ret = redirty_blocks(inode, page_idx, fi->i_cluster_size);
4620 		if (ret < 0)
4621 			break;
4622 
4623 		if (get_dirty_pages(inode) >= BLKS_PER_SEG(sbi)) {
4624 			ret = filemap_fdatawrite(inode->i_mapping);
4625 			if (ret < 0)
4626 				break;
4627 		}
4628 
4629 		cond_resched();
4630 		if (fatal_signal_pending(current)) {
4631 			ret = -EINTR;
4632 			break;
4633 		}
4634 	}
4635 
4636 	if (!ret)
4637 		ret = filemap_write_and_wait_range(inode->i_mapping, 0,
4638 							LLONG_MAX);
4639 
4640 	clear_inode_flag(inode, FI_ENABLE_COMPRESS);
4641 
4642 	if (ret)
4643 		f2fs_warn(sbi, "%s: The file might be partially compressed (errno=%d). Please delete the file.",
4644 			  __func__, ret);
4645 	f2fs_update_time(sbi, REQ_TIME);
4646 out:
4647 	inode_unlock(inode);
4648 	mnt_drop_write_file(filp);
4649 
4650 	return ret;
4651 }
4652 
4653 static long __f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
4654 {
4655 	switch (cmd) {
4656 	case FS_IOC_GETVERSION:
4657 		return f2fs_ioc_getversion(filp, arg);
4658 	case F2FS_IOC_START_ATOMIC_WRITE:
4659 		return f2fs_ioc_start_atomic_write(filp, false);
4660 	case F2FS_IOC_START_ATOMIC_REPLACE:
4661 		return f2fs_ioc_start_atomic_write(filp, true);
4662 	case F2FS_IOC_COMMIT_ATOMIC_WRITE:
4663 		return f2fs_ioc_commit_atomic_write(filp);
4664 	case F2FS_IOC_ABORT_ATOMIC_WRITE:
4665 		return f2fs_ioc_abort_atomic_write(filp);
4666 	case F2FS_IOC_START_VOLATILE_WRITE:
4667 	case F2FS_IOC_RELEASE_VOLATILE_WRITE:
4668 		return -EOPNOTSUPP;
4669 	case F2FS_IOC_SHUTDOWN:
4670 		return f2fs_ioc_shutdown(filp, arg);
4671 	case FITRIM:
4672 		return f2fs_ioc_fitrim(filp, arg);
4673 	case FS_IOC_SET_ENCRYPTION_POLICY:
4674 		return f2fs_ioc_set_encryption_policy(filp, arg);
4675 	case FS_IOC_GET_ENCRYPTION_POLICY:
4676 		return f2fs_ioc_get_encryption_policy(filp, arg);
4677 	case FS_IOC_GET_ENCRYPTION_PWSALT:
4678 		return f2fs_ioc_get_encryption_pwsalt(filp, arg);
4679 	case FS_IOC_GET_ENCRYPTION_POLICY_EX:
4680 		return f2fs_ioc_get_encryption_policy_ex(filp, arg);
4681 	case FS_IOC_ADD_ENCRYPTION_KEY:
4682 		return f2fs_ioc_add_encryption_key(filp, arg);
4683 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
4684 		return f2fs_ioc_remove_encryption_key(filp, arg);
4685 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
4686 		return f2fs_ioc_remove_encryption_key_all_users(filp, arg);
4687 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
4688 		return f2fs_ioc_get_encryption_key_status(filp, arg);
4689 	case FS_IOC_GET_ENCRYPTION_NONCE:
4690 		return f2fs_ioc_get_encryption_nonce(filp, arg);
4691 	case F2FS_IOC_GARBAGE_COLLECT:
4692 		return f2fs_ioc_gc(filp, arg);
4693 	case F2FS_IOC_GARBAGE_COLLECT_RANGE:
4694 		return f2fs_ioc_gc_range(filp, arg);
4695 	case F2FS_IOC_WRITE_CHECKPOINT:
4696 		return f2fs_ioc_write_checkpoint(filp);
4697 	case F2FS_IOC_DEFRAGMENT:
4698 		return f2fs_ioc_defragment(filp, arg);
4699 	case F2FS_IOC_MOVE_RANGE:
4700 		return f2fs_ioc_move_range(filp, arg);
4701 	case F2FS_IOC_FLUSH_DEVICE:
4702 		return f2fs_ioc_flush_device(filp, arg);
4703 	case F2FS_IOC_GET_FEATURES:
4704 		return f2fs_ioc_get_features(filp, arg);
4705 	case F2FS_IOC_GET_PIN_FILE:
4706 		return f2fs_ioc_get_pin_file(filp, arg);
4707 	case F2FS_IOC_SET_PIN_FILE:
4708 		return f2fs_ioc_set_pin_file(filp, arg);
4709 	case F2FS_IOC_PRECACHE_EXTENTS:
4710 		return f2fs_ioc_precache_extents(filp);
4711 	case F2FS_IOC_RESIZE_FS:
4712 		return f2fs_ioc_resize_fs(filp, arg);
4713 	case FS_IOC_ENABLE_VERITY:
4714 		return f2fs_ioc_enable_verity(filp, arg);
4715 	case FS_IOC_MEASURE_VERITY:
4716 		return f2fs_ioc_measure_verity(filp, arg);
4717 	case FS_IOC_READ_VERITY_METADATA:
4718 		return f2fs_ioc_read_verity_metadata(filp, arg);
4719 	case FS_IOC_GETFSLABEL:
4720 		return f2fs_ioc_getfslabel(filp, arg);
4721 	case FS_IOC_SETFSLABEL:
4722 		return f2fs_ioc_setfslabel(filp, arg);
4723 	case F2FS_IOC_GET_COMPRESS_BLOCKS:
4724 		return f2fs_ioc_get_compress_blocks(filp, arg);
4725 	case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
4726 		return f2fs_release_compress_blocks(filp, arg);
4727 	case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
4728 		return f2fs_reserve_compress_blocks(filp, arg);
4729 	case F2FS_IOC_SEC_TRIM_FILE:
4730 		return f2fs_sec_trim_file(filp, arg);
4731 	case F2FS_IOC_GET_COMPRESS_OPTION:
4732 		return f2fs_ioc_get_compress_option(filp, arg);
4733 	case F2FS_IOC_SET_COMPRESS_OPTION:
4734 		return f2fs_ioc_set_compress_option(filp, arg);
4735 	case F2FS_IOC_DECOMPRESS_FILE:
4736 		return f2fs_ioc_decompress_file(filp);
4737 	case F2FS_IOC_COMPRESS_FILE:
4738 		return f2fs_ioc_compress_file(filp);
4739 	case F2FS_IOC_GET_DEV_ALIAS_FILE:
4740 		return f2fs_ioc_get_dev_alias_file(filp, arg);
4741 	case F2FS_IOC_IO_PRIO:
4742 		return f2fs_ioc_io_prio(filp, arg);
4743 	default:
4744 		return -ENOTTY;
4745 	}
4746 }
4747 
4748 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
4749 {
4750 	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(filp)))))
4751 		return -EIO;
4752 	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(filp))))
4753 		return -ENOSPC;
4754 
4755 	return __f2fs_ioctl(filp, cmd, arg);
4756 }
4757 
4758 /*
4759  * Return %true if the given read or write request should use direct I/O, or
4760  * %false if it should use buffered I/O.
4761  */
4762 static bool f2fs_should_use_dio(struct inode *inode, struct kiocb *iocb,
4763 				struct iov_iter *iter)
4764 {
4765 	unsigned int align;
4766 
4767 	if (!(iocb->ki_flags & IOCB_DIRECT))
4768 		return false;
4769 
4770 	if (f2fs_force_buffered_io(inode, iov_iter_rw(iter)))
4771 		return false;
4772 
4773 	/*
4774 	 * Direct I/O not aligned to the disk's logical_block_size will be
4775 	 * attempted, but will fail with -EINVAL.
4776 	 *
4777 	 * f2fs additionally requires that direct I/O be aligned to the
4778 	 * filesystem block size, which is often a stricter requirement.
4779 	 * However, f2fs traditionally falls back to buffered I/O on requests
4780 	 * that are logical_block_size-aligned but not fs-block aligned.
4781 	 *
4782 	 * The below logic implements this behavior.
4783 	 */
4784 	align = iocb->ki_pos | iov_iter_alignment(iter);
4785 	if (!IS_ALIGNED(align, i_blocksize(inode)) &&
4786 	    IS_ALIGNED(align, bdev_logical_block_size(inode->i_sb->s_bdev)))
4787 		return false;
4788 
4789 	return true;
4790 }
4791 
4792 #ifdef CONFIG_F2FS_IOSTAT
4793 static void f2fs_dio_end_bio(struct bio *bio)
4794 {
4795 	struct bio_iostat_ctx *iostat_ctx = bio->bi_private;
4796 	void *orig_bi_private = iostat_ctx->post_read_ctx;
4797 
4798 	iostat_update_and_unbind_ctx(bio);
4799 	bio->bi_private = orig_bi_private;
4800 	iomap_dio_bio_end_io(bio);
4801 }
4802 
4803 static void f2fs_dio_iostat_start(struct f2fs_sb_info *sbi, struct bio *bio)
4804 {
4805 	void *bi_private = bio->bi_private;
4806 
4807 	if (!sbi->iostat_enable)
4808 		return;
4809 
4810 	iostat_alloc_and_bind_ctx(sbi, bio, bi_private);
4811 	iostat_update_submit_ctx(bio, DATA);
4812 	bio->bi_end_io = f2fs_dio_end_bio;
4813 }
4814 #else
4815 static inline void f2fs_dio_iostat_start(struct f2fs_sb_info *sbi,
4816 					 struct bio *bio) {}
4817 #endif
4818 
4819 static int f2fs_dio_read_end_io(struct kiocb *iocb, ssize_t size, int error,
4820 				unsigned int flags)
4821 {
4822 	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(iocb->ki_filp));
4823 
4824 	dec_page_count(sbi, F2FS_DIO_READ);
4825 	if (error)
4826 		return error;
4827 	f2fs_update_iostat(sbi, NULL, APP_DIRECT_READ_IO, size);
4828 	return 0;
4829 }
4830 
4831 static void f2fs_dio_read_submit_io(const struct iomap_iter *iter,
4832 					struct bio *bio, loff_t file_offset)
4833 {
4834 	struct f2fs_sb_info *sbi = F2FS_I_SB(iter->inode);
4835 
4836 	f2fs_dio_iostat_start(sbi, bio);
4837 	blk_crypto_submit_bio(bio);
4838 }
4839 
4840 static const struct iomap_dio_ops f2fs_iomap_dio_read_ops = {
4841 	.end_io = f2fs_dio_read_end_io,
4842 	.submit_io = f2fs_dio_read_submit_io,
4843 };
4844 
4845 static ssize_t f2fs_dio_read_iter(struct kiocb *iocb, struct iov_iter *to)
4846 {
4847 	struct file *file = iocb->ki_filp;
4848 	struct inode *inode = file_inode(file);
4849 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
4850 	struct f2fs_inode_info *fi = F2FS_I(inode);
4851 	const loff_t pos = iocb->ki_pos;
4852 	const size_t count = iov_iter_count(to);
4853 	struct iomap_dio *dio;
4854 	ssize_t ret;
4855 
4856 	if (count == 0)
4857 		return 0; /* skip atime update */
4858 
4859 	trace_f2fs_direct_IO_enter(inode, iocb, count, READ);
4860 
4861 	if (iocb->ki_flags & IOCB_NOWAIT) {
4862 		if (!f2fs_down_read_trylock(&fi->i_gc_rwsem[READ])) {
4863 			ret = -EAGAIN;
4864 			goto out;
4865 		}
4866 	} else {
4867 		f2fs_down_read(&fi->i_gc_rwsem[READ]);
4868 	}
4869 
4870 	/* dio is not compatible w/ atomic file */
4871 	if (f2fs_is_atomic_file(inode)) {
4872 		f2fs_up_read(&fi->i_gc_rwsem[READ]);
4873 		ret = -EOPNOTSUPP;
4874 		goto out;
4875 	}
4876 
4877 	/*
4878 	 * We have to use __iomap_dio_rw() and iomap_dio_complete() instead of
4879 	 * the higher-level function iomap_dio_rw() in order to ensure that the
4880 	 * F2FS_DIO_READ counter will be decremented correctly in all cases.
4881 	 */
4882 	inc_page_count(sbi, F2FS_DIO_READ);
4883 	dio = __iomap_dio_rw(iocb, to, &f2fs_iomap_ops,
4884 			     &f2fs_iomap_dio_read_ops, 0, NULL, 0);
4885 	if (IS_ERR_OR_NULL(dio)) {
4886 		ret = PTR_ERR_OR_ZERO(dio);
4887 		if (ret != -EIOCBQUEUED)
4888 			dec_page_count(sbi, F2FS_DIO_READ);
4889 	} else {
4890 		ret = iomap_dio_complete(dio);
4891 	}
4892 
4893 	f2fs_up_read(&fi->i_gc_rwsem[READ]);
4894 
4895 	file_accessed(file);
4896 out:
4897 	trace_f2fs_direct_IO_exit(inode, pos, count, READ, ret);
4898 	return ret;
4899 }
4900 
4901 static void f2fs_trace_rw_file_path(struct file *file, loff_t pos, size_t count,
4902 				    int rw)
4903 {
4904 	struct inode *inode = file_inode(file);
4905 	char *buf, *path;
4906 
4907 	buf = f2fs_getname(F2FS_I_SB(inode));
4908 	if (!buf)
4909 		return;
4910 	path = dentry_path_raw(file_dentry(file), buf, PATH_MAX);
4911 	if (IS_ERR(path))
4912 		goto free_buf;
4913 	if (rw == WRITE)
4914 		trace_f2fs_datawrite_start(inode, pos, count,
4915 				current->pid, path, current->comm);
4916 	else
4917 		trace_f2fs_dataread_start(inode, pos, count,
4918 				current->pid, path, current->comm);
4919 free_buf:
4920 	f2fs_putname(buf);
4921 }
4922 
4923 static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
4924 {
4925 	struct inode *inode = file_inode(iocb->ki_filp);
4926 	const loff_t pos = iocb->ki_pos;
4927 	ssize_t ret;
4928 	bool dio;
4929 
4930 	if (!f2fs_is_compress_backend_ready(inode))
4931 		return -EOPNOTSUPP;
4932 
4933 	if (trace_f2fs_dataread_start_enabled())
4934 		f2fs_trace_rw_file_path(iocb->ki_filp, iocb->ki_pos,
4935 					iov_iter_count(to), READ);
4936 
4937 	dio = f2fs_should_use_dio(inode, iocb, to);
4938 
4939 	/* In LFS mode, if there is inflight dio, wait for its completion */
4940 	if (f2fs_lfs_mode(F2FS_I_SB(inode)) &&
4941 	    get_pages(F2FS_I_SB(inode), F2FS_DIO_WRITE) &&
4942 		(!f2fs_is_pinned_file(inode) || !dio))
4943 		inode_dio_wait(inode);
4944 
4945 	if (dio) {
4946 		ret = f2fs_dio_read_iter(iocb, to);
4947 	} else {
4948 		ret = filemap_read(iocb, to, 0);
4949 		if (ret > 0)
4950 			f2fs_update_iostat(F2FS_I_SB(inode), inode,
4951 						APP_BUFFERED_READ_IO, ret);
4952 	}
4953 	trace_f2fs_dataread_end(inode, pos, ret);
4954 	return ret;
4955 }
4956 
4957 static ssize_t f2fs_file_splice_read(struct file *in, loff_t *ppos,
4958 				     struct pipe_inode_info *pipe,
4959 				     size_t len, unsigned int flags)
4960 {
4961 	struct inode *inode = file_inode(in);
4962 	const loff_t pos = *ppos;
4963 	ssize_t ret;
4964 
4965 	if (!f2fs_is_compress_backend_ready(inode))
4966 		return -EOPNOTSUPP;
4967 
4968 	if (trace_f2fs_dataread_start_enabled())
4969 		f2fs_trace_rw_file_path(in, pos, len, READ);
4970 
4971 	ret = filemap_splice_read(in, ppos, pipe, len, flags);
4972 	if (ret > 0)
4973 		f2fs_update_iostat(F2FS_I_SB(inode), inode,
4974 				   APP_BUFFERED_READ_IO, ret);
4975 
4976 	trace_f2fs_dataread_end(inode, pos, ret);
4977 	return ret;
4978 }
4979 
4980 static ssize_t f2fs_write_checks(struct kiocb *iocb, struct iov_iter *from)
4981 {
4982 	struct file *file = iocb->ki_filp;
4983 	struct inode *inode = file_inode(file);
4984 	ssize_t count;
4985 	int err;
4986 
4987 	if (IS_IMMUTABLE(inode))
4988 		return -EPERM;
4989 
4990 	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
4991 		return -EPERM;
4992 
4993 	count = generic_write_checks(iocb, from);
4994 	if (count <= 0)
4995 		return count;
4996 
4997 	err = file_modified(file);
4998 	if (err)
4999 		return err;
5000 
5001 	f2fs_zero_post_eof_page(inode,
5002 		iocb->ki_pos + iov_iter_count(from), true);
5003 	return count;
5004 }
5005 
5006 /*
5007  * Preallocate blocks for a write request, if it is possible and helpful to do
5008  * so.  Returns a positive number if blocks may have been preallocated, 0 if no
5009  * blocks were preallocated, or a negative errno value if something went
5010  * seriously wrong.  Also sets FI_PREALLOCATED_ALL on the inode if *all* the
5011  * requested blocks (not just some of them) have been allocated.
5012  */
5013 static int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *iter,
5014 				   bool dio)
5015 {
5016 	struct inode *inode = file_inode(iocb->ki_filp);
5017 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
5018 	const loff_t pos = iocb->ki_pos;
5019 	const size_t count = iov_iter_count(iter);
5020 	struct f2fs_map_blocks map = {};
5021 	int flag;
5022 	int ret;
5023 
5024 	/* If it will be an out-of-place direct write, don't bother. */
5025 	if (dio && f2fs_lfs_mode(sbi))
5026 		return 0;
5027 	/*
5028 	 * Don't preallocate holes aligned to DIO_SKIP_HOLES which turns into
5029 	 * buffered IO, if DIO meets any holes.
5030 	 */
5031 	if (dio && i_size_read(inode) &&
5032 		(F2FS_BYTES_TO_BLK(pos) < F2FS_BLK_ALIGN(i_size_read(inode))))
5033 		return 0;
5034 
5035 	/* No-wait I/O can't allocate blocks. */
5036 	if (iocb->ki_flags & IOCB_NOWAIT)
5037 		return 0;
5038 
5039 	/* If it will be a short write, don't bother. */
5040 	if (fault_in_iov_iter_readable(iter, count))
5041 		return 0;
5042 
5043 	if (f2fs_has_inline_data(inode)) {
5044 		/* If the data will fit inline, don't bother. */
5045 		if (pos + count <= MAX_INLINE_DATA(inode))
5046 			return 0;
5047 		ret = f2fs_convert_inline_inode(inode);
5048 		if (ret)
5049 			return ret;
5050 	}
5051 
5052 	/* Do not preallocate blocks that will be written partially in 4KB. */
5053 	map.m_lblk = F2FS_BLK_ALIGN(pos);
5054 	map.m_len = F2FS_BYTES_TO_BLK(pos + count);
5055 	if (map.m_len > map.m_lblk)
5056 		map.m_len -= map.m_lblk;
5057 	else
5058 		return 0;
5059 
5060 	if (!IS_DEVICE_ALIASING(inode))
5061 		map.m_may_create = true;
5062 	if (dio) {
5063 		map.m_seg_type = f2fs_rw_hint_to_seg_type(sbi,
5064 						inode->i_write_hint);
5065 		flag = F2FS_GET_BLOCK_PRE_DIO;
5066 	} else {
5067 		map.m_seg_type = NO_CHECK_TYPE;
5068 		flag = F2FS_GET_BLOCK_PRE_AIO;
5069 	}
5070 
5071 	ret = f2fs_map_blocks(inode, &map, flag);
5072 	/* -ENOSPC|-EDQUOT are fine to report the number of allocated blocks. */
5073 	if (ret < 0 && !((ret == -ENOSPC || ret == -EDQUOT) && map.m_len > 0))
5074 		return ret;
5075 	if (ret == 0)
5076 		set_inode_flag(inode, FI_PREALLOCATED_ALL);
5077 	return map.m_len;
5078 }
5079 
5080 static ssize_t f2fs_buffered_write_iter(struct kiocb *iocb,
5081 					struct iov_iter *from)
5082 {
5083 	struct file *file = iocb->ki_filp;
5084 	struct inode *inode = file_inode(file);
5085 	ssize_t ret;
5086 
5087 	if (iocb->ki_flags & IOCB_NOWAIT)
5088 		return -EOPNOTSUPP;
5089 
5090 	ret = generic_perform_write(iocb, from);
5091 
5092 	if (ret > 0) {
5093 		f2fs_update_iostat(F2FS_I_SB(inode), inode,
5094 						APP_BUFFERED_IO, ret);
5095 	}
5096 	return ret;
5097 }
5098 
5099 static int f2fs_dio_write_end_io(struct kiocb *iocb, ssize_t size, int error,
5100 				 unsigned int flags)
5101 {
5102 	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(iocb->ki_filp));
5103 
5104 	dec_page_count(sbi, F2FS_DIO_WRITE);
5105 	if (error)
5106 		return error;
5107 	f2fs_update_time(sbi, REQ_TIME);
5108 	f2fs_update_iostat(sbi, NULL, APP_DIRECT_IO, size);
5109 	return 0;
5110 }
5111 
5112 static bool f2fs_valid_write_stream(struct f2fs_sb_info *sbi, u8 write_stream)
5113 {
5114 	int i;
5115 
5116 	if (!write_stream)
5117 		return true;
5118 	if (!f2fs_is_multi_device(sbi))
5119 		return write_stream <= bdev_max_write_streams(sbi->sb->s_bdev);
5120 
5121 	for (i = 0; i < sbi->s_ndevs; i++)
5122 		if (write_stream > bdev_max_write_streams(FDEV(i).bdev))
5123 			return false;
5124 	return true;
5125 }
5126 
5127 static void f2fs_dio_write_submit_io(const struct iomap_iter *iter,
5128 					struct bio *bio, loff_t file_offset)
5129 {
5130 	struct inode *inode = iter->inode;
5131 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
5132 	struct kiocb *iocb = iter->private;
5133 	enum log_type type = f2fs_rw_hint_to_seg_type(sbi, inode->i_write_hint);
5134 	enum temp_type temp = f2fs_get_segment_temp(sbi, type);
5135 
5136 	bio->bi_write_hint = f2fs_io_type_to_rw_hint(sbi, DATA, temp);
5137 	bio->bi_write_stream =
5138 		iocb->ki_write_stream ? iocb->ki_write_stream :
5139 		f2fs_io_type_to_write_stream(bio->bi_bdev, DATA, temp);
5140 	f2fs_dio_iostat_start(sbi, bio);
5141 	blk_crypto_submit_bio(bio);
5142 }
5143 
5144 static const struct iomap_dio_ops f2fs_iomap_dio_write_ops = {
5145 	.end_io		= f2fs_dio_write_end_io,
5146 	.submit_io	= f2fs_dio_write_submit_io,
5147 };
5148 
5149 static void f2fs_flush_buffered_write(struct address_space *mapping,
5150 				      loff_t start_pos, loff_t end_pos)
5151 {
5152 	int ret;
5153 
5154 	ret = filemap_write_and_wait_range(mapping, start_pos, end_pos);
5155 	if (ret < 0)
5156 		return;
5157 	invalidate_mapping_pages(mapping,
5158 				 start_pos >> PAGE_SHIFT,
5159 				 end_pos >> PAGE_SHIFT);
5160 }
5161 
5162 static ssize_t f2fs_dio_write_iter(struct kiocb *iocb, struct iov_iter *from,
5163 				   bool *may_need_sync)
5164 {
5165 	struct file *file = iocb->ki_filp;
5166 	struct inode *inode = file_inode(file);
5167 	struct f2fs_inode_info *fi = F2FS_I(inode);
5168 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
5169 	const bool do_opu = f2fs_lfs_mode(sbi);
5170 	const loff_t pos = iocb->ki_pos;
5171 	const ssize_t count = iov_iter_count(from);
5172 	unsigned int dio_flags;
5173 	struct iomap_dio *dio;
5174 	ssize_t ret;
5175 
5176 	trace_f2fs_direct_IO_enter(inode, iocb, count, WRITE);
5177 
5178 	if (!f2fs_valid_write_stream(sbi, iocb->ki_write_stream)) {
5179 		ret = -EINVAL;
5180 		goto out;
5181 	}
5182 
5183 	if (iocb->ki_flags & IOCB_NOWAIT) {
5184 		/* f2fs_convert_inline_inode() and block allocation can block */
5185 		if (f2fs_has_inline_data(inode) ||
5186 		    !f2fs_overwrite_io(inode, pos, count)) {
5187 			ret = -EAGAIN;
5188 			goto out;
5189 		}
5190 
5191 		if (!f2fs_down_read_trylock(&fi->i_gc_rwsem[WRITE])) {
5192 			ret = -EAGAIN;
5193 			goto out;
5194 		}
5195 		if (do_opu && !f2fs_down_read_trylock(&fi->i_gc_rwsem[READ])) {
5196 			f2fs_up_read(&fi->i_gc_rwsem[WRITE]);
5197 			ret = -EAGAIN;
5198 			goto out;
5199 		}
5200 	} else {
5201 		ret = f2fs_convert_inline_inode(inode);
5202 		if (ret)
5203 			goto out;
5204 
5205 		f2fs_down_read(&fi->i_gc_rwsem[WRITE]);
5206 		if (do_opu)
5207 			f2fs_down_read(&fi->i_gc_rwsem[READ]);
5208 	}
5209 
5210 	/*
5211 	 * We have to use __iomap_dio_rw() and iomap_dio_complete() instead of
5212 	 * the higher-level function iomap_dio_rw() in order to ensure that the
5213 	 * F2FS_DIO_WRITE counter will be decremented correctly in all cases.
5214 	 */
5215 	inc_page_count(sbi, F2FS_DIO_WRITE);
5216 	dio_flags = 0;
5217 	if (pos + count > inode->i_size)
5218 		dio_flags |= IOMAP_DIO_FORCE_WAIT;
5219 	dio = __iomap_dio_rw(iocb, from, &f2fs_iomap_ops,
5220 			     &f2fs_iomap_dio_write_ops, dio_flags, iocb, 0);
5221 	if (IS_ERR_OR_NULL(dio)) {
5222 		ret = PTR_ERR_OR_ZERO(dio);
5223 		if (ret == -ENOTBLK)
5224 			ret = 0;
5225 		if (ret != -EIOCBQUEUED)
5226 			dec_page_count(sbi, F2FS_DIO_WRITE);
5227 	} else {
5228 		ret = iomap_dio_complete(dio);
5229 	}
5230 
5231 	if (do_opu)
5232 		f2fs_up_read(&fi->i_gc_rwsem[READ]);
5233 	f2fs_up_read(&fi->i_gc_rwsem[WRITE]);
5234 
5235 	if (ret < 0)
5236 		goto out;
5237 	if (pos + ret > inode->i_size)
5238 		f2fs_i_size_write(inode, pos + ret);
5239 	if (!do_opu)
5240 		set_inode_flag(inode, FI_UPDATE_WRITE);
5241 
5242 	if (iov_iter_count(from)) {
5243 		ssize_t ret2;
5244 		loff_t bufio_start_pos = iocb->ki_pos;
5245 
5246 		/*
5247 		 * The direct write was partial, so we need to fall back to a
5248 		 * buffered write for the remainder.
5249 		 */
5250 
5251 		ret2 = f2fs_buffered_write_iter(iocb, from);
5252 		if (iov_iter_count(from))
5253 			f2fs_write_failed(inode, iocb->ki_pos);
5254 		if (ret2 < 0)
5255 			goto out;
5256 
5257 		/*
5258 		 * Ensure that the pagecache pages are written to disk and
5259 		 * invalidated to preserve the expected O_DIRECT semantics.
5260 		 */
5261 		if (ret2 > 0) {
5262 			loff_t bufio_end_pos = bufio_start_pos + ret2 - 1;
5263 
5264 			ret += ret2;
5265 
5266 			f2fs_flush_buffered_write(file->f_mapping,
5267 						  bufio_start_pos,
5268 						  bufio_end_pos);
5269 		}
5270 	} else {
5271 		/* iomap_dio_rw() already handled the generic_write_sync(). */
5272 		*may_need_sync = false;
5273 	}
5274 out:
5275 	trace_f2fs_direct_IO_exit(inode, pos, count, WRITE, ret);
5276 	return ret;
5277 }
5278 
5279 static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
5280 {
5281 	struct inode *inode = file_inode(iocb->ki_filp);
5282 	const loff_t orig_pos = iocb->ki_pos;
5283 	const size_t orig_count = iov_iter_count(from);
5284 	loff_t target_size;
5285 	bool dio;
5286 	bool may_need_sync = true;
5287 	int preallocated;
5288 	const loff_t pos = iocb->ki_pos;
5289 	const ssize_t count = iov_iter_count(from);
5290 	ssize_t ret;
5291 
5292 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) {
5293 		ret = -EIO;
5294 		goto out;
5295 	}
5296 
5297 	if (!f2fs_is_compress_backend_ready(inode)) {
5298 		ret = -EOPNOTSUPP;
5299 		goto out;
5300 	}
5301 
5302 	if (iocb->ki_flags & IOCB_NOWAIT) {
5303 		if (!inode_trylock(inode)) {
5304 			ret = -EAGAIN;
5305 			goto out;
5306 		}
5307 	} else {
5308 		inode_lock(inode);
5309 	}
5310 
5311 	if (f2fs_is_pinned_file(inode) &&
5312 	    !f2fs_overwrite_io(inode, pos, count)) {
5313 		ret = -EIO;
5314 		goto out_unlock;
5315 	}
5316 
5317 	ret = f2fs_write_checks(iocb, from);
5318 	if (ret <= 0)
5319 		goto out_unlock;
5320 
5321 	/* Determine whether we will do a direct write or a buffered write. */
5322 	dio = f2fs_should_use_dio(inode, iocb, from);
5323 
5324 	/* dio is not compatible w/ atomic write */
5325 	if (dio && f2fs_is_atomic_file(inode)) {
5326 		ret = -EOPNOTSUPP;
5327 		goto out_unlock;
5328 	}
5329 
5330 	/* Possibly preallocate the blocks for the write. */
5331 	target_size = iocb->ki_pos + iov_iter_count(from);
5332 	preallocated = f2fs_preallocate_blocks(iocb, from, dio);
5333 	if (preallocated < 0) {
5334 		ret = preallocated;
5335 	} else {
5336 		if (trace_f2fs_datawrite_start_enabled())
5337 			f2fs_trace_rw_file_path(iocb->ki_filp, iocb->ki_pos,
5338 						orig_count, WRITE);
5339 
5340 		/* Do the actual write. */
5341 		ret = dio ?
5342 			f2fs_dio_write_iter(iocb, from, &may_need_sync) :
5343 			f2fs_buffered_write_iter(iocb, from);
5344 
5345 		trace_f2fs_datawrite_end(inode, orig_pos, ret);
5346 	}
5347 
5348 	/* Don't leave any preallocated blocks around past i_size. */
5349 	if (preallocated && i_size_read(inode) < target_size) {
5350 		f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
5351 		filemap_invalidate_lock(inode->i_mapping);
5352 		if (!f2fs_truncate(inode))
5353 			file_dont_truncate(inode);
5354 		filemap_invalidate_unlock(inode->i_mapping);
5355 		f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
5356 	} else {
5357 		file_dont_truncate(inode);
5358 	}
5359 
5360 	clear_inode_flag(inode, FI_PREALLOCATED_ALL);
5361 out_unlock:
5362 	inode_unlock(inode);
5363 out:
5364 	trace_f2fs_file_write_iter(inode, orig_pos, orig_count, ret);
5365 
5366 	if (ret > 0 && may_need_sync)
5367 		ret = generic_write_sync(iocb, ret);
5368 
5369 	/* If buffered IO was forced, flush and drop the data from
5370 	 * the page cache to preserve O_DIRECT semantics
5371 	 */
5372 	if (ret > 0 && !dio && (iocb->ki_flags & IOCB_DIRECT))
5373 		f2fs_flush_buffered_write(iocb->ki_filp->f_mapping,
5374 					  orig_pos,
5375 					  orig_pos + ret - 1);
5376 
5377 	return ret;
5378 }
5379 
5380 static int f2fs_file_fadvise(struct file *filp, loff_t offset, loff_t len,
5381 		int advice)
5382 {
5383 	struct address_space *mapping;
5384 	struct backing_dev_info *bdi;
5385 	struct inode *inode = file_inode(filp);
5386 	int err;
5387 
5388 	trace_f2fs_fadvise(inode, offset, len, advice);
5389 
5390 	if (advice == POSIX_FADV_SEQUENTIAL) {
5391 		if (S_ISFIFO(inode->i_mode))
5392 			return -ESPIPE;
5393 
5394 		mapping = filp->f_mapping;
5395 		if (!mapping || len < 0)
5396 			return -EINVAL;
5397 
5398 		bdi = inode_to_bdi(mapping->host);
5399 		filp->f_ra.ra_pages = bdi->ra_pages *
5400 			F2FS_I_SB(inode)->seq_file_ra_mul;
5401 		spin_lock(&filp->f_lock);
5402 		filp->f_mode &= ~FMODE_RANDOM;
5403 		spin_unlock(&filp->f_lock);
5404 		return 0;
5405 	} else if (advice == POSIX_FADV_WILLNEED && offset == 0) {
5406 		/* Load extent cache at the first readahead. */
5407 		f2fs_precache_extents(inode);
5408 	}
5409 
5410 	err = generic_fadvise(filp, offset, len, advice);
5411 	if (err)
5412 		return err;
5413 
5414 	if (advice == POSIX_FADV_DONTNEED &&
5415 	    (test_opt(F2FS_I_SB(inode), COMPRESS_CACHE) &&
5416 	     f2fs_compressed_file(inode)))
5417 		f2fs_invalidate_compress_pages(F2FS_I_SB(inode), inode->i_ino);
5418 	else if (advice == POSIX_FADV_NOREUSE)
5419 		err = f2fs_keep_noreuse_range(inode, offset, len);
5420 	return err;
5421 }
5422 
5423 #ifdef CONFIG_COMPAT
5424 struct compat_f2fs_gc_range {
5425 	u32 sync;
5426 	compat_u64 start;
5427 	compat_u64 len;
5428 };
5429 #define F2FS_IOC32_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,\
5430 						struct compat_f2fs_gc_range)
5431 
5432 static int f2fs_compat_ioc_gc_range(struct file *file, unsigned long arg)
5433 {
5434 	struct compat_f2fs_gc_range __user *urange;
5435 	struct f2fs_gc_range range;
5436 	int err;
5437 
5438 	urange = compat_ptr(arg);
5439 	err = get_user(range.sync, &urange->sync);
5440 	err |= get_user(range.start, &urange->start);
5441 	err |= get_user(range.len, &urange->len);
5442 	if (err)
5443 		return -EFAULT;
5444 
5445 	return __f2fs_ioc_gc_range(file, &range);
5446 }
5447 
5448 struct compat_f2fs_move_range {
5449 	u32 dst_fd;
5450 	compat_u64 pos_in;
5451 	compat_u64 pos_out;
5452 	compat_u64 len;
5453 };
5454 #define F2FS_IOC32_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
5455 					struct compat_f2fs_move_range)
5456 
5457 static int f2fs_compat_ioc_move_range(struct file *file, unsigned long arg)
5458 {
5459 	struct compat_f2fs_move_range __user *urange;
5460 	struct f2fs_move_range range;
5461 	int err;
5462 
5463 	urange = compat_ptr(arg);
5464 	err = get_user(range.dst_fd, &urange->dst_fd);
5465 	err |= get_user(range.pos_in, &urange->pos_in);
5466 	err |= get_user(range.pos_out, &urange->pos_out);
5467 	err |= get_user(range.len, &urange->len);
5468 	if (err)
5469 		return -EFAULT;
5470 
5471 	return __f2fs_ioc_move_range(file, &range);
5472 }
5473 
5474 long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
5475 {
5476 	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
5477 		return -EIO;
5478 	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(file))))
5479 		return -ENOSPC;
5480 
5481 	switch (cmd) {
5482 	case FS_IOC32_GETVERSION:
5483 		cmd = FS_IOC_GETVERSION;
5484 		break;
5485 	case F2FS_IOC32_GARBAGE_COLLECT_RANGE:
5486 		return f2fs_compat_ioc_gc_range(file, arg);
5487 	case F2FS_IOC32_MOVE_RANGE:
5488 		return f2fs_compat_ioc_move_range(file, arg);
5489 	case F2FS_IOC_START_ATOMIC_WRITE:
5490 	case F2FS_IOC_START_ATOMIC_REPLACE:
5491 	case F2FS_IOC_COMMIT_ATOMIC_WRITE:
5492 	case F2FS_IOC_START_VOLATILE_WRITE:
5493 	case F2FS_IOC_RELEASE_VOLATILE_WRITE:
5494 	case F2FS_IOC_ABORT_ATOMIC_WRITE:
5495 	case F2FS_IOC_SHUTDOWN:
5496 	case FITRIM:
5497 	case FS_IOC_SET_ENCRYPTION_POLICY:
5498 	case FS_IOC_GET_ENCRYPTION_PWSALT:
5499 	case FS_IOC_GET_ENCRYPTION_POLICY:
5500 	case FS_IOC_GET_ENCRYPTION_POLICY_EX:
5501 	case FS_IOC_ADD_ENCRYPTION_KEY:
5502 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
5503 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
5504 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
5505 	case FS_IOC_GET_ENCRYPTION_NONCE:
5506 	case F2FS_IOC_GARBAGE_COLLECT:
5507 	case F2FS_IOC_WRITE_CHECKPOINT:
5508 	case F2FS_IOC_DEFRAGMENT:
5509 	case F2FS_IOC_FLUSH_DEVICE:
5510 	case F2FS_IOC_GET_FEATURES:
5511 	case F2FS_IOC_GET_PIN_FILE:
5512 	case F2FS_IOC_SET_PIN_FILE:
5513 	case F2FS_IOC_PRECACHE_EXTENTS:
5514 	case F2FS_IOC_RESIZE_FS:
5515 	case FS_IOC_ENABLE_VERITY:
5516 	case FS_IOC_MEASURE_VERITY:
5517 	case FS_IOC_READ_VERITY_METADATA:
5518 	case FS_IOC_GETFSLABEL:
5519 	case FS_IOC_SETFSLABEL:
5520 	case F2FS_IOC_GET_COMPRESS_BLOCKS:
5521 	case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
5522 	case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
5523 	case F2FS_IOC_SEC_TRIM_FILE:
5524 	case F2FS_IOC_GET_COMPRESS_OPTION:
5525 	case F2FS_IOC_SET_COMPRESS_OPTION:
5526 	case F2FS_IOC_DECOMPRESS_FILE:
5527 	case F2FS_IOC_COMPRESS_FILE:
5528 	case F2FS_IOC_GET_DEV_ALIAS_FILE:
5529 	case F2FS_IOC_IO_PRIO:
5530 		break;
5531 	default:
5532 		return -ENOIOCTLCMD;
5533 	}
5534 	return __f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
5535 }
5536 #endif
5537 
5538 const struct file_operations f2fs_file_operations = {
5539 	.llseek		= f2fs_llseek,
5540 	.read_iter	= f2fs_file_read_iter,
5541 	.write_iter	= f2fs_file_write_iter,
5542 	.iopoll		= iocb_bio_iopoll,
5543 	.open		= f2fs_file_open,
5544 	.release	= f2fs_release_file,
5545 	.mmap_prepare	= f2fs_file_mmap_prepare,
5546 	.flush		= f2fs_file_flush,
5547 	.fsync		= f2fs_sync_file,
5548 	.fallocate	= f2fs_fallocate,
5549 	.unlocked_ioctl	= f2fs_ioctl,
5550 #ifdef CONFIG_COMPAT
5551 	.compat_ioctl	= f2fs_compat_ioctl,
5552 #endif
5553 	.splice_read	= f2fs_file_splice_read,
5554 	.splice_write	= iter_file_splice_write,
5555 	.fadvise	= f2fs_file_fadvise,
5556 	.fop_flags	= FOP_BUFFER_RASYNC,
5557 	.setlease	= generic_setlease,
5558 };
5559