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