This source file includes following definitions.
- reiserfs_evict_inode
- _make_cpu_key
- make_cpu_key
- make_le_item_head
- fix_tail_page_for_writing
- allocation_needed
- indirect_item_found
- set_block_dev_mapped
- file_capable
- restart_transaction
- _get_block_create_0
- reiserfs_bmap
- reiserfs_get_block_create_0
- reiserfs_get_blocks_direct_io
- convert_tail_for_hole
- _allocate_block
- reiserfs_get_block
- reiserfs_readpages
- real_space_diff
- to_real_used_space
- to_fake_used_blocks
- init_inode
- inode2sd
- inode2sd_v1
- update_stat_data
- reiserfs_update_sd_size
- reiserfs_make_bad_inode
- reiserfs_init_locked_inode
- reiserfs_read_locked_inode
- reiserfs_find_actor
- reiserfs_iget
- reiserfs_get_dentry
- reiserfs_fh_to_dentry
- reiserfs_fh_to_parent
- reiserfs_encode_fh
- reiserfs_write_inode
- reiserfs_new_directory
- reiserfs_new_symlink
- reiserfs_new_inode
- grab_tail_page
- reiserfs_truncate_file
- map_block_for_writepage
- reiserfs_write_full_page
- reiserfs_readpage
- reiserfs_writepage
- reiserfs_truncate_failed_write
- reiserfs_write_begin
- __reiserfs_write_begin
- reiserfs_aop_bmap
- reiserfs_write_end
- reiserfs_commit_write
- sd_attrs_to_i_attrs
- invalidatepage_can_drop
- reiserfs_invalidatepage
- reiserfs_set_page_dirty
- reiserfs_releasepage
- reiserfs_direct_IO
- reiserfs_setattr
   1 
   2 
   3 
   4 
   5 #include <linux/time.h>
   6 #include <linux/fs.h>
   7 #include "reiserfs.h"
   8 #include "acl.h"
   9 #include "xattr.h"
  10 #include <linux/exportfs.h>
  11 #include <linux/pagemap.h>
  12 #include <linux/highmem.h>
  13 #include <linux/slab.h>
  14 #include <linux/uaccess.h>
  15 #include <asm/unaligned.h>
  16 #include <linux/buffer_head.h>
  17 #include <linux/mpage.h>
  18 #include <linux/writeback.h>
  19 #include <linux/quotaops.h>
  20 #include <linux/swap.h>
  21 #include <linux/uio.h>
  22 #include <linux/bio.h>
  23 
  24 int reiserfs_commit_write(struct file *f, struct page *page,
  25                           unsigned from, unsigned to);
  26 
  27 void reiserfs_evict_inode(struct inode *inode)
  28 {
  29         
  30 
  31 
  32 
  33         int jbegin_count =
  34             JOURNAL_PER_BALANCE_CNT * 2 +
  35             2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb);
  36         struct reiserfs_transaction_handle th;
  37         int err;
  38 
  39         if (!inode->i_nlink && !is_bad_inode(inode))
  40                 dquot_initialize(inode);
  41 
  42         truncate_inode_pages_final(&inode->i_data);
  43         if (inode->i_nlink)
  44                 goto no_delete;
  45 
  46         
  47 
  48 
  49 
  50 
  51         if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) {
  52 
  53                 reiserfs_delete_xattrs(inode);
  54 
  55                 reiserfs_write_lock(inode->i_sb);
  56 
  57                 if (journal_begin(&th, inode->i_sb, jbegin_count))
  58                         goto out;
  59                 reiserfs_update_inode_transaction(inode);
  60 
  61                 reiserfs_discard_prealloc(&th, inode);
  62 
  63                 err = reiserfs_delete_object(&th, inode);
  64 
  65                 
  66 
  67 
  68 
  69 
  70                 if (!err) {
  71                         int depth = reiserfs_write_unlock_nested(inode->i_sb);
  72                         dquot_free_inode(inode);
  73                         reiserfs_write_lock_nested(inode->i_sb, depth);
  74                 }
  75 
  76                 if (journal_end(&th))
  77                         goto out;
  78 
  79                 
  80 
  81 
  82 
  83                 if (err)
  84                     goto out;
  85 
  86                 
  87 
  88 
  89 
  90 
  91                 remove_save_link(inode, 0 );
  92 out:
  93                 reiserfs_write_unlock(inode->i_sb);
  94         } else {
  95                 
  96                 ;
  97         }
  98 
  99         
 100         clear_inode(inode);
 101 
 102         dquot_drop(inode);
 103         inode->i_blocks = 0;
 104         return;
 105 
 106 no_delete:
 107         clear_inode(inode);
 108         dquot_drop(inode);
 109 }
 110 
 111 static void _make_cpu_key(struct cpu_key *key, int version, __u32 dirid,
 112                           __u32 objectid, loff_t offset, int type, int length)
 113 {
 114         key->version = version;
 115 
 116         key->on_disk_key.k_dir_id = dirid;
 117         key->on_disk_key.k_objectid = objectid;
 118         set_cpu_key_k_offset(key, offset);
 119         set_cpu_key_k_type(key, type);
 120         key->key_length = length;
 121 }
 122 
 123 
 124 
 125 
 126 
 127 void make_cpu_key(struct cpu_key *key, struct inode *inode, loff_t offset,
 128                   int type, int length)
 129 {
 130         _make_cpu_key(key, get_inode_item_key_version(inode),
 131                       le32_to_cpu(INODE_PKEY(inode)->k_dir_id),
 132                       le32_to_cpu(INODE_PKEY(inode)->k_objectid), offset, type,
 133                       length);
 134 }
 135 
 136 
 137 inline void make_le_item_head(struct item_head *ih, const struct cpu_key *key,
 138                               int version,
 139                               loff_t offset, int type, int length,
 140                               int entry_count  )
 141 {
 142         if (key) {
 143                 ih->ih_key.k_dir_id = cpu_to_le32(key->on_disk_key.k_dir_id);
 144                 ih->ih_key.k_objectid =
 145                     cpu_to_le32(key->on_disk_key.k_objectid);
 146         }
 147         put_ih_version(ih, version);
 148         set_le_ih_k_offset(ih, offset);
 149         set_le_ih_k_type(ih, type);
 150         put_ih_item_len(ih, length);
 151         
 152         
 153 
 154 
 155 
 156         put_ih_entry_count(ih, entry_count);
 157 }
 158 
 159 
 160 
 161 
 162 
 163 
 164 
 165 
 166 
 167 
 168 
 169 
 170 
 171 
 172 
 173 
 174 
 175 
 176 
 177 
 178 
 179 
 180 
 181 
 182 
 183 
 184 
 185 
 186 
 187 
 188 
 189 
 190 
 191 
 192 
 193 static inline void fix_tail_page_for_writing(struct page *page)
 194 {
 195         struct buffer_head *head, *next, *bh;
 196 
 197         if (page && page_has_buffers(page)) {
 198                 head = page_buffers(page);
 199                 bh = head;
 200                 do {
 201                         next = bh->b_this_page;
 202                         if (buffer_mapped(bh) && bh->b_blocknr == 0) {
 203                                 reiserfs_unmap_buffer(bh);
 204                         }
 205                         bh = next;
 206                 } while (bh != head);
 207         }
 208 }
 209 
 210 
 211 
 212 
 213 
 214 static inline int allocation_needed(int retval, b_blocknr_t allocated,
 215                                     struct item_head *ih,
 216                                     __le32 * item, int pos_in_item)
 217 {
 218         if (allocated)
 219                 return 0;
 220         if (retval == POSITION_FOUND && is_indirect_le_ih(ih) &&
 221             get_block_num(item, pos_in_item))
 222                 return 0;
 223         return 1;
 224 }
 225 
 226 static inline int indirect_item_found(int retval, struct item_head *ih)
 227 {
 228         return (retval == POSITION_FOUND) && is_indirect_le_ih(ih);
 229 }
 230 
 231 static inline void set_block_dev_mapped(struct buffer_head *bh,
 232                                         b_blocknr_t block, struct inode *inode)
 233 {
 234         map_bh(bh, inode->i_sb, block);
 235 }
 236 
 237 
 238 
 239 
 240 
 241 static int file_capable(struct inode *inode, sector_t block)
 242 {
 243         
 244         if (get_inode_item_key_version(inode) != KEY_FORMAT_3_5 ||
 245             
 246             block < (1 << (31 - inode->i_sb->s_blocksize_bits)))
 247                 return 1;
 248 
 249         return 0;
 250 }
 251 
 252 static int restart_transaction(struct reiserfs_transaction_handle *th,
 253                                struct inode *inode, struct treepath *path)
 254 {
 255         struct super_block *s = th->t_super;
 256         int err;
 257 
 258         BUG_ON(!th->t_trans_id);
 259         BUG_ON(!th->t_refcount);
 260 
 261         pathrelse(path);
 262 
 263         
 264         if (th->t_refcount > 1) {
 265                 return 0;
 266         }
 267         reiserfs_update_sd(th, inode);
 268         err = journal_end(th);
 269         if (!err) {
 270                 err = journal_begin(th, s, JOURNAL_PER_BALANCE_CNT * 6);
 271                 if (!err)
 272                         reiserfs_update_inode_transaction(inode);
 273         }
 274         return err;
 275 }
 276 
 277 
 278 
 279 
 280 
 281 
 282 
 283 
 284 
 285 static int _get_block_create_0(struct inode *inode, sector_t block,
 286                                struct buffer_head *bh_result, int args)
 287 {
 288         INITIALIZE_PATH(path);
 289         struct cpu_key key;
 290         struct buffer_head *bh;
 291         struct item_head *ih, tmp_ih;
 292         b_blocknr_t blocknr;
 293         char *p = NULL;
 294         int chars;
 295         int ret;
 296         int result;
 297         int done = 0;
 298         unsigned long offset;
 299 
 300         
 301         make_cpu_key(&key, inode,
 302                      (loff_t) block * inode->i_sb->s_blocksize + 1, TYPE_ANY,
 303                      3);
 304 
 305         result = search_for_position_by_key(inode->i_sb, &key, &path);
 306         if (result != POSITION_FOUND) {
 307                 pathrelse(&path);
 308                 if (p)
 309                         kunmap(bh_result->b_page);
 310                 if (result == IO_ERROR)
 311                         return -EIO;
 312                 
 313 
 314 
 315 
 316 
 317                 if ((args & GET_BLOCK_NO_HOLE)
 318                     && !PageUptodate(bh_result->b_page)) {
 319                         return -ENOENT;
 320                 }
 321                 return 0;
 322         }
 323 
 324         bh = get_last_bh(&path);
 325         ih = tp_item_head(&path);
 326         if (is_indirect_le_ih(ih)) {
 327                 __le32 *ind_item = (__le32 *) ih_item_body(bh, ih);
 328 
 329                 
 330 
 331 
 332 
 333 
 334                 blocknr = get_block_num(ind_item, path.pos_in_item);
 335                 ret = 0;
 336                 if (blocknr) {
 337                         map_bh(bh_result, inode->i_sb, blocknr);
 338                         if (path.pos_in_item ==
 339                             ((ih_item_len(ih) / UNFM_P_SIZE) - 1)) {
 340                                 set_buffer_boundary(bh_result);
 341                         }
 342                 } else
 343                         
 344 
 345 
 346 
 347 
 348 
 349                 if ((args & GET_BLOCK_NO_HOLE)
 350                             && !PageUptodate(bh_result->b_page)) {
 351                         ret = -ENOENT;
 352                 }
 353 
 354                 pathrelse(&path);
 355                 if (p)
 356                         kunmap(bh_result->b_page);
 357                 return ret;
 358         }
 359         
 360         if (!(args & GET_BLOCK_READ_DIRECT)) {
 361                 
 362 
 363 
 364 
 365                 pathrelse(&path);
 366                 if (p)
 367                         kunmap(bh_result->b_page);
 368                 return -ENOENT;
 369         }
 370 
 371         
 372 
 373 
 374 
 375 
 376         if (buffer_uptodate(bh_result)) {
 377                 goto finished;
 378         } else
 379                 
 380 
 381 
 382 
 383 
 384 
 385         if (!bh_result->b_page || PageUptodate(bh_result->b_page)) {
 386                 set_buffer_uptodate(bh_result);
 387                 goto finished;
 388         }
 389         
 390         offset = (cpu_key_k_offset(&key) - 1) & (PAGE_SIZE - 1);
 391         copy_item_head(&tmp_ih, ih);
 392 
 393         
 394 
 395 
 396 
 397 
 398 
 399         if (!p)
 400                 p = (char *)kmap(bh_result->b_page);
 401 
 402         p += offset;
 403         memset(p, 0, inode->i_sb->s_blocksize);
 404         do {
 405                 if (!is_direct_le_ih(ih)) {
 406                         BUG();
 407                 }
 408                 
 409 
 410 
 411 
 412 
 413 
 414                 if ((le_ih_k_offset(ih) + path.pos_in_item) > inode->i_size)
 415                         break;
 416                 if ((le_ih_k_offset(ih) - 1 + ih_item_len(ih)) > inode->i_size) {
 417                         chars =
 418                             inode->i_size - (le_ih_k_offset(ih) - 1) -
 419                             path.pos_in_item;
 420                         done = 1;
 421                 } else {
 422                         chars = ih_item_len(ih) - path.pos_in_item;
 423                 }
 424                 memcpy(p, ih_item_body(bh, ih) + path.pos_in_item, chars);
 425 
 426                 if (done)
 427                         break;
 428 
 429                 p += chars;
 430 
 431                 
 432 
 433 
 434 
 435 
 436 
 437                 if (PATH_LAST_POSITION(&path) != (B_NR_ITEMS(bh) - 1))
 438                         break;
 439 
 440                 
 441                 set_cpu_key_k_offset(&key, cpu_key_k_offset(&key) + chars);
 442                 result = search_for_position_by_key(inode->i_sb, &key, &path);
 443                 if (result != POSITION_FOUND)
 444                         
 445                         break;
 446                 bh = get_last_bh(&path);
 447                 ih = tp_item_head(&path);
 448         } while (1);
 449 
 450         flush_dcache_page(bh_result->b_page);
 451         kunmap(bh_result->b_page);
 452 
 453 finished:
 454         pathrelse(&path);
 455 
 456         if (result == IO_ERROR)
 457                 return -EIO;
 458 
 459         
 460 
 461 
 462 
 463         map_bh(bh_result, inode->i_sb, 0);
 464         set_buffer_uptodate(bh_result);
 465         return 0;
 466 }
 467 
 468 
 469 
 470 
 471 
 472 static int reiserfs_bmap(struct inode *inode, sector_t block,
 473                          struct buffer_head *bh_result, int create)
 474 {
 475         if (!file_capable(inode, block))
 476                 return -EFBIG;
 477 
 478         reiserfs_write_lock(inode->i_sb);
 479         
 480         _get_block_create_0(inode, block, bh_result, 0);
 481         reiserfs_write_unlock(inode->i_sb);
 482         return 0;
 483 }
 484 
 485 
 486 
 487 
 488 
 489 
 490 
 491 
 492 
 493 
 494 
 495 
 496 
 497 
 498 
 499 
 500 
 501 
 502 
 503 static int reiserfs_get_block_create_0(struct inode *inode, sector_t block,
 504                                        struct buffer_head *bh_result,
 505                                        int create)
 506 {
 507         return reiserfs_get_block(inode, block, bh_result, GET_BLOCK_NO_HOLE);
 508 }
 509 
 510 
 511 
 512 
 513 
 514 static int reiserfs_get_blocks_direct_io(struct inode *inode,
 515                                          sector_t iblock,
 516                                          struct buffer_head *bh_result,
 517                                          int create)
 518 {
 519         int ret;
 520 
 521         bh_result->b_page = NULL;
 522 
 523         
 524 
 525 
 526 
 527 
 528         bh_result->b_size = i_blocksize(inode);
 529 
 530         ret = reiserfs_get_block(inode, iblock, bh_result,
 531                                  create | GET_BLOCK_NO_DANGLE);
 532         if (ret)
 533                 goto out;
 534 
 535         
 536         if (buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
 537                 
 538 
 539 
 540 
 541                 clear_buffer_mapped(bh_result);
 542                 ret = -EINVAL;
 543         }
 544 
 545         
 546 
 547 
 548 
 549         if (REISERFS_I(inode)->i_flags & i_pack_on_close_mask) {
 550                 int err;
 551 
 552                 reiserfs_write_lock(inode->i_sb);
 553 
 554                 err = reiserfs_commit_for_inode(inode);
 555                 REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
 556 
 557                 reiserfs_write_unlock(inode->i_sb);
 558 
 559                 if (err < 0)
 560                         ret = err;
 561         }
 562 out:
 563         return ret;
 564 }
 565 
 566 
 567 
 568 
 569 
 570 
 571 
 572 
 573 
 574 
 575 
 576 static int convert_tail_for_hole(struct inode *inode,
 577                                  struct buffer_head *bh_result,
 578                                  loff_t tail_offset)
 579 {
 580         unsigned long index;
 581         unsigned long tail_end;
 582         unsigned long tail_start;
 583         struct page *tail_page;
 584         struct page *hole_page = bh_result->b_page;
 585         int retval = 0;
 586 
 587         if ((tail_offset & (bh_result->b_size - 1)) != 1)
 588                 return -EIO;
 589 
 590         
 591         tail_start = tail_offset & (PAGE_SIZE - 1);
 592         tail_end = (tail_start | (bh_result->b_size - 1)) + 1;
 593 
 594         index = tail_offset >> PAGE_SHIFT;
 595         
 596 
 597 
 598 
 599         if (!hole_page || index != hole_page->index) {
 600                 tail_page = grab_cache_page(inode->i_mapping, index);
 601                 retval = -ENOMEM;
 602                 if (!tail_page) {
 603                         goto out;
 604                 }
 605         } else {
 606                 tail_page = hole_page;
 607         }
 608 
 609         
 610 
 611 
 612 
 613 
 614 
 615 
 616 
 617 
 618 
 619         fix_tail_page_for_writing(tail_page);
 620         retval = __reiserfs_write_begin(tail_page, tail_start,
 621                                       tail_end - tail_start);
 622         if (retval)
 623                 goto unlock;
 624 
 625         
 626         flush_dcache_page(tail_page);
 627 
 628         retval = reiserfs_commit_write(NULL, tail_page, tail_start, tail_end);
 629 
 630 unlock:
 631         if (tail_page != hole_page) {
 632                 unlock_page(tail_page);
 633                 put_page(tail_page);
 634         }
 635 out:
 636         return retval;
 637 }
 638 
 639 static inline int _allocate_block(struct reiserfs_transaction_handle *th,
 640                                   sector_t block,
 641                                   struct inode *inode,
 642                                   b_blocknr_t * allocated_block_nr,
 643                                   struct treepath *path, int flags)
 644 {
 645         BUG_ON(!th->t_trans_id);
 646 
 647 #ifdef REISERFS_PREALLOCATE
 648         if (!(flags & GET_BLOCK_NO_IMUX)) {
 649                 return reiserfs_new_unf_blocknrs2(th, inode, allocated_block_nr,
 650                                                   path, block);
 651         }
 652 #endif
 653         return reiserfs_new_unf_blocknrs(th, inode, allocated_block_nr, path,
 654                                          block);
 655 }
 656 
 657 int reiserfs_get_block(struct inode *inode, sector_t block,
 658                        struct buffer_head *bh_result, int create)
 659 {
 660         int repeat, retval = 0;
 661         
 662         b_blocknr_t allocated_block_nr = 0;
 663         INITIALIZE_PATH(path);
 664         int pos_in_item;
 665         struct cpu_key key;
 666         struct buffer_head *bh, *unbh = NULL;
 667         struct item_head *ih, tmp_ih;
 668         __le32 *item;
 669         int done;
 670         int fs_gen;
 671         struct reiserfs_transaction_handle *th = NULL;
 672         
 673 
 674 
 675 
 676 
 677 
 678 
 679 
 680         int jbegin_count =
 681             JOURNAL_PER_BALANCE_CNT * 3 + 1 +
 682             2 * REISERFS_QUOTA_TRANS_BLOCKS(inode->i_sb);
 683         int version;
 684         int dangle = 1;
 685         loff_t new_offset =
 686             (((loff_t) block) << inode->i_sb->s_blocksize_bits) + 1;
 687 
 688         reiserfs_write_lock(inode->i_sb);
 689         version = get_inode_item_key_version(inode);
 690 
 691         if (!file_capable(inode, block)) {
 692                 reiserfs_write_unlock(inode->i_sb);
 693                 return -EFBIG;
 694         }
 695 
 696         
 697 
 698 
 699 
 700         if (!(create & GET_BLOCK_CREATE)) {
 701                 int ret;
 702                 
 703                 ret = _get_block_create_0(inode, block, bh_result,
 704                                           create | GET_BLOCK_READ_DIRECT);
 705                 reiserfs_write_unlock(inode->i_sb);
 706                 return ret;
 707         }
 708 
 709         
 710 
 711 
 712 
 713         if ((create & GET_BLOCK_NO_DANGLE) ||
 714             reiserfs_transaction_running(inode->i_sb))
 715                 dangle = 0;
 716 
 717         
 718 
 719 
 720 
 721 
 722         if ((have_large_tails(inode->i_sb)
 723              && inode->i_size < i_block_size(inode) * 4)
 724             || (have_small_tails(inode->i_sb)
 725                 && inode->i_size < i_block_size(inode)))
 726                 REISERFS_I(inode)->i_flags |= i_pack_on_close_mask;
 727 
 728         
 729         make_cpu_key(&key, inode, new_offset, TYPE_ANY, 3  );
 730         if ((new_offset + inode->i_sb->s_blocksize - 1) > inode->i_size) {
 731 start_trans:
 732                 th = reiserfs_persistent_transaction(inode->i_sb, jbegin_count);
 733                 if (!th) {
 734                         retval = -ENOMEM;
 735                         goto failure;
 736                 }
 737                 reiserfs_update_inode_transaction(inode);
 738         }
 739 research:
 740 
 741         retval = search_for_position_by_key(inode->i_sb, &key, &path);
 742         if (retval == IO_ERROR) {
 743                 retval = -EIO;
 744                 goto failure;
 745         }
 746 
 747         bh = get_last_bh(&path);
 748         ih = tp_item_head(&path);
 749         item = tp_item_body(&path);
 750         pos_in_item = path.pos_in_item;
 751 
 752         fs_gen = get_generation(inode->i_sb);
 753         copy_item_head(&tmp_ih, ih);
 754 
 755         if (allocation_needed
 756             (retval, allocated_block_nr, ih, item, pos_in_item)) {
 757                 
 758                 if (!th) {
 759                         pathrelse(&path);
 760                         goto start_trans;
 761                 }
 762 
 763                 repeat =
 764                     _allocate_block(th, block, inode, &allocated_block_nr,
 765                                     &path, create);
 766 
 767                 
 768 
 769 
 770 
 771 
 772                 if (repeat == NO_DISK_SPACE || repeat == QUOTA_EXCEEDED) {
 773                         SB_JOURNAL(inode->i_sb)->j_next_async_flush = 1;
 774                         retval = restart_transaction(th, inode, &path);
 775                         if (retval)
 776                                 goto failure;
 777                         repeat =
 778                             _allocate_block(th, block, inode,
 779                                             &allocated_block_nr, NULL, create);
 780 
 781                         if (repeat != NO_DISK_SPACE && repeat != QUOTA_EXCEEDED) {
 782                                 goto research;
 783                         }
 784                         if (repeat == QUOTA_EXCEEDED)
 785                                 retval = -EDQUOT;
 786                         else
 787                                 retval = -ENOSPC;
 788                         goto failure;
 789                 }
 790 
 791                 if (fs_changed(fs_gen, inode->i_sb)
 792                     && item_moved(&tmp_ih, &path)) {
 793                         goto research;
 794                 }
 795         }
 796 
 797         if (indirect_item_found(retval, ih)) {
 798                 b_blocknr_t unfm_ptr;
 799                 
 800 
 801 
 802 
 803 
 804                 unfm_ptr = get_block_num(item, pos_in_item);
 805                 if (unfm_ptr == 0) {
 806                         
 807                         reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
 808                         if (fs_changed(fs_gen, inode->i_sb)
 809                             && item_moved(&tmp_ih, &path)) {
 810                                 reiserfs_restore_prepared_buffer(inode->i_sb,
 811                                                                  bh);
 812                                 goto research;
 813                         }
 814                         set_buffer_new(bh_result);
 815                         if (buffer_dirty(bh_result)
 816                             && reiserfs_data_ordered(inode->i_sb))
 817                                 reiserfs_add_ordered_list(inode, bh_result);
 818                         put_block_num(item, pos_in_item, allocated_block_nr);
 819                         unfm_ptr = allocated_block_nr;
 820                         journal_mark_dirty(th, bh);
 821                         reiserfs_update_sd(th, inode);
 822                 }
 823                 set_block_dev_mapped(bh_result, unfm_ptr, inode);
 824                 pathrelse(&path);
 825                 retval = 0;
 826                 if (!dangle && th)
 827                         retval = reiserfs_end_persistent_transaction(th);
 828 
 829                 reiserfs_write_unlock(inode->i_sb);
 830 
 831                 
 832 
 833 
 834 
 835 
 836                 return retval;
 837         }
 838 
 839         if (!th) {
 840                 pathrelse(&path);
 841                 goto start_trans;
 842         }
 843 
 844         
 845 
 846 
 847 
 848 
 849         done = 0;
 850         do {
 851                 if (is_statdata_le_ih(ih)) {
 852                         __le32 unp = 0;
 853                         struct cpu_key tmp_key;
 854 
 855                         
 856                         make_le_item_head(&tmp_ih, &key, version, 1,
 857                                           TYPE_INDIRECT, UNFM_P_SIZE,
 858                                           0  );
 859 
 860                         
 861 
 862 
 863 
 864                         if (cpu_key_k_offset(&key) == 1) {
 865                                 unp = cpu_to_le32(allocated_block_nr);
 866                                 set_block_dev_mapped(bh_result,
 867                                                      allocated_block_nr, inode);
 868                                 set_buffer_new(bh_result);
 869                                 done = 1;
 870                         }
 871                         tmp_key = key;  
 872                         set_cpu_key_k_offset(&tmp_key, 1);
 873                         PATH_LAST_POSITION(&path)++;
 874 
 875                         retval =
 876                             reiserfs_insert_item(th, &path, &tmp_key, &tmp_ih,
 877                                                  inode, (char *)&unp);
 878                         if (retval) {
 879                                 reiserfs_free_block(th, inode,
 880                                                     allocated_block_nr, 1);
 881                                 
 882 
 883 
 884 
 885                                 goto failure;
 886                         }
 887                 } else if (is_direct_le_ih(ih)) {
 888                         
 889                         loff_t tail_offset;
 890 
 891                         tail_offset =
 892                             ((le_ih_k_offset(ih) -
 893                               1) & ~(inode->i_sb->s_blocksize - 1)) + 1;
 894 
 895                         
 896 
 897 
 898 
 899 
 900                         if (tail_offset == cpu_key_k_offset(&key)) {
 901                                 set_block_dev_mapped(bh_result,
 902                                                      allocated_block_nr, inode);
 903                                 unbh = bh_result;
 904                                 done = 1;
 905                         } else {
 906                                 
 907 
 908 
 909 
 910 
 911 
 912 
 913                                 pathrelse(&path);
 914                                 
 915 
 916 
 917 
 918                                 BUG_ON(!th->t_refcount);
 919                                 if (th->t_refcount == 1) {
 920                                         retval =
 921                                             reiserfs_end_persistent_transaction
 922                                             (th);
 923                                         th = NULL;
 924                                         if (retval)
 925                                                 goto failure;
 926                                 }
 927 
 928                                 retval =
 929                                     convert_tail_for_hole(inode, bh_result,
 930                                                           tail_offset);
 931                                 if (retval) {
 932                                         if (retval != -ENOSPC)
 933                                                 reiserfs_error(inode->i_sb,
 934                                                         "clm-6004",
 935                                                         "convert tail failed "
 936                                                         "inode %lu, error %d",
 937                                                         inode->i_ino,
 938                                                         retval);
 939                                         if (allocated_block_nr) {
 940                                                 
 941 
 942 
 943 
 944                                                 if (!th)
 945                                                         th = reiserfs_persistent_transaction(inode->i_sb, 3);
 946                                                 if (th)
 947                                                         reiserfs_free_block(th,
 948                                                                             inode,
 949                                                                             allocated_block_nr,
 950                                                                             1);
 951                                         }
 952                                         goto failure;
 953                                 }
 954                                 goto research;
 955                         }
 956                         retval =
 957                             direct2indirect(th, inode, &path, unbh,
 958                                             tail_offset);
 959                         if (retval) {
 960                                 reiserfs_unmap_buffer(unbh);
 961                                 reiserfs_free_block(th, inode,
 962                                                     allocated_block_nr, 1);
 963                                 goto failure;
 964                         }
 965                         
 966 
 967 
 968 
 969 
 970 
 971 
 972 
 973 
 974 
 975                         set_buffer_uptodate(unbh);
 976 
 977                         
 978 
 979 
 980 
 981 
 982                         if (unbh->b_page) {
 983                                 
 984 
 985 
 986 
 987                                 reiserfs_add_tail_list(inode, unbh);
 988 
 989                                 
 990 
 991 
 992 
 993 
 994                                 
 995 
 996 
 997 
 998 
 999 
1000 
1001 
1002                                 mark_buffer_dirty(unbh);
1003                         }
1004                 } else {
1005                         
1006 
1007 
1008 
1009 
1010                         struct cpu_key tmp_key;
1011                         
1012 
1013 
1014 
1015                         unp_t unf_single = 0;
1016                         unp_t *un;
1017                         __u64 max_to_insert =
1018                             MAX_ITEM_LEN(inode->i_sb->s_blocksize) /
1019                             UNFM_P_SIZE;
1020                         __u64 blocks_needed;
1021 
1022                         RFALSE(pos_in_item != ih_item_len(ih) / UNFM_P_SIZE,
1023                                "vs-804: invalid position for append");
1024                         
1025 
1026 
1027 
1028 
1029                         make_cpu_key(&tmp_key, inode,
1030                                      le_key_k_offset(version,
1031                                                      &ih->ih_key) +
1032                                      op_bytes_number(ih,
1033                                                      inode->i_sb->s_blocksize),
1034                                      TYPE_INDIRECT, 3);
1035 
1036                         RFALSE(cpu_key_k_offset(&tmp_key) > cpu_key_k_offset(&key),
1037                                "green-805: invalid offset");
1038                         blocks_needed =
1039                             1 +
1040                             ((cpu_key_k_offset(&key) -
1041                               cpu_key_k_offset(&tmp_key)) >> inode->i_sb->
1042                              s_blocksize_bits);
1043 
1044                         if (blocks_needed == 1) {
1045                                 un = &unf_single;
1046                         } else {
1047                                 un = kcalloc(min(blocks_needed, max_to_insert),
1048                                              UNFM_P_SIZE, GFP_NOFS);
1049                                 if (!un) {
1050                                         un = &unf_single;
1051                                         blocks_needed = 1;
1052                                         max_to_insert = 0;
1053                                 }
1054                         }
1055                         if (blocks_needed <= max_to_insert) {
1056                                 
1057 
1058 
1059 
1060                                 un[blocks_needed - 1] =
1061                                     cpu_to_le32(allocated_block_nr);
1062                                 set_block_dev_mapped(bh_result,
1063                                                      allocated_block_nr, inode);
1064                                 set_buffer_new(bh_result);
1065                                 done = 1;
1066                         } else {
1067                                 
1068                                 
1069 
1070 
1071 
1072 
1073                                 blocks_needed =
1074                                     max_to_insert ? max_to_insert : 1;
1075                         }
1076                         retval =
1077                             reiserfs_paste_into_item(th, &path, &tmp_key, inode,
1078                                                      (char *)un,
1079                                                      UNFM_P_SIZE *
1080                                                      blocks_needed);
1081 
1082                         if (blocks_needed != 1)
1083                                 kfree(un);
1084 
1085                         if (retval) {
1086                                 reiserfs_free_block(th, inode,
1087                                                     allocated_block_nr, 1);
1088                                 goto failure;
1089                         }
1090                         if (!done) {
1091                                 
1092 
1093 
1094 
1095 
1096 
1097                                 inode->i_size +=
1098                                     inode->i_sb->s_blocksize * blocks_needed;
1099                         }
1100                 }
1101 
1102                 if (done == 1)
1103                         break;
1104 
1105                 
1106 
1107 
1108 
1109 
1110 
1111 
1112 
1113                 if (journal_transaction_should_end(th, th->t_blocks_allocated)) {
1114                         retval = restart_transaction(th, inode, &path);
1115                         if (retval)
1116                                 goto failure;
1117                 }
1118                 
1119 
1120 
1121 
1122 
1123                 reiserfs_cond_resched(inode->i_sb);
1124 
1125                 retval = search_for_position_by_key(inode->i_sb, &key, &path);
1126                 if (retval == IO_ERROR) {
1127                         retval = -EIO;
1128                         goto failure;
1129                 }
1130                 if (retval == POSITION_FOUND) {
1131                         reiserfs_warning(inode->i_sb, "vs-825",
1132                                          "%K should not be found", &key);
1133                         retval = -EEXIST;
1134                         if (allocated_block_nr)
1135                                 reiserfs_free_block(th, inode,
1136                                                     allocated_block_nr, 1);
1137                         pathrelse(&path);
1138                         goto failure;
1139                 }
1140                 bh = get_last_bh(&path);
1141                 ih = tp_item_head(&path);
1142                 item = tp_item_body(&path);
1143                 pos_in_item = path.pos_in_item;
1144         } while (1);
1145 
1146         retval = 0;
1147 
1148 failure:
1149         if (th && (!dangle || (retval && !th->t_trans_id))) {
1150                 int err;
1151                 if (th->t_trans_id)
1152                         reiserfs_update_sd(th, inode);
1153                 err = reiserfs_end_persistent_transaction(th);
1154                 if (err)
1155                         retval = err;
1156         }
1157 
1158         reiserfs_write_unlock(inode->i_sb);
1159         reiserfs_check_path(&path);
1160         return retval;
1161 }
1162 
1163 static int
1164 reiserfs_readpages(struct file *file, struct address_space *mapping,
1165                    struct list_head *pages, unsigned nr_pages)
1166 {
1167         return mpage_readpages(mapping, pages, nr_pages, reiserfs_get_block);
1168 }
1169 
1170 
1171 
1172 
1173 
1174 
1175 static int real_space_diff(struct inode *inode, int sd_size)
1176 {
1177         int bytes;
1178         loff_t blocksize = inode->i_sb->s_blocksize;
1179 
1180         if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
1181                 return sd_size;
1182 
1183         
1184 
1185 
1186 
1187 
1188 
1189 
1190 
1191 
1192         bytes =
1193             ((inode->i_size +
1194               (blocksize - 1)) >> inode->i_sb->s_blocksize_bits) * UNFM_P_SIZE +
1195             sd_size;
1196         return bytes;
1197 }
1198 
1199 static inline loff_t to_real_used_space(struct inode *inode, ulong blocks,
1200                                         int sd_size)
1201 {
1202         if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
1203                 return inode->i_size +
1204                     (loff_t) (real_space_diff(inode, sd_size));
1205         }
1206         return ((loff_t) real_space_diff(inode, sd_size)) +
1207             (((loff_t) blocks) << 9);
1208 }
1209 
1210 
1211 static inline ulong to_fake_used_blocks(struct inode *inode, int sd_size)
1212 {
1213         loff_t bytes = inode_get_bytes(inode);
1214         loff_t real_space = real_space_diff(inode, sd_size);
1215 
1216         
1217         if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
1218                 bytes += (loff_t) 511;
1219         }
1220 
1221         
1222 
1223 
1224 
1225 
1226         if (bytes < real_space)
1227                 return 0;
1228         return (bytes - real_space) >> 9;
1229 }
1230 
1231 
1232 
1233 
1234 
1235 
1236 
1237 
1238 
1239 static void init_inode(struct inode *inode, struct treepath *path)
1240 {
1241         struct buffer_head *bh;
1242         struct item_head *ih;
1243         __u32 rdev;
1244 
1245         bh = PATH_PLAST_BUFFER(path);
1246         ih = tp_item_head(path);
1247 
1248         copy_key(INODE_PKEY(inode), &ih->ih_key);
1249 
1250         INIT_LIST_HEAD(&REISERFS_I(inode)->i_prealloc_list);
1251         REISERFS_I(inode)->i_flags = 0;
1252         REISERFS_I(inode)->i_prealloc_block = 0;
1253         REISERFS_I(inode)->i_prealloc_count = 0;
1254         REISERFS_I(inode)->i_trans_id = 0;
1255         REISERFS_I(inode)->i_jl = NULL;
1256         reiserfs_init_xattr_rwsem(inode);
1257 
1258         if (stat_data_v1(ih)) {
1259                 struct stat_data_v1 *sd =
1260                     (struct stat_data_v1 *)ih_item_body(bh, ih);
1261                 unsigned long blocks;
1262 
1263                 set_inode_item_key_version(inode, KEY_FORMAT_3_5);
1264                 set_inode_sd_version(inode, STAT_DATA_V1);
1265                 inode->i_mode = sd_v1_mode(sd);
1266                 set_nlink(inode, sd_v1_nlink(sd));
1267                 i_uid_write(inode, sd_v1_uid(sd));
1268                 i_gid_write(inode, sd_v1_gid(sd));
1269                 inode->i_size = sd_v1_size(sd);
1270                 inode->i_atime.tv_sec = sd_v1_atime(sd);
1271                 inode->i_mtime.tv_sec = sd_v1_mtime(sd);
1272                 inode->i_ctime.tv_sec = sd_v1_ctime(sd);
1273                 inode->i_atime.tv_nsec = 0;
1274                 inode->i_ctime.tv_nsec = 0;
1275                 inode->i_mtime.tv_nsec = 0;
1276 
1277                 inode->i_blocks = sd_v1_blocks(sd);
1278                 inode->i_generation = le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1279                 blocks = (inode->i_size + 511) >> 9;
1280                 blocks = _ROUND_UP(blocks, inode->i_sb->s_blocksize >> 9);
1281 
1282                 
1283 
1284 
1285 
1286 
1287 
1288 
1289 
1290                 if (inode->i_blocks > blocks) {
1291                         inode->i_blocks = blocks;
1292                 }
1293 
1294                 rdev = sd_v1_rdev(sd);
1295                 REISERFS_I(inode)->i_first_direct_byte =
1296                     sd_v1_first_direct_byte(sd);
1297 
1298                 
1299 
1300 
1301 
1302                 if (inode->i_blocks & 1) {
1303                         inode->i_blocks++;
1304                 }
1305                 inode_set_bytes(inode,
1306                                 to_real_used_space(inode, inode->i_blocks,
1307                                                    SD_V1_SIZE));
1308                 
1309 
1310 
1311 
1312                 REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
1313         } else {
1314                 
1315 
1316 
1317 
1318                 struct stat_data *sd = (struct stat_data *)ih_item_body(bh, ih);
1319 
1320                 inode->i_mode = sd_v2_mode(sd);
1321                 set_nlink(inode, sd_v2_nlink(sd));
1322                 i_uid_write(inode, sd_v2_uid(sd));
1323                 inode->i_size = sd_v2_size(sd);
1324                 i_gid_write(inode, sd_v2_gid(sd));
1325                 inode->i_mtime.tv_sec = sd_v2_mtime(sd);
1326                 inode->i_atime.tv_sec = sd_v2_atime(sd);
1327                 inode->i_ctime.tv_sec = sd_v2_ctime(sd);
1328                 inode->i_ctime.tv_nsec = 0;
1329                 inode->i_mtime.tv_nsec = 0;
1330                 inode->i_atime.tv_nsec = 0;
1331                 inode->i_blocks = sd_v2_blocks(sd);
1332                 rdev = sd_v2_rdev(sd);
1333                 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1334                         inode->i_generation =
1335                             le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1336                 else
1337                         inode->i_generation = sd_v2_generation(sd);
1338 
1339                 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
1340                         set_inode_item_key_version(inode, KEY_FORMAT_3_5);
1341                 else
1342                         set_inode_item_key_version(inode, KEY_FORMAT_3_6);
1343                 REISERFS_I(inode)->i_first_direct_byte = 0;
1344                 set_inode_sd_version(inode, STAT_DATA_V2);
1345                 inode_set_bytes(inode,
1346                                 to_real_used_space(inode, inode->i_blocks,
1347                                                    SD_V2_SIZE));
1348                 
1349 
1350 
1351 
1352                 REISERFS_I(inode)->i_attrs = sd_v2_attrs(sd);
1353                 sd_attrs_to_i_attrs(sd_v2_attrs(sd), inode);
1354         }
1355 
1356         pathrelse(path);
1357         if (S_ISREG(inode->i_mode)) {
1358                 inode->i_op = &reiserfs_file_inode_operations;
1359                 inode->i_fop = &reiserfs_file_operations;
1360                 inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1361         } else if (S_ISDIR(inode->i_mode)) {
1362                 inode->i_op = &reiserfs_dir_inode_operations;
1363                 inode->i_fop = &reiserfs_dir_operations;
1364         } else if (S_ISLNK(inode->i_mode)) {
1365                 inode->i_op = &reiserfs_symlink_inode_operations;
1366                 inode_nohighmem(inode);
1367                 inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1368         } else {
1369                 inode->i_blocks = 0;
1370                 inode->i_op = &reiserfs_special_inode_operations;
1371                 init_special_inode(inode, inode->i_mode, new_decode_dev(rdev));
1372         }
1373 }
1374 
1375 
1376 static void inode2sd(void *sd, struct inode *inode, loff_t size)
1377 {
1378         struct stat_data *sd_v2 = (struct stat_data *)sd;
1379 
1380         set_sd_v2_mode(sd_v2, inode->i_mode);
1381         set_sd_v2_nlink(sd_v2, inode->i_nlink);
1382         set_sd_v2_uid(sd_v2, i_uid_read(inode));
1383         set_sd_v2_size(sd_v2, size);
1384         set_sd_v2_gid(sd_v2, i_gid_read(inode));
1385         set_sd_v2_mtime(sd_v2, inode->i_mtime.tv_sec);
1386         set_sd_v2_atime(sd_v2, inode->i_atime.tv_sec);
1387         set_sd_v2_ctime(sd_v2, inode->i_ctime.tv_sec);
1388         set_sd_v2_blocks(sd_v2, to_fake_used_blocks(inode, SD_V2_SIZE));
1389         if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1390                 set_sd_v2_rdev(sd_v2, new_encode_dev(inode->i_rdev));
1391         else
1392                 set_sd_v2_generation(sd_v2, inode->i_generation);
1393         set_sd_v2_attrs(sd_v2, REISERFS_I(inode)->i_attrs);
1394 }
1395 
1396 
1397 static void inode2sd_v1(void *sd, struct inode *inode, loff_t size)
1398 {
1399         struct stat_data_v1 *sd_v1 = (struct stat_data_v1 *)sd;
1400 
1401         set_sd_v1_mode(sd_v1, inode->i_mode);
1402         set_sd_v1_uid(sd_v1, i_uid_read(inode));
1403         set_sd_v1_gid(sd_v1, i_gid_read(inode));
1404         set_sd_v1_nlink(sd_v1, inode->i_nlink);
1405         set_sd_v1_size(sd_v1, size);
1406         set_sd_v1_atime(sd_v1, inode->i_atime.tv_sec);
1407         set_sd_v1_ctime(sd_v1, inode->i_ctime.tv_sec);
1408         set_sd_v1_mtime(sd_v1, inode->i_mtime.tv_sec);
1409 
1410         if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1411                 set_sd_v1_rdev(sd_v1, new_encode_dev(inode->i_rdev));
1412         else
1413                 set_sd_v1_blocks(sd_v1, to_fake_used_blocks(inode, SD_V1_SIZE));
1414 
1415         
1416         set_sd_v1_first_direct_byte(sd_v1,
1417                                     REISERFS_I(inode)->i_first_direct_byte);
1418 }
1419 
1420 
1421 
1422 
1423 
1424 static void update_stat_data(struct treepath *path, struct inode *inode,
1425                              loff_t size)
1426 {
1427         struct buffer_head *bh;
1428         struct item_head *ih;
1429 
1430         bh = PATH_PLAST_BUFFER(path);
1431         ih = tp_item_head(path);
1432 
1433         if (!is_statdata_le_ih(ih))
1434                 reiserfs_panic(inode->i_sb, "vs-13065", "key %k, found item %h",
1435                                INODE_PKEY(inode), ih);
1436 
1437         
1438         if (stat_data_v1(ih)) {
1439                 inode2sd_v1(ih_item_body(bh, ih), inode, size);
1440         } else {
1441                 inode2sd(ih_item_body(bh, ih), inode, size);
1442         }
1443 
1444         return;
1445 }
1446 
1447 void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th,
1448                              struct inode *inode, loff_t size)
1449 {
1450         struct cpu_key key;
1451         INITIALIZE_PATH(path);
1452         struct buffer_head *bh;
1453         int fs_gen;
1454         struct item_head *ih, tmp_ih;
1455         int retval;
1456 
1457         BUG_ON(!th->t_trans_id);
1458 
1459         
1460         make_cpu_key(&key, inode, SD_OFFSET, TYPE_STAT_DATA, 3);
1461 
1462         for (;;) {
1463                 int pos;
1464                 
1465                 retval = search_item(inode->i_sb, &key, &path);
1466                 if (retval == IO_ERROR) {
1467                         reiserfs_error(inode->i_sb, "vs-13050",
1468                                        "i/o failure occurred trying to "
1469                                        "update %K stat data", &key);
1470                         return;
1471                 }
1472                 if (retval == ITEM_NOT_FOUND) {
1473                         pos = PATH_LAST_POSITION(&path);
1474                         pathrelse(&path);
1475                         if (inode->i_nlink == 0) {
1476                                 
1477                                 return;
1478                         }
1479                         reiserfs_warning(inode->i_sb, "vs-13060",
1480                                          "stat data of object %k (nlink == %d) "
1481                                          "not found (pos %d)",
1482                                          INODE_PKEY(inode), inode->i_nlink,
1483                                          pos);
1484                         reiserfs_check_path(&path);
1485                         return;
1486                 }
1487 
1488                 
1489 
1490 
1491 
1492 
1493                 bh = get_last_bh(&path);
1494                 ih = tp_item_head(&path);
1495                 copy_item_head(&tmp_ih, ih);
1496                 fs_gen = get_generation(inode->i_sb);
1497                 reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
1498 
1499                 
1500                 if (fs_changed(fs_gen, inode->i_sb)
1501                     && item_moved(&tmp_ih, &path)) {
1502                         reiserfs_restore_prepared_buffer(inode->i_sb, bh);
1503                         continue;
1504                 }
1505                 break;
1506         }
1507         update_stat_data(&path, inode, size);
1508         journal_mark_dirty(th, bh);
1509         pathrelse(&path);
1510         return;
1511 }
1512 
1513 
1514 
1515 
1516 
1517 
1518 
1519 
1520 static void reiserfs_make_bad_inode(struct inode *inode)
1521 {
1522         memset(INODE_PKEY(inode), 0, KEY_SIZE);
1523         make_bad_inode(inode);
1524 }
1525 
1526 
1527 
1528 
1529 
1530 int reiserfs_init_locked_inode(struct inode *inode, void *p)
1531 {
1532         struct reiserfs_iget_args *args = (struct reiserfs_iget_args *)p;
1533         inode->i_ino = args->objectid;
1534         INODE_PKEY(inode)->k_dir_id = cpu_to_le32(args->dirid);
1535         return 0;
1536 }
1537 
1538 
1539 
1540 
1541 
1542 void reiserfs_read_locked_inode(struct inode *inode,
1543                                 struct reiserfs_iget_args *args)
1544 {
1545         INITIALIZE_PATH(path_to_sd);
1546         struct cpu_key key;
1547         unsigned long dirino;
1548         int retval;
1549 
1550         dirino = args->dirid;
1551 
1552         
1553 
1554 
1555 
1556         key.version = KEY_FORMAT_3_5;
1557         key.on_disk_key.k_dir_id = dirino;
1558         key.on_disk_key.k_objectid = inode->i_ino;
1559         key.on_disk_key.k_offset = 0;
1560         key.on_disk_key.k_type = 0;
1561 
1562         
1563         retval = search_item(inode->i_sb, &key, &path_to_sd);
1564         if (retval == IO_ERROR) {
1565                 reiserfs_error(inode->i_sb, "vs-13070",
1566                                "i/o failure occurred trying to find "
1567                                "stat data of %K", &key);
1568                 reiserfs_make_bad_inode(inode);
1569                 return;
1570         }
1571 
1572         
1573         if (retval != ITEM_FOUND) {
1574                 pathrelse(&path_to_sd);
1575                 reiserfs_make_bad_inode(inode);
1576                 clear_nlink(inode);
1577                 return;
1578         }
1579 
1580         init_inode(inode, &path_to_sd);
1581 
1582         
1583 
1584 
1585 
1586 
1587 
1588 
1589 
1590 
1591 
1592 
1593 
1594 
1595 
1596         
1597 
1598 
1599 
1600 
1601         if ((inode->i_nlink == 0) &&
1602             !REISERFS_SB(inode->i_sb)->s_is_unlinked_ok) {
1603                 reiserfs_warning(inode->i_sb, "vs-13075",
1604                                  "dead inode read from disk %K. "
1605                                  "This is likely to be race with knfsd. Ignore",
1606                                  &key);
1607                 reiserfs_make_bad_inode(inode);
1608         }
1609 
1610         
1611         reiserfs_check_path(&path_to_sd);
1612 
1613         
1614 
1615 
1616         if (get_inode_sd_version(inode) == STAT_DATA_V1)
1617                 cache_no_acl(inode);
1618 }
1619 
1620 
1621 
1622 
1623 
1624 
1625 
1626 
1627 
1628 
1629 
1630 
1631 
1632 int reiserfs_find_actor(struct inode *inode, void *opaque)
1633 {
1634         struct reiserfs_iget_args *args;
1635 
1636         args = opaque;
1637         
1638         return (inode->i_ino == args->objectid) &&
1639             (le32_to_cpu(INODE_PKEY(inode)->k_dir_id) == args->dirid);
1640 }
1641 
1642 struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key)
1643 {
1644         struct inode *inode;
1645         struct reiserfs_iget_args args;
1646         int depth;
1647 
1648         args.objectid = key->on_disk_key.k_objectid;
1649         args.dirid = key->on_disk_key.k_dir_id;
1650         depth = reiserfs_write_unlock_nested(s);
1651         inode = iget5_locked(s, key->on_disk_key.k_objectid,
1652                              reiserfs_find_actor, reiserfs_init_locked_inode,
1653                              (void *)(&args));
1654         reiserfs_write_lock_nested(s, depth);
1655         if (!inode)
1656                 return ERR_PTR(-ENOMEM);
1657 
1658         if (inode->i_state & I_NEW) {
1659                 reiserfs_read_locked_inode(inode, &args);
1660                 unlock_new_inode(inode);
1661         }
1662 
1663         if (comp_short_keys(INODE_PKEY(inode), key) || is_bad_inode(inode)) {
1664                 
1665                 iput(inode);
1666                 inode = NULL;
1667         }
1668         return inode;
1669 }
1670 
1671 static struct dentry *reiserfs_get_dentry(struct super_block *sb,
1672         u32 objectid, u32 dir_id, u32 generation)
1673 
1674 {
1675         struct cpu_key key;
1676         struct inode *inode;
1677 
1678         key.on_disk_key.k_objectid = objectid;
1679         key.on_disk_key.k_dir_id = dir_id;
1680         reiserfs_write_lock(sb);
1681         inode = reiserfs_iget(sb, &key);
1682         if (inode && !IS_ERR(inode) && generation != 0 &&
1683             generation != inode->i_generation) {
1684                 iput(inode);
1685                 inode = NULL;
1686         }
1687         reiserfs_write_unlock(sb);
1688 
1689         return d_obtain_alias(inode);
1690 }
1691 
1692 struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
1693                 int fh_len, int fh_type)
1694 {
1695         
1696 
1697 
1698 
1699 
1700 
1701 
1702 
1703 
1704 
1705 
1706 
1707 
1708         if (fh_type > fh_len) {
1709                 if (fh_type != 6 || fh_len != 5)
1710                         reiserfs_warning(sb, "reiserfs-13077",
1711                                 "nfsd/reiserfs, fhtype=%d, len=%d - odd",
1712                                 fh_type, fh_len);
1713                 fh_type = fh_len;
1714         }
1715         if (fh_len < 2)
1716                 return NULL;
1717 
1718         return reiserfs_get_dentry(sb, fid->raw[0], fid->raw[1],
1719                 (fh_type == 3 || fh_type >= 5) ? fid->raw[2] : 0);
1720 }
1721 
1722 struct dentry *reiserfs_fh_to_parent(struct super_block *sb, struct fid *fid,
1723                 int fh_len, int fh_type)
1724 {
1725         if (fh_type > fh_len)
1726                 fh_type = fh_len;
1727         if (fh_type < 4)
1728                 return NULL;
1729 
1730         return reiserfs_get_dentry(sb,
1731                 (fh_type >= 5) ? fid->raw[3] : fid->raw[2],
1732                 (fh_type >= 5) ? fid->raw[4] : fid->raw[3],
1733                 (fh_type == 6) ? fid->raw[5] : 0);
1734 }
1735 
1736 int reiserfs_encode_fh(struct inode *inode, __u32 * data, int *lenp,
1737                        struct inode *parent)
1738 {
1739         int maxlen = *lenp;
1740 
1741         if (parent && (maxlen < 5)) {
1742                 *lenp = 5;
1743                 return FILEID_INVALID;
1744         } else if (maxlen < 3) {
1745                 *lenp = 3;
1746                 return FILEID_INVALID;
1747         }
1748 
1749         data[0] = inode->i_ino;
1750         data[1] = le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1751         data[2] = inode->i_generation;
1752         *lenp = 3;
1753         if (parent) {
1754                 data[3] = parent->i_ino;
1755                 data[4] = le32_to_cpu(INODE_PKEY(parent)->k_dir_id);
1756                 *lenp = 5;
1757                 if (maxlen >= 6) {
1758                         data[5] = parent->i_generation;
1759                         *lenp = 6;
1760                 }
1761         }
1762         return *lenp;
1763 }
1764 
1765 
1766 
1767 
1768 
1769 
1770 
1771 
1772 
1773 
1774 
1775 int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc)
1776 {
1777         struct reiserfs_transaction_handle th;
1778         int jbegin_count = 1;
1779 
1780         if (sb_rdonly(inode->i_sb))
1781                 return -EROFS;
1782         
1783 
1784 
1785 
1786 
1787 
1788 
1789         if (wbc->sync_mode == WB_SYNC_ALL && !(current->flags & PF_MEMALLOC)) {
1790                 reiserfs_write_lock(inode->i_sb);
1791                 if (!journal_begin(&th, inode->i_sb, jbegin_count)) {
1792                         reiserfs_update_sd(&th, inode);
1793                         journal_end_sync(&th);
1794                 }
1795                 reiserfs_write_unlock(inode->i_sb);
1796         }
1797         return 0;
1798 }
1799 
1800 
1801 
1802 
1803 
1804 static int reiserfs_new_directory(struct reiserfs_transaction_handle *th,
1805                                   struct inode *inode,
1806                                   struct item_head *ih, struct treepath *path,
1807                                   struct inode *dir)
1808 {
1809         struct super_block *sb = th->t_super;
1810         char empty_dir[EMPTY_DIR_SIZE];
1811         char *body = empty_dir;
1812         struct cpu_key key;
1813         int retval;
1814 
1815         BUG_ON(!th->t_trans_id);
1816 
1817         _make_cpu_key(&key, KEY_FORMAT_3_5, le32_to_cpu(ih->ih_key.k_dir_id),
1818                       le32_to_cpu(ih->ih_key.k_objectid), DOT_OFFSET,
1819                       TYPE_DIRENTRY, 3  );
1820 
1821         
1822 
1823 
1824 
1825 
1826         if (old_format_only(sb)) {
1827                 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET,
1828                                   TYPE_DIRENTRY, EMPTY_DIR_SIZE_V1, 2);
1829 
1830                 make_empty_dir_item_v1(body, ih->ih_key.k_dir_id,
1831                                        ih->ih_key.k_objectid,
1832                                        INODE_PKEY(dir)->k_dir_id,
1833                                        INODE_PKEY(dir)->k_objectid);
1834         } else {
1835                 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET,
1836                                   TYPE_DIRENTRY, EMPTY_DIR_SIZE, 2);
1837 
1838                 make_empty_dir_item(body, ih->ih_key.k_dir_id,
1839                                     ih->ih_key.k_objectid,
1840                                     INODE_PKEY(dir)->k_dir_id,
1841                                     INODE_PKEY(dir)->k_objectid);
1842         }
1843 
1844         
1845         retval = search_item(sb, &key, path);
1846         if (retval == IO_ERROR) {
1847                 reiserfs_error(sb, "vs-13080",
1848                                "i/o failure occurred creating new directory");
1849                 return -EIO;
1850         }
1851         if (retval == ITEM_FOUND) {
1852                 pathrelse(path);
1853                 reiserfs_warning(sb, "vs-13070",
1854                                  "object with this key exists (%k)",
1855                                  &(ih->ih_key));
1856                 return -EEXIST;
1857         }
1858 
1859         
1860         return reiserfs_insert_item(th, path, &key, ih, inode, body);
1861 }
1862 
1863 
1864 
1865 
1866 
1867 static int reiserfs_new_symlink(struct reiserfs_transaction_handle *th,
1868                                 struct inode *inode,
1869                                 struct item_head *ih,
1870                                 struct treepath *path, const char *symname,
1871                                 int item_len)
1872 {
1873         struct super_block *sb = th->t_super;
1874         struct cpu_key key;
1875         int retval;
1876 
1877         BUG_ON(!th->t_trans_id);
1878 
1879         _make_cpu_key(&key, KEY_FORMAT_3_5,
1880                       le32_to_cpu(ih->ih_key.k_dir_id),
1881                       le32_to_cpu(ih->ih_key.k_objectid),
1882                       1, TYPE_DIRECT, 3  );
1883 
1884         make_le_item_head(ih, NULL, KEY_FORMAT_3_5, 1, TYPE_DIRECT, item_len,
1885                           0  );
1886 
1887         
1888         retval = search_item(sb, &key, path);
1889         if (retval == IO_ERROR) {
1890                 reiserfs_error(sb, "vs-13080",
1891                                "i/o failure occurred creating new symlink");
1892                 return -EIO;
1893         }
1894         if (retval == ITEM_FOUND) {
1895                 pathrelse(path);
1896                 reiserfs_warning(sb, "vs-13080",
1897                                  "object with this key exists (%k)",
1898                                  &(ih->ih_key));
1899                 return -EEXIST;
1900         }
1901 
1902         
1903         return reiserfs_insert_item(th, path, &key, ih, inode, symname);
1904 }
1905 
1906 
1907 
1908 
1909 
1910 
1911 
1912 
1913 
1914 
1915 
1916 
1917 
1918 
1919 
1920 
1921 
1922 
1923 
1924 
1925 
1926 int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1927                        struct inode *dir, umode_t mode, const char *symname,
1928                        
1929 
1930                        loff_t i_size, struct dentry *dentry,
1931                        struct inode *inode,
1932                        struct reiserfs_security_handle *security)
1933 {
1934         struct super_block *sb = dir->i_sb;
1935         struct reiserfs_iget_args args;
1936         INITIALIZE_PATH(path_to_key);
1937         struct cpu_key key;
1938         struct item_head ih;
1939         struct stat_data sd;
1940         int retval;
1941         int err;
1942         int depth;
1943 
1944         BUG_ON(!th->t_trans_id);
1945 
1946         depth = reiserfs_write_unlock_nested(sb);
1947         err = dquot_alloc_inode(inode);
1948         reiserfs_write_lock_nested(sb, depth);
1949         if (err)
1950                 goto out_end_trans;
1951         if (!dir->i_nlink) {
1952                 err = -EPERM;
1953                 goto out_bad_inode;
1954         }
1955 
1956         
1957         ih.ih_key.k_dir_id = reiserfs_choose_packing(dir);
1958         ih.ih_key.k_objectid = cpu_to_le32(reiserfs_get_unused_objectid(th));
1959         if (!ih.ih_key.k_objectid) {
1960                 err = -ENOMEM;
1961                 goto out_bad_inode;
1962         }
1963         args.objectid = inode->i_ino = le32_to_cpu(ih.ih_key.k_objectid);
1964         if (old_format_only(sb))
1965                 make_le_item_head(&ih, NULL, KEY_FORMAT_3_5, SD_OFFSET,
1966                                   TYPE_STAT_DATA, SD_V1_SIZE, MAX_US_INT);
1967         else
1968                 make_le_item_head(&ih, NULL, KEY_FORMAT_3_6, SD_OFFSET,
1969                                   TYPE_STAT_DATA, SD_SIZE, MAX_US_INT);
1970         memcpy(INODE_PKEY(inode), &ih.ih_key, KEY_SIZE);
1971         args.dirid = le32_to_cpu(ih.ih_key.k_dir_id);
1972 
1973         depth = reiserfs_write_unlock_nested(inode->i_sb);
1974         err = insert_inode_locked4(inode, args.objectid,
1975                              reiserfs_find_actor, &args);
1976         reiserfs_write_lock_nested(inode->i_sb, depth);
1977         if (err) {
1978                 err = -EINVAL;
1979                 goto out_bad_inode;
1980         }
1981 
1982         if (old_format_only(sb))
1983                 
1984 
1985 
1986 
1987 
1988 
1989                 inode->i_generation = le32_to_cpu(INODE_PKEY(dir)->k_objectid);
1990         else
1991 #if defined( USE_INODE_GENERATION_COUNTER )
1992                 inode->i_generation =
1993                     le32_to_cpu(REISERFS_SB(sb)->s_rs->s_inode_generation);
1994 #else
1995                 inode->i_generation = ++event;
1996 #endif
1997 
1998         
1999         set_nlink(inode, (S_ISDIR(mode) ? 2 : 1));
2000 
2001         
2002 
2003         inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
2004         inode->i_size = i_size;
2005         inode->i_blocks = 0;
2006         inode->i_bytes = 0;
2007         REISERFS_I(inode)->i_first_direct_byte = S_ISLNK(mode) ? 1 :
2008             U32_MAX  ;
2009 
2010         INIT_LIST_HEAD(&REISERFS_I(inode)->i_prealloc_list);
2011         REISERFS_I(inode)->i_flags = 0;
2012         REISERFS_I(inode)->i_prealloc_block = 0;
2013         REISERFS_I(inode)->i_prealloc_count = 0;
2014         REISERFS_I(inode)->i_trans_id = 0;
2015         REISERFS_I(inode)->i_jl = NULL;
2016         REISERFS_I(inode)->i_attrs =
2017             REISERFS_I(dir)->i_attrs & REISERFS_INHERIT_MASK;
2018         sd_attrs_to_i_attrs(REISERFS_I(inode)->i_attrs, inode);
2019         reiserfs_init_xattr_rwsem(inode);
2020 
2021         
2022         _make_cpu_key(&key, KEY_FORMAT_3_6, le32_to_cpu(ih.ih_key.k_dir_id),
2023                       le32_to_cpu(ih.ih_key.k_objectid), SD_OFFSET,
2024                       TYPE_STAT_DATA, 3  );
2025 
2026         
2027         retval = search_item(sb, &key, &path_to_key);
2028         if (retval == IO_ERROR) {
2029                 err = -EIO;
2030                 goto out_bad_inode;
2031         }
2032         if (retval == ITEM_FOUND) {
2033                 pathrelse(&path_to_key);
2034                 err = -EEXIST;
2035                 goto out_bad_inode;
2036         }
2037         if (old_format_only(sb)) {
2038                 
2039                 if (i_uid_read(inode) & ~0xffff || i_gid_read(inode) & ~0xffff) {
2040                         pathrelse(&path_to_key);
2041                         err = -EINVAL;
2042                         goto out_bad_inode;
2043                 }
2044                 inode2sd_v1(&sd, inode, inode->i_size);
2045         } else {
2046                 inode2sd(&sd, inode, inode->i_size);
2047         }
2048         
2049 
2050 
2051 
2052 
2053         if (old_format_only(sb) || S_ISDIR(mode) || S_ISLNK(mode))
2054                 set_inode_item_key_version(inode, KEY_FORMAT_3_5);
2055         else
2056                 set_inode_item_key_version(inode, KEY_FORMAT_3_6);
2057         if (old_format_only(sb))
2058                 set_inode_sd_version(inode, STAT_DATA_V1);
2059         else
2060                 set_inode_sd_version(inode, STAT_DATA_V2);
2061 
2062         
2063 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
2064         if (REISERFS_I(dir)->new_packing_locality)
2065                 th->displace_new_blocks = 1;
2066 #endif
2067         retval =
2068             reiserfs_insert_item(th, &path_to_key, &key, &ih, inode,
2069                                  (char *)(&sd));
2070         if (retval) {
2071                 err = retval;
2072                 reiserfs_check_path(&path_to_key);
2073                 goto out_bad_inode;
2074         }
2075 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
2076         if (!th->displace_new_blocks)
2077                 REISERFS_I(dir)->new_packing_locality = 0;
2078 #endif
2079         if (S_ISDIR(mode)) {
2080                 
2081                 retval =
2082                     reiserfs_new_directory(th, inode, &ih, &path_to_key, dir);
2083         }
2084 
2085         if (S_ISLNK(mode)) {
2086                 
2087                 if (!old_format_only(sb))
2088                         i_size = ROUND_UP(i_size);
2089                 retval =
2090                     reiserfs_new_symlink(th, inode, &ih, &path_to_key, symname,
2091                                          i_size);
2092         }
2093         if (retval) {
2094                 err = retval;
2095                 reiserfs_check_path(&path_to_key);
2096                 journal_end(th);
2097                 goto out_inserted_sd;
2098         }
2099 
2100         
2101 
2102 
2103 
2104         if (IS_PRIVATE(dir) || dentry == REISERFS_SB(sb)->priv_root) {
2105                 inode->i_flags |= S_PRIVATE;
2106                 inode->i_opflags &= ~IOP_XATTR;
2107         }
2108 
2109         if (reiserfs_posixacl(inode->i_sb)) {
2110                 reiserfs_write_unlock(inode->i_sb);
2111                 retval = reiserfs_inherit_default_acl(th, dir, dentry, inode);
2112                 reiserfs_write_lock(inode->i_sb);
2113                 if (retval) {
2114                         err = retval;
2115                         reiserfs_check_path(&path_to_key);
2116                         journal_end(th);
2117                         goto out_inserted_sd;
2118                 }
2119         } else if (inode->i_sb->s_flags & SB_POSIXACL) {
2120                 reiserfs_warning(inode->i_sb, "jdm-13090",
2121                                  "ACLs aren't enabled in the fs, "
2122                                  "but vfs thinks they are!");
2123         }
2124 
2125         if (security->name) {
2126                 reiserfs_write_unlock(inode->i_sb);
2127                 retval = reiserfs_security_write(th, inode, security);
2128                 reiserfs_write_lock(inode->i_sb);
2129                 if (retval) {
2130                         err = retval;
2131                         reiserfs_check_path(&path_to_key);
2132                         retval = journal_end(th);
2133                         if (retval)
2134                                 err = retval;
2135                         goto out_inserted_sd;
2136                 }
2137         }
2138 
2139         reiserfs_update_sd(th, inode);
2140         reiserfs_check_path(&path_to_key);
2141 
2142         return 0;
2143 
2144 out_bad_inode:
2145         
2146         INODE_PKEY(inode)->k_objectid = 0;
2147 
2148         
2149         depth = reiserfs_write_unlock_nested(inode->i_sb);
2150         dquot_free_inode(inode);
2151         reiserfs_write_lock_nested(inode->i_sb, depth);
2152 
2153 out_end_trans:
2154         journal_end(th);
2155         
2156 
2157 
2158 
2159         depth = reiserfs_write_unlock_nested(inode->i_sb);
2160         dquot_drop(inode);
2161         reiserfs_write_lock_nested(inode->i_sb, depth);
2162         inode->i_flags |= S_NOQUOTA;
2163         make_bad_inode(inode);
2164 
2165 out_inserted_sd:
2166         clear_nlink(inode);
2167         th->t_trans_id = 0;     
2168         unlock_new_inode(inode); 
2169         iput(inode);
2170         return err;
2171 }
2172 
2173 
2174 
2175 
2176 
2177 
2178 
2179 
2180 
2181 
2182 
2183 
2184 
2185 
2186 static int grab_tail_page(struct inode *inode,
2187                           struct page **page_result,
2188                           struct buffer_head **bh_result)
2189 {
2190 
2191         
2192 
2193 
2194 
2195         unsigned long index = (inode->i_size - 1) >> PAGE_SHIFT;
2196         unsigned long pos = 0;
2197         unsigned long start = 0;
2198         unsigned long blocksize = inode->i_sb->s_blocksize;
2199         unsigned long offset = (inode->i_size) & (PAGE_SIZE - 1);
2200         struct buffer_head *bh;
2201         struct buffer_head *head;
2202         struct page *page;
2203         int error;
2204 
2205         
2206 
2207 
2208 
2209 
2210 
2211         if ((offset & (blocksize - 1)) == 0) {
2212                 return -ENOENT;
2213         }
2214         page = grab_cache_page(inode->i_mapping, index);
2215         error = -ENOMEM;
2216         if (!page) {
2217                 goto out;
2218         }
2219         
2220         start = (offset / blocksize) * blocksize;
2221 
2222         error = __block_write_begin(page, start, offset - start,
2223                                     reiserfs_get_block_create_0);
2224         if (error)
2225                 goto unlock;
2226 
2227         head = page_buffers(page);
2228         bh = head;
2229         do {
2230                 if (pos >= start) {
2231                         break;
2232                 }
2233                 bh = bh->b_this_page;
2234                 pos += blocksize;
2235         } while (bh != head);
2236 
2237         if (!buffer_uptodate(bh)) {
2238                 
2239 
2240 
2241 
2242 
2243 
2244                 reiserfs_error(inode->i_sb, "clm-6000",
2245                                "error reading block %lu", bh->b_blocknr);
2246                 error = -EIO;
2247                 goto unlock;
2248         }
2249         *bh_result = bh;
2250         *page_result = page;
2251 
2252 out:
2253         return error;
2254 
2255 unlock:
2256         unlock_page(page);
2257         put_page(page);
2258         return error;
2259 }
2260 
2261 
2262 
2263 
2264 
2265 
2266 
2267 int reiserfs_truncate_file(struct inode *inode, int update_timestamps)
2268 {
2269         struct reiserfs_transaction_handle th;
2270         
2271         unsigned long offset = inode->i_size & (PAGE_SIZE - 1);
2272         unsigned blocksize = inode->i_sb->s_blocksize;
2273         unsigned length;
2274         struct page *page = NULL;
2275         int error;
2276         struct buffer_head *bh = NULL;
2277         int err2;
2278 
2279         reiserfs_write_lock(inode->i_sb);
2280 
2281         if (inode->i_size > 0) {
2282                 error = grab_tail_page(inode, &page, &bh);
2283                 if (error) {
2284                         
2285 
2286 
2287 
2288 
2289                         if (error != -ENOENT)
2290                                 reiserfs_error(inode->i_sb, "clm-6001",
2291                                                "grab_tail_page failed %d",
2292                                                error);
2293                         page = NULL;
2294                         bh = NULL;
2295                 }
2296         }
2297 
2298         
2299 
2300 
2301 
2302 
2303 
2304 
2305 
2306 
2307 
2308 
2309 
2310         error = journal_begin(&th, inode->i_sb,
2311                               JOURNAL_PER_BALANCE_CNT * 2 + 1);
2312         if (error)
2313                 goto out;
2314         reiserfs_update_inode_transaction(inode);
2315         if (update_timestamps)
2316                 
2317 
2318 
2319 
2320 
2321 
2322                 add_save_link(&th, inode, 1);
2323         err2 = reiserfs_do_truncate(&th, inode, page, update_timestamps);
2324         error = journal_end(&th);
2325         if (error)
2326                 goto out;
2327 
2328         
2329         if (err2) {
2330                 error = err2;
2331                 goto out;
2332         }
2333         
2334         if (update_timestamps) {
2335                 error = remove_save_link(inode, 1 );
2336                 if (error)
2337                         goto out;
2338         }
2339 
2340         if (page) {
2341                 length = offset & (blocksize - 1);
2342                 
2343                 if (length) {
2344                         length = blocksize - length;
2345                         zero_user(page, offset, length);
2346                         if (buffer_mapped(bh) && bh->b_blocknr != 0) {
2347                                 mark_buffer_dirty(bh);
2348                         }
2349                 }
2350                 unlock_page(page);
2351                 put_page(page);
2352         }
2353 
2354         reiserfs_write_unlock(inode->i_sb);
2355 
2356         return 0;
2357 out:
2358         if (page) {
2359                 unlock_page(page);
2360                 put_page(page);
2361         }
2362 
2363         reiserfs_write_unlock(inode->i_sb);
2364 
2365         return error;
2366 }
2367 
2368 static int map_block_for_writepage(struct inode *inode,
2369                                    struct buffer_head *bh_result,
2370                                    unsigned long block)
2371 {
2372         struct reiserfs_transaction_handle th;
2373         int fs_gen;
2374         struct item_head tmp_ih;
2375         struct item_head *ih;
2376         struct buffer_head *bh;
2377         __le32 *item;
2378         struct cpu_key key;
2379         INITIALIZE_PATH(path);
2380         int pos_in_item;
2381         int jbegin_count = JOURNAL_PER_BALANCE_CNT;
2382         loff_t byte_offset = ((loff_t)block << inode->i_sb->s_blocksize_bits)+1;
2383         int retval;
2384         int use_get_block = 0;
2385         int bytes_copied = 0;
2386         int copy_size;
2387         int trans_running = 0;
2388 
2389         
2390 
2391 
2392 
2393         th.t_trans_id = 0;
2394 
2395         if (!buffer_uptodate(bh_result)) {
2396                 return -EIO;
2397         }
2398 
2399         kmap(bh_result->b_page);
2400 start_over:
2401         reiserfs_write_lock(inode->i_sb);
2402         make_cpu_key(&key, inode, byte_offset, TYPE_ANY, 3);
2403 
2404 research:
2405         retval = search_for_position_by_key(inode->i_sb, &key, &path);
2406         if (retval != POSITION_FOUND) {
2407                 use_get_block = 1;
2408                 goto out;
2409         }
2410 
2411         bh = get_last_bh(&path);
2412         ih = tp_item_head(&path);
2413         item = tp_item_body(&path);
2414         pos_in_item = path.pos_in_item;
2415 
2416         
2417         if (indirect_item_found(retval, ih)) {
2418                 if (bytes_copied > 0) {
2419                         reiserfs_warning(inode->i_sb, "clm-6002",
2420                                          "bytes_copied %d", bytes_copied);
2421                 }
2422                 if (!get_block_num(item, pos_in_item)) {
2423                         
2424                         use_get_block = 1;
2425                         goto out;
2426                 }
2427                 set_block_dev_mapped(bh_result,
2428                                      get_block_num(item, pos_in_item), inode);
2429         } else if (is_direct_le_ih(ih)) {
2430                 char *p;
2431                 p = page_address(bh_result->b_page);
2432                 p += (byte_offset - 1) & (PAGE_SIZE - 1);
2433                 copy_size = ih_item_len(ih) - pos_in_item;
2434 
2435                 fs_gen = get_generation(inode->i_sb);
2436                 copy_item_head(&tmp_ih, ih);
2437 
2438                 if (!trans_running) {
2439                         
2440                         retval = journal_begin(&th, inode->i_sb, jbegin_count);
2441                         if (retval)
2442                                 goto out;
2443                         reiserfs_update_inode_transaction(inode);
2444                         trans_running = 1;
2445                         if (fs_changed(fs_gen, inode->i_sb)
2446                             && item_moved(&tmp_ih, &path)) {
2447                                 reiserfs_restore_prepared_buffer(inode->i_sb,
2448                                                                  bh);
2449                                 goto research;
2450                         }
2451                 }
2452 
2453                 reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
2454 
2455                 if (fs_changed(fs_gen, inode->i_sb)
2456                     && item_moved(&tmp_ih, &path)) {
2457                         reiserfs_restore_prepared_buffer(inode->i_sb, bh);
2458                         goto research;
2459                 }
2460 
2461                 memcpy(ih_item_body(bh, ih) + pos_in_item, p + bytes_copied,
2462                        copy_size);
2463 
2464                 journal_mark_dirty(&th, bh);
2465                 bytes_copied += copy_size;
2466                 set_block_dev_mapped(bh_result, 0, inode);
2467 
2468                 
2469                 if (bytes_copied < bh_result->b_size &&
2470                     (byte_offset + bytes_copied) < inode->i_size) {
2471                         set_cpu_key_k_offset(&key,
2472                                              cpu_key_k_offset(&key) +
2473                                              copy_size);
2474                         goto research;
2475                 }
2476         } else {
2477                 reiserfs_warning(inode->i_sb, "clm-6003",
2478                                  "bad item inode %lu", inode->i_ino);
2479                 retval = -EIO;
2480                 goto out;
2481         }
2482         retval = 0;
2483 
2484 out:
2485         pathrelse(&path);
2486         if (trans_running) {
2487                 int err = journal_end(&th);
2488                 if (err)
2489                         retval = err;
2490                 trans_running = 0;
2491         }
2492         reiserfs_write_unlock(inode->i_sb);
2493 
2494         
2495         if (use_get_block) {
2496                 retval = reiserfs_get_block(inode, block, bh_result,
2497                                             GET_BLOCK_CREATE | GET_BLOCK_NO_IMUX
2498                                             | GET_BLOCK_NO_DANGLE);
2499                 if (!retval) {
2500                         if (!buffer_mapped(bh_result)
2501                             || bh_result->b_blocknr == 0) {
2502                                 
2503                                 use_get_block = 0;
2504                                 goto start_over;
2505                         }
2506                 }
2507         }
2508         kunmap(bh_result->b_page);
2509 
2510         if (!retval && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
2511                 
2512 
2513 
2514 
2515                 lock_buffer(bh_result);
2516                 clear_buffer_dirty(bh_result);
2517                 unlock_buffer(bh_result);
2518         }
2519         return retval;
2520 }
2521 
2522 
2523 
2524 
2525 
2526 
2527 static int reiserfs_write_full_page(struct page *page,
2528                                     struct writeback_control *wbc)
2529 {
2530         struct inode *inode = page->mapping->host;
2531         unsigned long end_index = inode->i_size >> PAGE_SHIFT;
2532         int error = 0;
2533         unsigned long block;
2534         sector_t last_block;
2535         struct buffer_head *head, *bh;
2536         int partial = 0;
2537         int nr = 0;
2538         int checked = PageChecked(page);
2539         struct reiserfs_transaction_handle th;
2540         struct super_block *s = inode->i_sb;
2541         int bh_per_page = PAGE_SIZE / s->s_blocksize;
2542         th.t_trans_id = 0;
2543 
2544         
2545         if (checked && (current->flags & PF_MEMALLOC)) {
2546                 redirty_page_for_writepage(wbc, page);
2547                 unlock_page(page);
2548                 return 0;
2549         }
2550 
2551         
2552 
2553 
2554 
2555 
2556 
2557         if (!page_has_buffers(page)) {
2558                 create_empty_buffers(page, s->s_blocksize,
2559                                      (1 << BH_Dirty) | (1 << BH_Uptodate));
2560         }
2561         head = page_buffers(page);
2562 
2563         
2564 
2565 
2566 
2567         if (page->index >= end_index) {
2568                 unsigned last_offset;
2569 
2570                 last_offset = inode->i_size & (PAGE_SIZE - 1);
2571                 
2572                 if (page->index >= end_index + 1 || !last_offset) {
2573                         unlock_page(page);
2574                         return 0;
2575                 }
2576                 zero_user_segment(page, last_offset, PAGE_SIZE);
2577         }
2578         bh = head;
2579         block = page->index << (PAGE_SHIFT - s->s_blocksize_bits);
2580         last_block = (i_size_read(inode) - 1) >> inode->i_blkbits;
2581         
2582         do {
2583                 if (block > last_block) {
2584                         
2585 
2586 
2587 
2588 
2589                         clear_buffer_dirty(bh);
2590                         set_buffer_uptodate(bh);
2591                 } else if ((checked || buffer_dirty(bh)) &&
2592                            (!buffer_mapped(bh) || (buffer_mapped(bh)
2593                                                        && bh->b_blocknr ==
2594                                                        0))) {
2595                         
2596 
2597 
2598 
2599 
2600                         if ((error = map_block_for_writepage(inode, bh, block))) {
2601                                 goto fail;
2602                         }
2603                 }
2604                 bh = bh->b_this_page;
2605                 block++;
2606         } while (bh != head);
2607 
2608         
2609 
2610 
2611 
2612 
2613 
2614         if (checked) {
2615                 ClearPageChecked(page);
2616                 reiserfs_write_lock(s);
2617                 error = journal_begin(&th, s, bh_per_page + 1);
2618                 if (error) {
2619                         reiserfs_write_unlock(s);
2620                         goto fail;
2621                 }
2622                 reiserfs_update_inode_transaction(inode);
2623         }
2624         
2625         do {
2626                 get_bh(bh);
2627                 if (!buffer_mapped(bh))
2628                         continue;
2629                 if (buffer_mapped(bh) && bh->b_blocknr == 0)
2630                         continue;
2631 
2632                 if (checked) {
2633                         reiserfs_prepare_for_journal(s, bh, 1);
2634                         journal_mark_dirty(&th, bh);
2635                         continue;
2636                 }
2637                 
2638 
2639 
2640 
2641                 if (wbc->sync_mode != WB_SYNC_NONE) {
2642                         lock_buffer(bh);
2643                 } else {
2644                         if (!trylock_buffer(bh)) {
2645                                 redirty_page_for_writepage(wbc, page);
2646                                 continue;
2647                         }
2648                 }
2649                 if (test_clear_buffer_dirty(bh)) {
2650                         mark_buffer_async_write(bh);
2651                 } else {
2652                         unlock_buffer(bh);
2653                 }
2654         } while ((bh = bh->b_this_page) != head);
2655 
2656         if (checked) {
2657                 error = journal_end(&th);
2658                 reiserfs_write_unlock(s);
2659                 if (error)
2660                         goto fail;
2661         }
2662         BUG_ON(PageWriteback(page));
2663         set_page_writeback(page);
2664         unlock_page(page);
2665 
2666         
2667 
2668 
2669 
2670 
2671         do {
2672                 struct buffer_head *next = bh->b_this_page;
2673                 if (buffer_async_write(bh)) {
2674                         submit_bh(REQ_OP_WRITE, 0, bh);
2675                         nr++;
2676                 }
2677                 put_bh(bh);
2678                 bh = next;
2679         } while (bh != head);
2680 
2681         error = 0;
2682 done:
2683         if (nr == 0) {
2684                 
2685 
2686 
2687 
2688 
2689 
2690                 bh = head;
2691                 do {
2692                         if (!buffer_uptodate(bh)) {
2693                                 partial = 1;
2694                                 break;
2695                         }
2696                         bh = bh->b_this_page;
2697                 } while (bh != head);
2698                 if (!partial)
2699                         SetPageUptodate(page);
2700                 end_page_writeback(page);
2701         }
2702         return error;
2703 
2704 fail:
2705         
2706 
2707 
2708 
2709 
2710         ClearPageUptodate(page);
2711         bh = head;
2712         do {
2713                 get_bh(bh);
2714                 if (buffer_mapped(bh) && buffer_dirty(bh) && bh->b_blocknr) {
2715                         lock_buffer(bh);
2716                         mark_buffer_async_write(bh);
2717                 } else {
2718                         
2719 
2720 
2721 
2722                         clear_buffer_dirty(bh);
2723                 }
2724                 bh = bh->b_this_page;
2725         } while (bh != head);
2726         SetPageError(page);
2727         BUG_ON(PageWriteback(page));
2728         set_page_writeback(page);
2729         unlock_page(page);
2730         do {
2731                 struct buffer_head *next = bh->b_this_page;
2732                 if (buffer_async_write(bh)) {
2733                         clear_buffer_dirty(bh);
2734                         submit_bh(REQ_OP_WRITE, 0, bh);
2735                         nr++;
2736                 }
2737                 put_bh(bh);
2738                 bh = next;
2739         } while (bh != head);
2740         goto done;
2741 }
2742 
2743 static int reiserfs_readpage(struct file *f, struct page *page)
2744 {
2745         return block_read_full_page(page, reiserfs_get_block);
2746 }
2747 
2748 static int reiserfs_writepage(struct page *page, struct writeback_control *wbc)
2749 {
2750         struct inode *inode = page->mapping->host;
2751         reiserfs_wait_on_write_block(inode->i_sb);
2752         return reiserfs_write_full_page(page, wbc);
2753 }
2754 
2755 static void reiserfs_truncate_failed_write(struct inode *inode)
2756 {
2757         truncate_inode_pages(inode->i_mapping, inode->i_size);
2758         reiserfs_truncate_file(inode, 0);
2759 }
2760 
2761 static int reiserfs_write_begin(struct file *file,
2762                                 struct address_space *mapping,
2763                                 loff_t pos, unsigned len, unsigned flags,
2764                                 struct page **pagep, void **fsdata)
2765 {
2766         struct inode *inode;
2767         struct page *page;
2768         pgoff_t index;
2769         int ret;
2770         int old_ref = 0;
2771 
2772         inode = mapping->host;
2773         *fsdata = NULL;
2774         if (flags & AOP_FLAG_CONT_EXPAND &&
2775             (pos & (inode->i_sb->s_blocksize - 1)) == 0) {
2776                 pos ++;
2777                 *fsdata = (void *)(unsigned long)flags;
2778         }
2779 
2780         index = pos >> PAGE_SHIFT;
2781         page = grab_cache_page_write_begin(mapping, index, flags);
2782         if (!page)
2783                 return -ENOMEM;
2784         *pagep = page;
2785 
2786         reiserfs_wait_on_write_block(inode->i_sb);
2787         fix_tail_page_for_writing(page);
2788         if (reiserfs_transaction_running(inode->i_sb)) {
2789                 struct reiserfs_transaction_handle *th;
2790                 th = (struct reiserfs_transaction_handle *)current->
2791                     journal_info;
2792                 BUG_ON(!th->t_refcount);
2793                 BUG_ON(!th->t_trans_id);
2794                 old_ref = th->t_refcount;
2795                 th->t_refcount++;
2796         }
2797         ret = __block_write_begin(page, pos, len, reiserfs_get_block);
2798         if (ret && reiserfs_transaction_running(inode->i_sb)) {
2799                 struct reiserfs_transaction_handle *th = current->journal_info;
2800                 
2801 
2802 
2803 
2804 
2805 
2806 
2807 
2808 
2809 
2810 
2811 
2812 
2813                 if (th->t_refcount > old_ref) {
2814                         if (old_ref)
2815                                 th->t_refcount--;
2816                         else {
2817                                 int err;
2818                                 reiserfs_write_lock(inode->i_sb);
2819                                 err = reiserfs_end_persistent_transaction(th);
2820                                 reiserfs_write_unlock(inode->i_sb);
2821                                 if (err)
2822                                         ret = err;
2823                         }
2824                 }
2825         }
2826         if (ret) {
2827                 unlock_page(page);
2828                 put_page(page);
2829                 
2830                 reiserfs_truncate_failed_write(inode);
2831         }
2832         return ret;
2833 }
2834 
2835 int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len)
2836 {
2837         struct inode *inode = page->mapping->host;
2838         int ret;
2839         int old_ref = 0;
2840         int depth;
2841 
2842         depth = reiserfs_write_unlock_nested(inode->i_sb);
2843         reiserfs_wait_on_write_block(inode->i_sb);
2844         reiserfs_write_lock_nested(inode->i_sb, depth);
2845 
2846         fix_tail_page_for_writing(page);
2847         if (reiserfs_transaction_running(inode->i_sb)) {
2848                 struct reiserfs_transaction_handle *th;
2849                 th = (struct reiserfs_transaction_handle *)current->
2850                     journal_info;
2851                 BUG_ON(!th->t_refcount);
2852                 BUG_ON(!th->t_trans_id);
2853                 old_ref = th->t_refcount;
2854                 th->t_refcount++;
2855         }
2856 
2857         ret = __block_write_begin(page, from, len, reiserfs_get_block);
2858         if (ret && reiserfs_transaction_running(inode->i_sb)) {
2859                 struct reiserfs_transaction_handle *th = current->journal_info;
2860                 
2861 
2862 
2863 
2864 
2865 
2866 
2867 
2868 
2869 
2870 
2871 
2872 
2873                 if (th->t_refcount > old_ref) {
2874                         if (old_ref)
2875                                 th->t_refcount--;
2876                         else {
2877                                 int err;
2878                                 reiserfs_write_lock(inode->i_sb);
2879                                 err = reiserfs_end_persistent_transaction(th);
2880                                 reiserfs_write_unlock(inode->i_sb);
2881                                 if (err)
2882                                         ret = err;
2883                         }
2884                 }
2885         }
2886         return ret;
2887 
2888 }
2889 
2890 static sector_t reiserfs_aop_bmap(struct address_space *as, sector_t block)
2891 {
2892         return generic_block_bmap(as, block, reiserfs_bmap);
2893 }
2894 
2895 static int reiserfs_write_end(struct file *file, struct address_space *mapping,
2896                               loff_t pos, unsigned len, unsigned copied,
2897                               struct page *page, void *fsdata)
2898 {
2899         struct inode *inode = page->mapping->host;
2900         int ret = 0;
2901         int update_sd = 0;
2902         struct reiserfs_transaction_handle *th;
2903         unsigned start;
2904         bool locked = false;
2905 
2906         if ((unsigned long)fsdata & AOP_FLAG_CONT_EXPAND)
2907                 pos ++;
2908 
2909         reiserfs_wait_on_write_block(inode->i_sb);
2910         if (reiserfs_transaction_running(inode->i_sb))
2911                 th = current->journal_info;
2912         else
2913                 th = NULL;
2914 
2915         start = pos & (PAGE_SIZE - 1);
2916         if (unlikely(copied < len)) {
2917                 if (!PageUptodate(page))
2918                         copied = 0;
2919 
2920                 page_zero_new_buffers(page, start + copied, start + len);
2921         }
2922         flush_dcache_page(page);
2923 
2924         reiserfs_commit_page(inode, page, start, start + copied);
2925 
2926         
2927 
2928 
2929 
2930 
2931         if (pos + copied > inode->i_size) {
2932                 struct reiserfs_transaction_handle myth;
2933                 reiserfs_write_lock(inode->i_sb);
2934                 locked = true;
2935                 
2936 
2937 
2938 
2939 
2940                 if ((have_large_tails(inode->i_sb)
2941                      && inode->i_size > i_block_size(inode) * 4)
2942                     || (have_small_tails(inode->i_sb)
2943                         && inode->i_size > i_block_size(inode)))
2944                         REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
2945 
2946                 ret = journal_begin(&myth, inode->i_sb, 1);
2947                 if (ret)
2948                         goto journal_error;
2949 
2950                 reiserfs_update_inode_transaction(inode);
2951                 inode->i_size = pos + copied;
2952                 
2953 
2954 
2955 
2956 
2957                 mark_inode_dirty(inode);
2958                 reiserfs_update_sd(&myth, inode);
2959                 update_sd = 1;
2960                 ret = journal_end(&myth);
2961                 if (ret)
2962                         goto journal_error;
2963         }
2964         if (th) {
2965                 if (!locked) {
2966                         reiserfs_write_lock(inode->i_sb);
2967                         locked = true;
2968                 }
2969                 if (!update_sd)
2970                         mark_inode_dirty(inode);
2971                 ret = reiserfs_end_persistent_transaction(th);
2972                 if (ret)
2973                         goto out;
2974         }
2975 
2976 out:
2977         if (locked)
2978                 reiserfs_write_unlock(inode->i_sb);
2979         unlock_page(page);
2980         put_page(page);
2981 
2982         if (pos + len > inode->i_size)
2983                 reiserfs_truncate_failed_write(inode);
2984 
2985         return ret == 0 ? copied : ret;
2986 
2987 journal_error:
2988         reiserfs_write_unlock(inode->i_sb);
2989         locked = false;
2990         if (th) {
2991                 if (!update_sd)
2992                         reiserfs_update_sd(th, inode);
2993                 ret = reiserfs_end_persistent_transaction(th);
2994         }
2995         goto out;
2996 }
2997 
2998 int reiserfs_commit_write(struct file *f, struct page *page,
2999                           unsigned from, unsigned to)
3000 {
3001         struct inode *inode = page->mapping->host;
3002         loff_t pos = ((loff_t) page->index << PAGE_SHIFT) + to;
3003         int ret = 0;
3004         int update_sd = 0;
3005         struct reiserfs_transaction_handle *th = NULL;
3006         int depth;
3007 
3008         depth = reiserfs_write_unlock_nested(inode->i_sb);
3009         reiserfs_wait_on_write_block(inode->i_sb);
3010         reiserfs_write_lock_nested(inode->i_sb, depth);
3011 
3012         if (reiserfs_transaction_running(inode->i_sb)) {
3013                 th = current->journal_info;
3014         }
3015         reiserfs_commit_page(inode, page, from, to);
3016 
3017         
3018 
3019 
3020 
3021 
3022         if (pos > inode->i_size) {
3023                 struct reiserfs_transaction_handle myth;
3024                 
3025 
3026 
3027 
3028 
3029                 if ((have_large_tails(inode->i_sb)
3030                      && inode->i_size > i_block_size(inode) * 4)
3031                     || (have_small_tails(inode->i_sb)
3032                         && inode->i_size > i_block_size(inode)))
3033                         REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
3034 
3035                 ret = journal_begin(&myth, inode->i_sb, 1);
3036                 if (ret)
3037                         goto journal_error;
3038 
3039                 reiserfs_update_inode_transaction(inode);
3040                 inode->i_size = pos;
3041                 
3042 
3043 
3044 
3045 
3046                 mark_inode_dirty(inode);
3047                 reiserfs_update_sd(&myth, inode);
3048                 update_sd = 1;
3049                 ret = journal_end(&myth);
3050                 if (ret)
3051                         goto journal_error;
3052         }
3053         if (th) {
3054                 if (!update_sd)
3055                         mark_inode_dirty(inode);
3056                 ret = reiserfs_end_persistent_transaction(th);
3057                 if (ret)
3058                         goto out;
3059         }
3060 
3061 out:
3062         return ret;
3063 
3064 journal_error:
3065         if (th) {
3066                 if (!update_sd)
3067                         reiserfs_update_sd(th, inode);
3068                 ret = reiserfs_end_persistent_transaction(th);
3069         }
3070 
3071         return ret;
3072 }
3073 
3074 void sd_attrs_to_i_attrs(__u16 sd_attrs, struct inode *inode)
3075 {
3076         if (reiserfs_attrs(inode->i_sb)) {
3077                 if (sd_attrs & REISERFS_SYNC_FL)
3078                         inode->i_flags |= S_SYNC;
3079                 else
3080                         inode->i_flags &= ~S_SYNC;
3081                 if (sd_attrs & REISERFS_IMMUTABLE_FL)
3082                         inode->i_flags |= S_IMMUTABLE;
3083                 else
3084                         inode->i_flags &= ~S_IMMUTABLE;
3085                 if (sd_attrs & REISERFS_APPEND_FL)
3086                         inode->i_flags |= S_APPEND;
3087                 else
3088                         inode->i_flags &= ~S_APPEND;
3089                 if (sd_attrs & REISERFS_NOATIME_FL)
3090                         inode->i_flags |= S_NOATIME;
3091                 else
3092                         inode->i_flags &= ~S_NOATIME;
3093                 if (sd_attrs & REISERFS_NOTAIL_FL)
3094                         REISERFS_I(inode)->i_flags |= i_nopack_mask;
3095                 else
3096                         REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
3097         }
3098 }
3099 
3100 
3101 
3102 
3103 
3104 static int invalidatepage_can_drop(struct inode *inode, struct buffer_head *bh)
3105 {
3106         int ret = 1;
3107         struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb);
3108 
3109         lock_buffer(bh);
3110         spin_lock(&j->j_dirty_buffers_lock);
3111         if (!buffer_mapped(bh)) {
3112                 goto free_jh;
3113         }
3114         
3115 
3116 
3117 
3118         if (reiserfs_file_data_log(inode)) {
3119                 
3120 
3121 
3122 
3123                 if (buffer_journaled(bh) || buffer_journal_dirty(bh)) {
3124                         ret = 0;
3125                 }
3126         } else  if (buffer_dirty(bh)) {
3127                 struct reiserfs_journal_list *jl;
3128                 struct reiserfs_jh *jh = bh->b_private;
3129 
3130                 
3131 
3132 
3133 
3134 
3135 
3136 
3137 
3138 
3139 
3140 
3141 
3142 
3143 
3144                 if (jh && (jl = jh->jl)
3145                     && jl != SB_JOURNAL(inode->i_sb)->j_current_jl)
3146                         ret = 0;
3147         }
3148 free_jh:
3149         if (ret && bh->b_private) {
3150                 reiserfs_free_jh(bh);
3151         }
3152         spin_unlock(&j->j_dirty_buffers_lock);
3153         unlock_buffer(bh);
3154         return ret;
3155 }
3156 
3157 
3158 static void reiserfs_invalidatepage(struct page *page, unsigned int offset,
3159                                     unsigned int length)
3160 {
3161         struct buffer_head *head, *bh, *next;
3162         struct inode *inode = page->mapping->host;
3163         unsigned int curr_off = 0;
3164         unsigned int stop = offset + length;
3165         int partial_page = (offset || length < PAGE_SIZE);
3166         int ret = 1;
3167 
3168         BUG_ON(!PageLocked(page));
3169 
3170         if (!partial_page)
3171                 ClearPageChecked(page);
3172 
3173         if (!page_has_buffers(page))
3174                 goto out;
3175 
3176         head = page_buffers(page);
3177         bh = head;
3178         do {
3179                 unsigned int next_off = curr_off + bh->b_size;
3180                 next = bh->b_this_page;
3181 
3182                 if (next_off > stop)
3183                         goto out;
3184 
3185                 
3186 
3187 
3188                 if (offset <= curr_off) {
3189                         if (invalidatepage_can_drop(inode, bh))
3190                                 reiserfs_unmap_buffer(bh);
3191                         else
3192                                 ret = 0;
3193                 }
3194                 curr_off = next_off;
3195                 bh = next;
3196         } while (bh != head);
3197 
3198         
3199 
3200 
3201 
3202 
3203         if (!partial_page && ret) {
3204                 ret = try_to_release_page(page, 0);
3205                 
3206         }
3207 out:
3208         return;
3209 }
3210 
3211 static int reiserfs_set_page_dirty(struct page *page)
3212 {
3213         struct inode *inode = page->mapping->host;
3214         if (reiserfs_file_data_log(inode)) {
3215                 SetPageChecked(page);
3216                 return __set_page_dirty_nobuffers(page);
3217         }
3218         return __set_page_dirty_buffers(page);
3219 }
3220 
3221 
3222 
3223 
3224 
3225 
3226 
3227 
3228 
3229 
3230 static int reiserfs_releasepage(struct page *page, gfp_t unused_gfp_flags)
3231 {
3232         struct inode *inode = page->mapping->host;
3233         struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb);
3234         struct buffer_head *head;
3235         struct buffer_head *bh;
3236         int ret = 1;
3237 
3238         WARN_ON(PageChecked(page));
3239         spin_lock(&j->j_dirty_buffers_lock);
3240         head = page_buffers(page);
3241         bh = head;
3242         do {
3243                 if (bh->b_private) {
3244                         if (!buffer_dirty(bh) && !buffer_locked(bh)) {
3245                                 reiserfs_free_jh(bh);
3246                         } else {
3247                                 ret = 0;
3248                                 break;
3249                         }
3250                 }
3251                 bh = bh->b_this_page;
3252         } while (bh != head);
3253         if (ret)
3254                 ret = try_to_free_buffers(page);
3255         spin_unlock(&j->j_dirty_buffers_lock);
3256         return ret;
3257 }
3258 
3259 
3260 
3261 
3262 
3263 static ssize_t reiserfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
3264 {
3265         struct file *file = iocb->ki_filp;
3266         struct inode *inode = file->f_mapping->host;
3267         size_t count = iov_iter_count(iter);
3268         ssize_t ret;
3269 
3270         ret = blockdev_direct_IO(iocb, inode, iter,
3271                                  reiserfs_get_blocks_direct_io);
3272 
3273         
3274 
3275 
3276 
3277         if (unlikely(iov_iter_rw(iter) == WRITE && ret < 0)) {
3278                 loff_t isize = i_size_read(inode);
3279                 loff_t end = iocb->ki_pos + count;
3280 
3281                 if ((end > isize) && inode_newsize_ok(inode, isize) == 0) {
3282                         truncate_setsize(inode, isize);
3283                         reiserfs_vfs_truncate_file(inode);
3284                 }
3285         }
3286 
3287         return ret;
3288 }
3289 
3290 int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
3291 {
3292         struct inode *inode = d_inode(dentry);
3293         unsigned int ia_valid;
3294         int error;
3295 
3296         error = setattr_prepare(dentry, attr);
3297         if (error)
3298                 return error;
3299 
3300         
3301         ia_valid = attr->ia_valid &= ~(ATTR_KILL_SUID|ATTR_KILL_SGID);
3302 
3303         if (is_quota_modification(inode, attr)) {
3304                 error = dquot_initialize(inode);
3305                 if (error)
3306                         return error;
3307         }
3308         reiserfs_write_lock(inode->i_sb);
3309         if (attr->ia_valid & ATTR_SIZE) {
3310                 
3311 
3312 
3313 
3314                 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 &&
3315                     attr->ia_size > MAX_NON_LFS) {
3316                         reiserfs_write_unlock(inode->i_sb);
3317                         error = -EFBIG;
3318                         goto out;
3319                 }
3320 
3321                 inode_dio_wait(inode);
3322 
3323                 
3324                 if (attr->ia_size > inode->i_size) {
3325                         error = generic_cont_expand_simple(inode, attr->ia_size);
3326                         if (REISERFS_I(inode)->i_prealloc_count > 0) {
3327                                 int err;
3328                                 struct reiserfs_transaction_handle th;
3329                                 
3330                                 err = journal_begin(&th, inode->i_sb, 4);
3331                                 if (!err) {
3332                                         reiserfs_discard_prealloc(&th, inode);
3333                                         err = journal_end(&th);
3334                                 }
3335                                 if (err)
3336                                         error = err;
3337                         }
3338                         if (error) {
3339                                 reiserfs_write_unlock(inode->i_sb);
3340                                 goto out;
3341                         }
3342                         
3343 
3344 
3345 
3346                         attr->ia_valid |= (ATTR_MTIME | ATTR_CTIME);
3347                 }
3348         }
3349         reiserfs_write_unlock(inode->i_sb);
3350 
3351         if ((((attr->ia_valid & ATTR_UID) && (from_kuid(&init_user_ns, attr->ia_uid) & ~0xffff)) ||
3352              ((attr->ia_valid & ATTR_GID) && (from_kgid(&init_user_ns, attr->ia_gid) & ~0xffff))) &&
3353             (get_inode_sd_version(inode) == STAT_DATA_V1)) {
3354                 
3355                 error = -EINVAL;
3356                 goto out;
3357         }
3358 
3359         if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
3360             (ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) {
3361                 struct reiserfs_transaction_handle th;
3362                 int jbegin_count =
3363                     2 *
3364                     (REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb) +
3365                      REISERFS_QUOTA_DEL_BLOCKS(inode->i_sb)) +
3366                     2;
3367 
3368                 error = reiserfs_chown_xattrs(inode, attr);
3369 
3370                 if (error)
3371                         return error;
3372 
3373                 
3374 
3375 
3376 
3377                 reiserfs_write_lock(inode->i_sb);
3378                 error = journal_begin(&th, inode->i_sb, jbegin_count);
3379                 reiserfs_write_unlock(inode->i_sb);
3380                 if (error)
3381                         goto out;
3382                 error = dquot_transfer(inode, attr);
3383                 reiserfs_write_lock(inode->i_sb);
3384                 if (error) {
3385                         journal_end(&th);
3386                         reiserfs_write_unlock(inode->i_sb);
3387                         goto out;
3388                 }
3389 
3390                 
3391 
3392 
3393 
3394                 if (attr->ia_valid & ATTR_UID)
3395                         inode->i_uid = attr->ia_uid;
3396                 if (attr->ia_valid & ATTR_GID)
3397                         inode->i_gid = attr->ia_gid;
3398                 mark_inode_dirty(inode);
3399                 error = journal_end(&th);
3400                 reiserfs_write_unlock(inode->i_sb);
3401                 if (error)
3402                         goto out;
3403         }
3404 
3405         if ((attr->ia_valid & ATTR_SIZE) &&
3406             attr->ia_size != i_size_read(inode)) {
3407                 error = inode_newsize_ok(inode, attr->ia_size);
3408                 if (!error) {
3409                         
3410 
3411 
3412 
3413                         mutex_lock(&REISERFS_I(inode)->tailpack);
3414                         truncate_setsize(inode, attr->ia_size);
3415                         reiserfs_truncate_file(inode, 1);
3416                         mutex_unlock(&REISERFS_I(inode)->tailpack);
3417                 }
3418         }
3419 
3420         if (!error) {
3421                 setattr_copy(inode, attr);
3422                 mark_inode_dirty(inode);
3423         }
3424 
3425         if (!error && reiserfs_posixacl(inode->i_sb)) {
3426                 if (attr->ia_valid & ATTR_MODE)
3427                         error = reiserfs_acl_chmod(inode);
3428         }
3429 
3430 out:
3431         return error;
3432 }
3433 
3434 const struct address_space_operations reiserfs_address_space_operations = {
3435         .writepage = reiserfs_writepage,
3436         .readpage = reiserfs_readpage,
3437         .readpages = reiserfs_readpages,
3438         .releasepage = reiserfs_releasepage,
3439         .invalidatepage = reiserfs_invalidatepage,
3440         .write_begin = reiserfs_write_begin,
3441         .write_end = reiserfs_write_end,
3442         .bmap = reiserfs_aop_bmap,
3443         .direct_IO = reiserfs_direct_IO,
3444         .set_page_dirty = reiserfs_set_page_dirty,
3445 };