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