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