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