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