1 /* 2 * linux/fs/ext4/file.c 3 * 4 * Copyright (C) 1992, 1993, 1994, 1995 5 * Remy Card (card@masi.ibp.fr) 6 * Laboratoire MASI - Institut Blaise Pascal 7 * Universite Pierre et Marie Curie (Paris VI) 8 * 9 * from 10 * 11 * linux/fs/minix/file.c 12 * 13 * Copyright (C) 1991, 1992 Linus Torvalds 14 * 15 * ext4 fs regular file handling primitives 16 * 17 * 64-bit file support on 64-bit platforms by Jakub Jelinek 18 * (jj@sunsite.ms.mff.cuni.cz) 19 */ 20 21 #include <linux/time.h> 22 #include <linux/fs.h> 23 #include <linux/mount.h> 24 #include <linux/path.h> 25 #include <linux/dax.h> 26 #include <linux/quotaops.h> 27 #include <linux/pagevec.h> 28 #include <linux/uio.h> 29 #include "ext4.h" 30 #include "ext4_jbd2.h" 31 #include "xattr.h" 32 #include "acl.h" 33 34 #ifdef CONFIG_FS_DAX 35 static ssize_t ext4_dax_read_iter(struct kiocb *iocb, struct iov_iter *to) 36 { 37 struct inode *inode = file_inode(iocb->ki_filp); 38 ssize_t ret; 39 40 if (!inode_trylock_shared(inode)) { 41 if (iocb->ki_flags & IOCB_NOWAIT) 42 return -EAGAIN; 43 inode_lock_shared(inode); 44 } 45 /* 46 * Recheck under inode lock - at this point we are sure it cannot 47 * change anymore 48 */ 49 if (!IS_DAX(inode)) { 50 inode_unlock_shared(inode); 51 /* Fallback to buffered IO in case we cannot support DAX */ 52 return generic_file_read_iter(iocb, to); 53 } 54 ret = dax_iomap_rw(iocb, to, &ext4_iomap_ops); 55 inode_unlock_shared(inode); 56 57 file_accessed(iocb->ki_filp); 58 return ret; 59 } 60 #endif 61 62 static ssize_t ext4_file_read_iter(struct kiocb *iocb, struct iov_iter *to) 63 { 64 if (unlikely(ext4_forced_shutdown(EXT4_SB(file_inode(iocb->ki_filp)->i_sb)))) 65 return -EIO; 66 67 if (!iov_iter_count(to)) 68 return 0; /* skip atime */ 69 70 #ifdef CONFIG_FS_DAX 71 if (IS_DAX(file_inode(iocb->ki_filp))) 72 return ext4_dax_read_iter(iocb, to); 73 #endif 74 return generic_file_read_iter(iocb, to); 75 } 76 77 /* 78 * Called when an inode is released. Note that this is different 79 * from ext4_file_open: open gets called at every open, but release 80 * gets called only when /all/ the files are closed. 81 */ 82 static int ext4_release_file(struct inode *inode, struct file *filp) 83 { 84 if (ext4_test_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE)) { 85 ext4_alloc_da_blocks(inode); 86 ext4_clear_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE); 87 } 88 /* if we are the last writer on the inode, drop the block reservation */ 89 if ((filp->f_mode & FMODE_WRITE) && 90 (atomic_read(&inode->i_writecount) == 1) && 91 !EXT4_I(inode)->i_reserved_data_blocks) 92 { 93 down_write(&EXT4_I(inode)->i_data_sem); 94 ext4_discard_preallocations(inode); 95 up_write(&EXT4_I(inode)->i_data_sem); 96 } 97 if (is_dx(inode) && filp->private_data) 98 ext4_htree_free_dir_info(filp->private_data); 99 100 return 0; 101 } 102 103 static void ext4_unwritten_wait(struct inode *inode) 104 { 105 wait_queue_head_t *wq = ext4_ioend_wq(inode); 106 107 wait_event(*wq, (atomic_read(&EXT4_I(inode)->i_unwritten) == 0)); 108 } 109 110 /* 111 * This tests whether the IO in question is block-aligned or not. 112 * Ext4 utilizes unwritten extents when hole-filling during direct IO, and they 113 * are converted to written only after the IO is complete. Until they are 114 * mapped, these blocks appear as holes, so dio_zero_block() will assume that 115 * it needs to zero out portions of the start and/or end block. If 2 AIO 116 * threads are at work on the same unwritten block, they must be synchronized 117 * or one thread will zero the other's data, causing corruption. 118 */ 119 static int 120 ext4_unaligned_aio(struct inode *inode, struct iov_iter *from, loff_t pos) 121 { 122 struct super_block *sb = inode->i_sb; 123 int blockmask = sb->s_blocksize - 1; 124 125 if (pos >= i_size_read(inode)) 126 return 0; 127 128 if ((pos | iov_iter_alignment(from)) & blockmask) 129 return 1; 130 131 return 0; 132 } 133 134 /* Is IO overwriting allocated and initialized blocks? */ 135 static bool ext4_overwrite_io(struct inode *inode, loff_t pos, loff_t len) 136 { 137 struct ext4_map_blocks map; 138 unsigned int blkbits = inode->i_blkbits; 139 int err, blklen; 140 141 if (pos + len > i_size_read(inode)) 142 return false; 143 144 map.m_lblk = pos >> blkbits; 145 map.m_len = EXT4_MAX_BLOCKS(len, pos, blkbits); 146 blklen = map.m_len; 147 148 err = ext4_map_blocks(NULL, inode, &map, 0); 149 /* 150 * 'err==len' means that all of the blocks have been preallocated, 151 * regardless of whether they have been initialized or not. To exclude 152 * unwritten extents, we need to check m_flags. 153 */ 154 return err == blklen && (map.m_flags & EXT4_MAP_MAPPED); 155 } 156 157 static ssize_t ext4_write_checks(struct kiocb *iocb, struct iov_iter *from) 158 { 159 struct inode *inode = file_inode(iocb->ki_filp); 160 ssize_t ret; 161 162 ret = generic_write_checks(iocb, from); 163 if (ret <= 0) 164 return ret; 165 /* 166 * If we have encountered a bitmap-format file, the size limit 167 * is smaller than s_maxbytes, which is for extent-mapped files. 168 */ 169 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { 170 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); 171 172 if (iocb->ki_pos >= sbi->s_bitmap_maxbytes) 173 return -EFBIG; 174 iov_iter_truncate(from, sbi->s_bitmap_maxbytes - iocb->ki_pos); 175 } 176 return iov_iter_count(from); 177 } 178 179 #ifdef CONFIG_FS_DAX 180 static ssize_t 181 ext4_dax_write_iter(struct kiocb *iocb, struct iov_iter *from) 182 { 183 struct inode *inode = file_inode(iocb->ki_filp); 184 ssize_t ret; 185 186 if (!inode_trylock(inode)) { 187 if (iocb->ki_flags & IOCB_NOWAIT) 188 return -EAGAIN; 189 inode_lock(inode); 190 } 191 ret = ext4_write_checks(iocb, from); 192 if (ret <= 0) 193 goto out; 194 ret = file_remove_privs(iocb->ki_filp); 195 if (ret) 196 goto out; 197 ret = file_update_time(iocb->ki_filp); 198 if (ret) 199 goto out; 200 201 ret = dax_iomap_rw(iocb, from, &ext4_iomap_ops); 202 out: 203 inode_unlock(inode); 204 if (ret > 0) 205 ret = generic_write_sync(iocb, ret); 206 return ret; 207 } 208 #endif 209 210 static ssize_t 211 ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 212 { 213 struct inode *inode = file_inode(iocb->ki_filp); 214 int o_direct = iocb->ki_flags & IOCB_DIRECT; 215 int unaligned_aio = 0; 216 int overwrite = 0; 217 ssize_t ret; 218 219 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) 220 return -EIO; 221 222 #ifdef CONFIG_FS_DAX 223 if (IS_DAX(inode)) 224 return ext4_dax_write_iter(iocb, from); 225 #endif 226 227 if (!inode_trylock(inode)) { 228 if (iocb->ki_flags & IOCB_NOWAIT) 229 return -EAGAIN; 230 inode_lock(inode); 231 } 232 233 ret = ext4_write_checks(iocb, from); 234 if (ret <= 0) 235 goto out; 236 237 /* 238 * Unaligned direct AIO must be serialized among each other as zeroing 239 * of partial blocks of two competing unaligned AIOs can result in data 240 * corruption. 241 */ 242 if (o_direct && ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) && 243 !is_sync_kiocb(iocb) && 244 ext4_unaligned_aio(inode, from, iocb->ki_pos)) { 245 unaligned_aio = 1; 246 ext4_unwritten_wait(inode); 247 } 248 249 iocb->private = &overwrite; 250 /* Check whether we do a DIO overwrite or not */ 251 if (o_direct && !unaligned_aio) { 252 if (ext4_overwrite_io(inode, iocb->ki_pos, iov_iter_count(from))) { 253 if (ext4_should_dioread_nolock(inode)) 254 overwrite = 1; 255 } else if (iocb->ki_flags & IOCB_NOWAIT) { 256 ret = -EAGAIN; 257 goto out; 258 } 259 } 260 261 ret = __generic_file_write_iter(iocb, from); 262 inode_unlock(inode); 263 264 if (ret > 0) 265 ret = generic_write_sync(iocb, ret); 266 267 return ret; 268 269 out: 270 inode_unlock(inode); 271 return ret; 272 } 273 274 #ifdef CONFIG_FS_DAX 275 static int ext4_dax_huge_fault(struct vm_fault *vmf, 276 enum page_entry_size pe_size) 277 { 278 int result; 279 handle_t *handle = NULL; 280 struct inode *inode = file_inode(vmf->vma->vm_file); 281 struct super_block *sb = inode->i_sb; 282 bool write = vmf->flags & FAULT_FLAG_WRITE; 283 284 if (write) { 285 sb_start_pagefault(sb); 286 file_update_time(vmf->vma->vm_file); 287 down_read(&EXT4_I(inode)->i_mmap_sem); 288 handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE, 289 EXT4_DATA_TRANS_BLOCKS(sb)); 290 } else { 291 down_read(&EXT4_I(inode)->i_mmap_sem); 292 } 293 if (!IS_ERR(handle)) 294 result = dax_iomap_fault(vmf, pe_size, &ext4_iomap_ops); 295 else 296 result = VM_FAULT_SIGBUS; 297 if (write) { 298 if (!IS_ERR(handle)) 299 ext4_journal_stop(handle); 300 up_read(&EXT4_I(inode)->i_mmap_sem); 301 sb_end_pagefault(sb); 302 } else { 303 up_read(&EXT4_I(inode)->i_mmap_sem); 304 } 305 306 return result; 307 } 308 309 static int ext4_dax_fault(struct vm_fault *vmf) 310 { 311 return ext4_dax_huge_fault(vmf, PE_SIZE_PTE); 312 } 313 314 /* 315 * Handle write fault for VM_MIXEDMAP mappings. Similarly to ext4_dax_fault() 316 * handler we check for races agaist truncate. Note that since we cycle through 317 * i_mmap_sem, we are sure that also any hole punching that began before we 318 * were called is finished by now and so if it included part of the file we 319 * are working on, our pte will get unmapped and the check for pte_same() in 320 * wp_pfn_shared() fails. Thus fault gets retried and things work out as 321 * desired. 322 */ 323 static int ext4_dax_pfn_mkwrite(struct vm_fault *vmf) 324 { 325 struct inode *inode = file_inode(vmf->vma->vm_file); 326 struct super_block *sb = inode->i_sb; 327 loff_t size; 328 int ret; 329 330 sb_start_pagefault(sb); 331 file_update_time(vmf->vma->vm_file); 332 down_read(&EXT4_I(inode)->i_mmap_sem); 333 size = (i_size_read(inode) + PAGE_SIZE - 1) >> PAGE_SHIFT; 334 if (vmf->pgoff >= size) 335 ret = VM_FAULT_SIGBUS; 336 else 337 ret = dax_pfn_mkwrite(vmf); 338 up_read(&EXT4_I(inode)->i_mmap_sem); 339 sb_end_pagefault(sb); 340 341 return ret; 342 } 343 344 static const struct vm_operations_struct ext4_dax_vm_ops = { 345 .fault = ext4_dax_fault, 346 .huge_fault = ext4_dax_huge_fault, 347 .page_mkwrite = ext4_dax_fault, 348 .pfn_mkwrite = ext4_dax_pfn_mkwrite, 349 }; 350 #else 351 #define ext4_dax_vm_ops ext4_file_vm_ops 352 #endif 353 354 static const struct vm_operations_struct ext4_file_vm_ops = { 355 .fault = ext4_filemap_fault, 356 .map_pages = filemap_map_pages, 357 .page_mkwrite = ext4_page_mkwrite, 358 }; 359 360 static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma) 361 { 362 struct inode *inode = file->f_mapping->host; 363 364 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) 365 return -EIO; 366 367 if (ext4_encrypted_inode(inode)) { 368 int err = fscrypt_get_encryption_info(inode); 369 if (err) 370 return 0; 371 if (!fscrypt_has_encryption_key(inode)) 372 return -ENOKEY; 373 } 374 file_accessed(file); 375 if (IS_DAX(file_inode(file))) { 376 vma->vm_ops = &ext4_dax_vm_ops; 377 vma->vm_flags |= VM_MIXEDMAP | VM_HUGEPAGE; 378 } else { 379 vma->vm_ops = &ext4_file_vm_ops; 380 } 381 return 0; 382 } 383 384 static int ext4_file_open(struct inode * inode, struct file * filp) 385 { 386 struct super_block *sb = inode->i_sb; 387 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); 388 struct vfsmount *mnt = filp->f_path.mnt; 389 struct dentry *dir; 390 struct path path; 391 char buf[64], *cp; 392 int ret; 393 394 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) 395 return -EIO; 396 397 if (unlikely(!(sbi->s_mount_flags & EXT4_MF_MNTDIR_SAMPLED) && 398 !(sb->s_flags & MS_RDONLY))) { 399 sbi->s_mount_flags |= EXT4_MF_MNTDIR_SAMPLED; 400 /* 401 * Sample where the filesystem has been mounted and 402 * store it in the superblock for sysadmin convenience 403 * when trying to sort through large numbers of block 404 * devices or filesystem images. 405 */ 406 memset(buf, 0, sizeof(buf)); 407 path.mnt = mnt; 408 path.dentry = mnt->mnt_root; 409 cp = d_path(&path, buf, sizeof(buf)); 410 if (!IS_ERR(cp)) { 411 handle_t *handle; 412 int err; 413 414 handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1); 415 if (IS_ERR(handle)) 416 return PTR_ERR(handle); 417 BUFFER_TRACE(sbi->s_sbh, "get_write_access"); 418 err = ext4_journal_get_write_access(handle, sbi->s_sbh); 419 if (err) { 420 ext4_journal_stop(handle); 421 return err; 422 } 423 strlcpy(sbi->s_es->s_last_mounted, cp, 424 sizeof(sbi->s_es->s_last_mounted)); 425 ext4_handle_dirty_super(handle, sb); 426 ext4_journal_stop(handle); 427 } 428 } 429 if (ext4_encrypted_inode(inode)) { 430 ret = fscrypt_get_encryption_info(inode); 431 if (ret) 432 return -EACCES; 433 if (!fscrypt_has_encryption_key(inode)) 434 return -ENOKEY; 435 } 436 437 dir = dget_parent(file_dentry(filp)); 438 if (ext4_encrypted_inode(d_inode(dir)) && 439 !fscrypt_has_permitted_context(d_inode(dir), inode)) { 440 ext4_warning(inode->i_sb, 441 "Inconsistent encryption contexts: %lu/%lu", 442 (unsigned long) d_inode(dir)->i_ino, 443 (unsigned long) inode->i_ino); 444 dput(dir); 445 return -EPERM; 446 } 447 dput(dir); 448 /* 449 * Set up the jbd2_inode if we are opening the inode for 450 * writing and the journal is present 451 */ 452 if (filp->f_mode & FMODE_WRITE) { 453 ret = ext4_inode_attach_jinode(inode); 454 if (ret < 0) 455 return ret; 456 } 457 458 /* Set the flags to support nowait AIO */ 459 filp->f_mode |= FMODE_AIO_NOWAIT; 460 461 return dquot_file_open(inode, filp); 462 } 463 464 /* 465 * Here we use ext4_map_blocks() to get a block mapping for a extent-based 466 * file rather than ext4_ext_walk_space() because we can introduce 467 * SEEK_DATA/SEEK_HOLE for block-mapped and extent-mapped file at the same 468 * function. When extent status tree has been fully implemented, it will 469 * track all extent status for a file and we can directly use it to 470 * retrieve the offset for SEEK_DATA/SEEK_HOLE. 471 */ 472 473 /* 474 * When we retrieve the offset for SEEK_DATA/SEEK_HOLE, we would need to 475 * lookup page cache to check whether or not there has some data between 476 * [startoff, endoff] because, if this range contains an unwritten extent, 477 * we determine this extent as a data or a hole according to whether the 478 * page cache has data or not. 479 */ 480 static int ext4_find_unwritten_pgoff(struct inode *inode, 481 int whence, 482 ext4_lblk_t end_blk, 483 loff_t *offset) 484 { 485 struct pagevec pvec; 486 unsigned int blkbits; 487 pgoff_t index; 488 pgoff_t end; 489 loff_t endoff; 490 loff_t startoff; 491 loff_t lastoff; 492 int found = 0; 493 494 blkbits = inode->i_sb->s_blocksize_bits; 495 startoff = *offset; 496 lastoff = startoff; 497 endoff = (loff_t)end_blk << blkbits; 498 499 index = startoff >> PAGE_SHIFT; 500 end = (endoff - 1) >> PAGE_SHIFT; 501 502 pagevec_init(&pvec, 0); 503 do { 504 int i, num; 505 unsigned long nr_pages; 506 507 num = min_t(pgoff_t, end - index, PAGEVEC_SIZE - 1) + 1; 508 nr_pages = pagevec_lookup(&pvec, inode->i_mapping, index, 509 (pgoff_t)num); 510 if (nr_pages == 0) 511 break; 512 513 for (i = 0; i < nr_pages; i++) { 514 struct page *page = pvec.pages[i]; 515 struct buffer_head *bh, *head; 516 517 /* 518 * If current offset is smaller than the page offset, 519 * there is a hole at this offset. 520 */ 521 if (whence == SEEK_HOLE && lastoff < endoff && 522 lastoff < page_offset(pvec.pages[i])) { 523 found = 1; 524 *offset = lastoff; 525 goto out; 526 } 527 528 if (page->index > end) 529 goto out; 530 531 lock_page(page); 532 533 if (unlikely(page->mapping != inode->i_mapping)) { 534 unlock_page(page); 535 continue; 536 } 537 538 if (!page_has_buffers(page)) { 539 unlock_page(page); 540 continue; 541 } 542 543 if (page_has_buffers(page)) { 544 lastoff = page_offset(page); 545 bh = head = page_buffers(page); 546 do { 547 if (buffer_uptodate(bh) || 548 buffer_unwritten(bh)) { 549 if (whence == SEEK_DATA) 550 found = 1; 551 } else { 552 if (whence == SEEK_HOLE) 553 found = 1; 554 } 555 if (found) { 556 *offset = max_t(loff_t, 557 startoff, lastoff); 558 unlock_page(page); 559 goto out; 560 } 561 lastoff += bh->b_size; 562 bh = bh->b_this_page; 563 } while (bh != head); 564 } 565 566 lastoff = page_offset(page) + PAGE_SIZE; 567 unlock_page(page); 568 } 569 570 /* The no. of pages is less than our desired, we are done. */ 571 if (nr_pages < num) 572 break; 573 574 index = pvec.pages[i - 1]->index + 1; 575 pagevec_release(&pvec); 576 } while (index <= end); 577 578 if (whence == SEEK_HOLE && lastoff < endoff) { 579 found = 1; 580 *offset = lastoff; 581 } 582 out: 583 pagevec_release(&pvec); 584 return found; 585 } 586 587 /* 588 * ext4_seek_data() retrieves the offset for SEEK_DATA. 589 */ 590 static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize) 591 { 592 struct inode *inode = file->f_mapping->host; 593 struct extent_status es; 594 ext4_lblk_t start, last, end; 595 loff_t dataoff, isize; 596 int blkbits; 597 int ret; 598 599 inode_lock(inode); 600 601 isize = i_size_read(inode); 602 if (offset >= isize) { 603 inode_unlock(inode); 604 return -ENXIO; 605 } 606 607 blkbits = inode->i_sb->s_blocksize_bits; 608 start = offset >> blkbits; 609 last = start; 610 end = isize >> blkbits; 611 dataoff = offset; 612 613 do { 614 ret = ext4_get_next_extent(inode, last, end - last + 1, &es); 615 if (ret <= 0) { 616 /* No extent found -> no data */ 617 if (ret == 0) 618 ret = -ENXIO; 619 inode_unlock(inode); 620 return ret; 621 } 622 623 last = es.es_lblk; 624 if (last != start) 625 dataoff = (loff_t)last << blkbits; 626 if (!ext4_es_is_unwritten(&es)) 627 break; 628 629 /* 630 * If there is a unwritten extent at this offset, 631 * it will be as a data or a hole according to page 632 * cache that has data or not. 633 */ 634 if (ext4_find_unwritten_pgoff(inode, SEEK_DATA, 635 es.es_lblk + es.es_len, &dataoff)) 636 break; 637 last += es.es_len; 638 dataoff = (loff_t)last << blkbits; 639 cond_resched(); 640 } while (last <= end); 641 642 inode_unlock(inode); 643 644 if (dataoff > isize) 645 return -ENXIO; 646 647 return vfs_setpos(file, dataoff, maxsize); 648 } 649 650 /* 651 * ext4_seek_hole() retrieves the offset for SEEK_HOLE. 652 */ 653 static loff_t ext4_seek_hole(struct file *file, loff_t offset, loff_t maxsize) 654 { 655 struct inode *inode = file->f_mapping->host; 656 struct extent_status es; 657 ext4_lblk_t start, last, end; 658 loff_t holeoff, isize; 659 int blkbits; 660 int ret; 661 662 inode_lock(inode); 663 664 isize = i_size_read(inode); 665 if (offset >= isize) { 666 inode_unlock(inode); 667 return -ENXIO; 668 } 669 670 blkbits = inode->i_sb->s_blocksize_bits; 671 start = offset >> blkbits; 672 last = start; 673 end = isize >> blkbits; 674 holeoff = offset; 675 676 do { 677 ret = ext4_get_next_extent(inode, last, end - last + 1, &es); 678 if (ret < 0) { 679 inode_unlock(inode); 680 return ret; 681 } 682 /* Found a hole? */ 683 if (ret == 0 || es.es_lblk > last) { 684 if (last != start) 685 holeoff = (loff_t)last << blkbits; 686 break; 687 } 688 /* 689 * If there is a unwritten extent at this offset, 690 * it will be as a data or a hole according to page 691 * cache that has data or not. 692 */ 693 if (ext4_es_is_unwritten(&es) && 694 ext4_find_unwritten_pgoff(inode, SEEK_HOLE, 695 last + es.es_len, &holeoff)) 696 break; 697 698 last += es.es_len; 699 holeoff = (loff_t)last << blkbits; 700 cond_resched(); 701 } while (last <= end); 702 703 inode_unlock(inode); 704 705 if (holeoff > isize) 706 holeoff = isize; 707 708 return vfs_setpos(file, holeoff, maxsize); 709 } 710 711 /* 712 * ext4_llseek() handles both block-mapped and extent-mapped maxbytes values 713 * by calling generic_file_llseek_size() with the appropriate maxbytes 714 * value for each. 715 */ 716 loff_t ext4_llseek(struct file *file, loff_t offset, int whence) 717 { 718 struct inode *inode = file->f_mapping->host; 719 loff_t maxbytes; 720 721 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) 722 maxbytes = EXT4_SB(inode->i_sb)->s_bitmap_maxbytes; 723 else 724 maxbytes = inode->i_sb->s_maxbytes; 725 726 switch (whence) { 727 case SEEK_SET: 728 case SEEK_CUR: 729 case SEEK_END: 730 return generic_file_llseek_size(file, offset, whence, 731 maxbytes, i_size_read(inode)); 732 case SEEK_DATA: 733 return ext4_seek_data(file, offset, maxbytes); 734 case SEEK_HOLE: 735 return ext4_seek_hole(file, offset, maxbytes); 736 } 737 738 return -EINVAL; 739 } 740 741 const struct file_operations ext4_file_operations = { 742 .llseek = ext4_llseek, 743 .read_iter = ext4_file_read_iter, 744 .write_iter = ext4_file_write_iter, 745 .unlocked_ioctl = ext4_ioctl, 746 #ifdef CONFIG_COMPAT 747 .compat_ioctl = ext4_compat_ioctl, 748 #endif 749 .mmap = ext4_file_mmap, 750 .open = ext4_file_open, 751 .release = ext4_release_file, 752 .fsync = ext4_sync_file, 753 .get_unmapped_area = thp_get_unmapped_area, 754 .splice_read = generic_file_splice_read, 755 .splice_write = iter_file_splice_write, 756 .fallocate = ext4_fallocate, 757 }; 758 759 const struct inode_operations ext4_file_inode_operations = { 760 .setattr = ext4_setattr, 761 .getattr = ext4_file_getattr, 762 .listxattr = ext4_listxattr, 763 .get_acl = ext4_get_acl, 764 .set_acl = ext4_set_acl, 765 .fiemap = ext4_fiemap, 766 }; 767 768