diff options
Diffstat (limited to 'fs/minix/inode.c')
-rw-r--r-- | fs/minix/inode.c | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/fs/minix/inode.c b/fs/minix/inode.c index daad3c2740db..f91a23693597 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c | |||
@@ -35,6 +35,8 @@ static void minix_put_super(struct super_block *sb) | |||
35 | int i; | 35 | int i; |
36 | struct minix_sb_info *sbi = minix_sb(sb); | 36 | struct minix_sb_info *sbi = minix_sb(sb); |
37 | 37 | ||
38 | lock_kernel(); | ||
39 | |||
38 | if (!(sb->s_flags & MS_RDONLY)) { | 40 | if (!(sb->s_flags & MS_RDONLY)) { |
39 | if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */ | 41 | if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */ |
40 | sbi->s_ms->s_state = sbi->s_mount_state; | 42 | sbi->s_ms->s_state = sbi->s_mount_state; |
@@ -49,7 +51,7 @@ static void minix_put_super(struct super_block *sb) | |||
49 | sb->s_fs_info = NULL; | 51 | sb->s_fs_info = NULL; |
50 | kfree(sbi); | 52 | kfree(sbi); |
51 | 53 | ||
52 | return; | 54 | unlock_kernel(); |
53 | } | 55 | } |
54 | 56 | ||
55 | static struct kmem_cache * minix_inode_cachep; | 57 | static struct kmem_cache * minix_inode_cachep; |
@@ -554,38 +556,25 @@ static struct buffer_head * V2_minix_update_inode(struct inode * inode) | |||
554 | return bh; | 556 | return bh; |
555 | } | 557 | } |
556 | 558 | ||
557 | static struct buffer_head *minix_update_inode(struct inode *inode) | 559 | static int minix_write_inode(struct inode *inode, int wait) |
558 | { | ||
559 | if (INODE_VERSION(inode) == MINIX_V1) | ||
560 | return V1_minix_update_inode(inode); | ||
561 | else | ||
562 | return V2_minix_update_inode(inode); | ||
563 | } | ||
564 | |||
565 | static int minix_write_inode(struct inode * inode, int wait) | ||
566 | { | ||
567 | brelse(minix_update_inode(inode)); | ||
568 | return 0; | ||
569 | } | ||
570 | |||
571 | int minix_sync_inode(struct inode * inode) | ||
572 | { | 560 | { |
573 | int err = 0; | 561 | int err = 0; |
574 | struct buffer_head *bh; | 562 | struct buffer_head *bh; |
575 | 563 | ||
576 | bh = minix_update_inode(inode); | 564 | if (INODE_VERSION(inode) == MINIX_V1) |
577 | if (bh && buffer_dirty(bh)) | 565 | bh = V1_minix_update_inode(inode); |
578 | { | 566 | else |
567 | bh = V2_minix_update_inode(inode); | ||
568 | if (!bh) | ||
569 | return -EIO; | ||
570 | if (wait && buffer_dirty(bh)) { | ||
579 | sync_dirty_buffer(bh); | 571 | sync_dirty_buffer(bh); |
580 | if (buffer_req(bh) && !buffer_uptodate(bh)) | 572 | if (buffer_req(bh) && !buffer_uptodate(bh)) { |
581 | { | ||
582 | printk("IO error syncing minix inode [%s:%08lx]\n", | 573 | printk("IO error syncing minix inode [%s:%08lx]\n", |
583 | inode->i_sb->s_id, inode->i_ino); | 574 | inode->i_sb->s_id, inode->i_ino); |
584 | err = -1; | 575 | err = -EIO; |
585 | } | 576 | } |
586 | } | 577 | } |
587 | else if (!bh) | ||
588 | err = -1; | ||
589 | brelse (bh); | 578 | brelse (bh); |
590 | return err; | 579 | return err; |
591 | } | 580 | } |