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