0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include <linux/fs.h>
0023 #include <linux/mount.h>
0024 #include <linux/time.h>
0025 #include <linux/highuid.h>
0026 #include <linux/pagemap.h>
0027 #include <linux/dax.h>
0028 #include <linux/quotaops.h>
0029 #include <linux/string.h>
0030 #include <linux/buffer_head.h>
0031 #include <linux/writeback.h>
0032 #include <linux/pagevec.h>
0033 #include <linux/mpage.h>
0034 #include <linux/namei.h>
0035 #include <linux/uio.h>
0036 #include <linux/bio.h>
0037 #include <linux/workqueue.h>
0038 #include <linux/kernel.h>
0039 #include <linux/printk.h>
0040 #include <linux/slab.h>
0041 #include <linux/bitops.h>
0042 #include <linux/iomap.h>
0043 #include <linux/iversion.h>
0044
0045 #include "ext4_jbd2.h"
0046 #include "xattr.h"
0047 #include "acl.h"
0048 #include "truncate.h"
0049
0050 #include <trace/events/ext4.h>
0051
0052 static __u32 ext4_inode_csum(struct inode *inode, struct ext4_inode *raw,
0053 struct ext4_inode_info *ei)
0054 {
0055 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
0056 __u32 csum;
0057 __u16 dummy_csum = 0;
0058 int offset = offsetof(struct ext4_inode, i_checksum_lo);
0059 unsigned int csum_size = sizeof(dummy_csum);
0060
0061 csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)raw, offset);
0062 csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum, csum_size);
0063 offset += csum_size;
0064 csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
0065 EXT4_GOOD_OLD_INODE_SIZE - offset);
0066
0067 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
0068 offset = offsetof(struct ext4_inode, i_checksum_hi);
0069 csum = ext4_chksum(sbi, csum, (__u8 *)raw +
0070 EXT4_GOOD_OLD_INODE_SIZE,
0071 offset - EXT4_GOOD_OLD_INODE_SIZE);
0072 if (EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi)) {
0073 csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum,
0074 csum_size);
0075 offset += csum_size;
0076 }
0077 csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
0078 EXT4_INODE_SIZE(inode->i_sb) - offset);
0079 }
0080
0081 return csum;
0082 }
0083
0084 static int ext4_inode_csum_verify(struct inode *inode, struct ext4_inode *raw,
0085 struct ext4_inode_info *ei)
0086 {
0087 __u32 provided, calculated;
0088
0089 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os !=
0090 cpu_to_le32(EXT4_OS_LINUX) ||
0091 !ext4_has_metadata_csum(inode->i_sb))
0092 return 1;
0093
0094 provided = le16_to_cpu(raw->i_checksum_lo);
0095 calculated = ext4_inode_csum(inode, raw, ei);
0096 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE &&
0097 EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi))
0098 provided |= ((__u32)le16_to_cpu(raw->i_checksum_hi)) << 16;
0099 else
0100 calculated &= 0xFFFF;
0101
0102 return provided == calculated;
0103 }
0104
0105 void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw,
0106 struct ext4_inode_info *ei)
0107 {
0108 __u32 csum;
0109
0110 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os !=
0111 cpu_to_le32(EXT4_OS_LINUX) ||
0112 !ext4_has_metadata_csum(inode->i_sb))
0113 return;
0114
0115 csum = ext4_inode_csum(inode, raw, ei);
0116 raw->i_checksum_lo = cpu_to_le16(csum & 0xFFFF);
0117 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE &&
0118 EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi))
0119 raw->i_checksum_hi = cpu_to_le16(csum >> 16);
0120 }
0121
0122 static inline int ext4_begin_ordered_truncate(struct inode *inode,
0123 loff_t new_size)
0124 {
0125 trace_ext4_begin_ordered_truncate(inode, new_size);
0126
0127
0128
0129
0130
0131
0132 if (!EXT4_I(inode)->jinode)
0133 return 0;
0134 return jbd2_journal_begin_ordered_truncate(EXT4_JOURNAL(inode),
0135 EXT4_I(inode)->jinode,
0136 new_size);
0137 }
0138
0139 static int __ext4_journalled_writepage(struct page *page, unsigned int len);
0140 static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
0141 int pextents);
0142
0143
0144
0145
0146
0147 int ext4_inode_is_fast_symlink(struct inode *inode)
0148 {
0149 if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) {
0150 int ea_blocks = EXT4_I(inode)->i_file_acl ?
0151 EXT4_CLUSTER_SIZE(inode->i_sb) >> 9 : 0;
0152
0153 if (ext4_has_inline_data(inode))
0154 return 0;
0155
0156 return (S_ISLNK(inode->i_mode) && inode->i_blocks - ea_blocks == 0);
0157 }
0158 return S_ISLNK(inode->i_mode) && inode->i_size &&
0159 (inode->i_size < EXT4_N_BLOCKS * 4);
0160 }
0161
0162
0163
0164
0165 void ext4_evict_inode(struct inode *inode)
0166 {
0167 handle_t *handle;
0168 int err;
0169
0170
0171
0172
0173
0174 int extra_credits = 6;
0175 struct ext4_xattr_inode_array *ea_inode_array = NULL;
0176 bool freeze_protected = false;
0177
0178 trace_ext4_evict_inode(inode);
0179
0180 if (EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)
0181 ext4_evict_ea_inode(inode);
0182 if (inode->i_nlink) {
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201 if (inode->i_ino != EXT4_JOURNAL_INO &&
0202 ext4_should_journal_data(inode) &&
0203 S_ISREG(inode->i_mode) && inode->i_data.nrpages) {
0204 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
0205 tid_t commit_tid = EXT4_I(inode)->i_datasync_tid;
0206
0207 jbd2_complete_transaction(journal, commit_tid);
0208 filemap_write_and_wait(&inode->i_data);
0209 }
0210 truncate_inode_pages_final(&inode->i_data);
0211
0212 goto no_delete;
0213 }
0214
0215 if (is_bad_inode(inode))
0216 goto no_delete;
0217 dquot_initialize(inode);
0218
0219 if (ext4_should_order_data(inode))
0220 ext4_begin_ordered_truncate(inode, 0);
0221 truncate_inode_pages_final(&inode->i_data);
0222
0223
0224
0225
0226
0227
0228 if (!list_empty_careful(&inode->i_io_list)) {
0229 WARN_ON_ONCE(!ext4_should_journal_data(inode));
0230 inode_io_list_del(inode);
0231 }
0232
0233
0234
0235
0236
0237
0238
0239 if (!ext4_journal_current_handle()) {
0240 sb_start_intwrite(inode->i_sb);
0241 freeze_protected = true;
0242 }
0243
0244 if (!IS_NOQUOTA(inode))
0245 extra_credits += EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb);
0246
0247
0248
0249
0250
0251 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE,
0252 ext4_blocks_for_truncate(inode) + extra_credits - 3);
0253 if (IS_ERR(handle)) {
0254 ext4_std_error(inode->i_sb, PTR_ERR(handle));
0255
0256
0257
0258
0259
0260 ext4_orphan_del(NULL, inode);
0261 if (freeze_protected)
0262 sb_end_intwrite(inode->i_sb);
0263 goto no_delete;
0264 }
0265
0266 if (IS_SYNC(inode))
0267 ext4_handle_sync(handle);
0268
0269
0270
0271
0272
0273
0274
0275
0276 if (ext4_inode_is_fast_symlink(inode))
0277 memset(EXT4_I(inode)->i_data, 0, sizeof(EXT4_I(inode)->i_data));
0278 inode->i_size = 0;
0279 err = ext4_mark_inode_dirty(handle, inode);
0280 if (err) {
0281 ext4_warning(inode->i_sb,
0282 "couldn't mark inode dirty (err %d)", err);
0283 goto stop_handle;
0284 }
0285 if (inode->i_blocks) {
0286 err = ext4_truncate(inode);
0287 if (err) {
0288 ext4_error_err(inode->i_sb, -err,
0289 "couldn't truncate inode %lu (err %d)",
0290 inode->i_ino, err);
0291 goto stop_handle;
0292 }
0293 }
0294
0295
0296 err = ext4_xattr_delete_inode(handle, inode, &ea_inode_array,
0297 extra_credits);
0298 if (err) {
0299 ext4_warning(inode->i_sb, "xattr delete (err %d)", err);
0300 stop_handle:
0301 ext4_journal_stop(handle);
0302 ext4_orphan_del(NULL, inode);
0303 if (freeze_protected)
0304 sb_end_intwrite(inode->i_sb);
0305 ext4_xattr_inode_array_free(ea_inode_array);
0306 goto no_delete;
0307 }
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317 ext4_orphan_del(handle, inode);
0318 EXT4_I(inode)->i_dtime = (__u32)ktime_get_real_seconds();
0319
0320
0321
0322
0323
0324
0325
0326
0327 if (ext4_mark_inode_dirty(handle, inode))
0328
0329 ext4_clear_inode(inode);
0330 else
0331 ext4_free_inode(handle, inode);
0332 ext4_journal_stop(handle);
0333 if (freeze_protected)
0334 sb_end_intwrite(inode->i_sb);
0335 ext4_xattr_inode_array_free(ea_inode_array);
0336 return;
0337 no_delete:
0338 if (!list_empty(&EXT4_I(inode)->i_fc_list))
0339 ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM, NULL);
0340 ext4_clear_inode(inode);
0341 }
0342
0343 #ifdef CONFIG_QUOTA
0344 qsize_t *ext4_get_reserved_space(struct inode *inode)
0345 {
0346 return &EXT4_I(inode)->i_reserved_quota;
0347 }
0348 #endif
0349
0350
0351
0352
0353
0354 void ext4_da_update_reserve_space(struct inode *inode,
0355 int used, int quota_claim)
0356 {
0357 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
0358 struct ext4_inode_info *ei = EXT4_I(inode);
0359
0360 spin_lock(&ei->i_block_reservation_lock);
0361 trace_ext4_da_update_reserve_space(inode, used, quota_claim);
0362 if (unlikely(used > ei->i_reserved_data_blocks)) {
0363 ext4_warning(inode->i_sb, "%s: ino %lu, used %d "
0364 "with only %d reserved data blocks",
0365 __func__, inode->i_ino, used,
0366 ei->i_reserved_data_blocks);
0367 WARN_ON(1);
0368 used = ei->i_reserved_data_blocks;
0369 }
0370
0371
0372 ei->i_reserved_data_blocks -= used;
0373 percpu_counter_sub(&sbi->s_dirtyclusters_counter, used);
0374
0375 spin_unlock(&ei->i_block_reservation_lock);
0376
0377
0378 if (quota_claim)
0379 dquot_claim_block(inode, EXT4_C2B(sbi, used));
0380 else {
0381
0382
0383
0384
0385
0386 dquot_release_reservation_block(inode, EXT4_C2B(sbi, used));
0387 }
0388
0389
0390
0391
0392
0393
0394 if ((ei->i_reserved_data_blocks == 0) &&
0395 !inode_is_open_for_write(inode))
0396 ext4_discard_preallocations(inode, 0);
0397 }
0398
0399 static int __check_block_validity(struct inode *inode, const char *func,
0400 unsigned int line,
0401 struct ext4_map_blocks *map)
0402 {
0403 if (ext4_has_feature_journal(inode->i_sb) &&
0404 (inode->i_ino ==
0405 le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_journal_inum)))
0406 return 0;
0407 if (!ext4_inode_block_valid(inode, map->m_pblk, map->m_len)) {
0408 ext4_error_inode(inode, func, line, map->m_pblk,
0409 "lblock %lu mapped to illegal pblock %llu "
0410 "(length %d)", (unsigned long) map->m_lblk,
0411 map->m_pblk, map->m_len);
0412 return -EFSCORRUPTED;
0413 }
0414 return 0;
0415 }
0416
0417 int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk,
0418 ext4_lblk_t len)
0419 {
0420 int ret;
0421
0422 if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
0423 return fscrypt_zeroout_range(inode, lblk, pblk, len);
0424
0425 ret = sb_issue_zeroout(inode->i_sb, pblk, len, GFP_NOFS);
0426 if (ret > 0)
0427 ret = 0;
0428
0429 return ret;
0430 }
0431
0432 #define check_block_validity(inode, map) \
0433 __check_block_validity((inode), __func__, __LINE__, (map))
0434
0435 #ifdef ES_AGGRESSIVE_TEST
0436 static void ext4_map_blocks_es_recheck(handle_t *handle,
0437 struct inode *inode,
0438 struct ext4_map_blocks *es_map,
0439 struct ext4_map_blocks *map,
0440 int flags)
0441 {
0442 int retval;
0443
0444 map->m_flags = 0;
0445
0446
0447
0448
0449
0450
0451
0452 down_read(&EXT4_I(inode)->i_data_sem);
0453 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
0454 retval = ext4_ext_map_blocks(handle, inode, map, 0);
0455 } else {
0456 retval = ext4_ind_map_blocks(handle, inode, map, 0);
0457 }
0458 up_read((&EXT4_I(inode)->i_data_sem));
0459
0460
0461
0462
0463
0464 if (es_map->m_lblk != map->m_lblk ||
0465 es_map->m_flags != map->m_flags ||
0466 es_map->m_pblk != map->m_pblk) {
0467 printk("ES cache assertion failed for inode: %lu "
0468 "es_cached ex [%d/%d/%llu/%x] != "
0469 "found ex [%d/%d/%llu/%x] retval %d flags %x\n",
0470 inode->i_ino, es_map->m_lblk, es_map->m_len,
0471 es_map->m_pblk, es_map->m_flags, map->m_lblk,
0472 map->m_len, map->m_pblk, map->m_flags,
0473 retval, flags);
0474 }
0475 }
0476 #endif
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500 int ext4_map_blocks(handle_t *handle, struct inode *inode,
0501 struct ext4_map_blocks *map, int flags)
0502 {
0503 struct extent_status es;
0504 int retval;
0505 int ret = 0;
0506 #ifdef ES_AGGRESSIVE_TEST
0507 struct ext4_map_blocks orig_map;
0508
0509 memcpy(&orig_map, map, sizeof(*map));
0510 #endif
0511
0512 map->m_flags = 0;
0513 ext_debug(inode, "flag 0x%x, max_blocks %u, logical block %lu\n",
0514 flags, map->m_len, (unsigned long) map->m_lblk);
0515
0516
0517
0518
0519 if (unlikely(map->m_len > INT_MAX))
0520 map->m_len = INT_MAX;
0521
0522
0523 if (unlikely(map->m_lblk >= EXT_MAX_BLOCKS))
0524 return -EFSCORRUPTED;
0525
0526
0527 if (!(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) &&
0528 ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) {
0529 if (ext4_es_is_written(&es) || ext4_es_is_unwritten(&es)) {
0530 map->m_pblk = ext4_es_pblock(&es) +
0531 map->m_lblk - es.es_lblk;
0532 map->m_flags |= ext4_es_is_written(&es) ?
0533 EXT4_MAP_MAPPED : EXT4_MAP_UNWRITTEN;
0534 retval = es.es_len - (map->m_lblk - es.es_lblk);
0535 if (retval > map->m_len)
0536 retval = map->m_len;
0537 map->m_len = retval;
0538 } else if (ext4_es_is_delayed(&es) || ext4_es_is_hole(&es)) {
0539 map->m_pblk = 0;
0540 retval = es.es_len - (map->m_lblk - es.es_lblk);
0541 if (retval > map->m_len)
0542 retval = map->m_len;
0543 map->m_len = retval;
0544 retval = 0;
0545 } else {
0546 BUG();
0547 }
0548
0549 if (flags & EXT4_GET_BLOCKS_CACHED_NOWAIT)
0550 return retval;
0551 #ifdef ES_AGGRESSIVE_TEST
0552 ext4_map_blocks_es_recheck(handle, inode, map,
0553 &orig_map, flags);
0554 #endif
0555 goto found;
0556 }
0557
0558
0559
0560
0561 if (flags & EXT4_GET_BLOCKS_CACHED_NOWAIT)
0562 return 0;
0563
0564
0565
0566
0567
0568 down_read(&EXT4_I(inode)->i_data_sem);
0569 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
0570 retval = ext4_ext_map_blocks(handle, inode, map, 0);
0571 } else {
0572 retval = ext4_ind_map_blocks(handle, inode, map, 0);
0573 }
0574 if (retval > 0) {
0575 unsigned int status;
0576
0577 if (unlikely(retval != map->m_len)) {
0578 ext4_warning(inode->i_sb,
0579 "ES len assertion failed for inode "
0580 "%lu: retval %d != map->m_len %d",
0581 inode->i_ino, retval, map->m_len);
0582 WARN_ON(1);
0583 }
0584
0585 status = map->m_flags & EXT4_MAP_UNWRITTEN ?
0586 EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
0587 if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
0588 !(status & EXTENT_STATUS_WRITTEN) &&
0589 ext4_es_scan_range(inode, &ext4_es_is_delayed, map->m_lblk,
0590 map->m_lblk + map->m_len - 1))
0591 status |= EXTENT_STATUS_DELAYED;
0592 ret = ext4_es_insert_extent(inode, map->m_lblk,
0593 map->m_len, map->m_pblk, status);
0594 if (ret < 0)
0595 retval = ret;
0596 }
0597 up_read((&EXT4_I(inode)->i_data_sem));
0598
0599 found:
0600 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) {
0601 ret = check_block_validity(inode, map);
0602 if (ret != 0)
0603 return ret;
0604 }
0605
0606
0607 if ((flags & EXT4_GET_BLOCKS_CREATE) == 0)
0608 return retval;
0609
0610
0611
0612
0613
0614
0615
0616
0617 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED)
0618
0619
0620
0621
0622
0623 if (!(flags & EXT4_GET_BLOCKS_CONVERT_UNWRITTEN))
0624 return retval;
0625
0626
0627
0628
0629
0630 map->m_flags &= ~EXT4_MAP_FLAGS;
0631
0632
0633
0634
0635
0636
0637
0638 down_write(&EXT4_I(inode)->i_data_sem);
0639
0640
0641
0642
0643
0644 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
0645 retval = ext4_ext_map_blocks(handle, inode, map, flags);
0646 } else {
0647 retval = ext4_ind_map_blocks(handle, inode, map, flags);
0648
0649 if (retval > 0 && map->m_flags & EXT4_MAP_NEW) {
0650
0651
0652
0653
0654
0655 ext4_clear_inode_state(inode, EXT4_STATE_EXT_MIGRATE);
0656 }
0657
0658
0659
0660
0661
0662
0663
0664 if ((retval > 0) &&
0665 (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE))
0666 ext4_da_update_reserve_space(inode, retval, 1);
0667 }
0668
0669 if (retval > 0) {
0670 unsigned int status;
0671
0672 if (unlikely(retval != map->m_len)) {
0673 ext4_warning(inode->i_sb,
0674 "ES len assertion failed for inode "
0675 "%lu: retval %d != map->m_len %d",
0676 inode->i_ino, retval, map->m_len);
0677 WARN_ON(1);
0678 }
0679
0680
0681
0682
0683
0684
0685
0686
0687 if (flags & EXT4_GET_BLOCKS_ZERO &&
0688 map->m_flags & EXT4_MAP_MAPPED &&
0689 map->m_flags & EXT4_MAP_NEW) {
0690 ret = ext4_issue_zeroout(inode, map->m_lblk,
0691 map->m_pblk, map->m_len);
0692 if (ret) {
0693 retval = ret;
0694 goto out_sem;
0695 }
0696 }
0697
0698
0699
0700
0701
0702 if ((flags & EXT4_GET_BLOCKS_PRE_IO) &&
0703 ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) {
0704 if (ext4_es_is_written(&es))
0705 goto out_sem;
0706 }
0707 status = map->m_flags & EXT4_MAP_UNWRITTEN ?
0708 EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
0709 if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
0710 !(status & EXTENT_STATUS_WRITTEN) &&
0711 ext4_es_scan_range(inode, &ext4_es_is_delayed, map->m_lblk,
0712 map->m_lblk + map->m_len - 1))
0713 status |= EXTENT_STATUS_DELAYED;
0714 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
0715 map->m_pblk, status);
0716 if (ret < 0) {
0717 retval = ret;
0718 goto out_sem;
0719 }
0720 }
0721
0722 out_sem:
0723 up_write((&EXT4_I(inode)->i_data_sem));
0724 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) {
0725 ret = check_block_validity(inode, map);
0726 if (ret != 0)
0727 return ret;
0728
0729
0730
0731
0732
0733
0734 if (map->m_flags & EXT4_MAP_NEW &&
0735 !(map->m_flags & EXT4_MAP_UNWRITTEN) &&
0736 !(flags & EXT4_GET_BLOCKS_ZERO) &&
0737 !ext4_is_quota_file(inode) &&
0738 ext4_should_order_data(inode)) {
0739 loff_t start_byte =
0740 (loff_t)map->m_lblk << inode->i_blkbits;
0741 loff_t length = (loff_t)map->m_len << inode->i_blkbits;
0742
0743 if (flags & EXT4_GET_BLOCKS_IO_SUBMIT)
0744 ret = ext4_jbd2_inode_add_wait(handle, inode,
0745 start_byte, length);
0746 else
0747 ret = ext4_jbd2_inode_add_write(handle, inode,
0748 start_byte, length);
0749 if (ret)
0750 return ret;
0751 }
0752 }
0753 if (retval > 0 && (map->m_flags & EXT4_MAP_UNWRITTEN ||
0754 map->m_flags & EXT4_MAP_MAPPED))
0755 ext4_fc_track_range(handle, inode, map->m_lblk,
0756 map->m_lblk + map->m_len - 1);
0757 if (retval < 0)
0758 ext_debug(inode, "failed with err %d\n", retval);
0759 return retval;
0760 }
0761
0762
0763
0764
0765
0766 static void ext4_update_bh_state(struct buffer_head *bh, unsigned long flags)
0767 {
0768 unsigned long old_state;
0769 unsigned long new_state;
0770
0771 flags &= EXT4_MAP_FLAGS;
0772
0773
0774 if (!bh->b_page) {
0775 bh->b_state = (bh->b_state & ~EXT4_MAP_FLAGS) | flags;
0776 return;
0777 }
0778
0779
0780
0781
0782
0783 do {
0784 old_state = READ_ONCE(bh->b_state);
0785 new_state = (old_state & ~EXT4_MAP_FLAGS) | flags;
0786 } while (unlikely(
0787 cmpxchg(&bh->b_state, old_state, new_state) != old_state));
0788 }
0789
0790 static int _ext4_get_block(struct inode *inode, sector_t iblock,
0791 struct buffer_head *bh, int flags)
0792 {
0793 struct ext4_map_blocks map;
0794 int ret = 0;
0795
0796 if (ext4_has_inline_data(inode))
0797 return -ERANGE;
0798
0799 map.m_lblk = iblock;
0800 map.m_len = bh->b_size >> inode->i_blkbits;
0801
0802 ret = ext4_map_blocks(ext4_journal_current_handle(), inode, &map,
0803 flags);
0804 if (ret > 0) {
0805 map_bh(bh, inode->i_sb, map.m_pblk);
0806 ext4_update_bh_state(bh, map.m_flags);
0807 bh->b_size = inode->i_sb->s_blocksize * map.m_len;
0808 ret = 0;
0809 } else if (ret == 0) {
0810
0811 bh->b_size = inode->i_sb->s_blocksize * map.m_len;
0812 }
0813 return ret;
0814 }
0815
0816 int ext4_get_block(struct inode *inode, sector_t iblock,
0817 struct buffer_head *bh, int create)
0818 {
0819 return _ext4_get_block(inode, iblock, bh,
0820 create ? EXT4_GET_BLOCKS_CREATE : 0);
0821 }
0822
0823
0824
0825
0826
0827
0828 int ext4_get_block_unwritten(struct inode *inode, sector_t iblock,
0829 struct buffer_head *bh_result, int create)
0830 {
0831 ext4_debug("ext4_get_block_unwritten: inode %lu, create flag %d\n",
0832 inode->i_ino, create);
0833 return _ext4_get_block(inode, iblock, bh_result,
0834 EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT);
0835 }
0836
0837
0838 #define DIO_MAX_BLOCKS 4096
0839
0840
0841
0842
0843 struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
0844 ext4_lblk_t block, int map_flags)
0845 {
0846 struct ext4_map_blocks map;
0847 struct buffer_head *bh;
0848 int create = map_flags & EXT4_GET_BLOCKS_CREATE;
0849 bool nowait = map_flags & EXT4_GET_BLOCKS_CACHED_NOWAIT;
0850 int err;
0851
0852 ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
0853 || handle != NULL || create == 0);
0854 ASSERT(create == 0 || !nowait);
0855
0856 map.m_lblk = block;
0857 map.m_len = 1;
0858 err = ext4_map_blocks(handle, inode, &map, map_flags);
0859
0860 if (err == 0)
0861 return create ? ERR_PTR(-ENOSPC) : NULL;
0862 if (err < 0)
0863 return ERR_PTR(err);
0864
0865 if (nowait)
0866 return sb_find_get_block(inode->i_sb, map.m_pblk);
0867
0868 bh = sb_getblk(inode->i_sb, map.m_pblk);
0869 if (unlikely(!bh))
0870 return ERR_PTR(-ENOMEM);
0871 if (map.m_flags & EXT4_MAP_NEW) {
0872 ASSERT(create != 0);
0873 ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
0874 || (handle != NULL));
0875
0876
0877
0878
0879
0880
0881
0882
0883 lock_buffer(bh);
0884 BUFFER_TRACE(bh, "call get_create_access");
0885 err = ext4_journal_get_create_access(handle, inode->i_sb, bh,
0886 EXT4_JTR_NONE);
0887 if (unlikely(err)) {
0888 unlock_buffer(bh);
0889 goto errout;
0890 }
0891 if (!buffer_uptodate(bh)) {
0892 memset(bh->b_data, 0, inode->i_sb->s_blocksize);
0893 set_buffer_uptodate(bh);
0894 }
0895 unlock_buffer(bh);
0896 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
0897 err = ext4_handle_dirty_metadata(handle, inode, bh);
0898 if (unlikely(err))
0899 goto errout;
0900 } else
0901 BUFFER_TRACE(bh, "not a new buffer");
0902 return bh;
0903 errout:
0904 brelse(bh);
0905 return ERR_PTR(err);
0906 }
0907
0908 struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode,
0909 ext4_lblk_t block, int map_flags)
0910 {
0911 struct buffer_head *bh;
0912 int ret;
0913
0914 bh = ext4_getblk(handle, inode, block, map_flags);
0915 if (IS_ERR(bh))
0916 return bh;
0917 if (!bh || ext4_buffer_uptodate(bh))
0918 return bh;
0919
0920 ret = ext4_read_bh_lock(bh, REQ_META | REQ_PRIO, true);
0921 if (ret) {
0922 put_bh(bh);
0923 return ERR_PTR(ret);
0924 }
0925 return bh;
0926 }
0927
0928
0929 int ext4_bread_batch(struct inode *inode, ext4_lblk_t block, int bh_count,
0930 bool wait, struct buffer_head **bhs)
0931 {
0932 int i, err;
0933
0934 for (i = 0; i < bh_count; i++) {
0935 bhs[i] = ext4_getblk(NULL, inode, block + i, 0 );
0936 if (IS_ERR(bhs[i])) {
0937 err = PTR_ERR(bhs[i]);
0938 bh_count = i;
0939 goto out_brelse;
0940 }
0941 }
0942
0943 for (i = 0; i < bh_count; i++)
0944
0945 if (bhs[i] && !ext4_buffer_uptodate(bhs[i]))
0946 ext4_read_bh_lock(bhs[i], REQ_META | REQ_PRIO, false);
0947
0948 if (!wait)
0949 return 0;
0950
0951 for (i = 0; i < bh_count; i++)
0952 if (bhs[i])
0953 wait_on_buffer(bhs[i]);
0954
0955 for (i = 0; i < bh_count; i++) {
0956 if (bhs[i] && !buffer_uptodate(bhs[i])) {
0957 err = -EIO;
0958 goto out_brelse;
0959 }
0960 }
0961 return 0;
0962
0963 out_brelse:
0964 for (i = 0; i < bh_count; i++) {
0965 brelse(bhs[i]);
0966 bhs[i] = NULL;
0967 }
0968 return err;
0969 }
0970
0971 int ext4_walk_page_buffers(handle_t *handle, struct inode *inode,
0972 struct buffer_head *head,
0973 unsigned from,
0974 unsigned to,
0975 int *partial,
0976 int (*fn)(handle_t *handle, struct inode *inode,
0977 struct buffer_head *bh))
0978 {
0979 struct buffer_head *bh;
0980 unsigned block_start, block_end;
0981 unsigned blocksize = head->b_size;
0982 int err, ret = 0;
0983 struct buffer_head *next;
0984
0985 for (bh = head, block_start = 0;
0986 ret == 0 && (bh != head || !block_start);
0987 block_start = block_end, bh = next) {
0988 next = bh->b_this_page;
0989 block_end = block_start + blocksize;
0990 if (block_end <= from || block_start >= to) {
0991 if (partial && !buffer_uptodate(bh))
0992 *partial = 1;
0993 continue;
0994 }
0995 err = (*fn)(handle, inode, bh);
0996 if (!ret)
0997 ret = err;
0998 }
0999 return ret;
1000 }
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026 int do_journal_get_write_access(handle_t *handle, struct inode *inode,
1027 struct buffer_head *bh)
1028 {
1029 int dirty = buffer_dirty(bh);
1030 int ret;
1031
1032 if (!buffer_mapped(bh) || buffer_freed(bh))
1033 return 0;
1034
1035
1036
1037
1038
1039
1040
1041
1042 if (dirty)
1043 clear_buffer_dirty(bh);
1044 BUFFER_TRACE(bh, "get write access");
1045 ret = ext4_journal_get_write_access(handle, inode->i_sb, bh,
1046 EXT4_JTR_NONE);
1047 if (!ret && dirty)
1048 ret = ext4_handle_dirty_metadata(handle, NULL, bh);
1049 return ret;
1050 }
1051
1052 #ifdef CONFIG_FS_ENCRYPTION
1053 static int ext4_block_write_begin(struct page *page, loff_t pos, unsigned len,
1054 get_block_t *get_block)
1055 {
1056 unsigned from = pos & (PAGE_SIZE - 1);
1057 unsigned to = from + len;
1058 struct inode *inode = page->mapping->host;
1059 unsigned block_start, block_end;
1060 sector_t block;
1061 int err = 0;
1062 unsigned blocksize = inode->i_sb->s_blocksize;
1063 unsigned bbits;
1064 struct buffer_head *bh, *head, *wait[2];
1065 int nr_wait = 0;
1066 int i;
1067
1068 BUG_ON(!PageLocked(page));
1069 BUG_ON(from > PAGE_SIZE);
1070 BUG_ON(to > PAGE_SIZE);
1071 BUG_ON(from > to);
1072
1073 if (!page_has_buffers(page))
1074 create_empty_buffers(page, blocksize, 0);
1075 head = page_buffers(page);
1076 bbits = ilog2(blocksize);
1077 block = (sector_t)page->index << (PAGE_SHIFT - bbits);
1078
1079 for (bh = head, block_start = 0; bh != head || !block_start;
1080 block++, block_start = block_end, bh = bh->b_this_page) {
1081 block_end = block_start + blocksize;
1082 if (block_end <= from || block_start >= to) {
1083 if (PageUptodate(page)) {
1084 set_buffer_uptodate(bh);
1085 }
1086 continue;
1087 }
1088 if (buffer_new(bh))
1089 clear_buffer_new(bh);
1090 if (!buffer_mapped(bh)) {
1091 WARN_ON(bh->b_size != blocksize);
1092 err = get_block(inode, block, bh, 1);
1093 if (err)
1094 break;
1095 if (buffer_new(bh)) {
1096 if (PageUptodate(page)) {
1097 clear_buffer_new(bh);
1098 set_buffer_uptodate(bh);
1099 mark_buffer_dirty(bh);
1100 continue;
1101 }
1102 if (block_end > to || block_start < from)
1103 zero_user_segments(page, to, block_end,
1104 block_start, from);
1105 continue;
1106 }
1107 }
1108 if (PageUptodate(page)) {
1109 set_buffer_uptodate(bh);
1110 continue;
1111 }
1112 if (!buffer_uptodate(bh) && !buffer_delay(bh) &&
1113 !buffer_unwritten(bh) &&
1114 (block_start < from || block_end > to)) {
1115 ext4_read_bh_lock(bh, 0, false);
1116 wait[nr_wait++] = bh;
1117 }
1118 }
1119
1120
1121
1122 for (i = 0; i < nr_wait; i++) {
1123 wait_on_buffer(wait[i]);
1124 if (!buffer_uptodate(wait[i]))
1125 err = -EIO;
1126 }
1127 if (unlikely(err)) {
1128 page_zero_new_buffers(page, from, to);
1129 } else if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
1130 for (i = 0; i < nr_wait; i++) {
1131 int err2;
1132
1133 err2 = fscrypt_decrypt_pagecache_blocks(page, blocksize,
1134 bh_offset(wait[i]));
1135 if (err2) {
1136 clear_buffer_uptodate(wait[i]);
1137 err = err2;
1138 }
1139 }
1140 }
1141
1142 return err;
1143 }
1144 #endif
1145
1146 static int ext4_write_begin(struct file *file, struct address_space *mapping,
1147 loff_t pos, unsigned len,
1148 struct page **pagep, void **fsdata)
1149 {
1150 struct inode *inode = mapping->host;
1151 int ret, needed_blocks;
1152 handle_t *handle;
1153 int retries = 0;
1154 struct page *page;
1155 pgoff_t index;
1156 unsigned from, to;
1157
1158 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
1159 return -EIO;
1160
1161 trace_ext4_write_begin(inode, pos, len);
1162
1163
1164
1165
1166 needed_blocks = ext4_writepage_trans_blocks(inode) + 1;
1167 index = pos >> PAGE_SHIFT;
1168 from = pos & (PAGE_SIZE - 1);
1169 to = from + len;
1170
1171 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
1172 ret = ext4_try_to_write_inline_data(mapping, inode, pos, len,
1173 pagep);
1174 if (ret < 0)
1175 return ret;
1176 if (ret == 1)
1177 return 0;
1178 }
1179
1180
1181
1182
1183
1184
1185
1186
1187 retry_grab:
1188 page = grab_cache_page_write_begin(mapping, index);
1189 if (!page)
1190 return -ENOMEM;
1191 unlock_page(page);
1192
1193 retry_journal:
1194 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks);
1195 if (IS_ERR(handle)) {
1196 put_page(page);
1197 return PTR_ERR(handle);
1198 }
1199
1200 lock_page(page);
1201 if (page->mapping != mapping) {
1202
1203 unlock_page(page);
1204 put_page(page);
1205 ext4_journal_stop(handle);
1206 goto retry_grab;
1207 }
1208
1209 wait_for_stable_page(page);
1210
1211 #ifdef CONFIG_FS_ENCRYPTION
1212 if (ext4_should_dioread_nolock(inode))
1213 ret = ext4_block_write_begin(page, pos, len,
1214 ext4_get_block_unwritten);
1215 else
1216 ret = ext4_block_write_begin(page, pos, len,
1217 ext4_get_block);
1218 #else
1219 if (ext4_should_dioread_nolock(inode))
1220 ret = __block_write_begin(page, pos, len,
1221 ext4_get_block_unwritten);
1222 else
1223 ret = __block_write_begin(page, pos, len, ext4_get_block);
1224 #endif
1225 if (!ret && ext4_should_journal_data(inode)) {
1226 ret = ext4_walk_page_buffers(handle, inode,
1227 page_buffers(page), from, to, NULL,
1228 do_journal_get_write_access);
1229 }
1230
1231 if (ret) {
1232 bool extended = (pos + len > inode->i_size) &&
1233 !ext4_verity_in_progress(inode);
1234
1235 unlock_page(page);
1236
1237
1238
1239
1240
1241
1242
1243
1244 if (extended && ext4_can_truncate(inode))
1245 ext4_orphan_add(handle, inode);
1246
1247 ext4_journal_stop(handle);
1248 if (extended) {
1249 ext4_truncate_failed_write(inode);
1250
1251
1252
1253
1254
1255
1256 if (inode->i_nlink)
1257 ext4_orphan_del(NULL, inode);
1258 }
1259
1260 if (ret == -ENOSPC &&
1261 ext4_should_retry_alloc(inode->i_sb, &retries))
1262 goto retry_journal;
1263 put_page(page);
1264 return ret;
1265 }
1266 *pagep = page;
1267 return ret;
1268 }
1269
1270
1271 static int write_end_fn(handle_t *handle, struct inode *inode,
1272 struct buffer_head *bh)
1273 {
1274 int ret;
1275 if (!buffer_mapped(bh) || buffer_freed(bh))
1276 return 0;
1277 set_buffer_uptodate(bh);
1278 ret = ext4_handle_dirty_metadata(handle, NULL, bh);
1279 clear_buffer_meta(bh);
1280 clear_buffer_prio(bh);
1281 return ret;
1282 }
1283
1284
1285
1286
1287
1288
1289
1290
1291 static int ext4_write_end(struct file *file,
1292 struct address_space *mapping,
1293 loff_t pos, unsigned len, unsigned copied,
1294 struct page *page, void *fsdata)
1295 {
1296 handle_t *handle = ext4_journal_current_handle();
1297 struct inode *inode = mapping->host;
1298 loff_t old_size = inode->i_size;
1299 int ret = 0, ret2;
1300 int i_size_changed = 0;
1301 bool verity = ext4_verity_in_progress(inode);
1302
1303 trace_ext4_write_end(inode, pos, len, copied);
1304
1305 if (ext4_has_inline_data(inode))
1306 return ext4_write_inline_data_end(inode, pos, len, copied, page);
1307
1308 copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
1309
1310
1311
1312
1313
1314
1315
1316 if (!verity)
1317 i_size_changed = ext4_update_inode_size(inode, pos + copied);
1318 unlock_page(page);
1319 put_page(page);
1320
1321 if (old_size < pos && !verity)
1322 pagecache_isize_extended(inode, old_size, pos);
1323
1324
1325
1326
1327
1328
1329 if (i_size_changed)
1330 ret = ext4_mark_inode_dirty(handle, inode);
1331
1332 if (pos + len > inode->i_size && !verity && ext4_can_truncate(inode))
1333
1334
1335
1336
1337 ext4_orphan_add(handle, inode);
1338
1339 ret2 = ext4_journal_stop(handle);
1340 if (!ret)
1341 ret = ret2;
1342
1343 if (pos + len > inode->i_size && !verity) {
1344 ext4_truncate_failed_write(inode);
1345
1346
1347
1348
1349
1350 if (inode->i_nlink)
1351 ext4_orphan_del(NULL, inode);
1352 }
1353
1354 return ret ? ret : copied;
1355 }
1356
1357
1358
1359
1360
1361
1362 static void ext4_journalled_zero_new_buffers(handle_t *handle,
1363 struct inode *inode,
1364 struct page *page,
1365 unsigned from, unsigned to)
1366 {
1367 unsigned int block_start = 0, block_end;
1368 struct buffer_head *head, *bh;
1369
1370 bh = head = page_buffers(page);
1371 do {
1372 block_end = block_start + bh->b_size;
1373 if (buffer_new(bh)) {
1374 if (block_end > from && block_start < to) {
1375 if (!PageUptodate(page)) {
1376 unsigned start, size;
1377
1378 start = max(from, block_start);
1379 size = min(to, block_end) - start;
1380
1381 zero_user(page, start, size);
1382 write_end_fn(handle, inode, bh);
1383 }
1384 clear_buffer_new(bh);
1385 }
1386 }
1387 block_start = block_end;
1388 bh = bh->b_this_page;
1389 } while (bh != head);
1390 }
1391
1392 static int ext4_journalled_write_end(struct file *file,
1393 struct address_space *mapping,
1394 loff_t pos, unsigned len, unsigned copied,
1395 struct page *page, void *fsdata)
1396 {
1397 handle_t *handle = ext4_journal_current_handle();
1398 struct inode *inode = mapping->host;
1399 loff_t old_size = inode->i_size;
1400 int ret = 0, ret2;
1401 int partial = 0;
1402 unsigned from, to;
1403 int size_changed = 0;
1404 bool verity = ext4_verity_in_progress(inode);
1405
1406 trace_ext4_journalled_write_end(inode, pos, len, copied);
1407 from = pos & (PAGE_SIZE - 1);
1408 to = from + len;
1409
1410 BUG_ON(!ext4_handle_valid(handle));
1411
1412 if (ext4_has_inline_data(inode))
1413 return ext4_write_inline_data_end(inode, pos, len, copied, page);
1414
1415 if (unlikely(copied < len) && !PageUptodate(page)) {
1416 copied = 0;
1417 ext4_journalled_zero_new_buffers(handle, inode, page, from, to);
1418 } else {
1419 if (unlikely(copied < len))
1420 ext4_journalled_zero_new_buffers(handle, inode, page,
1421 from + copied, to);
1422 ret = ext4_walk_page_buffers(handle, inode, page_buffers(page),
1423 from, from + copied, &partial,
1424 write_end_fn);
1425 if (!partial)
1426 SetPageUptodate(page);
1427 }
1428 if (!verity)
1429 size_changed = ext4_update_inode_size(inode, pos + copied);
1430 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
1431 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid;
1432 unlock_page(page);
1433 put_page(page);
1434
1435 if (old_size < pos && !verity)
1436 pagecache_isize_extended(inode, old_size, pos);
1437
1438 if (size_changed) {
1439 ret2 = ext4_mark_inode_dirty(handle, inode);
1440 if (!ret)
1441 ret = ret2;
1442 }
1443
1444 if (pos + len > inode->i_size && !verity && ext4_can_truncate(inode))
1445
1446
1447
1448
1449 ext4_orphan_add(handle, inode);
1450
1451 ret2 = ext4_journal_stop(handle);
1452 if (!ret)
1453 ret = ret2;
1454 if (pos + len > inode->i_size && !verity) {
1455 ext4_truncate_failed_write(inode);
1456
1457
1458
1459
1460
1461 if (inode->i_nlink)
1462 ext4_orphan_del(NULL, inode);
1463 }
1464
1465 return ret ? ret : copied;
1466 }
1467
1468
1469
1470
1471 static int ext4_da_reserve_space(struct inode *inode)
1472 {
1473 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1474 struct ext4_inode_info *ei = EXT4_I(inode);
1475 int ret;
1476
1477
1478
1479
1480
1481
1482 ret = dquot_reserve_block(inode, EXT4_C2B(sbi, 1));
1483 if (ret)
1484 return ret;
1485
1486 spin_lock(&ei->i_block_reservation_lock);
1487 if (ext4_claim_free_clusters(sbi, 1, 0)) {
1488 spin_unlock(&ei->i_block_reservation_lock);
1489 dquot_release_reservation_block(inode, EXT4_C2B(sbi, 1));
1490 return -ENOSPC;
1491 }
1492 ei->i_reserved_data_blocks++;
1493 trace_ext4_da_reserve_space(inode);
1494 spin_unlock(&ei->i_block_reservation_lock);
1495
1496 return 0;
1497 }
1498
1499 void ext4_da_release_space(struct inode *inode, int to_free)
1500 {
1501 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1502 struct ext4_inode_info *ei = EXT4_I(inode);
1503
1504 if (!to_free)
1505 return;
1506
1507 spin_lock(&EXT4_I(inode)->i_block_reservation_lock);
1508
1509 trace_ext4_da_release_space(inode, to_free);
1510 if (unlikely(to_free > ei->i_reserved_data_blocks)) {
1511
1512
1513
1514
1515
1516
1517 ext4_warning(inode->i_sb, "ext4_da_release_space: "
1518 "ino %lu, to_free %d with only %d reserved "
1519 "data blocks", inode->i_ino, to_free,
1520 ei->i_reserved_data_blocks);
1521 WARN_ON(1);
1522 to_free = ei->i_reserved_data_blocks;
1523 }
1524 ei->i_reserved_data_blocks -= to_free;
1525
1526
1527 percpu_counter_sub(&sbi->s_dirtyclusters_counter, to_free);
1528
1529 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);
1530
1531 dquot_release_reservation_block(inode, EXT4_C2B(sbi, to_free));
1532 }
1533
1534
1535
1536
1537
1538 struct mpage_da_data {
1539 struct inode *inode;
1540 struct writeback_control *wbc;
1541
1542 pgoff_t first_page;
1543 pgoff_t next_page;
1544 pgoff_t last_page;
1545
1546
1547
1548
1549
1550 struct ext4_map_blocks map;
1551 struct ext4_io_submit io_submit;
1552 unsigned int do_map:1;
1553 unsigned int scanned_until_end:1;
1554 };
1555
1556 static void mpage_release_unused_pages(struct mpage_da_data *mpd,
1557 bool invalidate)
1558 {
1559 unsigned nr, i;
1560 pgoff_t index, end;
1561 struct folio_batch fbatch;
1562 struct inode *inode = mpd->inode;
1563 struct address_space *mapping = inode->i_mapping;
1564
1565
1566 if (mpd->first_page >= mpd->next_page)
1567 return;
1568
1569 mpd->scanned_until_end = 0;
1570 index = mpd->first_page;
1571 end = mpd->next_page - 1;
1572 if (invalidate) {
1573 ext4_lblk_t start, last;
1574 start = index << (PAGE_SHIFT - inode->i_blkbits);
1575 last = end << (PAGE_SHIFT - inode->i_blkbits);
1576
1577
1578
1579
1580
1581 down_write(&EXT4_I(inode)->i_data_sem);
1582 ext4_es_remove_extent(inode, start, last - start + 1);
1583 up_write(&EXT4_I(inode)->i_data_sem);
1584 }
1585
1586 folio_batch_init(&fbatch);
1587 while (index <= end) {
1588 nr = filemap_get_folios(mapping, &index, end, &fbatch);
1589 if (nr == 0)
1590 break;
1591 for (i = 0; i < nr; i++) {
1592 struct folio *folio = fbatch.folios[i];
1593
1594 if (folio->index < mpd->first_page)
1595 continue;
1596 if (folio->index + folio_nr_pages(folio) - 1 > end)
1597 continue;
1598 BUG_ON(!folio_test_locked(folio));
1599 BUG_ON(folio_test_writeback(folio));
1600 if (invalidate) {
1601 if (folio_mapped(folio))
1602 folio_clear_dirty_for_io(folio);
1603 block_invalidate_folio(folio, 0,
1604 folio_size(folio));
1605 folio_clear_uptodate(folio);
1606 }
1607 folio_unlock(folio);
1608 }
1609 folio_batch_release(&fbatch);
1610 }
1611 }
1612
1613 static void ext4_print_free_blocks(struct inode *inode)
1614 {
1615 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1616 struct super_block *sb = inode->i_sb;
1617 struct ext4_inode_info *ei = EXT4_I(inode);
1618
1619 ext4_msg(sb, KERN_CRIT, "Total free blocks count %lld",
1620 EXT4_C2B(EXT4_SB(inode->i_sb),
1621 ext4_count_free_clusters(sb)));
1622 ext4_msg(sb, KERN_CRIT, "Free/Dirty block details");
1623 ext4_msg(sb, KERN_CRIT, "free_blocks=%lld",
1624 (long long) EXT4_C2B(EXT4_SB(sb),
1625 percpu_counter_sum(&sbi->s_freeclusters_counter)));
1626 ext4_msg(sb, KERN_CRIT, "dirty_blocks=%lld",
1627 (long long) EXT4_C2B(EXT4_SB(sb),
1628 percpu_counter_sum(&sbi->s_dirtyclusters_counter)));
1629 ext4_msg(sb, KERN_CRIT, "Block reservation details");
1630 ext4_msg(sb, KERN_CRIT, "i_reserved_data_blocks=%u",
1631 ei->i_reserved_data_blocks);
1632 return;
1633 }
1634
1635 static int ext4_bh_delay_or_unwritten(handle_t *handle, struct inode *inode,
1636 struct buffer_head *bh)
1637 {
1638 return (buffer_delay(bh) || buffer_unwritten(bh)) && buffer_dirty(bh);
1639 }
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652 static int ext4_insert_delayed_block(struct inode *inode, ext4_lblk_t lblk)
1653 {
1654 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1655 int ret;
1656 bool allocated = false;
1657 bool reserved = false;
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670 if (sbi->s_cluster_ratio == 1) {
1671 ret = ext4_da_reserve_space(inode);
1672 if (ret != 0)
1673 goto errout;
1674 reserved = true;
1675 } else {
1676 if (!ext4_es_scan_clu(inode, &ext4_es_is_delonly, lblk)) {
1677 if (!ext4_es_scan_clu(inode,
1678 &ext4_es_is_mapped, lblk)) {
1679 ret = ext4_clu_mapped(inode,
1680 EXT4_B2C(sbi, lblk));
1681 if (ret < 0)
1682 goto errout;
1683 if (ret == 0) {
1684 ret = ext4_da_reserve_space(inode);
1685 if (ret != 0)
1686 goto errout;
1687 reserved = true;
1688 } else {
1689 allocated = true;
1690 }
1691 } else {
1692 allocated = true;
1693 }
1694 }
1695 }
1696
1697 ret = ext4_es_insert_delayed_block(inode, lblk, allocated);
1698 if (ret && reserved)
1699 ext4_da_release_space(inode, 1);
1700
1701 errout:
1702 return ret;
1703 }
1704
1705
1706
1707
1708
1709
1710
1711 static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
1712 struct ext4_map_blocks *map,
1713 struct buffer_head *bh)
1714 {
1715 struct extent_status es;
1716 int retval;
1717 sector_t invalid_block = ~((sector_t) 0xffff);
1718 #ifdef ES_AGGRESSIVE_TEST
1719 struct ext4_map_blocks orig_map;
1720
1721 memcpy(&orig_map, map, sizeof(*map));
1722 #endif
1723
1724 if (invalid_block < ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es))
1725 invalid_block = ~0;
1726
1727 map->m_flags = 0;
1728 ext_debug(inode, "max_blocks %u, logical block %lu\n", map->m_len,
1729 (unsigned long) map->m_lblk);
1730
1731
1732 if (ext4_es_lookup_extent(inode, iblock, NULL, &es)) {
1733 if (ext4_es_is_hole(&es)) {
1734 retval = 0;
1735 down_read(&EXT4_I(inode)->i_data_sem);
1736 goto add_delayed;
1737 }
1738
1739
1740
1741
1742
1743 if (ext4_es_is_delayed(&es) && !ext4_es_is_unwritten(&es)) {
1744 map_bh(bh, inode->i_sb, invalid_block);
1745 set_buffer_new(bh);
1746 set_buffer_delay(bh);
1747 return 0;
1748 }
1749
1750 map->m_pblk = ext4_es_pblock(&es) + iblock - es.es_lblk;
1751 retval = es.es_len - (iblock - es.es_lblk);
1752 if (retval > map->m_len)
1753 retval = map->m_len;
1754 map->m_len = retval;
1755 if (ext4_es_is_written(&es))
1756 map->m_flags |= EXT4_MAP_MAPPED;
1757 else if (ext4_es_is_unwritten(&es))
1758 map->m_flags |= EXT4_MAP_UNWRITTEN;
1759 else
1760 BUG();
1761
1762 #ifdef ES_AGGRESSIVE_TEST
1763 ext4_map_blocks_es_recheck(NULL, inode, map, &orig_map, 0);
1764 #endif
1765 return retval;
1766 }
1767
1768
1769
1770
1771
1772 down_read(&EXT4_I(inode)->i_data_sem);
1773 if (ext4_has_inline_data(inode))
1774 retval = 0;
1775 else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
1776 retval = ext4_ext_map_blocks(NULL, inode, map, 0);
1777 else
1778 retval = ext4_ind_map_blocks(NULL, inode, map, 0);
1779
1780 add_delayed:
1781 if (retval == 0) {
1782 int ret;
1783
1784
1785
1786
1787
1788
1789 ret = ext4_insert_delayed_block(inode, map->m_lblk);
1790 if (ret != 0) {
1791 retval = ret;
1792 goto out_unlock;
1793 }
1794
1795 map_bh(bh, inode->i_sb, invalid_block);
1796 set_buffer_new(bh);
1797 set_buffer_delay(bh);
1798 } else if (retval > 0) {
1799 int ret;
1800 unsigned int status;
1801
1802 if (unlikely(retval != map->m_len)) {
1803 ext4_warning(inode->i_sb,
1804 "ES len assertion failed for inode "
1805 "%lu: retval %d != map->m_len %d",
1806 inode->i_ino, retval, map->m_len);
1807 WARN_ON(1);
1808 }
1809
1810 status = map->m_flags & EXT4_MAP_UNWRITTEN ?
1811 EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
1812 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
1813 map->m_pblk, status);
1814 if (ret != 0)
1815 retval = ret;
1816 }
1817
1818 out_unlock:
1819 up_read((&EXT4_I(inode)->i_data_sem));
1820
1821 return retval;
1822 }
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836 int ext4_da_get_block_prep(struct inode *inode, sector_t iblock,
1837 struct buffer_head *bh, int create)
1838 {
1839 struct ext4_map_blocks map;
1840 int ret = 0;
1841
1842 BUG_ON(create == 0);
1843 BUG_ON(bh->b_size != inode->i_sb->s_blocksize);
1844
1845 map.m_lblk = iblock;
1846 map.m_len = 1;
1847
1848
1849
1850
1851
1852
1853 ret = ext4_da_map_blocks(inode, iblock, &map, bh);
1854 if (ret <= 0)
1855 return ret;
1856
1857 map_bh(bh, inode->i_sb, map.m_pblk);
1858 ext4_update_bh_state(bh, map.m_flags);
1859
1860 if (buffer_unwritten(bh)) {
1861
1862
1863
1864
1865
1866
1867 set_buffer_new(bh);
1868 set_buffer_mapped(bh);
1869 }
1870 return 0;
1871 }
1872
1873 static int __ext4_journalled_writepage(struct page *page,
1874 unsigned int len)
1875 {
1876 struct address_space *mapping = page->mapping;
1877 struct inode *inode = mapping->host;
1878 handle_t *handle = NULL;
1879 int ret = 0, err = 0;
1880 int inline_data = ext4_has_inline_data(inode);
1881 struct buffer_head *inode_bh = NULL;
1882 loff_t size;
1883
1884 ClearPageChecked(page);
1885
1886 if (inline_data) {
1887 BUG_ON(page->index != 0);
1888 BUG_ON(len > ext4_get_max_inline_size(inode));
1889 inode_bh = ext4_journalled_write_inline_data(inode, len, page);
1890 if (inode_bh == NULL)
1891 goto out;
1892 }
1893
1894
1895
1896
1897
1898 get_page(page);
1899 unlock_page(page);
1900
1901 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
1902 ext4_writepage_trans_blocks(inode));
1903 if (IS_ERR(handle)) {
1904 ret = PTR_ERR(handle);
1905 put_page(page);
1906 goto out_no_pagelock;
1907 }
1908 BUG_ON(!ext4_handle_valid(handle));
1909
1910 lock_page(page);
1911 put_page(page);
1912 size = i_size_read(inode);
1913 if (page->mapping != mapping || page_offset(page) > size) {
1914
1915 ext4_journal_stop(handle);
1916 ret = 0;
1917 goto out;
1918 }
1919
1920 if (inline_data) {
1921 ret = ext4_mark_inode_dirty(handle, inode);
1922 } else {
1923 struct buffer_head *page_bufs = page_buffers(page);
1924
1925 if (page->index == size >> PAGE_SHIFT)
1926 len = size & ~PAGE_MASK;
1927 else
1928 len = PAGE_SIZE;
1929
1930 ret = ext4_walk_page_buffers(handle, inode, page_bufs, 0, len,
1931 NULL, do_journal_get_write_access);
1932
1933 err = ext4_walk_page_buffers(handle, inode, page_bufs, 0, len,
1934 NULL, write_end_fn);
1935 }
1936 if (ret == 0)
1937 ret = err;
1938 err = ext4_jbd2_inode_add_write(handle, inode, page_offset(page), len);
1939 if (ret == 0)
1940 ret = err;
1941 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid;
1942 err = ext4_journal_stop(handle);
1943 if (!ret)
1944 ret = err;
1945
1946 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
1947 out:
1948 unlock_page(page);
1949 out_no_pagelock:
1950 brelse(inode_bh);
1951 return ret;
1952 }
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995 static int ext4_writepage(struct page *page,
1996 struct writeback_control *wbc)
1997 {
1998 struct folio *folio = page_folio(page);
1999 int ret = 0;
2000 loff_t size;
2001 unsigned int len;
2002 struct buffer_head *page_bufs = NULL;
2003 struct inode *inode = page->mapping->host;
2004 struct ext4_io_submit io_submit;
2005 bool keep_towrite = false;
2006
2007 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
2008 folio_invalidate(folio, 0, folio_size(folio));
2009 folio_unlock(folio);
2010 return -EIO;
2011 }
2012
2013 trace_ext4_writepage(page);
2014 size = i_size_read(inode);
2015 if (page->index == size >> PAGE_SHIFT &&
2016 !ext4_verity_in_progress(inode))
2017 len = size & ~PAGE_MASK;
2018 else
2019 len = PAGE_SIZE;
2020
2021
2022 if (!page_has_buffers(page)) {
2023 ext4_warning_inode(inode,
2024 "page %lu does not have buffers attached", page->index);
2025 ClearPageDirty(page);
2026 unlock_page(page);
2027 return 0;
2028 }
2029
2030 page_bufs = page_buffers(page);
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048 if (ext4_walk_page_buffers(NULL, inode, page_bufs, 0, len, NULL,
2049 ext4_bh_delay_or_unwritten)) {
2050 redirty_page_for_writepage(wbc, page);
2051 if ((current->flags & PF_MEMALLOC) ||
2052 (inode->i_sb->s_blocksize == PAGE_SIZE)) {
2053
2054
2055
2056
2057
2058 WARN_ON_ONCE((current->flags & (PF_MEMALLOC|PF_KSWAPD))
2059 == PF_MEMALLOC);
2060 unlock_page(page);
2061 return 0;
2062 }
2063 keep_towrite = true;
2064 }
2065
2066 if (PageChecked(page) && ext4_should_journal_data(inode))
2067
2068
2069
2070
2071 return __ext4_journalled_writepage(page, len);
2072
2073 ext4_io_submit_init(&io_submit, wbc);
2074 io_submit.io_end = ext4_init_io_end(inode, GFP_NOFS);
2075 if (!io_submit.io_end) {
2076 redirty_page_for_writepage(wbc, page);
2077 unlock_page(page);
2078 return -ENOMEM;
2079 }
2080 ret = ext4_bio_write_page(&io_submit, page, len, keep_towrite);
2081 ext4_io_submit(&io_submit);
2082
2083 ext4_put_io_end_defer(io_submit.io_end);
2084 return ret;
2085 }
2086
2087 static int mpage_submit_page(struct mpage_da_data *mpd, struct page *page)
2088 {
2089 int len;
2090 loff_t size;
2091 int err;
2092
2093 BUG_ON(page->index != mpd->first_page);
2094 clear_page_dirty_for_io(page);
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108 size = i_size_read(mpd->inode);
2109 if (page->index == size >> PAGE_SHIFT &&
2110 !ext4_verity_in_progress(mpd->inode))
2111 len = size & ~PAGE_MASK;
2112 else
2113 len = PAGE_SIZE;
2114 err = ext4_bio_write_page(&mpd->io_submit, page, len, false);
2115 if (!err)
2116 mpd->wbc->nr_to_write--;
2117 mpd->first_page++;
2118
2119 return err;
2120 }
2121
2122 #define BH_FLAGS (BIT(BH_Unwritten) | BIT(BH_Delay))
2123
2124
2125
2126
2127
2128
2129 #define MAX_WRITEPAGES_EXTENT_LEN 2048
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145 static bool mpage_add_bh_to_extent(struct mpage_da_data *mpd, ext4_lblk_t lblk,
2146 struct buffer_head *bh)
2147 {
2148 struct ext4_map_blocks *map = &mpd->map;
2149
2150
2151 if (!buffer_dirty(bh) || !buffer_mapped(bh) ||
2152 (!buffer_delay(bh) && !buffer_unwritten(bh))) {
2153
2154 if (map->m_len == 0)
2155 return true;
2156 return false;
2157 }
2158
2159
2160 if (map->m_len == 0) {
2161
2162 if (!mpd->do_map)
2163 return false;
2164 map->m_lblk = lblk;
2165 map->m_len = 1;
2166 map->m_flags = bh->b_state & BH_FLAGS;
2167 return true;
2168 }
2169
2170
2171 if (map->m_len >= MAX_WRITEPAGES_EXTENT_LEN)
2172 return false;
2173
2174
2175 if (lblk == map->m_lblk + map->m_len &&
2176 (bh->b_state & BH_FLAGS) == map->m_flags) {
2177 map->m_len++;
2178 return true;
2179 }
2180 return false;
2181 }
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199 static int mpage_process_page_bufs(struct mpage_da_data *mpd,
2200 struct buffer_head *head,
2201 struct buffer_head *bh,
2202 ext4_lblk_t lblk)
2203 {
2204 struct inode *inode = mpd->inode;
2205 int err;
2206 ext4_lblk_t blocks = (i_size_read(inode) + i_blocksize(inode) - 1)
2207 >> inode->i_blkbits;
2208
2209 if (ext4_verity_in_progress(inode))
2210 blocks = EXT_MAX_BLOCKS;
2211
2212 do {
2213 BUG_ON(buffer_locked(bh));
2214
2215 if (lblk >= blocks || !mpage_add_bh_to_extent(mpd, lblk, bh)) {
2216
2217 if (mpd->map.m_len)
2218 return 0;
2219
2220 if (!mpd->do_map)
2221 return 0;
2222
2223 break;
2224 }
2225 } while (lblk++, (bh = bh->b_this_page) != head);
2226
2227 if (mpd->map.m_len == 0) {
2228 err = mpage_submit_page(mpd, head->b_page);
2229 if (err < 0)
2230 return err;
2231 }
2232 if (lblk >= blocks) {
2233 mpd->scanned_until_end = 1;
2234 return 0;
2235 }
2236 return 1;
2237 }
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254 static int mpage_process_page(struct mpage_da_data *mpd, struct page *page,
2255 ext4_lblk_t *m_lblk, ext4_fsblk_t *m_pblk,
2256 bool *map_bh)
2257 {
2258 struct buffer_head *head, *bh;
2259 ext4_io_end_t *io_end = mpd->io_submit.io_end;
2260 ext4_lblk_t lblk = *m_lblk;
2261 ext4_fsblk_t pblock = *m_pblk;
2262 int err = 0;
2263 int blkbits = mpd->inode->i_blkbits;
2264 ssize_t io_end_size = 0;
2265 struct ext4_io_end_vec *io_end_vec = ext4_last_io_end_vec(io_end);
2266
2267 bh = head = page_buffers(page);
2268 do {
2269 if (lblk < mpd->map.m_lblk)
2270 continue;
2271 if (lblk >= mpd->map.m_lblk + mpd->map.m_len) {
2272
2273
2274
2275
2276 mpd->map.m_len = 0;
2277 mpd->map.m_flags = 0;
2278 io_end_vec->size += io_end_size;
2279
2280 err = mpage_process_page_bufs(mpd, head, bh, lblk);
2281 if (err > 0)
2282 err = 0;
2283 if (!err && mpd->map.m_len && mpd->map.m_lblk > lblk) {
2284 io_end_vec = ext4_alloc_io_end_vec(io_end);
2285 if (IS_ERR(io_end_vec)) {
2286 err = PTR_ERR(io_end_vec);
2287 goto out;
2288 }
2289 io_end_vec->offset = (loff_t)mpd->map.m_lblk << blkbits;
2290 }
2291 *map_bh = true;
2292 goto out;
2293 }
2294 if (buffer_delay(bh)) {
2295 clear_buffer_delay(bh);
2296 bh->b_blocknr = pblock++;
2297 }
2298 clear_buffer_unwritten(bh);
2299 io_end_size += (1 << blkbits);
2300 } while (lblk++, (bh = bh->b_this_page) != head);
2301
2302 io_end_vec->size += io_end_size;
2303 *map_bh = false;
2304 out:
2305 *m_lblk = lblk;
2306 *m_pblk = pblock;
2307 return err;
2308 }
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324 static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
2325 {
2326 struct folio_batch fbatch;
2327 unsigned nr, i;
2328 struct inode *inode = mpd->inode;
2329 int bpp_bits = PAGE_SHIFT - inode->i_blkbits;
2330 pgoff_t start, end;
2331 ext4_lblk_t lblk;
2332 ext4_fsblk_t pblock;
2333 int err;
2334 bool map_bh = false;
2335
2336 start = mpd->map.m_lblk >> bpp_bits;
2337 end = (mpd->map.m_lblk + mpd->map.m_len - 1) >> bpp_bits;
2338 lblk = start << bpp_bits;
2339 pblock = mpd->map.m_pblk;
2340
2341 folio_batch_init(&fbatch);
2342 while (start <= end) {
2343 nr = filemap_get_folios(inode->i_mapping, &start, end, &fbatch);
2344 if (nr == 0)
2345 break;
2346 for (i = 0; i < nr; i++) {
2347 struct page *page = &fbatch.folios[i]->page;
2348
2349 err = mpage_process_page(mpd, page, &lblk, &pblock,
2350 &map_bh);
2351
2352
2353
2354
2355
2356 if (err < 0 || map_bh)
2357 goto out;
2358
2359 err = mpage_submit_page(mpd, page);
2360 if (err < 0)
2361 goto out;
2362 }
2363 folio_batch_release(&fbatch);
2364 }
2365
2366 mpd->map.m_len = 0;
2367 mpd->map.m_flags = 0;
2368 return 0;
2369 out:
2370 folio_batch_release(&fbatch);
2371 return err;
2372 }
2373
2374 static int mpage_map_one_extent(handle_t *handle, struct mpage_da_data *mpd)
2375 {
2376 struct inode *inode = mpd->inode;
2377 struct ext4_map_blocks *map = &mpd->map;
2378 int get_blocks_flags;
2379 int err, dioread_nolock;
2380
2381 trace_ext4_da_write_pages_extent(inode, map);
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397 get_blocks_flags = EXT4_GET_BLOCKS_CREATE |
2398 EXT4_GET_BLOCKS_METADATA_NOFAIL |
2399 EXT4_GET_BLOCKS_IO_SUBMIT;
2400 dioread_nolock = ext4_should_dioread_nolock(inode);
2401 if (dioread_nolock)
2402 get_blocks_flags |= EXT4_GET_BLOCKS_IO_CREATE_EXT;
2403 if (map->m_flags & BIT(BH_Delay))
2404 get_blocks_flags |= EXT4_GET_BLOCKS_DELALLOC_RESERVE;
2405
2406 err = ext4_map_blocks(handle, inode, map, get_blocks_flags);
2407 if (err < 0)
2408 return err;
2409 if (dioread_nolock && (map->m_flags & EXT4_MAP_UNWRITTEN)) {
2410 if (!mpd->io_submit.io_end->handle &&
2411 ext4_handle_valid(handle)) {
2412 mpd->io_submit.io_end->handle = handle->h_rsv_handle;
2413 handle->h_rsv_handle = NULL;
2414 }
2415 ext4_set_io_unwritten_flag(inode, mpd->io_submit.io_end);
2416 }
2417
2418 BUG_ON(map->m_len == 0);
2419 return 0;
2420 }
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442 static int mpage_map_and_submit_extent(handle_t *handle,
2443 struct mpage_da_data *mpd,
2444 bool *give_up_on_write)
2445 {
2446 struct inode *inode = mpd->inode;
2447 struct ext4_map_blocks *map = &mpd->map;
2448 int err;
2449 loff_t disksize;
2450 int progress = 0;
2451 ext4_io_end_t *io_end = mpd->io_submit.io_end;
2452 struct ext4_io_end_vec *io_end_vec;
2453
2454 io_end_vec = ext4_alloc_io_end_vec(io_end);
2455 if (IS_ERR(io_end_vec))
2456 return PTR_ERR(io_end_vec);
2457 io_end_vec->offset = ((loff_t)map->m_lblk) << inode->i_blkbits;
2458 do {
2459 err = mpage_map_one_extent(handle, mpd);
2460 if (err < 0) {
2461 struct super_block *sb = inode->i_sb;
2462
2463 if (ext4_forced_shutdown(EXT4_SB(sb)) ||
2464 ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED))
2465 goto invalidate_dirty_pages;
2466
2467
2468
2469
2470
2471 if ((err == -ENOMEM) ||
2472 (err == -ENOSPC && ext4_count_free_clusters(sb))) {
2473 if (progress)
2474 goto update_disksize;
2475 return err;
2476 }
2477 ext4_msg(sb, KERN_CRIT,
2478 "Delayed block allocation failed for "
2479 "inode %lu at logical offset %llu with"
2480 " max blocks %u with error %d",
2481 inode->i_ino,
2482 (unsigned long long)map->m_lblk,
2483 (unsigned)map->m_len, -err);
2484 ext4_msg(sb, KERN_CRIT,
2485 "This should not happen!! Data will "
2486 "be lost\n");
2487 if (err == -ENOSPC)
2488 ext4_print_free_blocks(inode);
2489 invalidate_dirty_pages:
2490 *give_up_on_write = true;
2491 return err;
2492 }
2493 progress = 1;
2494
2495
2496
2497
2498 err = mpage_map_and_submit_buffers(mpd);
2499 if (err < 0)
2500 goto update_disksize;
2501 } while (map->m_len);
2502
2503 update_disksize:
2504
2505
2506
2507
2508 disksize = ((loff_t)mpd->first_page) << PAGE_SHIFT;
2509 if (disksize > READ_ONCE(EXT4_I(inode)->i_disksize)) {
2510 int err2;
2511 loff_t i_size;
2512
2513 down_write(&EXT4_I(inode)->i_data_sem);
2514 i_size = i_size_read(inode);
2515 if (disksize > i_size)
2516 disksize = i_size;
2517 if (disksize > EXT4_I(inode)->i_disksize)
2518 EXT4_I(inode)->i_disksize = disksize;
2519 up_write(&EXT4_I(inode)->i_data_sem);
2520 err2 = ext4_mark_inode_dirty(handle, inode);
2521 if (err2) {
2522 ext4_error_err(inode->i_sb, -err2,
2523 "Failed to mark inode %lu dirty",
2524 inode->i_ino);
2525 }
2526 if (!err)
2527 err = err2;
2528 }
2529 return err;
2530 }
2531
2532
2533
2534
2535
2536
2537
2538
2539 static int ext4_da_writepages_trans_blocks(struct inode *inode)
2540 {
2541 int bpp = ext4_journal_blocks_per_page(inode);
2542
2543 return ext4_meta_trans_blocks(inode,
2544 MAX_WRITEPAGES_EXTENT_LEN + bpp - 1, bpp);
2545 }
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565 static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
2566 {
2567 struct address_space *mapping = mpd->inode->i_mapping;
2568 struct pagevec pvec;
2569 unsigned int nr_pages;
2570 long left = mpd->wbc->nr_to_write;
2571 pgoff_t index = mpd->first_page;
2572 pgoff_t end = mpd->last_page;
2573 xa_mark_t tag;
2574 int i, err = 0;
2575 int blkbits = mpd->inode->i_blkbits;
2576 ext4_lblk_t lblk;
2577 struct buffer_head *head;
2578
2579 if (mpd->wbc->sync_mode == WB_SYNC_ALL || mpd->wbc->tagged_writepages)
2580 tag = PAGECACHE_TAG_TOWRITE;
2581 else
2582 tag = PAGECACHE_TAG_DIRTY;
2583
2584 pagevec_init(&pvec);
2585 mpd->map.m_len = 0;
2586 mpd->next_page = index;
2587 while (index <= end) {
2588 nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
2589 tag);
2590 if (nr_pages == 0)
2591 break;
2592
2593 for (i = 0; i < nr_pages; i++) {
2594 struct page *page = pvec.pages[i];
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604 if (mpd->wbc->sync_mode == WB_SYNC_NONE && left <= 0)
2605 goto out;
2606
2607
2608 if (mpd->map.m_len > 0 && mpd->next_page != page->index)
2609 goto out;
2610
2611 lock_page(page);
2612
2613
2614
2615
2616
2617
2618
2619 if (!PageDirty(page) ||
2620 (PageWriteback(page) &&
2621 (mpd->wbc->sync_mode == WB_SYNC_NONE)) ||
2622 unlikely(page->mapping != mapping)) {
2623 unlock_page(page);
2624 continue;
2625 }
2626
2627 wait_on_page_writeback(page);
2628 BUG_ON(PageWriteback(page));
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639 if (!page_has_buffers(page)) {
2640 ext4_warning_inode(mpd->inode, "page %lu does not have buffers attached", page->index);
2641 ClearPageDirty(page);
2642 unlock_page(page);
2643 continue;
2644 }
2645
2646 if (mpd->map.m_len == 0)
2647 mpd->first_page = page->index;
2648 mpd->next_page = page->index + 1;
2649
2650 lblk = ((ext4_lblk_t)page->index) <<
2651 (PAGE_SHIFT - blkbits);
2652 head = page_buffers(page);
2653 err = mpage_process_page_bufs(mpd, head, head, lblk);
2654 if (err <= 0)
2655 goto out;
2656 err = 0;
2657 left--;
2658 }
2659 pagevec_release(&pvec);
2660 cond_resched();
2661 }
2662 mpd->scanned_until_end = 1;
2663 return 0;
2664 out:
2665 pagevec_release(&pvec);
2666 return err;
2667 }
2668
2669 static int ext4_writepages(struct address_space *mapping,
2670 struct writeback_control *wbc)
2671 {
2672 pgoff_t writeback_index = 0;
2673 long nr_to_write = wbc->nr_to_write;
2674 int range_whole = 0;
2675 int cycled = 1;
2676 handle_t *handle = NULL;
2677 struct mpage_da_data mpd;
2678 struct inode *inode = mapping->host;
2679 int needed_blocks, rsv_blocks = 0, ret = 0;
2680 struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
2681 struct blk_plug plug;
2682 bool give_up_on_write = false;
2683
2684 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
2685 return -EIO;
2686
2687 percpu_down_read(&sbi->s_writepages_rwsem);
2688 trace_ext4_writepages(inode, wbc);
2689
2690
2691
2692
2693
2694
2695 if (!mapping->nrpages || !mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
2696 goto out_writepages;
2697
2698 if (ext4_should_journal_data(inode)) {
2699 ret = generic_writepages(mapping, wbc);
2700 goto out_writepages;
2701 }
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713 if (unlikely(ext4_forced_shutdown(EXT4_SB(mapping->host->i_sb)) ||
2714 ext4_test_mount_flag(inode->i_sb, EXT4_MF_FS_ABORTED))) {
2715 ret = -EROFS;
2716 goto out_writepages;
2717 }
2718
2719
2720
2721
2722
2723
2724 if (ext4_has_inline_data(inode)) {
2725
2726 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
2727 if (IS_ERR(handle)) {
2728 ret = PTR_ERR(handle);
2729 goto out_writepages;
2730 }
2731 BUG_ON(ext4_test_inode_state(inode,
2732 EXT4_STATE_MAY_INLINE_DATA));
2733 ext4_destroy_inline_data(handle, inode);
2734 ext4_journal_stop(handle);
2735 }
2736
2737 if (ext4_should_dioread_nolock(inode)) {
2738
2739
2740
2741
2742 rsv_blocks = 1 + ext4_chunk_trans_blocks(inode,
2743 PAGE_SIZE >> inode->i_blkbits);
2744 }
2745
2746 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
2747 range_whole = 1;
2748
2749 if (wbc->range_cyclic) {
2750 writeback_index = mapping->writeback_index;
2751 if (writeback_index)
2752 cycled = 0;
2753 mpd.first_page = writeback_index;
2754 mpd.last_page = -1;
2755 } else {
2756 mpd.first_page = wbc->range_start >> PAGE_SHIFT;
2757 mpd.last_page = wbc->range_end >> PAGE_SHIFT;
2758 }
2759
2760 mpd.inode = inode;
2761 mpd.wbc = wbc;
2762 ext4_io_submit_init(&mpd.io_submit, wbc);
2763 retry:
2764 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
2765 tag_pages_for_writeback(mapping, mpd.first_page, mpd.last_page);
2766 blk_start_plug(&plug);
2767
2768
2769
2770
2771
2772
2773
2774 mpd.do_map = 0;
2775 mpd.scanned_until_end = 0;
2776 mpd.io_submit.io_end = ext4_init_io_end(inode, GFP_KERNEL);
2777 if (!mpd.io_submit.io_end) {
2778 ret = -ENOMEM;
2779 goto unplug;
2780 }
2781 ret = mpage_prepare_extent_to_map(&mpd);
2782
2783 mpage_release_unused_pages(&mpd, false);
2784
2785 ext4_io_submit(&mpd.io_submit);
2786 ext4_put_io_end_defer(mpd.io_submit.io_end);
2787 mpd.io_submit.io_end = NULL;
2788 if (ret < 0)
2789 goto unplug;
2790
2791 while (!mpd.scanned_until_end && wbc->nr_to_write > 0) {
2792
2793 mpd.io_submit.io_end = ext4_init_io_end(inode, GFP_KERNEL);
2794 if (!mpd.io_submit.io_end) {
2795 ret = -ENOMEM;
2796 break;
2797 }
2798
2799
2800
2801
2802
2803
2804
2805
2806 BUG_ON(ext4_should_journal_data(inode));
2807 needed_blocks = ext4_da_writepages_trans_blocks(inode);
2808
2809
2810 handle = ext4_journal_start_with_reserve(inode,
2811 EXT4_HT_WRITE_PAGE, needed_blocks, rsv_blocks);
2812 if (IS_ERR(handle)) {
2813 ret = PTR_ERR(handle);
2814 ext4_msg(inode->i_sb, KERN_CRIT, "%s: jbd2_start: "
2815 "%ld pages, ino %lu; err %d", __func__,
2816 wbc->nr_to_write, inode->i_ino, ret);
2817
2818 ext4_put_io_end(mpd.io_submit.io_end);
2819 mpd.io_submit.io_end = NULL;
2820 break;
2821 }
2822 mpd.do_map = 1;
2823
2824 trace_ext4_da_write_pages(inode, mpd.first_page, mpd.wbc);
2825 ret = mpage_prepare_extent_to_map(&mpd);
2826 if (!ret && mpd.map.m_len)
2827 ret = mpage_map_and_submit_extent(handle, &mpd,
2828 &give_up_on_write);
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839 if (!ext4_handle_valid(handle) || handle->h_sync == 0) {
2840 ext4_journal_stop(handle);
2841 handle = NULL;
2842 mpd.do_map = 0;
2843 }
2844
2845 mpage_release_unused_pages(&mpd, give_up_on_write);
2846
2847 ext4_io_submit(&mpd.io_submit);
2848
2849
2850
2851
2852
2853
2854
2855
2856 if (handle) {
2857 ext4_put_io_end_defer(mpd.io_submit.io_end);
2858 ext4_journal_stop(handle);
2859 } else
2860 ext4_put_io_end(mpd.io_submit.io_end);
2861 mpd.io_submit.io_end = NULL;
2862
2863 if (ret == -ENOSPC && sbi->s_journal) {
2864
2865
2866
2867
2868
2869 jbd2_journal_force_commit_nested(sbi->s_journal);
2870 ret = 0;
2871 continue;
2872 }
2873
2874 if (ret)
2875 break;
2876 }
2877 unplug:
2878 blk_finish_plug(&plug);
2879 if (!ret && !cycled && wbc->nr_to_write > 0) {
2880 cycled = 1;
2881 mpd.last_page = writeback_index - 1;
2882 mpd.first_page = 0;
2883 goto retry;
2884 }
2885
2886
2887 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2888
2889
2890
2891
2892 mapping->writeback_index = mpd.first_page;
2893
2894 out_writepages:
2895 trace_ext4_writepages_result(inode, wbc, ret,
2896 nr_to_write - wbc->nr_to_write);
2897 percpu_up_read(&sbi->s_writepages_rwsem);
2898 return ret;
2899 }
2900
2901 static int ext4_dax_writepages(struct address_space *mapping,
2902 struct writeback_control *wbc)
2903 {
2904 int ret;
2905 long nr_to_write = wbc->nr_to_write;
2906 struct inode *inode = mapping->host;
2907 struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
2908
2909 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
2910 return -EIO;
2911
2912 percpu_down_read(&sbi->s_writepages_rwsem);
2913 trace_ext4_writepages(inode, wbc);
2914
2915 ret = dax_writeback_mapping_range(mapping, sbi->s_daxdev, wbc);
2916 trace_ext4_writepages_result(inode, wbc, ret,
2917 nr_to_write - wbc->nr_to_write);
2918 percpu_up_read(&sbi->s_writepages_rwsem);
2919 return ret;
2920 }
2921
2922 static int ext4_nonda_switch(struct super_block *sb)
2923 {
2924 s64 free_clusters, dirty_clusters;
2925 struct ext4_sb_info *sbi = EXT4_SB(sb);
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935 free_clusters =
2936 percpu_counter_read_positive(&sbi->s_freeclusters_counter);
2937 dirty_clusters =
2938 percpu_counter_read_positive(&sbi->s_dirtyclusters_counter);
2939
2940
2941
2942 if (dirty_clusters && (free_clusters < 2 * dirty_clusters))
2943 try_to_writeback_inodes_sb(sb, WB_REASON_FS_FREE_SPACE);
2944
2945 if (2 * free_clusters < 3 * dirty_clusters ||
2946 free_clusters < (dirty_clusters + EXT4_FREECLUSTERS_WATERMARK)) {
2947
2948
2949
2950
2951 return 1;
2952 }
2953 return 0;
2954 }
2955
2956 static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
2957 loff_t pos, unsigned len,
2958 struct page **pagep, void **fsdata)
2959 {
2960 int ret, retries = 0;
2961 struct page *page;
2962 pgoff_t index;
2963 struct inode *inode = mapping->host;
2964
2965 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
2966 return -EIO;
2967
2968 index = pos >> PAGE_SHIFT;
2969
2970 if (ext4_nonda_switch(inode->i_sb) || ext4_verity_in_progress(inode)) {
2971 *fsdata = (void *)FALL_BACK_TO_NONDELALLOC;
2972 return ext4_write_begin(file, mapping, pos,
2973 len, pagep, fsdata);
2974 }
2975 *fsdata = (void *)0;
2976 trace_ext4_da_write_begin(inode, pos, len);
2977
2978 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
2979 ret = ext4_da_write_inline_data_begin(mapping, inode, pos, len,
2980 pagep, fsdata);
2981 if (ret < 0)
2982 return ret;
2983 if (ret == 1)
2984 return 0;
2985 }
2986
2987 retry:
2988 page = grab_cache_page_write_begin(mapping, index);
2989 if (!page)
2990 return -ENOMEM;
2991
2992
2993 wait_for_stable_page(page);
2994
2995 #ifdef CONFIG_FS_ENCRYPTION
2996 ret = ext4_block_write_begin(page, pos, len,
2997 ext4_da_get_block_prep);
2998 #else
2999 ret = __block_write_begin(page, pos, len, ext4_da_get_block_prep);
3000 #endif
3001 if (ret < 0) {
3002 unlock_page(page);
3003 put_page(page);
3004
3005
3006
3007
3008
3009 if (pos + len > inode->i_size)
3010 ext4_truncate_failed_write(inode);
3011
3012 if (ret == -ENOSPC &&
3013 ext4_should_retry_alloc(inode->i_sb, &retries))
3014 goto retry;
3015 return ret;
3016 }
3017
3018 *pagep = page;
3019 return ret;
3020 }
3021
3022
3023
3024
3025
3026 static int ext4_da_should_update_i_disksize(struct page *page,
3027 unsigned long offset)
3028 {
3029 struct buffer_head *bh;
3030 struct inode *inode = page->mapping->host;
3031 unsigned int idx;
3032 int i;
3033
3034 bh = page_buffers(page);
3035 idx = offset >> inode->i_blkbits;
3036
3037 for (i = 0; i < idx; i++)
3038 bh = bh->b_this_page;
3039
3040 if (!buffer_mapped(bh) || (buffer_delay(bh)) || buffer_unwritten(bh))
3041 return 0;
3042 return 1;
3043 }
3044
3045 static int ext4_da_write_end(struct file *file,
3046 struct address_space *mapping,
3047 loff_t pos, unsigned len, unsigned copied,
3048 struct page *page, void *fsdata)
3049 {
3050 struct inode *inode = mapping->host;
3051 loff_t new_i_size;
3052 unsigned long start, end;
3053 int write_mode = (int)(unsigned long)fsdata;
3054
3055 if (write_mode == FALL_BACK_TO_NONDELALLOC)
3056 return ext4_write_end(file, mapping, pos,
3057 len, copied, page, fsdata);
3058
3059 trace_ext4_da_write_end(inode, pos, len, copied);
3060
3061 if (write_mode != CONVERT_INLINE_DATA &&
3062 ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA) &&
3063 ext4_has_inline_data(inode))
3064 return ext4_write_inline_data_end(inode, pos, len, copied, page);
3065
3066 start = pos & (PAGE_SIZE - 1);
3067 end = start + copied - 1;
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084 new_i_size = pos + copied;
3085 if (copied && new_i_size > inode->i_size &&
3086 ext4_da_should_update_i_disksize(page, end))
3087 ext4_update_i_disksize(inode, new_i_size);
3088
3089 return generic_write_end(file, mapping, pos, len, copied, page, fsdata);
3090 }
3091
3092
3093
3094
3095 int ext4_alloc_da_blocks(struct inode *inode)
3096 {
3097 trace_ext4_alloc_da_blocks(inode);
3098
3099 if (!EXT4_I(inode)->i_reserved_data_blocks)
3100 return 0;
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133 return filemap_flush(inode->i_mapping);
3134 }
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150 static sector_t ext4_bmap(struct address_space *mapping, sector_t block)
3151 {
3152 struct inode *inode = mapping->host;
3153 journal_t *journal;
3154 sector_t ret = 0;
3155 int err;
3156
3157 inode_lock_shared(inode);
3158
3159
3160
3161 if (ext4_has_inline_data(inode))
3162 goto out;
3163
3164 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY) &&
3165 test_opt(inode->i_sb, DELALLOC)) {
3166
3167
3168
3169
3170
3171 filemap_write_and_wait(mapping);
3172 }
3173
3174 if (EXT4_JOURNAL(inode) &&
3175 ext4_test_inode_state(inode, EXT4_STATE_JDATA)) {
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194 ext4_clear_inode_state(inode, EXT4_STATE_JDATA);
3195 journal = EXT4_JOURNAL(inode);
3196 jbd2_journal_lock_updates(journal);
3197 err = jbd2_journal_flush(journal, 0);
3198 jbd2_journal_unlock_updates(journal);
3199
3200 if (err)
3201 goto out;
3202 }
3203
3204 ret = iomap_bmap(mapping, block, &ext4_iomap_ops);
3205
3206 out:
3207 inode_unlock_shared(inode);
3208 return ret;
3209 }
3210
3211 static int ext4_read_folio(struct file *file, struct folio *folio)
3212 {
3213 struct page *page = &folio->page;
3214 int ret = -EAGAIN;
3215 struct inode *inode = page->mapping->host;
3216
3217 trace_ext4_readpage(page);
3218
3219 if (ext4_has_inline_data(inode))
3220 ret = ext4_readpage_inline(inode, page);
3221
3222 if (ret == -EAGAIN)
3223 return ext4_mpage_readpages(inode, NULL, page);
3224
3225 return ret;
3226 }
3227
3228 static void ext4_readahead(struct readahead_control *rac)
3229 {
3230 struct inode *inode = rac->mapping->host;
3231
3232
3233 if (ext4_has_inline_data(inode))
3234 return;
3235
3236 ext4_mpage_readpages(inode, rac, NULL);
3237 }
3238
3239 static void ext4_invalidate_folio(struct folio *folio, size_t offset,
3240 size_t length)
3241 {
3242 trace_ext4_invalidate_folio(folio, offset, length);
3243
3244
3245 WARN_ON(folio_buffers(folio) && buffer_jbd(folio_buffers(folio)));
3246
3247 block_invalidate_folio(folio, offset, length);
3248 }
3249
3250 static int __ext4_journalled_invalidate_folio(struct folio *folio,
3251 size_t offset, size_t length)
3252 {
3253 journal_t *journal = EXT4_JOURNAL(folio->mapping->host);
3254
3255 trace_ext4_journalled_invalidate_folio(folio, offset, length);
3256
3257
3258
3259
3260 if (offset == 0 && length == folio_size(folio))
3261 folio_clear_checked(folio);
3262
3263 return jbd2_journal_invalidate_folio(journal, folio, offset, length);
3264 }
3265
3266
3267 static void ext4_journalled_invalidate_folio(struct folio *folio,
3268 size_t offset,
3269 size_t length)
3270 {
3271 WARN_ON(__ext4_journalled_invalidate_folio(folio, offset, length) < 0);
3272 }
3273
3274 static bool ext4_release_folio(struct folio *folio, gfp_t wait)
3275 {
3276 journal_t *journal = EXT4_JOURNAL(folio->mapping->host);
3277
3278 trace_ext4_releasepage(&folio->page);
3279
3280
3281 if (folio_test_checked(folio))
3282 return false;
3283 if (journal)
3284 return jbd2_journal_try_to_free_buffers(journal, folio);
3285 else
3286 return try_to_free_buffers(folio);
3287 }
3288
3289 static bool ext4_inode_datasync_dirty(struct inode *inode)
3290 {
3291 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
3292
3293 if (journal) {
3294 if (jbd2_transaction_committed(journal,
3295 EXT4_I(inode)->i_datasync_tid))
3296 return false;
3297 if (test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT))
3298 return !list_empty(&EXT4_I(inode)->i_fc_list);
3299 return true;
3300 }
3301
3302
3303 if (!list_empty(&inode->i_mapping->private_list))
3304 return true;
3305 return inode->i_state & I_DIRTY_DATASYNC;
3306 }
3307
3308 static void ext4_set_iomap(struct inode *inode, struct iomap *iomap,
3309 struct ext4_map_blocks *map, loff_t offset,
3310 loff_t length, unsigned int flags)
3311 {
3312 u8 blkbits = inode->i_blkbits;
3313
3314
3315
3316
3317
3318
3319 iomap->flags = 0;
3320 if (ext4_inode_datasync_dirty(inode) ||
3321 offset + length > i_size_read(inode))
3322 iomap->flags |= IOMAP_F_DIRTY;
3323
3324 if (map->m_flags & EXT4_MAP_NEW)
3325 iomap->flags |= IOMAP_F_NEW;
3326
3327 if (flags & IOMAP_DAX)
3328 iomap->dax_dev = EXT4_SB(inode->i_sb)->s_daxdev;
3329 else
3330 iomap->bdev = inode->i_sb->s_bdev;
3331 iomap->offset = (u64) map->m_lblk << blkbits;
3332 iomap->length = (u64) map->m_len << blkbits;
3333
3334 if ((map->m_flags & EXT4_MAP_MAPPED) &&
3335 !ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
3336 iomap->flags |= IOMAP_F_MERGED;
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347 if (map->m_flags & EXT4_MAP_UNWRITTEN) {
3348 iomap->type = IOMAP_UNWRITTEN;
3349 iomap->addr = (u64) map->m_pblk << blkbits;
3350 if (flags & IOMAP_DAX)
3351 iomap->addr += EXT4_SB(inode->i_sb)->s_dax_part_off;
3352 } else if (map->m_flags & EXT4_MAP_MAPPED) {
3353 iomap->type = IOMAP_MAPPED;
3354 iomap->addr = (u64) map->m_pblk << blkbits;
3355 if (flags & IOMAP_DAX)
3356 iomap->addr += EXT4_SB(inode->i_sb)->s_dax_part_off;
3357 } else {
3358 iomap->type = IOMAP_HOLE;
3359 iomap->addr = IOMAP_NULL_ADDR;
3360 }
3361 }
3362
3363 static int ext4_iomap_alloc(struct inode *inode, struct ext4_map_blocks *map,
3364 unsigned int flags)
3365 {
3366 handle_t *handle;
3367 u8 blkbits = inode->i_blkbits;
3368 int ret, dio_credits, m_flags = 0, retries = 0;
3369
3370
3371
3372
3373
3374 if (map->m_len > DIO_MAX_BLOCKS)
3375 map->m_len = DIO_MAX_BLOCKS;
3376 dio_credits = ext4_chunk_trans_blocks(inode, map->m_len);
3377
3378 retry:
3379
3380
3381
3382
3383
3384
3385 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, dio_credits);
3386 if (IS_ERR(handle))
3387 return PTR_ERR(handle);
3388
3389
3390
3391
3392
3393 WARN_ON(!(flags & (IOMAP_DAX | IOMAP_DIRECT)));
3394 if (flags & IOMAP_DAX)
3395 m_flags = EXT4_GET_BLOCKS_CREATE_ZERO;
3396
3397
3398
3399
3400
3401
3402 else if (((loff_t)map->m_lblk << blkbits) >= i_size_read(inode))
3403 m_flags = EXT4_GET_BLOCKS_CREATE;
3404 else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
3405 m_flags = EXT4_GET_BLOCKS_IO_CREATE_EXT;
3406
3407 ret = ext4_map_blocks(handle, inode, map, m_flags);
3408
3409
3410
3411
3412
3413
3414 if (!m_flags && !ret)
3415 ret = -ENOTBLK;
3416
3417 ext4_journal_stop(handle);
3418 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
3419 goto retry;
3420
3421 return ret;
3422 }
3423
3424
3425 static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
3426 unsigned flags, struct iomap *iomap, struct iomap *srcmap)
3427 {
3428 int ret;
3429 struct ext4_map_blocks map;
3430 u8 blkbits = inode->i_blkbits;
3431
3432 if ((offset >> blkbits) > EXT4_MAX_LOGICAL_BLOCK)
3433 return -EINVAL;
3434
3435 if (WARN_ON_ONCE(ext4_has_inline_data(inode)))
3436 return -ERANGE;
3437
3438
3439
3440
3441 map.m_lblk = offset >> blkbits;
3442 map.m_len = min_t(loff_t, (offset + length - 1) >> blkbits,
3443 EXT4_MAX_LOGICAL_BLOCK) - map.m_lblk + 1;
3444
3445 if (flags & IOMAP_WRITE) {
3446
3447
3448
3449
3450
3451
3452 if (offset + length <= i_size_read(inode)) {
3453 ret = ext4_map_blocks(NULL, inode, &map, 0);
3454 if (ret > 0 && (map.m_flags & EXT4_MAP_MAPPED))
3455 goto out;
3456 }
3457 ret = ext4_iomap_alloc(inode, &map, flags);
3458 } else {
3459 ret = ext4_map_blocks(NULL, inode, &map, 0);
3460 }
3461
3462 if (ret < 0)
3463 return ret;
3464 out:
3465
3466
3467
3468
3469
3470 map.m_len = fscrypt_limit_io_blocks(inode, map.m_lblk, map.m_len);
3471
3472 ext4_set_iomap(inode, iomap, &map, offset, length, flags);
3473
3474 return 0;
3475 }
3476
3477 static int ext4_iomap_overwrite_begin(struct inode *inode, loff_t offset,
3478 loff_t length, unsigned flags, struct iomap *iomap,
3479 struct iomap *srcmap)
3480 {
3481 int ret;
3482
3483
3484
3485
3486
3487 flags &= ~IOMAP_WRITE;
3488 ret = ext4_iomap_begin(inode, offset, length, flags, iomap, srcmap);
3489 WARN_ON_ONCE(iomap->type != IOMAP_MAPPED);
3490 return ret;
3491 }
3492
3493 static int ext4_iomap_end(struct inode *inode, loff_t offset, loff_t length,
3494 ssize_t written, unsigned flags, struct iomap *iomap)
3495 {
3496
3497
3498
3499
3500
3501
3502
3503 if (flags & (IOMAP_WRITE | IOMAP_DIRECT) && written == 0)
3504 return -ENOTBLK;
3505
3506 return 0;
3507 }
3508
3509 const struct iomap_ops ext4_iomap_ops = {
3510 .iomap_begin = ext4_iomap_begin,
3511 .iomap_end = ext4_iomap_end,
3512 };
3513
3514 const struct iomap_ops ext4_iomap_overwrite_ops = {
3515 .iomap_begin = ext4_iomap_overwrite_begin,
3516 .iomap_end = ext4_iomap_end,
3517 };
3518
3519 static bool ext4_iomap_is_delalloc(struct inode *inode,
3520 struct ext4_map_blocks *map)
3521 {
3522 struct extent_status es;
3523 ext4_lblk_t offset = 0, end = map->m_lblk + map->m_len - 1;
3524
3525 ext4_es_find_extent_range(inode, &ext4_es_is_delayed,
3526 map->m_lblk, end, &es);
3527
3528 if (!es.es_len || es.es_lblk > end)
3529 return false;
3530
3531 if (es.es_lblk > map->m_lblk) {
3532 map->m_len = es.es_lblk - map->m_lblk;
3533 return false;
3534 }
3535
3536 offset = map->m_lblk - es.es_lblk;
3537 map->m_len = es.es_len - offset;
3538
3539 return true;
3540 }
3541
3542 static int ext4_iomap_begin_report(struct inode *inode, loff_t offset,
3543 loff_t length, unsigned int flags,
3544 struct iomap *iomap, struct iomap *srcmap)
3545 {
3546 int ret;
3547 bool delalloc = false;
3548 struct ext4_map_blocks map;
3549 u8 blkbits = inode->i_blkbits;
3550
3551 if ((offset >> blkbits) > EXT4_MAX_LOGICAL_BLOCK)
3552 return -EINVAL;
3553
3554 if (ext4_has_inline_data(inode)) {
3555 ret = ext4_inline_data_iomap(inode, iomap);
3556 if (ret != -EAGAIN) {
3557 if (ret == 0 && offset >= iomap->length)
3558 ret = -ENOENT;
3559 return ret;
3560 }
3561 }
3562
3563
3564
3565
3566 map.m_lblk = offset >> blkbits;
3567 map.m_len = min_t(loff_t, (offset + length - 1) >> blkbits,
3568 EXT4_MAX_LOGICAL_BLOCK) - map.m_lblk + 1;
3569
3570
3571
3572
3573
3574
3575
3576 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
3577 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
3578
3579 if (offset >= sbi->s_bitmap_maxbytes) {
3580 map.m_flags = 0;
3581 goto set_iomap;
3582 }
3583 }
3584
3585 ret = ext4_map_blocks(NULL, inode, &map, 0);
3586 if (ret < 0)
3587 return ret;
3588 if (ret == 0)
3589 delalloc = ext4_iomap_is_delalloc(inode, &map);
3590
3591 set_iomap:
3592 ext4_set_iomap(inode, iomap, &map, offset, length, flags);
3593 if (delalloc && iomap->type == IOMAP_HOLE)
3594 iomap->type = IOMAP_DELALLOC;
3595
3596 return 0;
3597 }
3598
3599 const struct iomap_ops ext4_iomap_report_ops = {
3600 .iomap_begin = ext4_iomap_begin_report,
3601 };
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617 static bool ext4_journalled_dirty_folio(struct address_space *mapping,
3618 struct folio *folio)
3619 {
3620 WARN_ON_ONCE(!folio_buffers(folio));
3621 folio_set_checked(folio);
3622 return filemap_dirty_folio(mapping, folio);
3623 }
3624
3625 static bool ext4_dirty_folio(struct address_space *mapping, struct folio *folio)
3626 {
3627 WARN_ON_ONCE(!folio_test_locked(folio) && !folio_test_dirty(folio));
3628 WARN_ON_ONCE(!folio_buffers(folio));
3629 return block_dirty_folio(mapping, folio);
3630 }
3631
3632 static int ext4_iomap_swap_activate(struct swap_info_struct *sis,
3633 struct file *file, sector_t *span)
3634 {
3635 return iomap_swapfile_activate(sis, file, span,
3636 &ext4_iomap_report_ops);
3637 }
3638
3639 static const struct address_space_operations ext4_aops = {
3640 .read_folio = ext4_read_folio,
3641 .readahead = ext4_readahead,
3642 .writepage = ext4_writepage,
3643 .writepages = ext4_writepages,
3644 .write_begin = ext4_write_begin,
3645 .write_end = ext4_write_end,
3646 .dirty_folio = ext4_dirty_folio,
3647 .bmap = ext4_bmap,
3648 .invalidate_folio = ext4_invalidate_folio,
3649 .release_folio = ext4_release_folio,
3650 .direct_IO = noop_direct_IO,
3651 .migrate_folio = buffer_migrate_folio,
3652 .is_partially_uptodate = block_is_partially_uptodate,
3653 .error_remove_page = generic_error_remove_page,
3654 .swap_activate = ext4_iomap_swap_activate,
3655 };
3656
3657 static const struct address_space_operations ext4_journalled_aops = {
3658 .read_folio = ext4_read_folio,
3659 .readahead = ext4_readahead,
3660 .writepage = ext4_writepage,
3661 .writepages = ext4_writepages,
3662 .write_begin = ext4_write_begin,
3663 .write_end = ext4_journalled_write_end,
3664 .dirty_folio = ext4_journalled_dirty_folio,
3665 .bmap = ext4_bmap,
3666 .invalidate_folio = ext4_journalled_invalidate_folio,
3667 .release_folio = ext4_release_folio,
3668 .direct_IO = noop_direct_IO,
3669 .is_partially_uptodate = block_is_partially_uptodate,
3670 .error_remove_page = generic_error_remove_page,
3671 .swap_activate = ext4_iomap_swap_activate,
3672 };
3673
3674 static const struct address_space_operations ext4_da_aops = {
3675 .read_folio = ext4_read_folio,
3676 .readahead = ext4_readahead,
3677 .writepage = ext4_writepage,
3678 .writepages = ext4_writepages,
3679 .write_begin = ext4_da_write_begin,
3680 .write_end = ext4_da_write_end,
3681 .dirty_folio = ext4_dirty_folio,
3682 .bmap = ext4_bmap,
3683 .invalidate_folio = ext4_invalidate_folio,
3684 .release_folio = ext4_release_folio,
3685 .direct_IO = noop_direct_IO,
3686 .migrate_folio = buffer_migrate_folio,
3687 .is_partially_uptodate = block_is_partially_uptodate,
3688 .error_remove_page = generic_error_remove_page,
3689 .swap_activate = ext4_iomap_swap_activate,
3690 };
3691
3692 static const struct address_space_operations ext4_dax_aops = {
3693 .writepages = ext4_dax_writepages,
3694 .direct_IO = noop_direct_IO,
3695 .dirty_folio = noop_dirty_folio,
3696 .bmap = ext4_bmap,
3697 .swap_activate = ext4_iomap_swap_activate,
3698 };
3699
3700 void ext4_set_aops(struct inode *inode)
3701 {
3702 switch (ext4_inode_journal_mode(inode)) {
3703 case EXT4_INODE_ORDERED_DATA_MODE:
3704 case EXT4_INODE_WRITEBACK_DATA_MODE:
3705 break;
3706 case EXT4_INODE_JOURNAL_DATA_MODE:
3707 inode->i_mapping->a_ops = &ext4_journalled_aops;
3708 return;
3709 default:
3710 BUG();
3711 }
3712 if (IS_DAX(inode))
3713 inode->i_mapping->a_ops = &ext4_dax_aops;
3714 else if (test_opt(inode->i_sb, DELALLOC))
3715 inode->i_mapping->a_ops = &ext4_da_aops;
3716 else
3717 inode->i_mapping->a_ops = &ext4_aops;
3718 }
3719
3720 static int __ext4_block_zero_page_range(handle_t *handle,
3721 struct address_space *mapping, loff_t from, loff_t length)
3722 {
3723 ext4_fsblk_t index = from >> PAGE_SHIFT;
3724 unsigned offset = from & (PAGE_SIZE-1);
3725 unsigned blocksize, pos;
3726 ext4_lblk_t iblock;
3727 struct inode *inode = mapping->host;
3728 struct buffer_head *bh;
3729 struct page *page;
3730 int err = 0;
3731
3732 page = find_or_create_page(mapping, from >> PAGE_SHIFT,
3733 mapping_gfp_constraint(mapping, ~__GFP_FS));
3734 if (!page)
3735 return -ENOMEM;
3736
3737 blocksize = inode->i_sb->s_blocksize;
3738
3739 iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits);
3740
3741 if (!page_has_buffers(page))
3742 create_empty_buffers(page, blocksize, 0);
3743
3744
3745 bh = page_buffers(page);
3746 pos = blocksize;
3747 while (offset >= pos) {
3748 bh = bh->b_this_page;
3749 iblock++;
3750 pos += blocksize;
3751 }
3752 if (buffer_freed(bh)) {
3753 BUFFER_TRACE(bh, "freed: skip");
3754 goto unlock;
3755 }
3756 if (!buffer_mapped(bh)) {
3757 BUFFER_TRACE(bh, "unmapped");
3758 ext4_get_block(inode, iblock, bh, 0);
3759
3760 if (!buffer_mapped(bh)) {
3761 BUFFER_TRACE(bh, "still unmapped");
3762 goto unlock;
3763 }
3764 }
3765
3766
3767 if (PageUptodate(page))
3768 set_buffer_uptodate(bh);
3769
3770 if (!buffer_uptodate(bh)) {
3771 err = ext4_read_bh_lock(bh, 0, true);
3772 if (err)
3773 goto unlock;
3774 if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
3775
3776 BUG_ON(!fscrypt_has_encryption_key(inode));
3777 err = fscrypt_decrypt_pagecache_blocks(page, blocksize,
3778 bh_offset(bh));
3779 if (err) {
3780 clear_buffer_uptodate(bh);
3781 goto unlock;
3782 }
3783 }
3784 }
3785 if (ext4_should_journal_data(inode)) {
3786 BUFFER_TRACE(bh, "get write access");
3787 err = ext4_journal_get_write_access(handle, inode->i_sb, bh,
3788 EXT4_JTR_NONE);
3789 if (err)
3790 goto unlock;
3791 }
3792 zero_user(page, offset, length);
3793 BUFFER_TRACE(bh, "zeroed end of block");
3794
3795 if (ext4_should_journal_data(inode)) {
3796 err = ext4_handle_dirty_metadata(handle, inode, bh);
3797 } else {
3798 err = 0;
3799 mark_buffer_dirty(bh);
3800 if (ext4_should_order_data(inode))
3801 err = ext4_jbd2_inode_add_write(handle, inode, from,
3802 length);
3803 }
3804
3805 unlock:
3806 unlock_page(page);
3807 put_page(page);
3808 return err;
3809 }
3810
3811
3812
3813
3814
3815
3816
3817
3818 static int ext4_block_zero_page_range(handle_t *handle,
3819 struct address_space *mapping, loff_t from, loff_t length)
3820 {
3821 struct inode *inode = mapping->host;
3822 unsigned offset = from & (PAGE_SIZE-1);
3823 unsigned blocksize = inode->i_sb->s_blocksize;
3824 unsigned max = blocksize - (offset & (blocksize - 1));
3825
3826
3827
3828
3829
3830 if (length > max || length < 0)
3831 length = max;
3832
3833 if (IS_DAX(inode)) {
3834 return dax_zero_range(inode, from, length, NULL,
3835 &ext4_iomap_ops);
3836 }
3837 return __ext4_block_zero_page_range(handle, mapping, from, length);
3838 }
3839
3840
3841
3842
3843
3844
3845
3846 static int ext4_block_truncate_page(handle_t *handle,
3847 struct address_space *mapping, loff_t from)
3848 {
3849 unsigned offset = from & (PAGE_SIZE-1);
3850 unsigned length;
3851 unsigned blocksize;
3852 struct inode *inode = mapping->host;
3853
3854
3855 if (IS_ENCRYPTED(inode) && !fscrypt_has_encryption_key(inode))
3856 return 0;
3857
3858 blocksize = inode->i_sb->s_blocksize;
3859 length = blocksize - (offset & (blocksize - 1));
3860
3861 return ext4_block_zero_page_range(handle, mapping, from, length);
3862 }
3863
3864 int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode,
3865 loff_t lstart, loff_t length)
3866 {
3867 struct super_block *sb = inode->i_sb;
3868 struct address_space *mapping = inode->i_mapping;
3869 unsigned partial_start, partial_end;
3870 ext4_fsblk_t start, end;
3871 loff_t byte_end = (lstart + length - 1);
3872 int err = 0;
3873
3874 partial_start = lstart & (sb->s_blocksize - 1);
3875 partial_end = byte_end & (sb->s_blocksize - 1);
3876
3877 start = lstart >> sb->s_blocksize_bits;
3878 end = byte_end >> sb->s_blocksize_bits;
3879
3880
3881 if (start == end &&
3882 (partial_start || (partial_end != sb->s_blocksize - 1))) {
3883 err = ext4_block_zero_page_range(handle, mapping,
3884 lstart, length);
3885 return err;
3886 }
3887
3888 if (partial_start) {
3889 err = ext4_block_zero_page_range(handle, mapping,
3890 lstart, sb->s_blocksize);
3891 if (err)
3892 return err;
3893 }
3894
3895 if (partial_end != sb->s_blocksize - 1)
3896 err = ext4_block_zero_page_range(handle, mapping,
3897 byte_end - partial_end,
3898 partial_end + 1);
3899 return err;
3900 }
3901
3902 int ext4_can_truncate(struct inode *inode)
3903 {
3904 if (S_ISREG(inode->i_mode))
3905 return 1;
3906 if (S_ISDIR(inode->i_mode))
3907 return 1;
3908 if (S_ISLNK(inode->i_mode))
3909 return !ext4_inode_is_fast_symlink(inode);
3910 return 0;
3911 }
3912
3913
3914
3915
3916
3917
3918
3919 int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
3920 loff_t len)
3921 {
3922 handle_t *handle;
3923 int ret;
3924
3925 loff_t size = i_size_read(inode);
3926
3927 WARN_ON(!inode_is_locked(inode));
3928 if (offset > size || offset + len < size)
3929 return 0;
3930
3931 if (EXT4_I(inode)->i_disksize >= size)
3932 return 0;
3933
3934 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1);
3935 if (IS_ERR(handle))
3936 return PTR_ERR(handle);
3937 ext4_update_i_disksize(inode, size);
3938 ret = ext4_mark_inode_dirty(handle, inode);
3939 ext4_journal_stop(handle);
3940
3941 return ret;
3942 }
3943
3944 static void ext4_wait_dax_page(struct inode *inode)
3945 {
3946 filemap_invalidate_unlock(inode->i_mapping);
3947 schedule();
3948 filemap_invalidate_lock(inode->i_mapping);
3949 }
3950
3951 int ext4_break_layouts(struct inode *inode)
3952 {
3953 struct page *page;
3954 int error;
3955
3956 if (WARN_ON_ONCE(!rwsem_is_locked(&inode->i_mapping->invalidate_lock)))
3957 return -EINVAL;
3958
3959 do {
3960 page = dax_layout_busy_page(inode->i_mapping);
3961 if (!page)
3962 return 0;
3963
3964 error = ___wait_var_event(&page->_refcount,
3965 atomic_read(&page->_refcount) == 1,
3966 TASK_INTERRUPTIBLE, 0, 0,
3967 ext4_wait_dax_page(inode));
3968 } while (error == 0);
3969
3970 return error;
3971 }
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984 int ext4_punch_hole(struct file *file, loff_t offset, loff_t length)
3985 {
3986 struct inode *inode = file_inode(file);
3987 struct super_block *sb = inode->i_sb;
3988 ext4_lblk_t first_block, stop_block;
3989 struct address_space *mapping = inode->i_mapping;
3990 loff_t first_block_offset, last_block_offset, max_length;
3991 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
3992 handle_t *handle;
3993 unsigned int credits;
3994 int ret = 0, ret2 = 0;
3995
3996 trace_ext4_punch_hole(inode, offset, length, 0);
3997
3998
3999
4000
4001
4002 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
4003 ret = filemap_write_and_wait_range(mapping, offset,
4004 offset + length - 1);
4005 if (ret)
4006 return ret;
4007 }
4008
4009 inode_lock(inode);
4010
4011
4012 if (offset >= inode->i_size)
4013 goto out_mutex;
4014
4015
4016
4017
4018
4019 if (offset + length > inode->i_size) {
4020 length = inode->i_size +
4021 PAGE_SIZE - (inode->i_size & (PAGE_SIZE - 1)) -
4022 offset;
4023 }
4024
4025
4026
4027
4028
4029 max_length = sbi->s_bitmap_maxbytes - inode->i_sb->s_blocksize;
4030 if (offset + length > max_length)
4031 length = max_length - offset;
4032
4033 if (offset & (sb->s_blocksize - 1) ||
4034 (offset + length) & (sb->s_blocksize - 1)) {
4035
4036
4037
4038
4039 ret = ext4_inode_attach_jinode(inode);
4040 if (ret < 0)
4041 goto out_mutex;
4042
4043 }
4044
4045
4046 inode_dio_wait(inode);
4047
4048 ret = file_modified(file);
4049 if (ret)
4050 goto out_mutex;
4051
4052
4053
4054
4055
4056 filemap_invalidate_lock(mapping);
4057
4058 ret = ext4_break_layouts(inode);
4059 if (ret)
4060 goto out_dio;
4061
4062 first_block_offset = round_up(offset, sb->s_blocksize);
4063 last_block_offset = round_down((offset + length), sb->s_blocksize) - 1;
4064
4065
4066 if (last_block_offset > first_block_offset) {
4067 ret = ext4_update_disksize_before_punch(inode, offset, length);
4068 if (ret)
4069 goto out_dio;
4070 truncate_pagecache_range(inode, first_block_offset,
4071 last_block_offset);
4072 }
4073
4074 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4075 credits = ext4_writepage_trans_blocks(inode);
4076 else
4077 credits = ext4_blocks_for_truncate(inode);
4078 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
4079 if (IS_ERR(handle)) {
4080 ret = PTR_ERR(handle);
4081 ext4_std_error(sb, ret);
4082 goto out_dio;
4083 }
4084
4085 ret = ext4_zero_partial_blocks(handle, inode, offset,
4086 length);
4087 if (ret)
4088 goto out_stop;
4089
4090 first_block = (offset + sb->s_blocksize - 1) >>
4091 EXT4_BLOCK_SIZE_BITS(sb);
4092 stop_block = (offset + length) >> EXT4_BLOCK_SIZE_BITS(sb);
4093
4094
4095 if (stop_block > first_block) {
4096
4097 down_write(&EXT4_I(inode)->i_data_sem);
4098 ext4_discard_preallocations(inode, 0);
4099
4100 ret = ext4_es_remove_extent(inode, first_block,
4101 stop_block - first_block);
4102 if (ret) {
4103 up_write(&EXT4_I(inode)->i_data_sem);
4104 goto out_stop;
4105 }
4106
4107 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4108 ret = ext4_ext_remove_space(inode, first_block,
4109 stop_block - 1);
4110 else
4111 ret = ext4_ind_remove_space(handle, inode, first_block,
4112 stop_block);
4113
4114 up_write(&EXT4_I(inode)->i_data_sem);
4115 }
4116 ext4_fc_track_range(handle, inode, first_block, stop_block);
4117 if (IS_SYNC(inode))
4118 ext4_handle_sync(handle);
4119
4120 inode->i_mtime = inode->i_ctime = current_time(inode);
4121 ret2 = ext4_mark_inode_dirty(handle, inode);
4122 if (unlikely(ret2))
4123 ret = ret2;
4124 if (ret >= 0)
4125 ext4_update_inode_fsync_trans(handle, inode, 1);
4126 out_stop:
4127 ext4_journal_stop(handle);
4128 out_dio:
4129 filemap_invalidate_unlock(mapping);
4130 out_mutex:
4131 inode_unlock(inode);
4132 return ret;
4133 }
4134
4135 int ext4_inode_attach_jinode(struct inode *inode)
4136 {
4137 struct ext4_inode_info *ei = EXT4_I(inode);
4138 struct jbd2_inode *jinode;
4139
4140 if (ei->jinode || !EXT4_SB(inode->i_sb)->s_journal)
4141 return 0;
4142
4143 jinode = jbd2_alloc_inode(GFP_KERNEL);
4144 spin_lock(&inode->i_lock);
4145 if (!ei->jinode) {
4146 if (!jinode) {
4147 spin_unlock(&inode->i_lock);
4148 return -ENOMEM;
4149 }
4150 ei->jinode = jinode;
4151 jbd2_journal_init_jbd_inode(ei->jinode, inode);
4152 jinode = NULL;
4153 }
4154 spin_unlock(&inode->i_lock);
4155 if (unlikely(jinode != NULL))
4156 jbd2_free_inode(jinode);
4157 return 0;
4158 }
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188 int ext4_truncate(struct inode *inode)
4189 {
4190 struct ext4_inode_info *ei = EXT4_I(inode);
4191 unsigned int credits;
4192 int err = 0, err2;
4193 handle_t *handle;
4194 struct address_space *mapping = inode->i_mapping;
4195
4196
4197
4198
4199
4200
4201 if (!(inode->i_state & (I_NEW|I_FREEING)))
4202 WARN_ON(!inode_is_locked(inode));
4203 trace_ext4_truncate_enter(inode);
4204
4205 if (!ext4_can_truncate(inode))
4206 goto out_trace;
4207
4208 if (inode->i_size == 0 && !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC))
4209 ext4_set_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE);
4210
4211 if (ext4_has_inline_data(inode)) {
4212 int has_inline = 1;
4213
4214 err = ext4_inline_data_truncate(inode, &has_inline);
4215 if (err || has_inline)
4216 goto out_trace;
4217 }
4218
4219
4220 if (inode->i_size & (inode->i_sb->s_blocksize - 1)) {
4221 if (ext4_inode_attach_jinode(inode) < 0)
4222 goto out_trace;
4223 }
4224
4225 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4226 credits = ext4_writepage_trans_blocks(inode);
4227 else
4228 credits = ext4_blocks_for_truncate(inode);
4229
4230 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
4231 if (IS_ERR(handle)) {
4232 err = PTR_ERR(handle);
4233 goto out_trace;
4234 }
4235
4236 if (inode->i_size & (inode->i_sb->s_blocksize - 1))
4237 ext4_block_truncate_page(handle, mapping, inode->i_size);
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248 err = ext4_orphan_add(handle, inode);
4249 if (err)
4250 goto out_stop;
4251
4252 down_write(&EXT4_I(inode)->i_data_sem);
4253
4254 ext4_discard_preallocations(inode, 0);
4255
4256 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4257 err = ext4_ext_truncate(handle, inode);
4258 else
4259 ext4_ind_truncate(handle, inode);
4260
4261 up_write(&ei->i_data_sem);
4262 if (err)
4263 goto out_stop;
4264
4265 if (IS_SYNC(inode))
4266 ext4_handle_sync(handle);
4267
4268 out_stop:
4269
4270
4271
4272
4273
4274
4275
4276 if (inode->i_nlink)
4277 ext4_orphan_del(handle, inode);
4278
4279 inode->i_mtime = inode->i_ctime = current_time(inode);
4280 err2 = ext4_mark_inode_dirty(handle, inode);
4281 if (unlikely(err2 && !err))
4282 err = err2;
4283 ext4_journal_stop(handle);
4284
4285 out_trace:
4286 trace_ext4_truncate_exit(inode);
4287 return err;
4288 }
4289
4290 static inline u64 ext4_inode_peek_iversion(const struct inode *inode)
4291 {
4292 if (unlikely(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL))
4293 return inode_peek_iversion_raw(inode);
4294 else
4295 return inode_peek_iversion(inode);
4296 }
4297
4298 static int ext4_inode_blocks_set(struct ext4_inode *raw_inode,
4299 struct ext4_inode_info *ei)
4300 {
4301 struct inode *inode = &(ei->vfs_inode);
4302 u64 i_blocks = READ_ONCE(inode->i_blocks);
4303 struct super_block *sb = inode->i_sb;
4304
4305 if (i_blocks <= ~0U) {
4306
4307
4308
4309
4310 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks);
4311 raw_inode->i_blocks_high = 0;
4312 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE);
4313 return 0;
4314 }
4315
4316
4317
4318
4319
4320
4321 if (!ext4_has_feature_huge_file(sb))
4322 return -EFSCORRUPTED;
4323
4324 if (i_blocks <= 0xffffffffffffULL) {
4325
4326
4327
4328
4329 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks);
4330 raw_inode->i_blocks_high = cpu_to_le16(i_blocks >> 32);
4331 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE);
4332 } else {
4333 ext4_set_inode_flag(inode, EXT4_INODE_HUGE_FILE);
4334
4335 i_blocks = i_blocks >> (inode->i_blkbits - 9);
4336 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks);
4337 raw_inode->i_blocks_high = cpu_to_le16(i_blocks >> 32);
4338 }
4339 return 0;
4340 }
4341
4342 static int ext4_fill_raw_inode(struct inode *inode, struct ext4_inode *raw_inode)
4343 {
4344 struct ext4_inode_info *ei = EXT4_I(inode);
4345 uid_t i_uid;
4346 gid_t i_gid;
4347 projid_t i_projid;
4348 int block;
4349 int err;
4350
4351 err = ext4_inode_blocks_set(raw_inode, ei);
4352
4353 raw_inode->i_mode = cpu_to_le16(inode->i_mode);
4354 i_uid = i_uid_read(inode);
4355 i_gid = i_gid_read(inode);
4356 i_projid = from_kprojid(&init_user_ns, ei->i_projid);
4357 if (!(test_opt(inode->i_sb, NO_UID32))) {
4358 raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid));
4359 raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid));
4360
4361
4362
4363
4364
4365 if (ei->i_dtime && list_empty(&ei->i_orphan)) {
4366 raw_inode->i_uid_high = 0;
4367 raw_inode->i_gid_high = 0;
4368 } else {
4369 raw_inode->i_uid_high =
4370 cpu_to_le16(high_16_bits(i_uid));
4371 raw_inode->i_gid_high =
4372 cpu_to_le16(high_16_bits(i_gid));
4373 }
4374 } else {
4375 raw_inode->i_uid_low = cpu_to_le16(fs_high2lowuid(i_uid));
4376 raw_inode->i_gid_low = cpu_to_le16(fs_high2lowgid(i_gid));
4377 raw_inode->i_uid_high = 0;
4378 raw_inode->i_gid_high = 0;
4379 }
4380 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
4381
4382 EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
4383 EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode);
4384 EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode);
4385 EXT4_EINODE_SET_XTIME(i_crtime, ei, raw_inode);
4386
4387 raw_inode->i_dtime = cpu_to_le32(ei->i_dtime);
4388 raw_inode->i_flags = cpu_to_le32(ei->i_flags & 0xFFFFFFFF);
4389 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT)))
4390 raw_inode->i_file_acl_high =
4391 cpu_to_le16(ei->i_file_acl >> 32);
4392 raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl);
4393 ext4_isize_set(raw_inode, ei->i_disksize);
4394
4395 raw_inode->i_generation = cpu_to_le32(inode->i_generation);
4396 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
4397 if (old_valid_dev(inode->i_rdev)) {
4398 raw_inode->i_block[0] =
4399 cpu_to_le32(old_encode_dev(inode->i_rdev));
4400 raw_inode->i_block[1] = 0;
4401 } else {
4402 raw_inode->i_block[0] = 0;
4403 raw_inode->i_block[1] =
4404 cpu_to_le32(new_encode_dev(inode->i_rdev));
4405 raw_inode->i_block[2] = 0;
4406 }
4407 } else if (!ext4_has_inline_data(inode)) {
4408 for (block = 0; block < EXT4_N_BLOCKS; block++)
4409 raw_inode->i_block[block] = ei->i_data[block];
4410 }
4411
4412 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
4413 u64 ivers = ext4_inode_peek_iversion(inode);
4414
4415 raw_inode->i_disk_version = cpu_to_le32(ivers);
4416 if (ei->i_extra_isize) {
4417 if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
4418 raw_inode->i_version_hi =
4419 cpu_to_le32(ivers >> 32);
4420 raw_inode->i_extra_isize =
4421 cpu_to_le16(ei->i_extra_isize);
4422 }
4423 }
4424
4425 if (i_projid != EXT4_DEF_PROJID &&
4426 !ext4_has_feature_project(inode->i_sb))
4427 err = err ?: -EFSCORRUPTED;
4428
4429 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE &&
4430 EXT4_FITS_IN_INODE(raw_inode, ei, i_projid))
4431 raw_inode->i_projid = cpu_to_le32(i_projid);
4432
4433 ext4_inode_csum_set(inode, raw_inode, ei);
4434 return err;
4435 }
4436
4437
4438
4439
4440
4441
4442
4443 static int __ext4_get_inode_loc(struct super_block *sb, unsigned long ino,
4444 struct inode *inode, struct ext4_iloc *iloc,
4445 ext4_fsblk_t *ret_block)
4446 {
4447 struct ext4_group_desc *gdp;
4448 struct buffer_head *bh;
4449 ext4_fsblk_t block;
4450 struct blk_plug plug;
4451 int inodes_per_block, inode_offset;
4452
4453 iloc->bh = NULL;
4454 if (ino < EXT4_ROOT_INO ||
4455 ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))
4456 return -EFSCORRUPTED;
4457
4458 iloc->block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);
4459 gdp = ext4_get_group_desc(sb, iloc->block_group, NULL);
4460 if (!gdp)
4461 return -EIO;
4462
4463
4464
4465
4466 inodes_per_block = EXT4_SB(sb)->s_inodes_per_block;
4467 inode_offset = ((ino - 1) %
4468 EXT4_INODES_PER_GROUP(sb));
4469 block = ext4_inode_table(sb, gdp) + (inode_offset / inodes_per_block);
4470 iloc->offset = (inode_offset % inodes_per_block) * EXT4_INODE_SIZE(sb);
4471
4472 bh = sb_getblk(sb, block);
4473 if (unlikely(!bh))
4474 return -ENOMEM;
4475 if (ext4_buffer_uptodate(bh))
4476 goto has_buffer;
4477
4478 lock_buffer(bh);
4479 if (ext4_buffer_uptodate(bh)) {
4480
4481 unlock_buffer(bh);
4482 goto has_buffer;
4483 }
4484
4485
4486
4487
4488
4489
4490 if (inode && !ext4_test_inode_state(inode, EXT4_STATE_XATTR)) {
4491 struct buffer_head *bitmap_bh;
4492 int i, start;
4493
4494 start = inode_offset & ~(inodes_per_block - 1);
4495
4496
4497 bitmap_bh = sb_getblk(sb, ext4_inode_bitmap(sb, gdp));
4498 if (unlikely(!bitmap_bh))
4499 goto make_io;
4500
4501
4502
4503
4504
4505
4506 if (!buffer_uptodate(bitmap_bh)) {
4507 brelse(bitmap_bh);
4508 goto make_io;
4509 }
4510 for (i = start; i < start + inodes_per_block; i++) {
4511 if (i == inode_offset)
4512 continue;
4513 if (ext4_test_bit(i, bitmap_bh->b_data))
4514 break;
4515 }
4516 brelse(bitmap_bh);
4517 if (i == start + inodes_per_block) {
4518 struct ext4_inode *raw_inode =
4519 (struct ext4_inode *) (bh->b_data + iloc->offset);
4520
4521
4522 memset(bh->b_data, 0, bh->b_size);
4523 if (!ext4_test_inode_state(inode, EXT4_STATE_NEW))
4524 ext4_fill_raw_inode(inode, raw_inode);
4525 set_buffer_uptodate(bh);
4526 unlock_buffer(bh);
4527 goto has_buffer;
4528 }
4529 }
4530
4531 make_io:
4532
4533
4534
4535
4536 blk_start_plug(&plug);
4537 if (EXT4_SB(sb)->s_inode_readahead_blks) {
4538 ext4_fsblk_t b, end, table;
4539 unsigned num;
4540 __u32 ra_blks = EXT4_SB(sb)->s_inode_readahead_blks;
4541
4542 table = ext4_inode_table(sb, gdp);
4543
4544 b = block & ~((ext4_fsblk_t) ra_blks - 1);
4545 if (table > b)
4546 b = table;
4547 end = b + ra_blks;
4548 num = EXT4_INODES_PER_GROUP(sb);
4549 if (ext4_has_group_desc_csum(sb))
4550 num -= ext4_itable_unused_count(sb, gdp);
4551 table += num / inodes_per_block;
4552 if (end > table)
4553 end = table;
4554 while (b <= end)
4555 ext4_sb_breadahead_unmovable(sb, b++);
4556 }
4557
4558
4559
4560
4561
4562
4563 trace_ext4_load_inode(sb, ino);
4564 ext4_read_bh_nowait(bh, REQ_META | REQ_PRIO, NULL);
4565 blk_finish_plug(&plug);
4566 wait_on_buffer(bh);
4567 ext4_simulate_fail_bh(sb, bh, EXT4_SIM_INODE_EIO);
4568 if (!buffer_uptodate(bh)) {
4569 if (ret_block)
4570 *ret_block = block;
4571 brelse(bh);
4572 return -EIO;
4573 }
4574 has_buffer:
4575 iloc->bh = bh;
4576 return 0;
4577 }
4578
4579 static int __ext4_get_inode_loc_noinmem(struct inode *inode,
4580 struct ext4_iloc *iloc)
4581 {
4582 ext4_fsblk_t err_blk = 0;
4583 int ret;
4584
4585 ret = __ext4_get_inode_loc(inode->i_sb, inode->i_ino, NULL, iloc,
4586 &err_blk);
4587
4588 if (ret == -EIO)
4589 ext4_error_inode_block(inode, err_blk, EIO,
4590 "unable to read itable block");
4591
4592 return ret;
4593 }
4594
4595 int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc)
4596 {
4597 ext4_fsblk_t err_blk = 0;
4598 int ret;
4599
4600 ret = __ext4_get_inode_loc(inode->i_sb, inode->i_ino, inode, iloc,
4601 &err_blk);
4602
4603 if (ret == -EIO)
4604 ext4_error_inode_block(inode, err_blk, EIO,
4605 "unable to read itable block");
4606
4607 return ret;
4608 }
4609
4610
4611 int ext4_get_fc_inode_loc(struct super_block *sb, unsigned long ino,
4612 struct ext4_iloc *iloc)
4613 {
4614 return __ext4_get_inode_loc(sb, ino, NULL, iloc, NULL);
4615 }
4616
4617 static bool ext4_should_enable_dax(struct inode *inode)
4618 {
4619 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
4620
4621 if (test_opt2(inode->i_sb, DAX_NEVER))
4622 return false;
4623 if (!S_ISREG(inode->i_mode))
4624 return false;
4625 if (ext4_should_journal_data(inode))
4626 return false;
4627 if (ext4_has_inline_data(inode))
4628 return false;
4629 if (ext4_test_inode_flag(inode, EXT4_INODE_ENCRYPT))
4630 return false;
4631 if (ext4_test_inode_flag(inode, EXT4_INODE_VERITY))
4632 return false;
4633 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags))
4634 return false;
4635 if (test_opt(inode->i_sb, DAX_ALWAYS))
4636 return true;
4637
4638 return ext4_test_inode_flag(inode, EXT4_INODE_DAX);
4639 }
4640
4641 void ext4_set_inode_flags(struct inode *inode, bool init)
4642 {
4643 unsigned int flags = EXT4_I(inode)->i_flags;
4644 unsigned int new_fl = 0;
4645
4646 WARN_ON_ONCE(IS_DAX(inode) && init);
4647
4648 if (flags & EXT4_SYNC_FL)
4649 new_fl |= S_SYNC;
4650 if (flags & EXT4_APPEND_FL)
4651 new_fl |= S_APPEND;
4652 if (flags & EXT4_IMMUTABLE_FL)
4653 new_fl |= S_IMMUTABLE;
4654 if (flags & EXT4_NOATIME_FL)
4655 new_fl |= S_NOATIME;
4656 if (flags & EXT4_DIRSYNC_FL)
4657 new_fl |= S_DIRSYNC;
4658
4659
4660
4661 new_fl |= (inode->i_flags & S_DAX);
4662 if (init && ext4_should_enable_dax(inode))
4663 new_fl |= S_DAX;
4664
4665 if (flags & EXT4_ENCRYPT_FL)
4666 new_fl |= S_ENCRYPTED;
4667 if (flags & EXT4_CASEFOLD_FL)
4668 new_fl |= S_CASEFOLD;
4669 if (flags & EXT4_VERITY_FL)
4670 new_fl |= S_VERITY;
4671 inode_set_flags(inode, new_fl,
4672 S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|S_DAX|
4673 S_ENCRYPTED|S_CASEFOLD|S_VERITY);
4674 }
4675
4676 static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode,
4677 struct ext4_inode_info *ei)
4678 {
4679 blkcnt_t i_blocks ;
4680 struct inode *inode = &(ei->vfs_inode);
4681 struct super_block *sb = inode->i_sb;
4682
4683 if (ext4_has_feature_huge_file(sb)) {
4684
4685 i_blocks = ((u64)le16_to_cpu(raw_inode->i_blocks_high)) << 32 |
4686 le32_to_cpu(raw_inode->i_blocks_lo);
4687 if (ext4_test_inode_flag(inode, EXT4_INODE_HUGE_FILE)) {
4688
4689 return i_blocks << (inode->i_blkbits - 9);
4690 } else {
4691 return i_blocks;
4692 }
4693 } else {
4694 return le32_to_cpu(raw_inode->i_blocks_lo);
4695 }
4696 }
4697
4698 static inline int ext4_iget_extra_inode(struct inode *inode,
4699 struct ext4_inode *raw_inode,
4700 struct ext4_inode_info *ei)
4701 {
4702 __le32 *magic = (void *)raw_inode +
4703 EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize;
4704
4705 if (EXT4_INODE_HAS_XATTR_SPACE(inode) &&
4706 *magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
4707 ext4_set_inode_state(inode, EXT4_STATE_XATTR);
4708 return ext4_find_inline_data_nolock(inode);
4709 } else
4710 EXT4_I(inode)->i_inline_off = 0;
4711 return 0;
4712 }
4713
4714 int ext4_get_projid(struct inode *inode, kprojid_t *projid)
4715 {
4716 if (!ext4_has_feature_project(inode->i_sb))
4717 return -EOPNOTSUPP;
4718 *projid = EXT4_I(inode)->i_projid;
4719 return 0;
4720 }
4721
4722
4723
4724
4725
4726
4727 static inline void ext4_inode_set_iversion_queried(struct inode *inode, u64 val)
4728 {
4729 if (unlikely(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL))
4730 inode_set_iversion_raw(inode, val);
4731 else
4732 inode_set_iversion_queried(inode, val);
4733 }
4734
4735 struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
4736 ext4_iget_flags flags, const char *function,
4737 unsigned int line)
4738 {
4739 struct ext4_iloc iloc;
4740 struct ext4_inode *raw_inode;
4741 struct ext4_inode_info *ei;
4742 struct ext4_super_block *es = EXT4_SB(sb)->s_es;
4743 struct inode *inode;
4744 journal_t *journal = EXT4_SB(sb)->s_journal;
4745 long ret;
4746 loff_t size;
4747 int block;
4748 uid_t i_uid;
4749 gid_t i_gid;
4750 projid_t i_projid;
4751
4752 if ((!(flags & EXT4_IGET_SPECIAL) &&
4753 ((ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO) ||
4754 ino == le32_to_cpu(es->s_usr_quota_inum) ||
4755 ino == le32_to_cpu(es->s_grp_quota_inum) ||
4756 ino == le32_to_cpu(es->s_prj_quota_inum) ||
4757 ino == le32_to_cpu(es->s_orphan_file_inum))) ||
4758 (ino < EXT4_ROOT_INO) ||
4759 (ino > le32_to_cpu(es->s_inodes_count))) {
4760 if (flags & EXT4_IGET_HANDLE)
4761 return ERR_PTR(-ESTALE);
4762 __ext4_error(sb, function, line, false, EFSCORRUPTED, 0,
4763 "inode #%lu: comm %s: iget: illegal inode #",
4764 ino, current->comm);
4765 return ERR_PTR(-EFSCORRUPTED);
4766 }
4767
4768 inode = iget_locked(sb, ino);
4769 if (!inode)
4770 return ERR_PTR(-ENOMEM);
4771 if (!(inode->i_state & I_NEW))
4772 return inode;
4773
4774 ei = EXT4_I(inode);
4775 iloc.bh = NULL;
4776
4777 ret = __ext4_get_inode_loc_noinmem(inode, &iloc);
4778 if (ret < 0)
4779 goto bad_inode;
4780 raw_inode = ext4_raw_inode(&iloc);
4781
4782 if ((ino == EXT4_ROOT_INO) && (raw_inode->i_links_count == 0)) {
4783 ext4_error_inode(inode, function, line, 0,
4784 "iget: root inode unallocated");
4785 ret = -EFSCORRUPTED;
4786 goto bad_inode;
4787 }
4788
4789 if ((flags & EXT4_IGET_HANDLE) &&
4790 (raw_inode->i_links_count == 0) && (raw_inode->i_mode == 0)) {
4791 ret = -ESTALE;
4792 goto bad_inode;
4793 }
4794
4795 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
4796 ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize);
4797 if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize >
4798 EXT4_INODE_SIZE(inode->i_sb) ||
4799 (ei->i_extra_isize & 3)) {
4800 ext4_error_inode(inode, function, line, 0,
4801 "iget: bad extra_isize %u "
4802 "(inode size %u)",
4803 ei->i_extra_isize,
4804 EXT4_INODE_SIZE(inode->i_sb));
4805 ret = -EFSCORRUPTED;
4806 goto bad_inode;
4807 }
4808 } else
4809 ei->i_extra_isize = 0;
4810
4811
4812 if (ext4_has_metadata_csum(sb)) {
4813 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
4814 __u32 csum;
4815 __le32 inum = cpu_to_le32(inode->i_ino);
4816 __le32 gen = raw_inode->i_generation;
4817 csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&inum,
4818 sizeof(inum));
4819 ei->i_csum_seed = ext4_chksum(sbi, csum, (__u8 *)&gen,
4820 sizeof(gen));
4821 }
4822
4823 if ((!ext4_inode_csum_verify(inode, raw_inode, ei) ||
4824 ext4_simulate_fail(sb, EXT4_SIM_INODE_CRC)) &&
4825 (!(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY))) {
4826 ext4_error_inode_err(inode, function, line, 0,
4827 EFSBADCRC, "iget: checksum invalid");
4828 ret = -EFSBADCRC;
4829 goto bad_inode;
4830 }
4831
4832 inode->i_mode = le16_to_cpu(raw_inode->i_mode);
4833 i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low);
4834 i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);
4835 if (ext4_has_feature_project(sb) &&
4836 EXT4_INODE_SIZE(sb) > EXT4_GOOD_OLD_INODE_SIZE &&
4837 EXT4_FITS_IN_INODE(raw_inode, ei, i_projid))
4838 i_projid = (projid_t)le32_to_cpu(raw_inode->i_projid);
4839 else
4840 i_projid = EXT4_DEF_PROJID;
4841
4842 if (!(test_opt(inode->i_sb, NO_UID32))) {
4843 i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
4844 i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
4845 }
4846 i_uid_write(inode, i_uid);
4847 i_gid_write(inode, i_gid);
4848 ei->i_projid = make_kprojid(&init_user_ns, i_projid);
4849 set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
4850
4851 ext4_clear_state_flags(ei);
4852 ei->i_inline_off = 0;
4853 ei->i_dir_start_lookup = 0;
4854 ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
4855
4856
4857
4858
4859
4860 if (inode->i_nlink == 0) {
4861 if ((inode->i_mode == 0 ||
4862 !(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) &&
4863 ino != EXT4_BOOT_LOADER_INO) {
4864
4865 ret = -ESTALE;
4866 goto bad_inode;
4867 }
4868
4869
4870
4871
4872
4873
4874 }
4875 ei->i_flags = le32_to_cpu(raw_inode->i_flags);
4876 ext4_set_inode_flags(inode, true);
4877 inode->i_blocks = ext4_inode_blocks(raw_inode, ei);
4878 ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo);
4879 if (ext4_has_feature_64bit(sb))
4880 ei->i_file_acl |=
4881 ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32;
4882 inode->i_size = ext4_isize(sb, raw_inode);
4883 if ((size = i_size_read(inode)) < 0) {
4884 ext4_error_inode(inode, function, line, 0,
4885 "iget: bad i_size value: %lld", size);
4886 ret = -EFSCORRUPTED;
4887 goto bad_inode;
4888 }
4889
4890
4891
4892
4893
4894 if (!ext4_has_feature_dir_index(sb) && ext4_has_metadata_csum(sb) &&
4895 ext4_test_inode_flag(inode, EXT4_INODE_INDEX)) {
4896 ext4_error_inode(inode, function, line, 0,
4897 "iget: Dir with htree data on filesystem without dir_index feature.");
4898 ret = -EFSCORRUPTED;
4899 goto bad_inode;
4900 }
4901 ei->i_disksize = inode->i_size;
4902 #ifdef CONFIG_QUOTA
4903 ei->i_reserved_quota = 0;
4904 #endif
4905 inode->i_generation = le32_to_cpu(raw_inode->i_generation);
4906 ei->i_block_group = iloc.block_group;
4907 ei->i_last_alloc_group = ~0;
4908
4909
4910
4911
4912 for (block = 0; block < EXT4_N_BLOCKS; block++)
4913 ei->i_data[block] = raw_inode->i_block[block];
4914 INIT_LIST_HEAD(&ei->i_orphan);
4915 ext4_fc_init_inode(&ei->vfs_inode);
4916
4917
4918
4919
4920
4921
4922
4923
4924 if (journal) {
4925 transaction_t *transaction;
4926 tid_t tid;
4927
4928 read_lock(&journal->j_state_lock);
4929 if (journal->j_running_transaction)
4930 transaction = journal->j_running_transaction;
4931 else
4932 transaction = journal->j_committing_transaction;
4933 if (transaction)
4934 tid = transaction->t_tid;
4935 else
4936 tid = journal->j_commit_sequence;
4937 read_unlock(&journal->j_state_lock);
4938 ei->i_sync_tid = tid;
4939 ei->i_datasync_tid = tid;
4940 }
4941
4942 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
4943 if (ei->i_extra_isize == 0) {
4944
4945 BUILD_BUG_ON(sizeof(struct ext4_inode) & 3);
4946 ei->i_extra_isize = sizeof(struct ext4_inode) -
4947 EXT4_GOOD_OLD_INODE_SIZE;
4948 } else {
4949 ret = ext4_iget_extra_inode(inode, raw_inode, ei);
4950 if (ret)
4951 goto bad_inode;
4952 }
4953 }
4954
4955 EXT4_INODE_GET_XTIME(i_ctime, inode, raw_inode);
4956 EXT4_INODE_GET_XTIME(i_mtime, inode, raw_inode);
4957 EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode);
4958 EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
4959
4960 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
4961 u64 ivers = le32_to_cpu(raw_inode->i_disk_version);
4962
4963 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
4964 if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
4965 ivers |=
4966 (__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
4967 }
4968 ext4_inode_set_iversion_queried(inode, ivers);
4969 }
4970
4971 ret = 0;
4972 if (ei->i_file_acl &&
4973 !ext4_inode_block_valid(inode, ei->i_file_acl, 1)) {
4974 ext4_error_inode(inode, function, line, 0,
4975 "iget: bad extended attribute block %llu",
4976 ei->i_file_acl);
4977 ret = -EFSCORRUPTED;
4978 goto bad_inode;
4979 } else if (!ext4_has_inline_data(inode)) {
4980
4981 if (!(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY) &&
4982 (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
4983 (S_ISLNK(inode->i_mode) &&
4984 !ext4_inode_is_fast_symlink(inode)))) {
4985 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4986 ret = ext4_ext_check_inode(inode);
4987 else
4988 ret = ext4_ind_check_inode(inode);
4989 }
4990 }
4991 if (ret)
4992 goto bad_inode;
4993
4994 if (S_ISREG(inode->i_mode)) {
4995 inode->i_op = &ext4_file_inode_operations;
4996 inode->i_fop = &ext4_file_operations;
4997 ext4_set_aops(inode);
4998 } else if (S_ISDIR(inode->i_mode)) {
4999 inode->i_op = &ext4_dir_inode_operations;
5000 inode->i_fop = &ext4_dir_operations;
5001 } else if (S_ISLNK(inode->i_mode)) {
5002
5003 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) {
5004 ext4_error_inode(inode, function, line, 0,
5005 "iget: immutable or append flags "
5006 "not allowed on symlinks");
5007 ret = -EFSCORRUPTED;
5008 goto bad_inode;
5009 }
5010 if (IS_ENCRYPTED(inode)) {
5011 inode->i_op = &ext4_encrypted_symlink_inode_operations;
5012 } else if (ext4_inode_is_fast_symlink(inode)) {
5013 inode->i_link = (char *)ei->i_data;
5014 inode->i_op = &ext4_fast_symlink_inode_operations;
5015 nd_terminate_link(ei->i_data, inode->i_size,
5016 sizeof(ei->i_data) - 1);
5017 } else {
5018 inode->i_op = &ext4_symlink_inode_operations;
5019 }
5020 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
5021 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
5022 inode->i_op = &ext4_special_inode_operations;
5023 if (raw_inode->i_block[0])
5024 init_special_inode(inode, inode->i_mode,
5025 old_decode_dev(le32_to_cpu(raw_inode->i_block[0])));
5026 else
5027 init_special_inode(inode, inode->i_mode,
5028 new_decode_dev(le32_to_cpu(raw_inode->i_block[1])));
5029 } else if (ino == EXT4_BOOT_LOADER_INO) {
5030 make_bad_inode(inode);
5031 } else {
5032 ret = -EFSCORRUPTED;
5033 ext4_error_inode(inode, function, line, 0,
5034 "iget: bogus i_mode (%o)", inode->i_mode);
5035 goto bad_inode;
5036 }
5037 if (IS_CASEFOLDED(inode) && !ext4_has_feature_casefold(inode->i_sb))
5038 ext4_error_inode(inode, function, line, 0,
5039 "casefold flag without casefold feature");
5040 brelse(iloc.bh);
5041
5042 unlock_new_inode(inode);
5043 return inode;
5044
5045 bad_inode:
5046 brelse(iloc.bh);
5047 iget_failed(inode);
5048 return ERR_PTR(ret);
5049 }
5050
5051 static void __ext4_update_other_inode_time(struct super_block *sb,
5052 unsigned long orig_ino,
5053 unsigned long ino,
5054 struct ext4_inode *raw_inode)
5055 {
5056 struct inode *inode;
5057
5058 inode = find_inode_by_ino_rcu(sb, ino);
5059 if (!inode)
5060 return;
5061
5062 if (!inode_is_dirtytime_only(inode))
5063 return;
5064
5065 spin_lock(&inode->i_lock);
5066 if (inode_is_dirtytime_only(inode)) {
5067 struct ext4_inode_info *ei = EXT4_I(inode);
5068
5069 inode->i_state &= ~I_DIRTY_TIME;
5070 spin_unlock(&inode->i_lock);
5071
5072 spin_lock(&ei->i_raw_lock);
5073 EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
5074 EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode);
5075 EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode);
5076 ext4_inode_csum_set(inode, raw_inode, ei);
5077 spin_unlock(&ei->i_raw_lock);
5078 trace_ext4_other_inode_update_time(inode, orig_ino);
5079 return;
5080 }
5081 spin_unlock(&inode->i_lock);
5082 }
5083
5084
5085
5086
5087
5088 static void ext4_update_other_inodes_time(struct super_block *sb,
5089 unsigned long orig_ino, char *buf)
5090 {
5091 unsigned long ino;
5092 int i, inodes_per_block = EXT4_SB(sb)->s_inodes_per_block;
5093 int inode_size = EXT4_INODE_SIZE(sb);
5094
5095
5096
5097
5098
5099
5100 ino = ((orig_ino - 1) & ~(inodes_per_block - 1)) + 1;
5101 rcu_read_lock();
5102 for (i = 0; i < inodes_per_block; i++, ino++, buf += inode_size) {
5103 if (ino == orig_ino)
5104 continue;
5105 __ext4_update_other_inode_time(sb, orig_ino, ino,
5106 (struct ext4_inode *)buf);
5107 }
5108 rcu_read_unlock();
5109 }
5110
5111
5112
5113
5114
5115
5116
5117
5118 static int ext4_do_update_inode(handle_t *handle,
5119 struct inode *inode,
5120 struct ext4_iloc *iloc)
5121 {
5122 struct ext4_inode *raw_inode = ext4_raw_inode(iloc);
5123 struct ext4_inode_info *ei = EXT4_I(inode);
5124 struct buffer_head *bh = iloc->bh;
5125 struct super_block *sb = inode->i_sb;
5126 int err;
5127 int need_datasync = 0, set_large_file = 0;
5128
5129 spin_lock(&ei->i_raw_lock);
5130
5131
5132
5133
5134
5135 if (ext4_test_inode_state(inode, EXT4_STATE_NEW))
5136 memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size);
5137
5138 if (READ_ONCE(ei->i_disksize) != ext4_isize(inode->i_sb, raw_inode))
5139 need_datasync = 1;
5140 if (ei->i_disksize > 0x7fffffffULL) {
5141 if (!ext4_has_feature_large_file(sb) ||
5142 EXT4_SB(sb)->s_es->s_rev_level == cpu_to_le32(EXT4_GOOD_OLD_REV))
5143 set_large_file = 1;
5144 }
5145
5146 err = ext4_fill_raw_inode(inode, raw_inode);
5147 spin_unlock(&ei->i_raw_lock);
5148 if (err) {
5149 EXT4_ERROR_INODE(inode, "corrupted inode contents");
5150 goto out_brelse;
5151 }
5152
5153 if (inode->i_sb->s_flags & SB_LAZYTIME)
5154 ext4_update_other_inodes_time(inode->i_sb, inode->i_ino,
5155 bh->b_data);
5156
5157 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
5158 err = ext4_handle_dirty_metadata(handle, NULL, bh);
5159 if (err)
5160 goto out_error;
5161 ext4_clear_inode_state(inode, EXT4_STATE_NEW);
5162 if (set_large_file) {
5163 BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access");
5164 err = ext4_journal_get_write_access(handle, sb,
5165 EXT4_SB(sb)->s_sbh,
5166 EXT4_JTR_NONE);
5167 if (err)
5168 goto out_error;
5169 lock_buffer(EXT4_SB(sb)->s_sbh);
5170 ext4_set_feature_large_file(sb);
5171 ext4_superblock_csum_set(sb);
5172 unlock_buffer(EXT4_SB(sb)->s_sbh);
5173 ext4_handle_sync(handle);
5174 err = ext4_handle_dirty_metadata(handle, NULL,
5175 EXT4_SB(sb)->s_sbh);
5176 }
5177 ext4_update_inode_fsync_trans(handle, inode, need_datasync);
5178 out_error:
5179 ext4_std_error(inode->i_sb, err);
5180 out_brelse:
5181 brelse(bh);
5182 return err;
5183 }
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219 int ext4_write_inode(struct inode *inode, struct writeback_control *wbc)
5220 {
5221 int err;
5222
5223 if (WARN_ON_ONCE(current->flags & PF_MEMALLOC) ||
5224 sb_rdonly(inode->i_sb))
5225 return 0;
5226
5227 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
5228 return -EIO;
5229
5230 if (EXT4_SB(inode->i_sb)->s_journal) {
5231 if (ext4_journal_current_handle()) {
5232 ext4_debug("called recursively, non-PF_MEMALLOC!\n");
5233 dump_stack();
5234 return -EIO;
5235 }
5236
5237
5238
5239
5240
5241
5242 if (wbc->sync_mode != WB_SYNC_ALL || wbc->for_sync)
5243 return 0;
5244
5245 err = ext4_fc_commit(EXT4_SB(inode->i_sb)->s_journal,
5246 EXT4_I(inode)->i_sync_tid);
5247 } else {
5248 struct ext4_iloc iloc;
5249
5250 err = __ext4_get_inode_loc_noinmem(inode, &iloc);
5251 if (err)
5252 return err;
5253
5254
5255
5256
5257 if (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync)
5258 sync_dirty_buffer(iloc.bh);
5259 if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) {
5260 ext4_error_inode_block(inode, iloc.bh->b_blocknr, EIO,
5261 "IO error syncing inode");
5262 err = -EIO;
5263 }
5264 brelse(iloc.bh);
5265 }
5266 return err;
5267 }
5268
5269
5270
5271
5272
5273
5274 static void ext4_wait_for_tail_page_commit(struct inode *inode)
5275 {
5276 unsigned offset;
5277 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
5278 tid_t commit_tid = 0;
5279 int ret;
5280
5281 offset = inode->i_size & (PAGE_SIZE - 1);
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291 if (!offset || offset > (PAGE_SIZE - i_blocksize(inode)))
5292 return;
5293 while (1) {
5294 struct folio *folio = filemap_lock_folio(inode->i_mapping,
5295 inode->i_size >> PAGE_SHIFT);
5296 if (!folio)
5297 return;
5298 ret = __ext4_journalled_invalidate_folio(folio, offset,
5299 folio_size(folio) - offset);
5300 folio_unlock(folio);
5301 folio_put(folio);
5302 if (ret != -EBUSY)
5303 return;
5304 commit_tid = 0;
5305 read_lock(&journal->j_state_lock);
5306 if (journal->j_committing_transaction)
5307 commit_tid = journal->j_committing_transaction->t_tid;
5308 read_unlock(&journal->j_state_lock);
5309 if (commit_tid)
5310 jbd2_log_wait_commit(journal, commit_tid);
5311 }
5312 }
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338 int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
5339 struct iattr *attr)
5340 {
5341 struct inode *inode = d_inode(dentry);
5342 int error, rc = 0;
5343 int orphan = 0;
5344 const unsigned int ia_valid = attr->ia_valid;
5345
5346 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
5347 return -EIO;
5348
5349 if (unlikely(IS_IMMUTABLE(inode)))
5350 return -EPERM;
5351
5352 if (unlikely(IS_APPEND(inode) &&
5353 (ia_valid & (ATTR_MODE | ATTR_UID |
5354 ATTR_GID | ATTR_TIMES_SET))))
5355 return -EPERM;
5356
5357 error = setattr_prepare(mnt_userns, dentry, attr);
5358 if (error)
5359 return error;
5360
5361 error = fscrypt_prepare_setattr(dentry, attr);
5362 if (error)
5363 return error;
5364
5365 error = fsverity_prepare_setattr(dentry, attr);
5366 if (error)
5367 return error;
5368
5369 if (is_quota_modification(mnt_userns, inode, attr)) {
5370 error = dquot_initialize(inode);
5371 if (error)
5372 return error;
5373 }
5374
5375 if (i_uid_needs_update(mnt_userns, attr, inode) ||
5376 i_gid_needs_update(mnt_userns, attr, inode)) {
5377 handle_t *handle;
5378
5379
5380
5381 handle = ext4_journal_start(inode, EXT4_HT_QUOTA,
5382 (EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) +
5383 EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb)) + 3);
5384 if (IS_ERR(handle)) {
5385 error = PTR_ERR(handle);
5386 goto err_out;
5387 }
5388
5389
5390
5391
5392 down_read(&EXT4_I(inode)->xattr_sem);
5393 error = dquot_transfer(mnt_userns, inode, attr);
5394 up_read(&EXT4_I(inode)->xattr_sem);
5395
5396 if (error) {
5397 ext4_journal_stop(handle);
5398 return error;
5399 }
5400
5401
5402 i_uid_update(mnt_userns, attr, inode);
5403 i_gid_update(mnt_userns, attr, inode);
5404 error = ext4_mark_inode_dirty(handle, inode);
5405 ext4_journal_stop(handle);
5406 if (unlikely(error)) {
5407 return error;
5408 }
5409 }
5410
5411 if (attr->ia_valid & ATTR_SIZE) {
5412 handle_t *handle;
5413 loff_t oldsize = inode->i_size;
5414 loff_t old_disksize;
5415 int shrink = (attr->ia_size < inode->i_size);
5416
5417 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
5418 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
5419
5420 if (attr->ia_size > sbi->s_bitmap_maxbytes) {
5421 return -EFBIG;
5422 }
5423 }
5424 if (!S_ISREG(inode->i_mode)) {
5425 return -EINVAL;
5426 }
5427
5428 if (IS_I_VERSION(inode) && attr->ia_size != inode->i_size)
5429 inode_inc_iversion(inode);
5430
5431 if (shrink) {
5432 if (ext4_should_order_data(inode)) {
5433 error = ext4_begin_ordered_truncate(inode,
5434 attr->ia_size);
5435 if (error)
5436 goto err_out;
5437 }
5438
5439
5440
5441
5442 inode_dio_wait(inode);
5443 }
5444
5445 filemap_invalidate_lock(inode->i_mapping);
5446
5447 rc = ext4_break_layouts(inode);
5448 if (rc) {
5449 filemap_invalidate_unlock(inode->i_mapping);
5450 goto err_out;
5451 }
5452
5453 if (attr->ia_size != inode->i_size) {
5454 handle = ext4_journal_start(inode, EXT4_HT_INODE, 3);
5455 if (IS_ERR(handle)) {
5456 error = PTR_ERR(handle);
5457 goto out_mmap_sem;
5458 }
5459 if (ext4_handle_valid(handle) && shrink) {
5460 error = ext4_orphan_add(handle, inode);
5461 orphan = 1;
5462 }
5463
5464
5465
5466
5467 if (!shrink) {
5468 inode->i_mtime = current_time(inode);
5469 inode->i_ctime = inode->i_mtime;
5470 }
5471
5472 if (shrink)
5473 ext4_fc_track_range(handle, inode,
5474 (attr->ia_size > 0 ? attr->ia_size - 1 : 0) >>
5475 inode->i_sb->s_blocksize_bits,
5476 EXT_MAX_BLOCKS - 1);
5477 else
5478 ext4_fc_track_range(
5479 handle, inode,
5480 (oldsize > 0 ? oldsize - 1 : oldsize) >>
5481 inode->i_sb->s_blocksize_bits,
5482 (attr->ia_size > 0 ? attr->ia_size - 1 : 0) >>
5483 inode->i_sb->s_blocksize_bits);
5484
5485 down_write(&EXT4_I(inode)->i_data_sem);
5486 old_disksize = EXT4_I(inode)->i_disksize;
5487 EXT4_I(inode)->i_disksize = attr->ia_size;
5488 rc = ext4_mark_inode_dirty(handle, inode);
5489 if (!error)
5490 error = rc;
5491
5492
5493
5494
5495
5496 if (!error)
5497 i_size_write(inode, attr->ia_size);
5498 else
5499 EXT4_I(inode)->i_disksize = old_disksize;
5500 up_write(&EXT4_I(inode)->i_data_sem);
5501 ext4_journal_stop(handle);
5502 if (error)
5503 goto out_mmap_sem;
5504 if (!shrink) {
5505 pagecache_isize_extended(inode, oldsize,
5506 inode->i_size);
5507 } else if (ext4_should_journal_data(inode)) {
5508 ext4_wait_for_tail_page_commit(inode);
5509 }
5510 }
5511
5512
5513
5514
5515
5516 truncate_pagecache(inode, inode->i_size);
5517
5518
5519
5520
5521 if (attr->ia_size <= oldsize) {
5522 rc = ext4_truncate(inode);
5523 if (rc)
5524 error = rc;
5525 }
5526 out_mmap_sem:
5527 filemap_invalidate_unlock(inode->i_mapping);
5528 }
5529
5530 if (!error) {
5531 setattr_copy(mnt_userns, inode, attr);
5532 mark_inode_dirty(inode);
5533 }
5534
5535
5536
5537
5538
5539 if (orphan && inode->i_nlink)
5540 ext4_orphan_del(NULL, inode);
5541
5542 if (!error && (ia_valid & ATTR_MODE))
5543 rc = posix_acl_chmod(mnt_userns, inode, inode->i_mode);
5544
5545 err_out:
5546 if (error)
5547 ext4_std_error(inode->i_sb, error);
5548 if (!error)
5549 error = rc;
5550 return error;
5551 }
5552
5553 int ext4_getattr(struct user_namespace *mnt_userns, const struct path *path,
5554 struct kstat *stat, u32 request_mask, unsigned int query_flags)
5555 {
5556 struct inode *inode = d_inode(path->dentry);
5557 struct ext4_inode *raw_inode;
5558 struct ext4_inode_info *ei = EXT4_I(inode);
5559 unsigned int flags;
5560
5561 if ((request_mask & STATX_BTIME) &&
5562 EXT4_FITS_IN_INODE(raw_inode, ei, i_crtime)) {
5563 stat->result_mask |= STATX_BTIME;
5564 stat->btime.tv_sec = ei->i_crtime.tv_sec;
5565 stat->btime.tv_nsec = ei->i_crtime.tv_nsec;
5566 }
5567
5568 flags = ei->i_flags & EXT4_FL_USER_VISIBLE;
5569 if (flags & EXT4_APPEND_FL)
5570 stat->attributes |= STATX_ATTR_APPEND;
5571 if (flags & EXT4_COMPR_FL)
5572 stat->attributes |= STATX_ATTR_COMPRESSED;
5573 if (flags & EXT4_ENCRYPT_FL)
5574 stat->attributes |= STATX_ATTR_ENCRYPTED;
5575 if (flags & EXT4_IMMUTABLE_FL)
5576 stat->attributes |= STATX_ATTR_IMMUTABLE;
5577 if (flags & EXT4_NODUMP_FL)
5578 stat->attributes |= STATX_ATTR_NODUMP;
5579 if (flags & EXT4_VERITY_FL)
5580 stat->attributes |= STATX_ATTR_VERITY;
5581
5582 stat->attributes_mask |= (STATX_ATTR_APPEND |
5583 STATX_ATTR_COMPRESSED |
5584 STATX_ATTR_ENCRYPTED |
5585 STATX_ATTR_IMMUTABLE |
5586 STATX_ATTR_NODUMP |
5587 STATX_ATTR_VERITY);
5588
5589 generic_fillattr(mnt_userns, inode, stat);
5590 return 0;
5591 }
5592
5593 int ext4_file_getattr(struct user_namespace *mnt_userns,
5594 const struct path *path, struct kstat *stat,
5595 u32 request_mask, unsigned int query_flags)
5596 {
5597 struct inode *inode = d_inode(path->dentry);
5598 u64 delalloc_blocks;
5599
5600 ext4_getattr(mnt_userns, path, stat, request_mask, query_flags);
5601
5602
5603
5604
5605
5606
5607
5608 if (unlikely(ext4_has_inline_data(inode)))
5609 stat->blocks += (stat->size + 511) >> 9;
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621 delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb),
5622 EXT4_I(inode)->i_reserved_data_blocks);
5623 stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits - 9);
5624 return 0;
5625 }
5626
5627 static int ext4_index_trans_blocks(struct inode *inode, int lblocks,
5628 int pextents)
5629 {
5630 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
5631 return ext4_ind_trans_blocks(inode, lblocks);
5632 return ext4_ext_index_trans_blocks(inode, pextents);
5633 }
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646 static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
5647 int pextents)
5648 {
5649 ext4_group_t groups, ngroups = ext4_get_groups_count(inode->i_sb);
5650 int gdpblocks;
5651 int idxblocks;
5652 int ret = 0;
5653
5654
5655
5656
5657
5658 idxblocks = ext4_index_trans_blocks(inode, lblocks, pextents);
5659
5660 ret = idxblocks;
5661
5662
5663
5664
5665
5666 groups = idxblocks + pextents;
5667 gdpblocks = groups;
5668 if (groups > ngroups)
5669 groups = ngroups;
5670 if (groups > EXT4_SB(inode->i_sb)->s_gdb_count)
5671 gdpblocks = EXT4_SB(inode->i_sb)->s_gdb_count;
5672
5673
5674 ret += groups + gdpblocks;
5675
5676
5677 ret += EXT4_META_TRANS_BLOCKS(inode->i_sb);
5678
5679 return ret;
5680 }
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692 int ext4_writepage_trans_blocks(struct inode *inode)
5693 {
5694 int bpp = ext4_journal_blocks_per_page(inode);
5695 int ret;
5696
5697 ret = ext4_meta_trans_blocks(inode, bpp, bpp);
5698
5699
5700 if (ext4_should_journal_data(inode))
5701 ret += bpp;
5702 return ret;
5703 }
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714 int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks)
5715 {
5716 return ext4_meta_trans_blocks(inode, nrblocks, 1);
5717 }
5718
5719
5720
5721
5722
5723 int ext4_mark_iloc_dirty(handle_t *handle,
5724 struct inode *inode, struct ext4_iloc *iloc)
5725 {
5726 int err = 0;
5727
5728 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
5729 put_bh(iloc->bh);
5730 return -EIO;
5731 }
5732 ext4_fc_track_inode(handle, inode);
5733
5734 if (IS_I_VERSION(inode))
5735 inode_inc_iversion(inode);
5736
5737
5738 get_bh(iloc->bh);
5739
5740
5741 err = ext4_do_update_inode(handle, inode, iloc);
5742 put_bh(iloc->bh);
5743 return err;
5744 }
5745
5746
5747
5748
5749
5750
5751 int
5752 ext4_reserve_inode_write(handle_t *handle, struct inode *inode,
5753 struct ext4_iloc *iloc)
5754 {
5755 int err;
5756
5757 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
5758 return -EIO;
5759
5760 err = ext4_get_inode_loc(inode, iloc);
5761 if (!err) {
5762 BUFFER_TRACE(iloc->bh, "get_write_access");
5763 err = ext4_journal_get_write_access(handle, inode->i_sb,
5764 iloc->bh, EXT4_JTR_NONE);
5765 if (err) {
5766 brelse(iloc->bh);
5767 iloc->bh = NULL;
5768 }
5769 }
5770 ext4_std_error(inode->i_sb, err);
5771 return err;
5772 }
5773
5774 static int __ext4_expand_extra_isize(struct inode *inode,
5775 unsigned int new_extra_isize,
5776 struct ext4_iloc *iloc,
5777 handle_t *handle, int *no_expand)
5778 {
5779 struct ext4_inode *raw_inode;
5780 struct ext4_xattr_ibody_header *header;
5781 unsigned int inode_size = EXT4_INODE_SIZE(inode->i_sb);
5782 struct ext4_inode_info *ei = EXT4_I(inode);
5783 int error;
5784
5785
5786 if ((EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize > inode_size) ||
5787 (ei->i_extra_isize & 3)) {
5788 EXT4_ERROR_INODE(inode, "bad extra_isize %u (inode size %u)",
5789 ei->i_extra_isize,
5790 EXT4_INODE_SIZE(inode->i_sb));
5791 return -EFSCORRUPTED;
5792 }
5793 if ((new_extra_isize < ei->i_extra_isize) ||
5794 (new_extra_isize < 4) ||
5795 (new_extra_isize > inode_size - EXT4_GOOD_OLD_INODE_SIZE))
5796 return -EINVAL;
5797
5798 raw_inode = ext4_raw_inode(iloc);
5799
5800 header = IHDR(inode, raw_inode);
5801
5802
5803 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
5804 header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) {
5805 memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE +
5806 EXT4_I(inode)->i_extra_isize, 0,
5807 new_extra_isize - EXT4_I(inode)->i_extra_isize);
5808 EXT4_I(inode)->i_extra_isize = new_extra_isize;
5809 return 0;
5810 }
5811
5812
5813 error = ext4_expand_extra_isize_ea(inode, new_extra_isize,
5814 raw_inode, handle);
5815 if (error) {
5816
5817
5818
5819 *no_expand = 1;
5820 }
5821
5822 return error;
5823 }
5824
5825
5826
5827
5828
5829 static int ext4_try_to_expand_extra_isize(struct inode *inode,
5830 unsigned int new_extra_isize,
5831 struct ext4_iloc iloc,
5832 handle_t *handle)
5833 {
5834 int no_expand;
5835 int error;
5836
5837 if (ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND))
5838 return -EOVERFLOW;
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849 if (ext4_journal_extend(handle,
5850 EXT4_DATA_TRANS_BLOCKS(inode->i_sb), 0) != 0)
5851 return -ENOSPC;
5852
5853 if (ext4_write_trylock_xattr(inode, &no_expand) == 0)
5854 return -EBUSY;
5855
5856 error = __ext4_expand_extra_isize(inode, new_extra_isize, &iloc,
5857 handle, &no_expand);
5858 ext4_write_unlock_xattr(inode, &no_expand);
5859
5860 return error;
5861 }
5862
5863 int ext4_expand_extra_isize(struct inode *inode,
5864 unsigned int new_extra_isize,
5865 struct ext4_iloc *iloc)
5866 {
5867 handle_t *handle;
5868 int no_expand;
5869 int error, rc;
5870
5871 if (ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND)) {
5872 brelse(iloc->bh);
5873 return -EOVERFLOW;
5874 }
5875
5876 handle = ext4_journal_start(inode, EXT4_HT_INODE,
5877 EXT4_DATA_TRANS_BLOCKS(inode->i_sb));
5878 if (IS_ERR(handle)) {
5879 error = PTR_ERR(handle);
5880 brelse(iloc->bh);
5881 return error;
5882 }
5883
5884 ext4_write_lock_xattr(inode, &no_expand);
5885
5886 BUFFER_TRACE(iloc->bh, "get_write_access");
5887 error = ext4_journal_get_write_access(handle, inode->i_sb, iloc->bh,
5888 EXT4_JTR_NONE);
5889 if (error) {
5890 brelse(iloc->bh);
5891 goto out_unlock;
5892 }
5893
5894 error = __ext4_expand_extra_isize(inode, new_extra_isize, iloc,
5895 handle, &no_expand);
5896
5897 rc = ext4_mark_iloc_dirty(handle, inode, iloc);
5898 if (!error)
5899 error = rc;
5900
5901 out_unlock:
5902 ext4_write_unlock_xattr(inode, &no_expand);
5903 ext4_journal_stop(handle);
5904 return error;
5905 }
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920 int __ext4_mark_inode_dirty(handle_t *handle, struct inode *inode,
5921 const char *func, unsigned int line)
5922 {
5923 struct ext4_iloc iloc;
5924 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
5925 int err;
5926
5927 might_sleep();
5928 trace_ext4_mark_inode_dirty(inode, _RET_IP_);
5929 err = ext4_reserve_inode_write(handle, inode, &iloc);
5930 if (err)
5931 goto out;
5932
5933 if (EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize)
5934 ext4_try_to_expand_extra_isize(inode, sbi->s_want_extra_isize,
5935 iloc, handle);
5936
5937 err = ext4_mark_iloc_dirty(handle, inode, &iloc);
5938 out:
5939 if (unlikely(err))
5940 ext4_error_inode_err(inode, func, line, 0, err,
5941 "mark_inode_dirty error");
5942 return err;
5943 }
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959 void ext4_dirty_inode(struct inode *inode, int flags)
5960 {
5961 handle_t *handle;
5962
5963 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
5964 if (IS_ERR(handle))
5965 return;
5966 ext4_mark_inode_dirty(handle, inode);
5967 ext4_journal_stop(handle);
5968 }
5969
5970 int ext4_change_inode_journal_flag(struct inode *inode, int val)
5971 {
5972 journal_t *journal;
5973 handle_t *handle;
5974 int err;
5975 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987 journal = EXT4_JOURNAL(inode);
5988 if (!journal)
5989 return 0;
5990 if (is_journal_aborted(journal))
5991 return -EROFS;
5992
5993
5994 inode_dio_wait(inode);
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004 if (val) {
6005 filemap_invalidate_lock(inode->i_mapping);
6006 err = filemap_write_and_wait(inode->i_mapping);
6007 if (err < 0) {
6008 filemap_invalidate_unlock(inode->i_mapping);
6009 return err;
6010 }
6011 }
6012
6013 percpu_down_write(&sbi->s_writepages_rwsem);
6014 jbd2_journal_lock_updates(journal);
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024 if (val)
6025 ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
6026 else {
6027 err = jbd2_journal_flush(journal, 0);
6028 if (err < 0) {
6029 jbd2_journal_unlock_updates(journal);
6030 percpu_up_write(&sbi->s_writepages_rwsem);
6031 return err;
6032 }
6033 ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
6034 }
6035 ext4_set_aops(inode);
6036
6037 jbd2_journal_unlock_updates(journal);
6038 percpu_up_write(&sbi->s_writepages_rwsem);
6039
6040 if (val)
6041 filemap_invalidate_unlock(inode->i_mapping);
6042
6043
6044
6045 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
6046 if (IS_ERR(handle))
6047 return PTR_ERR(handle);
6048
6049 ext4_fc_mark_ineligible(inode->i_sb,
6050 EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, handle);
6051 err = ext4_mark_inode_dirty(handle, inode);
6052 ext4_handle_sync(handle);
6053 ext4_journal_stop(handle);
6054 ext4_std_error(inode->i_sb, err);
6055
6056 return err;
6057 }
6058
6059 static int ext4_bh_unmapped(handle_t *handle, struct inode *inode,
6060 struct buffer_head *bh)
6061 {
6062 return !buffer_mapped(bh);
6063 }
6064
6065 vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)
6066 {
6067 struct vm_area_struct *vma = vmf->vma;
6068 struct page *page = vmf->page;
6069 loff_t size;
6070 unsigned long len;
6071 int err;
6072 vm_fault_t ret;
6073 struct file *file = vma->vm_file;
6074 struct inode *inode = file_inode(file);
6075 struct address_space *mapping = inode->i_mapping;
6076 handle_t *handle;
6077 get_block_t *get_block;
6078 int retries = 0;
6079
6080 if (unlikely(IS_IMMUTABLE(inode)))
6081 return VM_FAULT_SIGBUS;
6082
6083 sb_start_pagefault(inode->i_sb);
6084 file_update_time(vma->vm_file);
6085
6086 filemap_invalidate_lock_shared(mapping);
6087
6088 err = ext4_convert_inline_data(inode);
6089 if (err)
6090 goto out_ret;
6091
6092
6093
6094
6095
6096
6097
6098 if (ext4_should_journal_data(inode))
6099 goto retry_alloc;
6100
6101
6102 if (test_opt(inode->i_sb, DELALLOC) &&
6103 !ext4_nonda_switch(inode->i_sb)) {
6104 do {
6105 err = block_page_mkwrite(vma, vmf,
6106 ext4_da_get_block_prep);
6107 } while (err == -ENOSPC &&
6108 ext4_should_retry_alloc(inode->i_sb, &retries));
6109 goto out_ret;
6110 }
6111
6112 lock_page(page);
6113 size = i_size_read(inode);
6114
6115 if (page->mapping != mapping || page_offset(page) > size) {
6116 unlock_page(page);
6117 ret = VM_FAULT_NOPAGE;
6118 goto out;
6119 }
6120
6121 if (page->index == size >> PAGE_SHIFT)
6122 len = size & ~PAGE_MASK;
6123 else
6124 len = PAGE_SIZE;
6125
6126
6127
6128
6129
6130
6131
6132 if (page_has_buffers(page)) {
6133 if (!ext4_walk_page_buffers(NULL, inode, page_buffers(page),
6134 0, len, NULL,
6135 ext4_bh_unmapped)) {
6136
6137 wait_for_stable_page(page);
6138 ret = VM_FAULT_LOCKED;
6139 goto out;
6140 }
6141 }
6142 unlock_page(page);
6143
6144 if (ext4_should_dioread_nolock(inode))
6145 get_block = ext4_get_block_unwritten;
6146 else
6147 get_block = ext4_get_block;
6148 retry_alloc:
6149 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
6150 ext4_writepage_trans_blocks(inode));
6151 if (IS_ERR(handle)) {
6152 ret = VM_FAULT_SIGBUS;
6153 goto out;
6154 }
6155
6156
6157
6158
6159
6160 if (!ext4_should_journal_data(inode)) {
6161 err = block_page_mkwrite(vma, vmf, get_block);
6162 } else {
6163 lock_page(page);
6164 size = i_size_read(inode);
6165
6166 if (page->mapping != mapping || page_offset(page) > size) {
6167 ret = VM_FAULT_NOPAGE;
6168 goto out_error;
6169 }
6170
6171 if (page->index == size >> PAGE_SHIFT)
6172 len = size & ~PAGE_MASK;
6173 else
6174 len = PAGE_SIZE;
6175
6176 err = __block_write_begin(page, 0, len, ext4_get_block);
6177 if (!err) {
6178 ret = VM_FAULT_SIGBUS;
6179 if (ext4_walk_page_buffers(handle, inode,
6180 page_buffers(page), 0, len, NULL,
6181 do_journal_get_write_access))
6182 goto out_error;
6183 if (ext4_walk_page_buffers(handle, inode,
6184 page_buffers(page), 0, len, NULL,
6185 write_end_fn))
6186 goto out_error;
6187 if (ext4_jbd2_inode_add_write(handle, inode,
6188 page_offset(page), len))
6189 goto out_error;
6190 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
6191 } else {
6192 unlock_page(page);
6193 }
6194 }
6195 ext4_journal_stop(handle);
6196 if (err == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
6197 goto retry_alloc;
6198 out_ret:
6199 ret = block_page_mkwrite_return(err);
6200 out:
6201 filemap_invalidate_unlock_shared(mapping);
6202 sb_end_pagefault(inode->i_sb);
6203 return ret;
6204 out_error:
6205 unlock_page(page);
6206 ext4_journal_stop(handle);
6207 goto out;
6208 }