diff options
Diffstat (limited to 'fs/fat/inode.c')
| -rw-r--r-- | fs/fat/inode.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 6d266d793e2c..80ff3381fa21 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
| @@ -562,26 +562,23 @@ static int fat_write_inode(struct inode *inode, int wait) | |||
| 562 | struct buffer_head *bh; | 562 | struct buffer_head *bh; |
| 563 | struct msdos_dir_entry *raw_entry; | 563 | struct msdos_dir_entry *raw_entry; |
| 564 | loff_t i_pos; | 564 | loff_t i_pos; |
| 565 | int err = 0; | 565 | int err; |
| 566 | 566 | ||
| 567 | retry: | 567 | retry: |
| 568 | i_pos = MSDOS_I(inode)->i_pos; | 568 | i_pos = MSDOS_I(inode)->i_pos; |
| 569 | if (inode->i_ino == MSDOS_ROOT_INO || !i_pos) | 569 | if (inode->i_ino == MSDOS_ROOT_INO || !i_pos) |
| 570 | return 0; | 570 | return 0; |
| 571 | 571 | ||
| 572 | lock_super(sb); | ||
| 573 | bh = sb_bread(sb, i_pos >> sbi->dir_per_block_bits); | 572 | bh = sb_bread(sb, i_pos >> sbi->dir_per_block_bits); |
| 574 | if (!bh) { | 573 | if (!bh) { |
| 575 | printk(KERN_ERR "FAT: unable to read inode block " | 574 | printk(KERN_ERR "FAT: unable to read inode block " |
| 576 | "for updating (i_pos %lld)\n", i_pos); | 575 | "for updating (i_pos %lld)\n", i_pos); |
| 577 | err = -EIO; | 576 | return -EIO; |
| 578 | goto out; | ||
| 579 | } | 577 | } |
| 580 | spin_lock(&sbi->inode_hash_lock); | 578 | spin_lock(&sbi->inode_hash_lock); |
| 581 | if (i_pos != MSDOS_I(inode)->i_pos) { | 579 | if (i_pos != MSDOS_I(inode)->i_pos) { |
| 582 | spin_unlock(&sbi->inode_hash_lock); | 580 | spin_unlock(&sbi->inode_hash_lock); |
| 583 | brelse(bh); | 581 | brelse(bh); |
| 584 | unlock_super(sb); | ||
| 585 | goto retry; | 582 | goto retry; |
| 586 | } | 583 | } |
| 587 | 584 | ||
| @@ -607,11 +604,10 @@ retry: | |||
| 607 | } | 604 | } |
| 608 | spin_unlock(&sbi->inode_hash_lock); | 605 | spin_unlock(&sbi->inode_hash_lock); |
| 609 | mark_buffer_dirty(bh); | 606 | mark_buffer_dirty(bh); |
| 607 | err = 0; | ||
| 610 | if (wait) | 608 | if (wait) |
| 611 | err = sync_dirty_buffer(bh); | 609 | err = sync_dirty_buffer(bh); |
| 612 | brelse(bh); | 610 | brelse(bh); |
| 613 | out: | ||
| 614 | unlock_super(sb); | ||
| 615 | return err; | 611 | return err; |
| 616 | } | 612 | } |
| 617 | 613 | ||
