0001
0002
0003
0004
0005 #include <linux/time.h>
0006 #include <linux/fs.h>
0007 #include "reiserfs.h"
0008 #include "acl.h"
0009 #include "xattr.h"
0010 #include <linux/exportfs.h>
0011 #include <linux/pagemap.h>
0012 #include <linux/highmem.h>
0013 #include <linux/slab.h>
0014 #include <linux/uaccess.h>
0015 #include <asm/unaligned.h>
0016 #include <linux/buffer_head.h>
0017 #include <linux/mpage.h>
0018 #include <linux/writeback.h>
0019 #include <linux/quotaops.h>
0020 #include <linux/swap.h>
0021 #include <linux/uio.h>
0022 #include <linux/bio.h>
0023
0024 int reiserfs_commit_write(struct file *f, struct page *page,
0025 unsigned from, unsigned to);
0026
0027 void reiserfs_evict_inode(struct inode *inode)
0028 {
0029
0030
0031
0032
0033 int jbegin_count =
0034 JOURNAL_PER_BALANCE_CNT * 2 +
0035 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb);
0036 struct reiserfs_transaction_handle th;
0037 int err;
0038
0039 if (!inode->i_nlink && !is_bad_inode(inode))
0040 dquot_initialize(inode);
0041
0042 truncate_inode_pages_final(&inode->i_data);
0043 if (inode->i_nlink)
0044 goto no_delete;
0045
0046
0047
0048
0049
0050
0051 if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) {
0052
0053 reiserfs_delete_xattrs(inode);
0054
0055 reiserfs_write_lock(inode->i_sb);
0056
0057 if (journal_begin(&th, inode->i_sb, jbegin_count))
0058 goto out;
0059 reiserfs_update_inode_transaction(inode);
0060
0061 reiserfs_discard_prealloc(&th, inode);
0062
0063 err = reiserfs_delete_object(&th, inode);
0064
0065
0066
0067
0068
0069
0070 if (!err) {
0071 int depth = reiserfs_write_unlock_nested(inode->i_sb);
0072 dquot_free_inode(inode);
0073 reiserfs_write_lock_nested(inode->i_sb, depth);
0074 }
0075
0076 if (journal_end(&th))
0077 goto out;
0078
0079
0080
0081
0082
0083 if (err)
0084 goto out;
0085
0086
0087
0088
0089
0090
0091 remove_save_link(inode, 0 );
0092 out:
0093 reiserfs_write_unlock(inode->i_sb);
0094 } else {
0095
0096 ;
0097 }
0098
0099
0100 clear_inode(inode);
0101
0102 dquot_drop(inode);
0103 inode->i_blocks = 0;
0104 return;
0105
0106 no_delete:
0107 clear_inode(inode);
0108 dquot_drop(inode);
0109 }
0110
0111 static void _make_cpu_key(struct cpu_key *key, int version, __u32 dirid,
0112 __u32 objectid, loff_t offset, int type, int length)
0113 {
0114 key->version = version;
0115
0116 key->on_disk_key.k_dir_id = dirid;
0117 key->on_disk_key.k_objectid = objectid;
0118 set_cpu_key_k_offset(key, offset);
0119 set_cpu_key_k_type(key, type);
0120 key->key_length = length;
0121 }
0122
0123
0124
0125
0126
0127 void make_cpu_key(struct cpu_key *key, struct inode *inode, loff_t offset,
0128 int type, int length)
0129 {
0130 _make_cpu_key(key, get_inode_item_key_version(inode),
0131 le32_to_cpu(INODE_PKEY(inode)->k_dir_id),
0132 le32_to_cpu(INODE_PKEY(inode)->k_objectid), offset, type,
0133 length);
0134 }
0135
0136
0137 inline void make_le_item_head(struct item_head *ih, const struct cpu_key *key,
0138 int version,
0139 loff_t offset, int type, int length,
0140 int entry_count )
0141 {
0142 if (key) {
0143 ih->ih_key.k_dir_id = cpu_to_le32(key->on_disk_key.k_dir_id);
0144 ih->ih_key.k_objectid =
0145 cpu_to_le32(key->on_disk_key.k_objectid);
0146 }
0147 put_ih_version(ih, version);
0148 set_le_ih_k_offset(ih, offset);
0149 set_le_ih_k_type(ih, type);
0150 put_ih_item_len(ih, length);
0151
0152
0153
0154
0155
0156 put_ih_entry_count(ih, entry_count);
0157 }
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193 static inline void fix_tail_page_for_writing(struct page *page)
0194 {
0195 struct buffer_head *head, *next, *bh;
0196
0197 if (page && page_has_buffers(page)) {
0198 head = page_buffers(page);
0199 bh = head;
0200 do {
0201 next = bh->b_this_page;
0202 if (buffer_mapped(bh) && bh->b_blocknr == 0) {
0203 reiserfs_unmap_buffer(bh);
0204 }
0205 bh = next;
0206 } while (bh != head);
0207 }
0208 }
0209
0210
0211
0212
0213
0214 static inline int allocation_needed(int retval, b_blocknr_t allocated,
0215 struct item_head *ih,
0216 __le32 * item, int pos_in_item)
0217 {
0218 if (allocated)
0219 return 0;
0220 if (retval == POSITION_FOUND && is_indirect_le_ih(ih) &&
0221 get_block_num(item, pos_in_item))
0222 return 0;
0223 return 1;
0224 }
0225
0226 static inline int indirect_item_found(int retval, struct item_head *ih)
0227 {
0228 return (retval == POSITION_FOUND) && is_indirect_le_ih(ih);
0229 }
0230
0231 static inline void set_block_dev_mapped(struct buffer_head *bh,
0232 b_blocknr_t block, struct inode *inode)
0233 {
0234 map_bh(bh, inode->i_sb, block);
0235 }
0236
0237
0238
0239
0240
0241 static int file_capable(struct inode *inode, sector_t block)
0242 {
0243
0244 if (get_inode_item_key_version(inode) != KEY_FORMAT_3_5 ||
0245
0246 block < (1 << (31 - inode->i_sb->s_blocksize_bits)))
0247 return 1;
0248
0249 return 0;
0250 }
0251
0252 static int restart_transaction(struct reiserfs_transaction_handle *th,
0253 struct inode *inode, struct treepath *path)
0254 {
0255 struct super_block *s = th->t_super;
0256 int err;
0257
0258 BUG_ON(!th->t_trans_id);
0259 BUG_ON(!th->t_refcount);
0260
0261 pathrelse(path);
0262
0263
0264 if (th->t_refcount > 1) {
0265 return 0;
0266 }
0267 reiserfs_update_sd(th, inode);
0268 err = journal_end(th);
0269 if (!err) {
0270 err = journal_begin(th, s, JOURNAL_PER_BALANCE_CNT * 6);
0271 if (!err)
0272 reiserfs_update_inode_transaction(inode);
0273 }
0274 return err;
0275 }
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285 static int _get_block_create_0(struct inode *inode, sector_t block,
0286 struct buffer_head *bh_result, int args)
0287 {
0288 INITIALIZE_PATH(path);
0289 struct cpu_key key;
0290 struct buffer_head *bh;
0291 struct item_head *ih, tmp_ih;
0292 b_blocknr_t blocknr;
0293 char *p;
0294 int chars;
0295 int ret;
0296 int result;
0297 int done = 0;
0298 unsigned long offset;
0299
0300
0301 make_cpu_key(&key, inode,
0302 (loff_t) block * inode->i_sb->s_blocksize + 1, TYPE_ANY,
0303 3);
0304
0305 result = search_for_position_by_key(inode->i_sb, &key, &path);
0306 if (result != POSITION_FOUND) {
0307 pathrelse(&path);
0308 if (result == IO_ERROR)
0309 return -EIO;
0310
0311
0312
0313
0314
0315 if ((args & GET_BLOCK_NO_HOLE)
0316 && !PageUptodate(bh_result->b_page)) {
0317 return -ENOENT;
0318 }
0319 return 0;
0320 }
0321
0322 bh = get_last_bh(&path);
0323 ih = tp_item_head(&path);
0324 if (is_indirect_le_ih(ih)) {
0325 __le32 *ind_item = (__le32 *) ih_item_body(bh, ih);
0326
0327
0328
0329
0330
0331
0332 blocknr = get_block_num(ind_item, path.pos_in_item);
0333 ret = 0;
0334 if (blocknr) {
0335 map_bh(bh_result, inode->i_sb, blocknr);
0336 if (path.pos_in_item ==
0337 ((ih_item_len(ih) / UNFM_P_SIZE) - 1)) {
0338 set_buffer_boundary(bh_result);
0339 }
0340 } else
0341
0342
0343
0344
0345
0346
0347 if ((args & GET_BLOCK_NO_HOLE)
0348 && !PageUptodate(bh_result->b_page)) {
0349 ret = -ENOENT;
0350 }
0351
0352 pathrelse(&path);
0353 return ret;
0354 }
0355
0356 if (!(args & GET_BLOCK_READ_DIRECT)) {
0357
0358
0359
0360
0361 pathrelse(&path);
0362 return -ENOENT;
0363 }
0364
0365
0366
0367
0368
0369
0370 if (buffer_uptodate(bh_result)) {
0371 goto finished;
0372 } else
0373
0374
0375
0376
0377
0378
0379 if (!bh_result->b_page || PageUptodate(bh_result->b_page)) {
0380 set_buffer_uptodate(bh_result);
0381 goto finished;
0382 }
0383
0384 offset = (cpu_key_k_offset(&key) - 1) & (PAGE_SIZE - 1);
0385 copy_item_head(&tmp_ih, ih);
0386
0387
0388
0389
0390
0391
0392
0393 p = (char *)kmap(bh_result->b_page);
0394 p += offset;
0395 memset(p, 0, inode->i_sb->s_blocksize);
0396 do {
0397 if (!is_direct_le_ih(ih)) {
0398 BUG();
0399 }
0400
0401
0402
0403
0404
0405
0406 if ((le_ih_k_offset(ih) + path.pos_in_item) > inode->i_size)
0407 break;
0408 if ((le_ih_k_offset(ih) - 1 + ih_item_len(ih)) > inode->i_size) {
0409 chars =
0410 inode->i_size - (le_ih_k_offset(ih) - 1) -
0411 path.pos_in_item;
0412 done = 1;
0413 } else {
0414 chars = ih_item_len(ih) - path.pos_in_item;
0415 }
0416 memcpy(p, ih_item_body(bh, ih) + path.pos_in_item, chars);
0417
0418 if (done)
0419 break;
0420
0421 p += chars;
0422
0423
0424
0425
0426
0427
0428
0429 if (PATH_LAST_POSITION(&path) != (B_NR_ITEMS(bh) - 1))
0430 break;
0431
0432
0433 set_cpu_key_k_offset(&key, cpu_key_k_offset(&key) + chars);
0434 result = search_for_position_by_key(inode->i_sb, &key, &path);
0435 if (result != POSITION_FOUND)
0436
0437 break;
0438 bh = get_last_bh(&path);
0439 ih = tp_item_head(&path);
0440 } while (1);
0441
0442 flush_dcache_page(bh_result->b_page);
0443 kunmap(bh_result->b_page);
0444
0445 finished:
0446 pathrelse(&path);
0447
0448 if (result == IO_ERROR)
0449 return -EIO;
0450
0451
0452
0453
0454
0455 map_bh(bh_result, inode->i_sb, 0);
0456 set_buffer_uptodate(bh_result);
0457 return 0;
0458 }
0459
0460
0461
0462
0463
0464 static int reiserfs_bmap(struct inode *inode, sector_t block,
0465 struct buffer_head *bh_result, int create)
0466 {
0467 if (!file_capable(inode, block))
0468 return -EFBIG;
0469
0470 reiserfs_write_lock(inode->i_sb);
0471
0472 _get_block_create_0(inode, block, bh_result, 0);
0473 reiserfs_write_unlock(inode->i_sb);
0474 return 0;
0475 }
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495 static int reiserfs_get_block_create_0(struct inode *inode, sector_t block,
0496 struct buffer_head *bh_result,
0497 int create)
0498 {
0499 return reiserfs_get_block(inode, block, bh_result, GET_BLOCK_NO_HOLE);
0500 }
0501
0502
0503
0504
0505
0506 static int reiserfs_get_blocks_direct_io(struct inode *inode,
0507 sector_t iblock,
0508 struct buffer_head *bh_result,
0509 int create)
0510 {
0511 int ret;
0512
0513 bh_result->b_page = NULL;
0514
0515
0516
0517
0518
0519
0520 bh_result->b_size = i_blocksize(inode);
0521
0522 ret = reiserfs_get_block(inode, iblock, bh_result,
0523 create | GET_BLOCK_NO_DANGLE);
0524 if (ret)
0525 goto out;
0526
0527
0528 if (buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
0529
0530
0531
0532
0533 clear_buffer_mapped(bh_result);
0534 ret = -EINVAL;
0535 }
0536
0537
0538
0539
0540
0541 if (REISERFS_I(inode)->i_flags & i_pack_on_close_mask) {
0542 int err;
0543
0544 reiserfs_write_lock(inode->i_sb);
0545
0546 err = reiserfs_commit_for_inode(inode);
0547 REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
0548
0549 reiserfs_write_unlock(inode->i_sb);
0550
0551 if (err < 0)
0552 ret = err;
0553 }
0554 out:
0555 return ret;
0556 }
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568 static int convert_tail_for_hole(struct inode *inode,
0569 struct buffer_head *bh_result,
0570 loff_t tail_offset)
0571 {
0572 unsigned long index;
0573 unsigned long tail_end;
0574 unsigned long tail_start;
0575 struct page *tail_page;
0576 struct page *hole_page = bh_result->b_page;
0577 int retval = 0;
0578
0579 if ((tail_offset & (bh_result->b_size - 1)) != 1)
0580 return -EIO;
0581
0582
0583 tail_start = tail_offset & (PAGE_SIZE - 1);
0584 tail_end = (tail_start | (bh_result->b_size - 1)) + 1;
0585
0586 index = tail_offset >> PAGE_SHIFT;
0587
0588
0589
0590
0591 if (!hole_page || index != hole_page->index) {
0592 tail_page = grab_cache_page(inode->i_mapping, index);
0593 retval = -ENOMEM;
0594 if (!tail_page) {
0595 goto out;
0596 }
0597 } else {
0598 tail_page = hole_page;
0599 }
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611 fix_tail_page_for_writing(tail_page);
0612 retval = __reiserfs_write_begin(tail_page, tail_start,
0613 tail_end - tail_start);
0614 if (retval)
0615 goto unlock;
0616
0617
0618 flush_dcache_page(tail_page);
0619
0620 retval = reiserfs_commit_write(NULL, tail_page, tail_start, tail_end);
0621
0622 unlock:
0623 if (tail_page != hole_page) {
0624 unlock_page(tail_page);
0625 put_page(tail_page);
0626 }
0627 out:
0628 return retval;
0629 }
0630
0631 static inline int _allocate_block(struct reiserfs_transaction_handle *th,
0632 sector_t block,
0633 struct inode *inode,
0634 b_blocknr_t * allocated_block_nr,
0635 struct treepath *path, int flags)
0636 {
0637 BUG_ON(!th->t_trans_id);
0638
0639 #ifdef REISERFS_PREALLOCATE
0640 if (!(flags & GET_BLOCK_NO_IMUX)) {
0641 return reiserfs_new_unf_blocknrs2(th, inode, allocated_block_nr,
0642 path, block);
0643 }
0644 #endif
0645 return reiserfs_new_unf_blocknrs(th, inode, allocated_block_nr, path,
0646 block);
0647 }
0648
0649 int reiserfs_get_block(struct inode *inode, sector_t block,
0650 struct buffer_head *bh_result, int create)
0651 {
0652 int repeat, retval = 0;
0653
0654 b_blocknr_t allocated_block_nr = 0;
0655 INITIALIZE_PATH(path);
0656 int pos_in_item;
0657 struct cpu_key key;
0658 struct buffer_head *bh, *unbh = NULL;
0659 struct item_head *ih, tmp_ih;
0660 __le32 *item;
0661 int done;
0662 int fs_gen;
0663 struct reiserfs_transaction_handle *th = NULL;
0664
0665
0666
0667
0668
0669
0670
0671
0672 int jbegin_count =
0673 JOURNAL_PER_BALANCE_CNT * 3 + 1 +
0674 2 * REISERFS_QUOTA_TRANS_BLOCKS(inode->i_sb);
0675 int version;
0676 int dangle = 1;
0677 loff_t new_offset =
0678 (((loff_t) block) << inode->i_sb->s_blocksize_bits) + 1;
0679
0680 reiserfs_write_lock(inode->i_sb);
0681 version = get_inode_item_key_version(inode);
0682
0683 if (!file_capable(inode, block)) {
0684 reiserfs_write_unlock(inode->i_sb);
0685 return -EFBIG;
0686 }
0687
0688
0689
0690
0691
0692 if (!(create & GET_BLOCK_CREATE)) {
0693 int ret;
0694
0695 ret = _get_block_create_0(inode, block, bh_result,
0696 create | GET_BLOCK_READ_DIRECT);
0697 reiserfs_write_unlock(inode->i_sb);
0698 return ret;
0699 }
0700
0701
0702
0703
0704
0705 if ((create & GET_BLOCK_NO_DANGLE) ||
0706 reiserfs_transaction_running(inode->i_sb))
0707 dangle = 0;
0708
0709
0710
0711
0712
0713
0714 if ((have_large_tails(inode->i_sb)
0715 && inode->i_size < i_block_size(inode) * 4)
0716 || (have_small_tails(inode->i_sb)
0717 && inode->i_size < i_block_size(inode)))
0718 REISERFS_I(inode)->i_flags |= i_pack_on_close_mask;
0719
0720
0721 make_cpu_key(&key, inode, new_offset, TYPE_ANY, 3 );
0722 if ((new_offset + inode->i_sb->s_blocksize - 1) > inode->i_size) {
0723 start_trans:
0724 th = reiserfs_persistent_transaction(inode->i_sb, jbegin_count);
0725 if (!th) {
0726 retval = -ENOMEM;
0727 goto failure;
0728 }
0729 reiserfs_update_inode_transaction(inode);
0730 }
0731 research:
0732
0733 retval = search_for_position_by_key(inode->i_sb, &key, &path);
0734 if (retval == IO_ERROR) {
0735 retval = -EIO;
0736 goto failure;
0737 }
0738
0739 bh = get_last_bh(&path);
0740 ih = tp_item_head(&path);
0741 item = tp_item_body(&path);
0742 pos_in_item = path.pos_in_item;
0743
0744 fs_gen = get_generation(inode->i_sb);
0745 copy_item_head(&tmp_ih, ih);
0746
0747 if (allocation_needed
0748 (retval, allocated_block_nr, ih, item, pos_in_item)) {
0749
0750 if (!th) {
0751 pathrelse(&path);
0752 goto start_trans;
0753 }
0754
0755 repeat =
0756 _allocate_block(th, block, inode, &allocated_block_nr,
0757 &path, create);
0758
0759
0760
0761
0762
0763
0764 if (repeat == NO_DISK_SPACE || repeat == QUOTA_EXCEEDED) {
0765 SB_JOURNAL(inode->i_sb)->j_next_async_flush = 1;
0766 retval = restart_transaction(th, inode, &path);
0767 if (retval)
0768 goto failure;
0769 repeat =
0770 _allocate_block(th, block, inode,
0771 &allocated_block_nr, NULL, create);
0772
0773 if (repeat != NO_DISK_SPACE && repeat != QUOTA_EXCEEDED) {
0774 goto research;
0775 }
0776 if (repeat == QUOTA_EXCEEDED)
0777 retval = -EDQUOT;
0778 else
0779 retval = -ENOSPC;
0780 goto failure;
0781 }
0782
0783 if (fs_changed(fs_gen, inode->i_sb)
0784 && item_moved(&tmp_ih, &path)) {
0785 goto research;
0786 }
0787 }
0788
0789 if (indirect_item_found(retval, ih)) {
0790 b_blocknr_t unfm_ptr;
0791
0792
0793
0794
0795
0796 unfm_ptr = get_block_num(item, pos_in_item);
0797 if (unfm_ptr == 0) {
0798
0799 reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
0800 if (fs_changed(fs_gen, inode->i_sb)
0801 && item_moved(&tmp_ih, &path)) {
0802 reiserfs_restore_prepared_buffer(inode->i_sb,
0803 bh);
0804 goto research;
0805 }
0806 set_buffer_new(bh_result);
0807 if (buffer_dirty(bh_result)
0808 && reiserfs_data_ordered(inode->i_sb))
0809 reiserfs_add_ordered_list(inode, bh_result);
0810 put_block_num(item, pos_in_item, allocated_block_nr);
0811 unfm_ptr = allocated_block_nr;
0812 journal_mark_dirty(th, bh);
0813 reiserfs_update_sd(th, inode);
0814 }
0815 set_block_dev_mapped(bh_result, unfm_ptr, inode);
0816 pathrelse(&path);
0817 retval = 0;
0818 if (!dangle && th)
0819 retval = reiserfs_end_persistent_transaction(th);
0820
0821 reiserfs_write_unlock(inode->i_sb);
0822
0823
0824
0825
0826
0827
0828 return retval;
0829 }
0830
0831 if (!th) {
0832 pathrelse(&path);
0833 goto start_trans;
0834 }
0835
0836
0837
0838
0839
0840
0841 done = 0;
0842 do {
0843 if (is_statdata_le_ih(ih)) {
0844 __le32 unp = 0;
0845 struct cpu_key tmp_key;
0846
0847
0848 make_le_item_head(&tmp_ih, &key, version, 1,
0849 TYPE_INDIRECT, UNFM_P_SIZE,
0850 0 );
0851
0852
0853
0854
0855
0856 if (cpu_key_k_offset(&key) == 1) {
0857 unp = cpu_to_le32(allocated_block_nr);
0858 set_block_dev_mapped(bh_result,
0859 allocated_block_nr, inode);
0860 set_buffer_new(bh_result);
0861 done = 1;
0862 }
0863 tmp_key = key;
0864 set_cpu_key_k_offset(&tmp_key, 1);
0865 PATH_LAST_POSITION(&path)++;
0866
0867 retval =
0868 reiserfs_insert_item(th, &path, &tmp_key, &tmp_ih,
0869 inode, (char *)&unp);
0870 if (retval) {
0871 reiserfs_free_block(th, inode,
0872 allocated_block_nr, 1);
0873
0874
0875
0876
0877 goto failure;
0878 }
0879 } else if (is_direct_le_ih(ih)) {
0880
0881 loff_t tail_offset;
0882
0883 tail_offset =
0884 ((le_ih_k_offset(ih) -
0885 1) & ~(inode->i_sb->s_blocksize - 1)) + 1;
0886
0887
0888
0889
0890
0891
0892 if (tail_offset == cpu_key_k_offset(&key)) {
0893 set_block_dev_mapped(bh_result,
0894 allocated_block_nr, inode);
0895 unbh = bh_result;
0896 done = 1;
0897 } else {
0898
0899
0900
0901
0902
0903
0904
0905 pathrelse(&path);
0906
0907
0908
0909
0910 BUG_ON(!th->t_refcount);
0911 if (th->t_refcount == 1) {
0912 retval =
0913 reiserfs_end_persistent_transaction
0914 (th);
0915 th = NULL;
0916 if (retval)
0917 goto failure;
0918 }
0919
0920 retval =
0921 convert_tail_for_hole(inode, bh_result,
0922 tail_offset);
0923 if (retval) {
0924 if (retval != -ENOSPC)
0925 reiserfs_error(inode->i_sb,
0926 "clm-6004",
0927 "convert tail failed "
0928 "inode %lu, error %d",
0929 inode->i_ino,
0930 retval);
0931 if (allocated_block_nr) {
0932
0933
0934
0935
0936 if (!th)
0937 th = reiserfs_persistent_transaction(inode->i_sb, 3);
0938 if (th)
0939 reiserfs_free_block(th,
0940 inode,
0941 allocated_block_nr,
0942 1);
0943 }
0944 goto failure;
0945 }
0946 goto research;
0947 }
0948 retval =
0949 direct2indirect(th, inode, &path, unbh,
0950 tail_offset);
0951 if (retval) {
0952 reiserfs_unmap_buffer(unbh);
0953 reiserfs_free_block(th, inode,
0954 allocated_block_nr, 1);
0955 goto failure;
0956 }
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966
0967 set_buffer_uptodate(unbh);
0968
0969
0970
0971
0972
0973
0974 if (unbh->b_page) {
0975
0976
0977
0978
0979 reiserfs_add_tail_list(inode, unbh);
0980
0981
0982
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992
0993
0994 mark_buffer_dirty(unbh);
0995 }
0996 } else {
0997
0998
0999
1000
1001
1002 struct cpu_key tmp_key;
1003
1004
1005
1006
1007 unp_t unf_single = 0;
1008 unp_t *un;
1009 __u64 max_to_insert =
1010 MAX_ITEM_LEN(inode->i_sb->s_blocksize) /
1011 UNFM_P_SIZE;
1012 __u64 blocks_needed;
1013
1014 RFALSE(pos_in_item != ih_item_len(ih) / UNFM_P_SIZE,
1015 "vs-804: invalid position for append");
1016
1017
1018
1019
1020
1021 make_cpu_key(&tmp_key, inode,
1022 le_key_k_offset(version,
1023 &ih->ih_key) +
1024 op_bytes_number(ih,
1025 inode->i_sb->s_blocksize),
1026 TYPE_INDIRECT, 3);
1027
1028 RFALSE(cpu_key_k_offset(&tmp_key) > cpu_key_k_offset(&key),
1029 "green-805: invalid offset");
1030 blocks_needed =
1031 1 +
1032 ((cpu_key_k_offset(&key) -
1033 cpu_key_k_offset(&tmp_key)) >> inode->i_sb->
1034 s_blocksize_bits);
1035
1036 if (blocks_needed == 1) {
1037 un = &unf_single;
1038 } else {
1039 un = kcalloc(min(blocks_needed, max_to_insert),
1040 UNFM_P_SIZE, GFP_NOFS);
1041 if (!un) {
1042 un = &unf_single;
1043 blocks_needed = 1;
1044 max_to_insert = 0;
1045 }
1046 }
1047 if (blocks_needed <= max_to_insert) {
1048
1049
1050
1051
1052 un[blocks_needed - 1] =
1053 cpu_to_le32(allocated_block_nr);
1054 set_block_dev_mapped(bh_result,
1055 allocated_block_nr, inode);
1056 set_buffer_new(bh_result);
1057 done = 1;
1058 } else {
1059
1060
1061
1062
1063
1064
1065 blocks_needed =
1066 max_to_insert ? max_to_insert : 1;
1067 }
1068 retval =
1069 reiserfs_paste_into_item(th, &path, &tmp_key, inode,
1070 (char *)un,
1071 UNFM_P_SIZE *
1072 blocks_needed);
1073
1074 if (blocks_needed != 1)
1075 kfree(un);
1076
1077 if (retval) {
1078 reiserfs_free_block(th, inode,
1079 allocated_block_nr, 1);
1080 goto failure;
1081 }
1082 if (!done) {
1083
1084
1085
1086
1087
1088
1089 inode->i_size +=
1090 inode->i_sb->s_blocksize * blocks_needed;
1091 }
1092 }
1093
1094 if (done == 1)
1095 break;
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105 if (journal_transaction_should_end(th, th->t_blocks_allocated)) {
1106 retval = restart_transaction(th, inode, &path);
1107 if (retval)
1108 goto failure;
1109 }
1110
1111
1112
1113
1114
1115 reiserfs_cond_resched(inode->i_sb);
1116
1117 retval = search_for_position_by_key(inode->i_sb, &key, &path);
1118 if (retval == IO_ERROR) {
1119 retval = -EIO;
1120 goto failure;
1121 }
1122 if (retval == POSITION_FOUND) {
1123 reiserfs_warning(inode->i_sb, "vs-825",
1124 "%K should not be found", &key);
1125 retval = -EEXIST;
1126 if (allocated_block_nr)
1127 reiserfs_free_block(th, inode,
1128 allocated_block_nr, 1);
1129 pathrelse(&path);
1130 goto failure;
1131 }
1132 bh = get_last_bh(&path);
1133 ih = tp_item_head(&path);
1134 item = tp_item_body(&path);
1135 pos_in_item = path.pos_in_item;
1136 } while (1);
1137
1138 retval = 0;
1139
1140 failure:
1141 if (th && (!dangle || (retval && !th->t_trans_id))) {
1142 int err;
1143 if (th->t_trans_id)
1144 reiserfs_update_sd(th, inode);
1145 err = reiserfs_end_persistent_transaction(th);
1146 if (err)
1147 retval = err;
1148 }
1149
1150 reiserfs_write_unlock(inode->i_sb);
1151 reiserfs_check_path(&path);
1152 return retval;
1153 }
1154
1155 static void reiserfs_readahead(struct readahead_control *rac)
1156 {
1157 mpage_readahead(rac, reiserfs_get_block);
1158 }
1159
1160
1161
1162
1163
1164
1165 static int real_space_diff(struct inode *inode, int sd_size)
1166 {
1167 int bytes;
1168 loff_t blocksize = inode->i_sb->s_blocksize;
1169
1170 if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
1171 return sd_size;
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182 bytes =
1183 ((inode->i_size +
1184 (blocksize - 1)) >> inode->i_sb->s_blocksize_bits) * UNFM_P_SIZE +
1185 sd_size;
1186 return bytes;
1187 }
1188
1189 static inline loff_t to_real_used_space(struct inode *inode, ulong blocks,
1190 int sd_size)
1191 {
1192 if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
1193 return inode->i_size +
1194 (loff_t) (real_space_diff(inode, sd_size));
1195 }
1196 return ((loff_t) real_space_diff(inode, sd_size)) +
1197 (((loff_t) blocks) << 9);
1198 }
1199
1200
1201 static inline ulong to_fake_used_blocks(struct inode *inode, int sd_size)
1202 {
1203 loff_t bytes = inode_get_bytes(inode);
1204 loff_t real_space = real_space_diff(inode, sd_size);
1205
1206
1207 if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
1208 bytes += (loff_t) 511;
1209 }
1210
1211
1212
1213
1214
1215
1216 if (bytes < real_space)
1217 return 0;
1218 return (bytes - real_space) >> 9;
1219 }
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229 static void init_inode(struct inode *inode, struct treepath *path)
1230 {
1231 struct buffer_head *bh;
1232 struct item_head *ih;
1233 __u32 rdev;
1234
1235 bh = PATH_PLAST_BUFFER(path);
1236 ih = tp_item_head(path);
1237
1238 copy_key(INODE_PKEY(inode), &ih->ih_key);
1239
1240 INIT_LIST_HEAD(&REISERFS_I(inode)->i_prealloc_list);
1241 REISERFS_I(inode)->i_flags = 0;
1242 REISERFS_I(inode)->i_prealloc_block = 0;
1243 REISERFS_I(inode)->i_prealloc_count = 0;
1244 REISERFS_I(inode)->i_trans_id = 0;
1245 REISERFS_I(inode)->i_jl = NULL;
1246 reiserfs_init_xattr_rwsem(inode);
1247
1248 if (stat_data_v1(ih)) {
1249 struct stat_data_v1 *sd =
1250 (struct stat_data_v1 *)ih_item_body(bh, ih);
1251 unsigned long blocks;
1252
1253 set_inode_item_key_version(inode, KEY_FORMAT_3_5);
1254 set_inode_sd_version(inode, STAT_DATA_V1);
1255 inode->i_mode = sd_v1_mode(sd);
1256 set_nlink(inode, sd_v1_nlink(sd));
1257 i_uid_write(inode, sd_v1_uid(sd));
1258 i_gid_write(inode, sd_v1_gid(sd));
1259 inode->i_size = sd_v1_size(sd);
1260 inode->i_atime.tv_sec = sd_v1_atime(sd);
1261 inode->i_mtime.tv_sec = sd_v1_mtime(sd);
1262 inode->i_ctime.tv_sec = sd_v1_ctime(sd);
1263 inode->i_atime.tv_nsec = 0;
1264 inode->i_ctime.tv_nsec = 0;
1265 inode->i_mtime.tv_nsec = 0;
1266
1267 inode->i_blocks = sd_v1_blocks(sd);
1268 inode->i_generation = le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1269 blocks = (inode->i_size + 511) >> 9;
1270 blocks = _ROUND_UP(blocks, inode->i_sb->s_blocksize >> 9);
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280 if (inode->i_blocks > blocks) {
1281 inode->i_blocks = blocks;
1282 }
1283
1284 rdev = sd_v1_rdev(sd);
1285 REISERFS_I(inode)->i_first_direct_byte =
1286 sd_v1_first_direct_byte(sd);
1287
1288
1289
1290
1291
1292 if (inode->i_blocks & 1) {
1293 inode->i_blocks++;
1294 }
1295 inode_set_bytes(inode,
1296 to_real_used_space(inode, inode->i_blocks,
1297 SD_V1_SIZE));
1298
1299
1300
1301
1302 REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
1303 } else {
1304
1305
1306
1307
1308 struct stat_data *sd = (struct stat_data *)ih_item_body(bh, ih);
1309
1310 inode->i_mode = sd_v2_mode(sd);
1311 set_nlink(inode, sd_v2_nlink(sd));
1312 i_uid_write(inode, sd_v2_uid(sd));
1313 inode->i_size = sd_v2_size(sd);
1314 i_gid_write(inode, sd_v2_gid(sd));
1315 inode->i_mtime.tv_sec = sd_v2_mtime(sd);
1316 inode->i_atime.tv_sec = sd_v2_atime(sd);
1317 inode->i_ctime.tv_sec = sd_v2_ctime(sd);
1318 inode->i_ctime.tv_nsec = 0;
1319 inode->i_mtime.tv_nsec = 0;
1320 inode->i_atime.tv_nsec = 0;
1321 inode->i_blocks = sd_v2_blocks(sd);
1322 rdev = sd_v2_rdev(sd);
1323 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1324 inode->i_generation =
1325 le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1326 else
1327 inode->i_generation = sd_v2_generation(sd);
1328
1329 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
1330 set_inode_item_key_version(inode, KEY_FORMAT_3_5);
1331 else
1332 set_inode_item_key_version(inode, KEY_FORMAT_3_6);
1333 REISERFS_I(inode)->i_first_direct_byte = 0;
1334 set_inode_sd_version(inode, STAT_DATA_V2);
1335 inode_set_bytes(inode,
1336 to_real_used_space(inode, inode->i_blocks,
1337 SD_V2_SIZE));
1338
1339
1340
1341
1342 REISERFS_I(inode)->i_attrs = sd_v2_attrs(sd);
1343 sd_attrs_to_i_attrs(sd_v2_attrs(sd), inode);
1344 }
1345
1346 pathrelse(path);
1347 if (S_ISREG(inode->i_mode)) {
1348 inode->i_op = &reiserfs_file_inode_operations;
1349 inode->i_fop = &reiserfs_file_operations;
1350 inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1351 } else if (S_ISDIR(inode->i_mode)) {
1352 inode->i_op = &reiserfs_dir_inode_operations;
1353 inode->i_fop = &reiserfs_dir_operations;
1354 } else if (S_ISLNK(inode->i_mode)) {
1355 inode->i_op = &reiserfs_symlink_inode_operations;
1356 inode_nohighmem(inode);
1357 inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1358 } else {
1359 inode->i_blocks = 0;
1360 inode->i_op = &reiserfs_special_inode_operations;
1361 init_special_inode(inode, inode->i_mode, new_decode_dev(rdev));
1362 }
1363 }
1364
1365
1366 static void inode2sd(void *sd, struct inode *inode, loff_t size)
1367 {
1368 struct stat_data *sd_v2 = (struct stat_data *)sd;
1369
1370 set_sd_v2_mode(sd_v2, inode->i_mode);
1371 set_sd_v2_nlink(sd_v2, inode->i_nlink);
1372 set_sd_v2_uid(sd_v2, i_uid_read(inode));
1373 set_sd_v2_size(sd_v2, size);
1374 set_sd_v2_gid(sd_v2, i_gid_read(inode));
1375 set_sd_v2_mtime(sd_v2, inode->i_mtime.tv_sec);
1376 set_sd_v2_atime(sd_v2, inode->i_atime.tv_sec);
1377 set_sd_v2_ctime(sd_v2, inode->i_ctime.tv_sec);
1378 set_sd_v2_blocks(sd_v2, to_fake_used_blocks(inode, SD_V2_SIZE));
1379 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1380 set_sd_v2_rdev(sd_v2, new_encode_dev(inode->i_rdev));
1381 else
1382 set_sd_v2_generation(sd_v2, inode->i_generation);
1383 set_sd_v2_attrs(sd_v2, REISERFS_I(inode)->i_attrs);
1384 }
1385
1386
1387 static void inode2sd_v1(void *sd, struct inode *inode, loff_t size)
1388 {
1389 struct stat_data_v1 *sd_v1 = (struct stat_data_v1 *)sd;
1390
1391 set_sd_v1_mode(sd_v1, inode->i_mode);
1392 set_sd_v1_uid(sd_v1, i_uid_read(inode));
1393 set_sd_v1_gid(sd_v1, i_gid_read(inode));
1394 set_sd_v1_nlink(sd_v1, inode->i_nlink);
1395 set_sd_v1_size(sd_v1, size);
1396 set_sd_v1_atime(sd_v1, inode->i_atime.tv_sec);
1397 set_sd_v1_ctime(sd_v1, inode->i_ctime.tv_sec);
1398 set_sd_v1_mtime(sd_v1, inode->i_mtime.tv_sec);
1399
1400 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1401 set_sd_v1_rdev(sd_v1, new_encode_dev(inode->i_rdev));
1402 else
1403 set_sd_v1_blocks(sd_v1, to_fake_used_blocks(inode, SD_V1_SIZE));
1404
1405
1406 set_sd_v1_first_direct_byte(sd_v1,
1407 REISERFS_I(inode)->i_first_direct_byte);
1408 }
1409
1410
1411
1412
1413
1414 static void update_stat_data(struct treepath *path, struct inode *inode,
1415 loff_t size)
1416 {
1417 struct buffer_head *bh;
1418 struct item_head *ih;
1419
1420 bh = PATH_PLAST_BUFFER(path);
1421 ih = tp_item_head(path);
1422
1423 if (!is_statdata_le_ih(ih))
1424 reiserfs_panic(inode->i_sb, "vs-13065", "key %k, found item %h",
1425 INODE_PKEY(inode), ih);
1426
1427
1428 if (stat_data_v1(ih)) {
1429 inode2sd_v1(ih_item_body(bh, ih), inode, size);
1430 } else {
1431 inode2sd(ih_item_body(bh, ih), inode, size);
1432 }
1433
1434 return;
1435 }
1436
1437 void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th,
1438 struct inode *inode, loff_t size)
1439 {
1440 struct cpu_key key;
1441 INITIALIZE_PATH(path);
1442 struct buffer_head *bh;
1443 int fs_gen;
1444 struct item_head *ih, tmp_ih;
1445 int retval;
1446
1447 BUG_ON(!th->t_trans_id);
1448
1449
1450 make_cpu_key(&key, inode, SD_OFFSET, TYPE_STAT_DATA, 3);
1451
1452 for (;;) {
1453 int pos;
1454
1455 retval = search_item(inode->i_sb, &key, &path);
1456 if (retval == IO_ERROR) {
1457 reiserfs_error(inode->i_sb, "vs-13050",
1458 "i/o failure occurred trying to "
1459 "update %K stat data", &key);
1460 return;
1461 }
1462 if (retval == ITEM_NOT_FOUND) {
1463 pos = PATH_LAST_POSITION(&path);
1464 pathrelse(&path);
1465 if (inode->i_nlink == 0) {
1466
1467 return;
1468 }
1469 reiserfs_warning(inode->i_sb, "vs-13060",
1470 "stat data of object %k (nlink == %d) "
1471 "not found (pos %d)",
1472 INODE_PKEY(inode), inode->i_nlink,
1473 pos);
1474 reiserfs_check_path(&path);
1475 return;
1476 }
1477
1478
1479
1480
1481
1482
1483 bh = get_last_bh(&path);
1484 ih = tp_item_head(&path);
1485 copy_item_head(&tmp_ih, ih);
1486 fs_gen = get_generation(inode->i_sb);
1487 reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
1488
1489
1490 if (fs_changed(fs_gen, inode->i_sb)
1491 && item_moved(&tmp_ih, &path)) {
1492 reiserfs_restore_prepared_buffer(inode->i_sb, bh);
1493 continue;
1494 }
1495 break;
1496 }
1497 update_stat_data(&path, inode, size);
1498 journal_mark_dirty(th, bh);
1499 pathrelse(&path);
1500 return;
1501 }
1502
1503
1504
1505
1506
1507
1508
1509
1510 static void reiserfs_make_bad_inode(struct inode *inode)
1511 {
1512 memset(INODE_PKEY(inode), 0, KEY_SIZE);
1513 make_bad_inode(inode);
1514 }
1515
1516
1517
1518
1519
1520 int reiserfs_init_locked_inode(struct inode *inode, void *p)
1521 {
1522 struct reiserfs_iget_args *args = (struct reiserfs_iget_args *)p;
1523 inode->i_ino = args->objectid;
1524 INODE_PKEY(inode)->k_dir_id = cpu_to_le32(args->dirid);
1525 return 0;
1526 }
1527
1528
1529
1530
1531
1532 void reiserfs_read_locked_inode(struct inode *inode,
1533 struct reiserfs_iget_args *args)
1534 {
1535 INITIALIZE_PATH(path_to_sd);
1536 struct cpu_key key;
1537 unsigned long dirino;
1538 int retval;
1539
1540 dirino = args->dirid;
1541
1542
1543
1544
1545
1546 _make_cpu_key(&key, KEY_FORMAT_3_5, dirino, inode->i_ino, 0, 0, 3);
1547
1548
1549 retval = search_item(inode->i_sb, &key, &path_to_sd);
1550 if (retval == IO_ERROR) {
1551 reiserfs_error(inode->i_sb, "vs-13070",
1552 "i/o failure occurred trying to find "
1553 "stat data of %K", &key);
1554 reiserfs_make_bad_inode(inode);
1555 return;
1556 }
1557
1558
1559 if (retval != ITEM_FOUND) {
1560 pathrelse(&path_to_sd);
1561 reiserfs_make_bad_inode(inode);
1562 clear_nlink(inode);
1563 return;
1564 }
1565
1566 init_inode(inode, &path_to_sd);
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587 if ((inode->i_nlink == 0) &&
1588 !REISERFS_SB(inode->i_sb)->s_is_unlinked_ok) {
1589 reiserfs_warning(inode->i_sb, "vs-13075",
1590 "dead inode read from disk %K. "
1591 "This is likely to be race with knfsd. Ignore",
1592 &key);
1593 reiserfs_make_bad_inode(inode);
1594 }
1595
1596
1597 reiserfs_check_path(&path_to_sd);
1598
1599
1600
1601
1602 if (get_inode_sd_version(inode) == STAT_DATA_V1)
1603 cache_no_acl(inode);
1604 }
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618 int reiserfs_find_actor(struct inode *inode, void *opaque)
1619 {
1620 struct reiserfs_iget_args *args;
1621
1622 args = opaque;
1623
1624 return (inode->i_ino == args->objectid) &&
1625 (le32_to_cpu(INODE_PKEY(inode)->k_dir_id) == args->dirid);
1626 }
1627
1628 struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key)
1629 {
1630 struct inode *inode;
1631 struct reiserfs_iget_args args;
1632 int depth;
1633
1634 args.objectid = key->on_disk_key.k_objectid;
1635 args.dirid = key->on_disk_key.k_dir_id;
1636 depth = reiserfs_write_unlock_nested(s);
1637 inode = iget5_locked(s, key->on_disk_key.k_objectid,
1638 reiserfs_find_actor, reiserfs_init_locked_inode,
1639 (void *)(&args));
1640 reiserfs_write_lock_nested(s, depth);
1641 if (!inode)
1642 return ERR_PTR(-ENOMEM);
1643
1644 if (inode->i_state & I_NEW) {
1645 reiserfs_read_locked_inode(inode, &args);
1646 unlock_new_inode(inode);
1647 }
1648
1649 if (comp_short_keys(INODE_PKEY(inode), key) || is_bad_inode(inode)) {
1650
1651 iput(inode);
1652 inode = NULL;
1653 }
1654 return inode;
1655 }
1656
1657 static struct dentry *reiserfs_get_dentry(struct super_block *sb,
1658 u32 objectid, u32 dir_id, u32 generation)
1659
1660 {
1661 struct cpu_key key;
1662 struct inode *inode;
1663
1664 key.on_disk_key.k_objectid = objectid;
1665 key.on_disk_key.k_dir_id = dir_id;
1666 reiserfs_write_lock(sb);
1667 inode = reiserfs_iget(sb, &key);
1668 if (inode && !IS_ERR(inode) && generation != 0 &&
1669 generation != inode->i_generation) {
1670 iput(inode);
1671 inode = NULL;
1672 }
1673 reiserfs_write_unlock(sb);
1674
1675 return d_obtain_alias(inode);
1676 }
1677
1678 struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
1679 int fh_len, int fh_type)
1680 {
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694 if (fh_type > fh_len) {
1695 if (fh_type != 6 || fh_len != 5)
1696 reiserfs_warning(sb, "reiserfs-13077",
1697 "nfsd/reiserfs, fhtype=%d, len=%d - odd",
1698 fh_type, fh_len);
1699 fh_type = fh_len;
1700 }
1701 if (fh_len < 2)
1702 return NULL;
1703
1704 return reiserfs_get_dentry(sb, fid->raw[0], fid->raw[1],
1705 (fh_type == 3 || fh_type >= 5) ? fid->raw[2] : 0);
1706 }
1707
1708 struct dentry *reiserfs_fh_to_parent(struct super_block *sb, struct fid *fid,
1709 int fh_len, int fh_type)
1710 {
1711 if (fh_type > fh_len)
1712 fh_type = fh_len;
1713 if (fh_type < 4)
1714 return NULL;
1715
1716 return reiserfs_get_dentry(sb,
1717 (fh_type >= 5) ? fid->raw[3] : fid->raw[2],
1718 (fh_type >= 5) ? fid->raw[4] : fid->raw[3],
1719 (fh_type == 6) ? fid->raw[5] : 0);
1720 }
1721
1722 int reiserfs_encode_fh(struct inode *inode, __u32 * data, int *lenp,
1723 struct inode *parent)
1724 {
1725 int maxlen = *lenp;
1726
1727 if (parent && (maxlen < 5)) {
1728 *lenp = 5;
1729 return FILEID_INVALID;
1730 } else if (maxlen < 3) {
1731 *lenp = 3;
1732 return FILEID_INVALID;
1733 }
1734
1735 data[0] = inode->i_ino;
1736 data[1] = le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1737 data[2] = inode->i_generation;
1738 *lenp = 3;
1739 if (parent) {
1740 data[3] = parent->i_ino;
1741 data[4] = le32_to_cpu(INODE_PKEY(parent)->k_dir_id);
1742 *lenp = 5;
1743 if (maxlen >= 6) {
1744 data[5] = parent->i_generation;
1745 *lenp = 6;
1746 }
1747 }
1748 return *lenp;
1749 }
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761 int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc)
1762 {
1763 struct reiserfs_transaction_handle th;
1764 int jbegin_count = 1;
1765
1766 if (sb_rdonly(inode->i_sb))
1767 return -EROFS;
1768
1769
1770
1771
1772
1773
1774
1775 if (wbc->sync_mode == WB_SYNC_ALL && !(current->flags & PF_MEMALLOC)) {
1776 reiserfs_write_lock(inode->i_sb);
1777 if (!journal_begin(&th, inode->i_sb, jbegin_count)) {
1778 reiserfs_update_sd(&th, inode);
1779 journal_end_sync(&th);
1780 }
1781 reiserfs_write_unlock(inode->i_sb);
1782 }
1783 return 0;
1784 }
1785
1786
1787
1788
1789
1790 static int reiserfs_new_directory(struct reiserfs_transaction_handle *th,
1791 struct inode *inode,
1792 struct item_head *ih, struct treepath *path,
1793 struct inode *dir)
1794 {
1795 struct super_block *sb = th->t_super;
1796 char empty_dir[EMPTY_DIR_SIZE];
1797 char *body = empty_dir;
1798 struct cpu_key key;
1799 int retval;
1800
1801 BUG_ON(!th->t_trans_id);
1802
1803 _make_cpu_key(&key, KEY_FORMAT_3_5, le32_to_cpu(ih->ih_key.k_dir_id),
1804 le32_to_cpu(ih->ih_key.k_objectid), DOT_OFFSET,
1805 TYPE_DIRENTRY, 3 );
1806
1807
1808
1809
1810
1811
1812 if (old_format_only(sb)) {
1813 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET,
1814 TYPE_DIRENTRY, EMPTY_DIR_SIZE_V1, 2);
1815
1816 make_empty_dir_item_v1(body, ih->ih_key.k_dir_id,
1817 ih->ih_key.k_objectid,
1818 INODE_PKEY(dir)->k_dir_id,
1819 INODE_PKEY(dir)->k_objectid);
1820 } else {
1821 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET,
1822 TYPE_DIRENTRY, EMPTY_DIR_SIZE, 2);
1823
1824 make_empty_dir_item(body, ih->ih_key.k_dir_id,
1825 ih->ih_key.k_objectid,
1826 INODE_PKEY(dir)->k_dir_id,
1827 INODE_PKEY(dir)->k_objectid);
1828 }
1829
1830
1831 retval = search_item(sb, &key, path);
1832 if (retval == IO_ERROR) {
1833 reiserfs_error(sb, "vs-13080",
1834 "i/o failure occurred creating new directory");
1835 return -EIO;
1836 }
1837 if (retval == ITEM_FOUND) {
1838 pathrelse(path);
1839 reiserfs_warning(sb, "vs-13070",
1840 "object with this key exists (%k)",
1841 &(ih->ih_key));
1842 return -EEXIST;
1843 }
1844
1845
1846 return reiserfs_insert_item(th, path, &key, ih, inode, body);
1847 }
1848
1849
1850
1851
1852
1853 static int reiserfs_new_symlink(struct reiserfs_transaction_handle *th,
1854 struct inode *inode,
1855 struct item_head *ih,
1856 struct treepath *path, const char *symname,
1857 int item_len)
1858 {
1859 struct super_block *sb = th->t_super;
1860 struct cpu_key key;
1861 int retval;
1862
1863 BUG_ON(!th->t_trans_id);
1864
1865 _make_cpu_key(&key, KEY_FORMAT_3_5,
1866 le32_to_cpu(ih->ih_key.k_dir_id),
1867 le32_to_cpu(ih->ih_key.k_objectid),
1868 1, TYPE_DIRECT, 3 );
1869
1870 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, 1, TYPE_DIRECT, item_len,
1871 0 );
1872
1873
1874 retval = search_item(sb, &key, path);
1875 if (retval == IO_ERROR) {
1876 reiserfs_error(sb, "vs-13080",
1877 "i/o failure occurred creating new symlink");
1878 return -EIO;
1879 }
1880 if (retval == ITEM_FOUND) {
1881 pathrelse(path);
1882 reiserfs_warning(sb, "vs-13080",
1883 "object with this key exists (%k)",
1884 &(ih->ih_key));
1885 return -EEXIST;
1886 }
1887
1888
1889 return reiserfs_insert_item(th, path, &key, ih, inode, symname);
1890 }
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912 int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1913 struct inode *dir, umode_t mode, const char *symname,
1914
1915
1916 loff_t i_size, struct dentry *dentry,
1917 struct inode *inode,
1918 struct reiserfs_security_handle *security)
1919 {
1920 struct super_block *sb = dir->i_sb;
1921 struct reiserfs_iget_args args;
1922 INITIALIZE_PATH(path_to_key);
1923 struct cpu_key key;
1924 struct item_head ih;
1925 struct stat_data sd;
1926 int retval;
1927 int err;
1928 int depth;
1929
1930 BUG_ON(!th->t_trans_id);
1931
1932 depth = reiserfs_write_unlock_nested(sb);
1933 err = dquot_alloc_inode(inode);
1934 reiserfs_write_lock_nested(sb, depth);
1935 if (err)
1936 goto out_end_trans;
1937 if (!dir->i_nlink) {
1938 err = -EPERM;
1939 goto out_bad_inode;
1940 }
1941
1942
1943 ih.ih_key.k_dir_id = reiserfs_choose_packing(dir);
1944 ih.ih_key.k_objectid = cpu_to_le32(reiserfs_get_unused_objectid(th));
1945 if (!ih.ih_key.k_objectid) {
1946 err = -ENOMEM;
1947 goto out_bad_inode;
1948 }
1949 args.objectid = inode->i_ino = le32_to_cpu(ih.ih_key.k_objectid);
1950 if (old_format_only(sb))
1951 make_le_item_head(&ih, NULL, KEY_FORMAT_3_5, SD_OFFSET,
1952 TYPE_STAT_DATA, SD_V1_SIZE, MAX_US_INT);
1953 else
1954 make_le_item_head(&ih, NULL, KEY_FORMAT_3_6, SD_OFFSET,
1955 TYPE_STAT_DATA, SD_SIZE, MAX_US_INT);
1956 memcpy(INODE_PKEY(inode), &ih.ih_key, KEY_SIZE);
1957 args.dirid = le32_to_cpu(ih.ih_key.k_dir_id);
1958
1959 depth = reiserfs_write_unlock_nested(inode->i_sb);
1960 err = insert_inode_locked4(inode, args.objectid,
1961 reiserfs_find_actor, &args);
1962 reiserfs_write_lock_nested(inode->i_sb, depth);
1963 if (err) {
1964 err = -EINVAL;
1965 goto out_bad_inode;
1966 }
1967
1968 if (old_format_only(sb))
1969
1970
1971
1972
1973
1974
1975 inode->i_generation = le32_to_cpu(INODE_PKEY(dir)->k_objectid);
1976 else
1977 #if defined( USE_INODE_GENERATION_COUNTER )
1978 inode->i_generation =
1979 le32_to_cpu(REISERFS_SB(sb)->s_rs->s_inode_generation);
1980 #else
1981 inode->i_generation = ++event;
1982 #endif
1983
1984
1985 set_nlink(inode, (S_ISDIR(mode) ? 2 : 1));
1986
1987
1988
1989 inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
1990 inode->i_size = i_size;
1991 inode->i_blocks = 0;
1992 inode->i_bytes = 0;
1993 REISERFS_I(inode)->i_first_direct_byte = S_ISLNK(mode) ? 1 :
1994 U32_MAX ;
1995
1996 INIT_LIST_HEAD(&REISERFS_I(inode)->i_prealloc_list);
1997 REISERFS_I(inode)->i_flags = 0;
1998 REISERFS_I(inode)->i_prealloc_block = 0;
1999 REISERFS_I(inode)->i_prealloc_count = 0;
2000 REISERFS_I(inode)->i_trans_id = 0;
2001 REISERFS_I(inode)->i_jl = NULL;
2002 REISERFS_I(inode)->i_attrs =
2003 REISERFS_I(dir)->i_attrs & REISERFS_INHERIT_MASK;
2004 sd_attrs_to_i_attrs(REISERFS_I(inode)->i_attrs, inode);
2005 reiserfs_init_xattr_rwsem(inode);
2006
2007
2008 _make_cpu_key(&key, KEY_FORMAT_3_6, le32_to_cpu(ih.ih_key.k_dir_id),
2009 le32_to_cpu(ih.ih_key.k_objectid), SD_OFFSET,
2010 TYPE_STAT_DATA, 3 );
2011
2012
2013 retval = search_item(sb, &key, &path_to_key);
2014 if (retval == IO_ERROR) {
2015 err = -EIO;
2016 goto out_bad_inode;
2017 }
2018 if (retval == ITEM_FOUND) {
2019 pathrelse(&path_to_key);
2020 err = -EEXIST;
2021 goto out_bad_inode;
2022 }
2023 if (old_format_only(sb)) {
2024
2025 if (i_uid_read(inode) & ~0xffff || i_gid_read(inode) & ~0xffff) {
2026 pathrelse(&path_to_key);
2027 err = -EINVAL;
2028 goto out_bad_inode;
2029 }
2030 inode2sd_v1(&sd, inode, inode->i_size);
2031 } else {
2032 inode2sd(&sd, inode, inode->i_size);
2033 }
2034
2035
2036
2037
2038
2039 if (old_format_only(sb) || S_ISDIR(mode) || S_ISLNK(mode))
2040 set_inode_item_key_version(inode, KEY_FORMAT_3_5);
2041 else
2042 set_inode_item_key_version(inode, KEY_FORMAT_3_6);
2043 if (old_format_only(sb))
2044 set_inode_sd_version(inode, STAT_DATA_V1);
2045 else
2046 set_inode_sd_version(inode, STAT_DATA_V2);
2047
2048
2049 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
2050 if (REISERFS_I(dir)->new_packing_locality)
2051 th->displace_new_blocks = 1;
2052 #endif
2053 retval =
2054 reiserfs_insert_item(th, &path_to_key, &key, &ih, inode,
2055 (char *)(&sd));
2056 if (retval) {
2057 err = retval;
2058 reiserfs_check_path(&path_to_key);
2059 goto out_bad_inode;
2060 }
2061 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
2062 if (!th->displace_new_blocks)
2063 REISERFS_I(dir)->new_packing_locality = 0;
2064 #endif
2065 if (S_ISDIR(mode)) {
2066
2067 retval =
2068 reiserfs_new_directory(th, inode, &ih, &path_to_key, dir);
2069 }
2070
2071 if (S_ISLNK(mode)) {
2072
2073 if (!old_format_only(sb))
2074 i_size = ROUND_UP(i_size);
2075 retval =
2076 reiserfs_new_symlink(th, inode, &ih, &path_to_key, symname,
2077 i_size);
2078 }
2079 if (retval) {
2080 err = retval;
2081 reiserfs_check_path(&path_to_key);
2082 journal_end(th);
2083 goto out_inserted_sd;
2084 }
2085
2086
2087
2088
2089
2090 if (IS_PRIVATE(dir) || dentry == REISERFS_SB(sb)->priv_root) {
2091 inode->i_flags |= S_PRIVATE;
2092 inode->i_opflags &= ~IOP_XATTR;
2093 }
2094
2095 if (reiserfs_posixacl(inode->i_sb)) {
2096 reiserfs_write_unlock(inode->i_sb);
2097 retval = reiserfs_inherit_default_acl(th, dir, dentry, inode);
2098 reiserfs_write_lock(inode->i_sb);
2099 if (retval) {
2100 err = retval;
2101 reiserfs_check_path(&path_to_key);
2102 journal_end(th);
2103 goto out_inserted_sd;
2104 }
2105 } else if (inode->i_sb->s_flags & SB_POSIXACL) {
2106 reiserfs_warning(inode->i_sb, "jdm-13090",
2107 "ACLs aren't enabled in the fs, "
2108 "but vfs thinks they are!");
2109 }
2110
2111 if (security->name) {
2112 reiserfs_write_unlock(inode->i_sb);
2113 retval = reiserfs_security_write(th, inode, security);
2114 reiserfs_write_lock(inode->i_sb);
2115 if (retval) {
2116 err = retval;
2117 reiserfs_check_path(&path_to_key);
2118 retval = journal_end(th);
2119 if (retval)
2120 err = retval;
2121 goto out_inserted_sd;
2122 }
2123 }
2124
2125 reiserfs_update_sd(th, inode);
2126 reiserfs_check_path(&path_to_key);
2127
2128 return 0;
2129
2130 out_bad_inode:
2131
2132 INODE_PKEY(inode)->k_objectid = 0;
2133
2134
2135 depth = reiserfs_write_unlock_nested(inode->i_sb);
2136 dquot_free_inode(inode);
2137 reiserfs_write_lock_nested(inode->i_sb, depth);
2138
2139 out_end_trans:
2140 journal_end(th);
2141
2142
2143
2144
2145 depth = reiserfs_write_unlock_nested(inode->i_sb);
2146 dquot_drop(inode);
2147 reiserfs_write_lock_nested(inode->i_sb, depth);
2148 inode->i_flags |= S_NOQUOTA;
2149 make_bad_inode(inode);
2150
2151 out_inserted_sd:
2152 clear_nlink(inode);
2153 th->t_trans_id = 0;
2154 if (inode->i_state & I_NEW)
2155 unlock_new_inode(inode);
2156 iput(inode);
2157 return err;
2158 }
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173 static int grab_tail_page(struct inode *inode,
2174 struct page **page_result,
2175 struct buffer_head **bh_result)
2176 {
2177
2178
2179
2180
2181
2182 unsigned long index = (inode->i_size - 1) >> PAGE_SHIFT;
2183 unsigned long pos = 0;
2184 unsigned long start = 0;
2185 unsigned long blocksize = inode->i_sb->s_blocksize;
2186 unsigned long offset = (inode->i_size) & (PAGE_SIZE - 1);
2187 struct buffer_head *bh;
2188 struct buffer_head *head;
2189 struct page *page;
2190 int error;
2191
2192
2193
2194
2195
2196
2197
2198 if ((offset & (blocksize - 1)) == 0) {
2199 return -ENOENT;
2200 }
2201 page = grab_cache_page(inode->i_mapping, index);
2202 error = -ENOMEM;
2203 if (!page) {
2204 goto out;
2205 }
2206
2207 start = (offset / blocksize) * blocksize;
2208
2209 error = __block_write_begin(page, start, offset - start,
2210 reiserfs_get_block_create_0);
2211 if (error)
2212 goto unlock;
2213
2214 head = page_buffers(page);
2215 bh = head;
2216 do {
2217 if (pos >= start) {
2218 break;
2219 }
2220 bh = bh->b_this_page;
2221 pos += blocksize;
2222 } while (bh != head);
2223
2224 if (!buffer_uptodate(bh)) {
2225
2226
2227
2228
2229
2230
2231 reiserfs_error(inode->i_sb, "clm-6000",
2232 "error reading block %lu", bh->b_blocknr);
2233 error = -EIO;
2234 goto unlock;
2235 }
2236 *bh_result = bh;
2237 *page_result = page;
2238
2239 out:
2240 return error;
2241
2242 unlock:
2243 unlock_page(page);
2244 put_page(page);
2245 return error;
2246 }
2247
2248
2249
2250
2251
2252
2253
2254 int reiserfs_truncate_file(struct inode *inode, int update_timestamps)
2255 {
2256 struct reiserfs_transaction_handle th;
2257
2258 unsigned long offset = inode->i_size & (PAGE_SIZE - 1);
2259 unsigned blocksize = inode->i_sb->s_blocksize;
2260 unsigned length;
2261 struct page *page = NULL;
2262 int error;
2263 struct buffer_head *bh = NULL;
2264 int err2;
2265
2266 reiserfs_write_lock(inode->i_sb);
2267
2268 if (inode->i_size > 0) {
2269 error = grab_tail_page(inode, &page, &bh);
2270 if (error) {
2271
2272
2273
2274
2275
2276 if (error != -ENOENT)
2277 reiserfs_error(inode->i_sb, "clm-6001",
2278 "grab_tail_page failed %d",
2279 error);
2280 page = NULL;
2281 bh = NULL;
2282 }
2283 }
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297 error = journal_begin(&th, inode->i_sb,
2298 JOURNAL_PER_BALANCE_CNT * 2 + 1);
2299 if (error)
2300 goto out;
2301 reiserfs_update_inode_transaction(inode);
2302 if (update_timestamps)
2303
2304
2305
2306
2307
2308
2309 add_save_link(&th, inode, 1);
2310 err2 = reiserfs_do_truncate(&th, inode, page, update_timestamps);
2311 error = journal_end(&th);
2312 if (error)
2313 goto out;
2314
2315
2316 if (err2) {
2317 error = err2;
2318 goto out;
2319 }
2320
2321 if (update_timestamps) {
2322 error = remove_save_link(inode, 1 );
2323 if (error)
2324 goto out;
2325 }
2326
2327 if (page) {
2328 length = offset & (blocksize - 1);
2329
2330 if (length) {
2331 length = blocksize - length;
2332 zero_user(page, offset, length);
2333 if (buffer_mapped(bh) && bh->b_blocknr != 0) {
2334 mark_buffer_dirty(bh);
2335 }
2336 }
2337 unlock_page(page);
2338 put_page(page);
2339 }
2340
2341 reiserfs_write_unlock(inode->i_sb);
2342
2343 return 0;
2344 out:
2345 if (page) {
2346 unlock_page(page);
2347 put_page(page);
2348 }
2349
2350 reiserfs_write_unlock(inode->i_sb);
2351
2352 return error;
2353 }
2354
2355 static int map_block_for_writepage(struct inode *inode,
2356 struct buffer_head *bh_result,
2357 unsigned long block)
2358 {
2359 struct reiserfs_transaction_handle th;
2360 int fs_gen;
2361 struct item_head tmp_ih;
2362 struct item_head *ih;
2363 struct buffer_head *bh;
2364 __le32 *item;
2365 struct cpu_key key;
2366 INITIALIZE_PATH(path);
2367 int pos_in_item;
2368 int jbegin_count = JOURNAL_PER_BALANCE_CNT;
2369 loff_t byte_offset = ((loff_t)block << inode->i_sb->s_blocksize_bits)+1;
2370 int retval;
2371 int use_get_block = 0;
2372 int bytes_copied = 0;
2373 int copy_size;
2374 int trans_running = 0;
2375
2376
2377
2378
2379
2380 th.t_trans_id = 0;
2381
2382 if (!buffer_uptodate(bh_result)) {
2383 return -EIO;
2384 }
2385
2386 kmap(bh_result->b_page);
2387 start_over:
2388 reiserfs_write_lock(inode->i_sb);
2389 make_cpu_key(&key, inode, byte_offset, TYPE_ANY, 3);
2390
2391 research:
2392 retval = search_for_position_by_key(inode->i_sb, &key, &path);
2393 if (retval != POSITION_FOUND) {
2394 use_get_block = 1;
2395 goto out;
2396 }
2397
2398 bh = get_last_bh(&path);
2399 ih = tp_item_head(&path);
2400 item = tp_item_body(&path);
2401 pos_in_item = path.pos_in_item;
2402
2403
2404 if (indirect_item_found(retval, ih)) {
2405 if (bytes_copied > 0) {
2406 reiserfs_warning(inode->i_sb, "clm-6002",
2407 "bytes_copied %d", bytes_copied);
2408 }
2409 if (!get_block_num(item, pos_in_item)) {
2410
2411 use_get_block = 1;
2412 goto out;
2413 }
2414 set_block_dev_mapped(bh_result,
2415 get_block_num(item, pos_in_item), inode);
2416 } else if (is_direct_le_ih(ih)) {
2417 char *p;
2418 p = page_address(bh_result->b_page);
2419 p += (byte_offset - 1) & (PAGE_SIZE - 1);
2420 copy_size = ih_item_len(ih) - pos_in_item;
2421
2422 fs_gen = get_generation(inode->i_sb);
2423 copy_item_head(&tmp_ih, ih);
2424
2425 if (!trans_running) {
2426
2427 retval = journal_begin(&th, inode->i_sb, jbegin_count);
2428 if (retval)
2429 goto out;
2430 reiserfs_update_inode_transaction(inode);
2431 trans_running = 1;
2432 if (fs_changed(fs_gen, inode->i_sb)
2433 && item_moved(&tmp_ih, &path)) {
2434 reiserfs_restore_prepared_buffer(inode->i_sb,
2435 bh);
2436 goto research;
2437 }
2438 }
2439
2440 reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
2441
2442 if (fs_changed(fs_gen, inode->i_sb)
2443 && item_moved(&tmp_ih, &path)) {
2444 reiserfs_restore_prepared_buffer(inode->i_sb, bh);
2445 goto research;
2446 }
2447
2448 memcpy(ih_item_body(bh, ih) + pos_in_item, p + bytes_copied,
2449 copy_size);
2450
2451 journal_mark_dirty(&th, bh);
2452 bytes_copied += copy_size;
2453 set_block_dev_mapped(bh_result, 0, inode);
2454
2455
2456 if (bytes_copied < bh_result->b_size &&
2457 (byte_offset + bytes_copied) < inode->i_size) {
2458 set_cpu_key_k_offset(&key,
2459 cpu_key_k_offset(&key) +
2460 copy_size);
2461 goto research;
2462 }
2463 } else {
2464 reiserfs_warning(inode->i_sb, "clm-6003",
2465 "bad item inode %lu", inode->i_ino);
2466 retval = -EIO;
2467 goto out;
2468 }
2469 retval = 0;
2470
2471 out:
2472 pathrelse(&path);
2473 if (trans_running) {
2474 int err = journal_end(&th);
2475 if (err)
2476 retval = err;
2477 trans_running = 0;
2478 }
2479 reiserfs_write_unlock(inode->i_sb);
2480
2481
2482 if (use_get_block) {
2483 retval = reiserfs_get_block(inode, block, bh_result,
2484 GET_BLOCK_CREATE | GET_BLOCK_NO_IMUX
2485 | GET_BLOCK_NO_DANGLE);
2486 if (!retval) {
2487 if (!buffer_mapped(bh_result)
2488 || bh_result->b_blocknr == 0) {
2489
2490 use_get_block = 0;
2491 goto start_over;
2492 }
2493 }
2494 }
2495 kunmap(bh_result->b_page);
2496
2497 if (!retval && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
2498
2499
2500
2501
2502 lock_buffer(bh_result);
2503 clear_buffer_dirty(bh_result);
2504 unlock_buffer(bh_result);
2505 }
2506 return retval;
2507 }
2508
2509
2510
2511
2512
2513
2514 static int reiserfs_write_full_page(struct page *page,
2515 struct writeback_control *wbc)
2516 {
2517 struct inode *inode = page->mapping->host;
2518 unsigned long end_index = inode->i_size >> PAGE_SHIFT;
2519 int error = 0;
2520 unsigned long block;
2521 sector_t last_block;
2522 struct buffer_head *head, *bh;
2523 int partial = 0;
2524 int nr = 0;
2525 int checked = PageChecked(page);
2526 struct reiserfs_transaction_handle th;
2527 struct super_block *s = inode->i_sb;
2528 int bh_per_page = PAGE_SIZE / s->s_blocksize;
2529 th.t_trans_id = 0;
2530
2531
2532 if (checked && (current->flags & PF_MEMALLOC)) {
2533 redirty_page_for_writepage(wbc, page);
2534 unlock_page(page);
2535 return 0;
2536 }
2537
2538
2539
2540
2541
2542
2543
2544 if (!page_has_buffers(page)) {
2545 create_empty_buffers(page, s->s_blocksize,
2546 (1 << BH_Dirty) | (1 << BH_Uptodate));
2547 }
2548 head = page_buffers(page);
2549
2550
2551
2552
2553
2554 if (page->index >= end_index) {
2555 unsigned last_offset;
2556
2557 last_offset = inode->i_size & (PAGE_SIZE - 1);
2558
2559 if (page->index >= end_index + 1 || !last_offset) {
2560 unlock_page(page);
2561 return 0;
2562 }
2563 zero_user_segment(page, last_offset, PAGE_SIZE);
2564 }
2565 bh = head;
2566 block = page->index << (PAGE_SHIFT - s->s_blocksize_bits);
2567 last_block = (i_size_read(inode) - 1) >> inode->i_blkbits;
2568
2569 do {
2570 if (block > last_block) {
2571
2572
2573
2574
2575
2576 clear_buffer_dirty(bh);
2577 set_buffer_uptodate(bh);
2578 } else if ((checked || buffer_dirty(bh)) &&
2579 (!buffer_mapped(bh) || bh->b_blocknr == 0)) {
2580
2581
2582
2583
2584
2585 if ((error = map_block_for_writepage(inode, bh, block))) {
2586 goto fail;
2587 }
2588 }
2589 bh = bh->b_this_page;
2590 block++;
2591 } while (bh != head);
2592
2593
2594
2595
2596
2597
2598
2599 if (checked) {
2600 ClearPageChecked(page);
2601 reiserfs_write_lock(s);
2602 error = journal_begin(&th, s, bh_per_page + 1);
2603 if (error) {
2604 reiserfs_write_unlock(s);
2605 goto fail;
2606 }
2607 reiserfs_update_inode_transaction(inode);
2608 }
2609
2610 do {
2611 get_bh(bh);
2612 if (!buffer_mapped(bh))
2613 continue;
2614 if (buffer_mapped(bh) && bh->b_blocknr == 0)
2615 continue;
2616
2617 if (checked) {
2618 reiserfs_prepare_for_journal(s, bh, 1);
2619 journal_mark_dirty(&th, bh);
2620 continue;
2621 }
2622
2623
2624
2625
2626 if (wbc->sync_mode != WB_SYNC_NONE) {
2627 lock_buffer(bh);
2628 } else {
2629 if (!trylock_buffer(bh)) {
2630 redirty_page_for_writepage(wbc, page);
2631 continue;
2632 }
2633 }
2634 if (test_clear_buffer_dirty(bh)) {
2635 mark_buffer_async_write(bh);
2636 } else {
2637 unlock_buffer(bh);
2638 }
2639 } while ((bh = bh->b_this_page) != head);
2640
2641 if (checked) {
2642 error = journal_end(&th);
2643 reiserfs_write_unlock(s);
2644 if (error)
2645 goto fail;
2646 }
2647 BUG_ON(PageWriteback(page));
2648 set_page_writeback(page);
2649 unlock_page(page);
2650
2651
2652
2653
2654
2655
2656 do {
2657 struct buffer_head *next = bh->b_this_page;
2658 if (buffer_async_write(bh)) {
2659 submit_bh(REQ_OP_WRITE, bh);
2660 nr++;
2661 }
2662 put_bh(bh);
2663 bh = next;
2664 } while (bh != head);
2665
2666 error = 0;
2667 done:
2668 if (nr == 0) {
2669
2670
2671
2672
2673
2674
2675 bh = head;
2676 do {
2677 if (!buffer_uptodate(bh)) {
2678 partial = 1;
2679 break;
2680 }
2681 bh = bh->b_this_page;
2682 } while (bh != head);
2683 if (!partial)
2684 SetPageUptodate(page);
2685 end_page_writeback(page);
2686 }
2687 return error;
2688
2689 fail:
2690
2691
2692
2693
2694
2695 ClearPageUptodate(page);
2696 bh = head;
2697 do {
2698 get_bh(bh);
2699 if (buffer_mapped(bh) && buffer_dirty(bh) && bh->b_blocknr) {
2700 lock_buffer(bh);
2701 mark_buffer_async_write(bh);
2702 } else {
2703
2704
2705
2706
2707 clear_buffer_dirty(bh);
2708 }
2709 bh = bh->b_this_page;
2710 } while (bh != head);
2711 SetPageError(page);
2712 BUG_ON(PageWriteback(page));
2713 set_page_writeback(page);
2714 unlock_page(page);
2715 do {
2716 struct buffer_head *next = bh->b_this_page;
2717 if (buffer_async_write(bh)) {
2718 clear_buffer_dirty(bh);
2719 submit_bh(REQ_OP_WRITE, bh);
2720 nr++;
2721 }
2722 put_bh(bh);
2723 bh = next;
2724 } while (bh != head);
2725 goto done;
2726 }
2727
2728 static int reiserfs_read_folio(struct file *f, struct folio *folio)
2729 {
2730 return block_read_full_folio(folio, reiserfs_get_block);
2731 }
2732
2733 static int reiserfs_writepage(struct page *page, struct writeback_control *wbc)
2734 {
2735 struct inode *inode = page->mapping->host;
2736 reiserfs_wait_on_write_block(inode->i_sb);
2737 return reiserfs_write_full_page(page, wbc);
2738 }
2739
2740 static void reiserfs_truncate_failed_write(struct inode *inode)
2741 {
2742 truncate_inode_pages(inode->i_mapping, inode->i_size);
2743 reiserfs_truncate_file(inode, 0);
2744 }
2745
2746 static int reiserfs_write_begin(struct file *file,
2747 struct address_space *mapping,
2748 loff_t pos, unsigned len,
2749 struct page **pagep, void **fsdata)
2750 {
2751 struct inode *inode;
2752 struct page *page;
2753 pgoff_t index;
2754 int ret;
2755 int old_ref = 0;
2756
2757 inode = mapping->host;
2758 index = pos >> PAGE_SHIFT;
2759 page = grab_cache_page_write_begin(mapping, index);
2760 if (!page)
2761 return -ENOMEM;
2762 *pagep = page;
2763
2764 reiserfs_wait_on_write_block(inode->i_sb);
2765 fix_tail_page_for_writing(page);
2766 if (reiserfs_transaction_running(inode->i_sb)) {
2767 struct reiserfs_transaction_handle *th;
2768 th = (struct reiserfs_transaction_handle *)current->
2769 journal_info;
2770 BUG_ON(!th->t_refcount);
2771 BUG_ON(!th->t_trans_id);
2772 old_ref = th->t_refcount;
2773 th->t_refcount++;
2774 }
2775 ret = __block_write_begin(page, pos, len, reiserfs_get_block);
2776 if (ret && reiserfs_transaction_running(inode->i_sb)) {
2777 struct reiserfs_transaction_handle *th = current->journal_info;
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791 if (th->t_refcount > old_ref) {
2792 if (old_ref)
2793 th->t_refcount--;
2794 else {
2795 int err;
2796 reiserfs_write_lock(inode->i_sb);
2797 err = reiserfs_end_persistent_transaction(th);
2798 reiserfs_write_unlock(inode->i_sb);
2799 if (err)
2800 ret = err;
2801 }
2802 }
2803 }
2804 if (ret) {
2805 unlock_page(page);
2806 put_page(page);
2807
2808 reiserfs_truncate_failed_write(inode);
2809 }
2810 return ret;
2811 }
2812
2813 int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len)
2814 {
2815 struct inode *inode = page->mapping->host;
2816 int ret;
2817 int old_ref = 0;
2818 int depth;
2819
2820 depth = reiserfs_write_unlock_nested(inode->i_sb);
2821 reiserfs_wait_on_write_block(inode->i_sb);
2822 reiserfs_write_lock_nested(inode->i_sb, depth);
2823
2824 fix_tail_page_for_writing(page);
2825 if (reiserfs_transaction_running(inode->i_sb)) {
2826 struct reiserfs_transaction_handle *th;
2827 th = (struct reiserfs_transaction_handle *)current->
2828 journal_info;
2829 BUG_ON(!th->t_refcount);
2830 BUG_ON(!th->t_trans_id);
2831 old_ref = th->t_refcount;
2832 th->t_refcount++;
2833 }
2834
2835 ret = __block_write_begin(page, from, len, reiserfs_get_block);
2836 if (ret && reiserfs_transaction_running(inode->i_sb)) {
2837 struct reiserfs_transaction_handle *th = current->journal_info;
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851 if (th->t_refcount > old_ref) {
2852 if (old_ref)
2853 th->t_refcount--;
2854 else {
2855 int err;
2856 reiserfs_write_lock(inode->i_sb);
2857 err = reiserfs_end_persistent_transaction(th);
2858 reiserfs_write_unlock(inode->i_sb);
2859 if (err)
2860 ret = err;
2861 }
2862 }
2863 }
2864 return ret;
2865
2866 }
2867
2868 static sector_t reiserfs_aop_bmap(struct address_space *as, sector_t block)
2869 {
2870 return generic_block_bmap(as, block, reiserfs_bmap);
2871 }
2872
2873 static int reiserfs_write_end(struct file *file, struct address_space *mapping,
2874 loff_t pos, unsigned len, unsigned copied,
2875 struct page *page, void *fsdata)
2876 {
2877 struct inode *inode = page->mapping->host;
2878 int ret = 0;
2879 int update_sd = 0;
2880 struct reiserfs_transaction_handle *th;
2881 unsigned start;
2882 bool locked = false;
2883
2884 reiserfs_wait_on_write_block(inode->i_sb);
2885 if (reiserfs_transaction_running(inode->i_sb))
2886 th = current->journal_info;
2887 else
2888 th = NULL;
2889
2890 start = pos & (PAGE_SIZE - 1);
2891 if (unlikely(copied < len)) {
2892 if (!PageUptodate(page))
2893 copied = 0;
2894
2895 page_zero_new_buffers(page, start + copied, start + len);
2896 }
2897 flush_dcache_page(page);
2898
2899 reiserfs_commit_page(inode, page, start, start + copied);
2900
2901
2902
2903
2904
2905
2906 if (pos + copied > inode->i_size) {
2907 struct reiserfs_transaction_handle myth;
2908 reiserfs_write_lock(inode->i_sb);
2909 locked = true;
2910
2911
2912
2913
2914
2915 if ((have_large_tails(inode->i_sb)
2916 && inode->i_size > i_block_size(inode) * 4)
2917 || (have_small_tails(inode->i_sb)
2918 && inode->i_size > i_block_size(inode)))
2919 REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
2920
2921 ret = journal_begin(&myth, inode->i_sb, 1);
2922 if (ret)
2923 goto journal_error;
2924
2925 reiserfs_update_inode_transaction(inode);
2926 inode->i_size = pos + copied;
2927
2928
2929
2930
2931
2932 mark_inode_dirty(inode);
2933 reiserfs_update_sd(&myth, inode);
2934 update_sd = 1;
2935 ret = journal_end(&myth);
2936 if (ret)
2937 goto journal_error;
2938 }
2939 if (th) {
2940 if (!locked) {
2941 reiserfs_write_lock(inode->i_sb);
2942 locked = true;
2943 }
2944 if (!update_sd)
2945 mark_inode_dirty(inode);
2946 ret = reiserfs_end_persistent_transaction(th);
2947 if (ret)
2948 goto out;
2949 }
2950
2951 out:
2952 if (locked)
2953 reiserfs_write_unlock(inode->i_sb);
2954 unlock_page(page);
2955 put_page(page);
2956
2957 if (pos + len > inode->i_size)
2958 reiserfs_truncate_failed_write(inode);
2959
2960 return ret == 0 ? copied : ret;
2961
2962 journal_error:
2963 reiserfs_write_unlock(inode->i_sb);
2964 locked = false;
2965 if (th) {
2966 if (!update_sd)
2967 reiserfs_update_sd(th, inode);
2968 ret = reiserfs_end_persistent_transaction(th);
2969 }
2970 goto out;
2971 }
2972
2973 int reiserfs_commit_write(struct file *f, struct page *page,
2974 unsigned from, unsigned to)
2975 {
2976 struct inode *inode = page->mapping->host;
2977 loff_t pos = ((loff_t) page->index << PAGE_SHIFT) + to;
2978 int ret = 0;
2979 int update_sd = 0;
2980 struct reiserfs_transaction_handle *th = NULL;
2981 int depth;
2982
2983 depth = reiserfs_write_unlock_nested(inode->i_sb);
2984 reiserfs_wait_on_write_block(inode->i_sb);
2985 reiserfs_write_lock_nested(inode->i_sb, depth);
2986
2987 if (reiserfs_transaction_running(inode->i_sb)) {
2988 th = current->journal_info;
2989 }
2990 reiserfs_commit_page(inode, page, from, to);
2991
2992
2993
2994
2995
2996
2997 if (pos > inode->i_size) {
2998 struct reiserfs_transaction_handle myth;
2999
3000
3001
3002
3003
3004 if ((have_large_tails(inode->i_sb)
3005 && inode->i_size > i_block_size(inode) * 4)
3006 || (have_small_tails(inode->i_sb)
3007 && inode->i_size > i_block_size(inode)))
3008 REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
3009
3010 ret = journal_begin(&myth, inode->i_sb, 1);
3011 if (ret)
3012 goto journal_error;
3013
3014 reiserfs_update_inode_transaction(inode);
3015 inode->i_size = pos;
3016
3017
3018
3019
3020
3021 mark_inode_dirty(inode);
3022 reiserfs_update_sd(&myth, inode);
3023 update_sd = 1;
3024 ret = journal_end(&myth);
3025 if (ret)
3026 goto journal_error;
3027 }
3028 if (th) {
3029 if (!update_sd)
3030 mark_inode_dirty(inode);
3031 ret = reiserfs_end_persistent_transaction(th);
3032 if (ret)
3033 goto out;
3034 }
3035
3036 out:
3037 return ret;
3038
3039 journal_error:
3040 if (th) {
3041 if (!update_sd)
3042 reiserfs_update_sd(th, inode);
3043 ret = reiserfs_end_persistent_transaction(th);
3044 }
3045
3046 return ret;
3047 }
3048
3049 void sd_attrs_to_i_attrs(__u16 sd_attrs, struct inode *inode)
3050 {
3051 if (reiserfs_attrs(inode->i_sb)) {
3052 if (sd_attrs & REISERFS_SYNC_FL)
3053 inode->i_flags |= S_SYNC;
3054 else
3055 inode->i_flags &= ~S_SYNC;
3056 if (sd_attrs & REISERFS_IMMUTABLE_FL)
3057 inode->i_flags |= S_IMMUTABLE;
3058 else
3059 inode->i_flags &= ~S_IMMUTABLE;
3060 if (sd_attrs & REISERFS_APPEND_FL)
3061 inode->i_flags |= S_APPEND;
3062 else
3063 inode->i_flags &= ~S_APPEND;
3064 if (sd_attrs & REISERFS_NOATIME_FL)
3065 inode->i_flags |= S_NOATIME;
3066 else
3067 inode->i_flags &= ~S_NOATIME;
3068 if (sd_attrs & REISERFS_NOTAIL_FL)
3069 REISERFS_I(inode)->i_flags |= i_nopack_mask;
3070 else
3071 REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
3072 }
3073 }
3074
3075
3076
3077
3078
3079 static int invalidate_folio_can_drop(struct inode *inode, struct buffer_head *bh)
3080 {
3081 int ret = 1;
3082 struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb);
3083
3084 lock_buffer(bh);
3085 spin_lock(&j->j_dirty_buffers_lock);
3086 if (!buffer_mapped(bh)) {
3087 goto free_jh;
3088 }
3089
3090
3091
3092
3093 if (reiserfs_file_data_log(inode)) {
3094
3095
3096
3097
3098 if (buffer_journaled(bh) || buffer_journal_dirty(bh)) {
3099 ret = 0;
3100 }
3101 } else if (buffer_dirty(bh)) {
3102 struct reiserfs_journal_list *jl;
3103 struct reiserfs_jh *jh = bh->b_private;
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119 if (jh && (jl = jh->jl)
3120 && jl != SB_JOURNAL(inode->i_sb)->j_current_jl)
3121 ret = 0;
3122 }
3123 free_jh:
3124 if (ret && bh->b_private) {
3125 reiserfs_free_jh(bh);
3126 }
3127 spin_unlock(&j->j_dirty_buffers_lock);
3128 unlock_buffer(bh);
3129 return ret;
3130 }
3131
3132
3133 static void reiserfs_invalidate_folio(struct folio *folio, size_t offset,
3134 size_t length)
3135 {
3136 struct buffer_head *head, *bh, *next;
3137 struct inode *inode = folio->mapping->host;
3138 unsigned int curr_off = 0;
3139 unsigned int stop = offset + length;
3140 int partial_page = (offset || length < folio_size(folio));
3141 int ret = 1;
3142
3143 BUG_ON(!folio_test_locked(folio));
3144
3145 if (!partial_page)
3146 folio_clear_checked(folio);
3147
3148 head = folio_buffers(folio);
3149 if (!head)
3150 goto out;
3151
3152 bh = head;
3153 do {
3154 unsigned int next_off = curr_off + bh->b_size;
3155 next = bh->b_this_page;
3156
3157 if (next_off > stop)
3158 goto out;
3159
3160
3161
3162
3163 if (offset <= curr_off) {
3164 if (invalidate_folio_can_drop(inode, bh))
3165 reiserfs_unmap_buffer(bh);
3166 else
3167 ret = 0;
3168 }
3169 curr_off = next_off;
3170 bh = next;
3171 } while (bh != head);
3172
3173
3174
3175
3176
3177
3178 if (!partial_page && ret) {
3179 ret = filemap_release_folio(folio, 0);
3180
3181 }
3182 out:
3183 return;
3184 }
3185
3186 static bool reiserfs_dirty_folio(struct address_space *mapping,
3187 struct folio *folio)
3188 {
3189 if (reiserfs_file_data_log(mapping->host)) {
3190 folio_set_checked(folio);
3191 return filemap_dirty_folio(mapping, folio);
3192 }
3193 return block_dirty_folio(mapping, folio);
3194 }
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205 static bool reiserfs_release_folio(struct folio *folio, gfp_t unused_gfp_flags)
3206 {
3207 struct inode *inode = folio->mapping->host;
3208 struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb);
3209 struct buffer_head *head;
3210 struct buffer_head *bh;
3211 bool ret = true;
3212
3213 WARN_ON(folio_test_checked(folio));
3214 spin_lock(&j->j_dirty_buffers_lock);
3215 head = folio_buffers(folio);
3216 bh = head;
3217 do {
3218 if (bh->b_private) {
3219 if (!buffer_dirty(bh) && !buffer_locked(bh)) {
3220 reiserfs_free_jh(bh);
3221 } else {
3222 ret = false;
3223 break;
3224 }
3225 }
3226 bh = bh->b_this_page;
3227 } while (bh != head);
3228 if (ret)
3229 ret = try_to_free_buffers(folio);
3230 spin_unlock(&j->j_dirty_buffers_lock);
3231 return ret;
3232 }
3233
3234
3235
3236
3237
3238 static ssize_t reiserfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
3239 {
3240 struct file *file = iocb->ki_filp;
3241 struct inode *inode = file->f_mapping->host;
3242 size_t count = iov_iter_count(iter);
3243 ssize_t ret;
3244
3245 ret = blockdev_direct_IO(iocb, inode, iter,
3246 reiserfs_get_blocks_direct_io);
3247
3248
3249
3250
3251
3252 if (unlikely(iov_iter_rw(iter) == WRITE && ret < 0)) {
3253 loff_t isize = i_size_read(inode);
3254 loff_t end = iocb->ki_pos + count;
3255
3256 if ((end > isize) && inode_newsize_ok(inode, isize) == 0) {
3257 truncate_setsize(inode, isize);
3258 reiserfs_vfs_truncate_file(inode);
3259 }
3260 }
3261
3262 return ret;
3263 }
3264
3265 int reiserfs_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
3266 struct iattr *attr)
3267 {
3268 struct inode *inode = d_inode(dentry);
3269 unsigned int ia_valid;
3270 int error;
3271
3272 error = setattr_prepare(&init_user_ns, dentry, attr);
3273 if (error)
3274 return error;
3275
3276
3277 ia_valid = attr->ia_valid &= ~(ATTR_KILL_SUID|ATTR_KILL_SGID);
3278
3279 if (is_quota_modification(mnt_userns, inode, attr)) {
3280 error = dquot_initialize(inode);
3281 if (error)
3282 return error;
3283 }
3284 reiserfs_write_lock(inode->i_sb);
3285 if (attr->ia_valid & ATTR_SIZE) {
3286
3287
3288
3289
3290 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 &&
3291 attr->ia_size > MAX_NON_LFS) {
3292 reiserfs_write_unlock(inode->i_sb);
3293 error = -EFBIG;
3294 goto out;
3295 }
3296
3297 inode_dio_wait(inode);
3298
3299
3300 if (attr->ia_size > inode->i_size) {
3301 loff_t pos = attr->ia_size;
3302
3303 if ((pos & (inode->i_sb->s_blocksize - 1)) == 0)
3304 pos++;
3305 error = generic_cont_expand_simple(inode, pos);
3306 if (REISERFS_I(inode)->i_prealloc_count > 0) {
3307 int err;
3308 struct reiserfs_transaction_handle th;
3309
3310 err = journal_begin(&th, inode->i_sb, 4);
3311 if (!err) {
3312 reiserfs_discard_prealloc(&th, inode);
3313 err = journal_end(&th);
3314 }
3315 if (err)
3316 error = err;
3317 }
3318 if (error) {
3319 reiserfs_write_unlock(inode->i_sb);
3320 goto out;
3321 }
3322
3323
3324
3325
3326 attr->ia_valid |= (ATTR_MTIME | ATTR_CTIME);
3327 }
3328 }
3329 reiserfs_write_unlock(inode->i_sb);
3330
3331 if ((((attr->ia_valid & ATTR_UID) && (from_kuid(&init_user_ns, attr->ia_uid) & ~0xffff)) ||
3332 ((attr->ia_valid & ATTR_GID) && (from_kgid(&init_user_ns, attr->ia_gid) & ~0xffff))) &&
3333 (get_inode_sd_version(inode) == STAT_DATA_V1)) {
3334
3335 error = -EINVAL;
3336 goto out;
3337 }
3338
3339 if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
3340 (ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) {
3341 struct reiserfs_transaction_handle th;
3342 int jbegin_count =
3343 2 *
3344 (REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb) +
3345 REISERFS_QUOTA_DEL_BLOCKS(inode->i_sb)) +
3346 2;
3347
3348 error = reiserfs_chown_xattrs(inode, attr);
3349
3350 if (error)
3351 return error;
3352
3353
3354
3355
3356
3357 reiserfs_write_lock(inode->i_sb);
3358 error = journal_begin(&th, inode->i_sb, jbegin_count);
3359 reiserfs_write_unlock(inode->i_sb);
3360 if (error)
3361 goto out;
3362 error = dquot_transfer(mnt_userns, inode, attr);
3363 reiserfs_write_lock(inode->i_sb);
3364 if (error) {
3365 journal_end(&th);
3366 reiserfs_write_unlock(inode->i_sb);
3367 goto out;
3368 }
3369
3370
3371
3372
3373
3374 if (attr->ia_valid & ATTR_UID)
3375 inode->i_uid = attr->ia_uid;
3376 if (attr->ia_valid & ATTR_GID)
3377 inode->i_gid = attr->ia_gid;
3378 mark_inode_dirty(inode);
3379 error = journal_end(&th);
3380 reiserfs_write_unlock(inode->i_sb);
3381 if (error)
3382 goto out;
3383 }
3384
3385 if ((attr->ia_valid & ATTR_SIZE) &&
3386 attr->ia_size != i_size_read(inode)) {
3387 error = inode_newsize_ok(inode, attr->ia_size);
3388 if (!error) {
3389
3390
3391
3392
3393 mutex_lock(&REISERFS_I(inode)->tailpack);
3394 truncate_setsize(inode, attr->ia_size);
3395 reiserfs_truncate_file(inode, 1);
3396 mutex_unlock(&REISERFS_I(inode)->tailpack);
3397 }
3398 }
3399
3400 if (!error) {
3401 setattr_copy(&init_user_ns, inode, attr);
3402 mark_inode_dirty(inode);
3403 }
3404
3405 if (!error && reiserfs_posixacl(inode->i_sb)) {
3406 if (attr->ia_valid & ATTR_MODE)
3407 error = reiserfs_acl_chmod(inode);
3408 }
3409
3410 out:
3411 return error;
3412 }
3413
3414 const struct address_space_operations reiserfs_address_space_operations = {
3415 .writepage = reiserfs_writepage,
3416 .read_folio = reiserfs_read_folio,
3417 .readahead = reiserfs_readahead,
3418 .release_folio = reiserfs_release_folio,
3419 .invalidate_folio = reiserfs_invalidate_folio,
3420 .write_begin = reiserfs_write_begin,
3421 .write_end = reiserfs_write_end,
3422 .bmap = reiserfs_aop_bmap,
3423 .direct_IO = reiserfs_direct_IO,
3424 .dirty_folio = reiserfs_dirty_folio,
3425 };