HPFS: Fix a bug that filesystem was not marked dirty when remounting it

Fix a bug that filesystem was not marked dirty when remounting it

Signed-off-by: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Mikulas Patocka and committed by Linus Torvalds dab4c82a 48f10e8c

+8 -8
+8 -8
fs/hpfs/super.c
··· 18 18 19 19 /* Mark the filesystem dirty, so that chkdsk checks it when os/2 booted */ 20 20 21 - static void mark_dirty(struct super_block *s) 21 + static void mark_dirty(struct super_block *s, int remount) 22 22 { 23 - if (hpfs_sb(s)->sb_chkdsk && !(s->s_flags & MS_RDONLY)) { 23 + if (hpfs_sb(s)->sb_chkdsk && (remount || !(s->s_flags & MS_RDONLY))) { 24 24 struct buffer_head *bh; 25 25 struct hpfs_spare_block *sb; 26 26 if ((sb = hpfs_map_sector(s, 17, &bh, 0))) { ··· 66 66 if (!hpfs_sb(s)->sb_was_error) { 67 67 if (hpfs_sb(s)->sb_err == 2) { 68 68 printk("; crashing the system because you wanted it\n"); 69 - mark_dirty(s); 69 + mark_dirty(s, 0); 70 70 panic("HPFS panic"); 71 71 } else if (hpfs_sb(s)->sb_err == 1) { 72 72 if (s->s_flags & MS_RDONLY) printk("; already mounted read-only\n"); 73 73 else { 74 74 printk("; remounting read-only\n"); 75 - mark_dirty(s); 75 + mark_dirty(s, 0); 76 76 s->s_flags |= MS_RDONLY; 77 77 } 78 78 } else if (s->s_flags & MS_RDONLY) printk("; going on - but anything won't be destroyed because it's read-only\n"); ··· 419 419 sbi->sb_eas = eas; sbi->sb_chk = chk; sbi->sb_chkdsk = chkdsk; 420 420 sbi->sb_err = errs; sbi->sb_timeshift = timeshift; 421 421 422 - if (!(*flags & MS_RDONLY)) mark_dirty(s); 422 + if (!(*flags & MS_RDONLY)) mark_dirty(s, 1); 423 423 424 424 replace_mount_options(s, new_opts); 425 425 ··· 576 576 if (spareblock->hotfixes_used || spareblock->n_spares_used) { 577 577 if (errs >= 2) { 578 578 printk("HPFS: Hotfixes not supported here, try chkdsk\n"); 579 - mark_dirty(s); 579 + mark_dirty(s, 0); 580 580 goto bail4; 581 581 } 582 582 hpfs_error(s, "hotfixes not supported here, try chkdsk"); ··· 586 586 if (spareblock->n_dnode_spares != spareblock->n_dnode_spares_free) { 587 587 if (errs >= 2) { 588 588 printk("HPFS: Spare dnodes used, try chkdsk\n"); 589 - mark_dirty(s); 589 + mark_dirty(s, 0); 590 590 goto bail4; 591 591 } 592 592 hpfs_error(s, "warning: spare dnodes used, try chkdsk"); ··· 605 605 if (hpfs_chk_sectors(s, superblock->dir_band_start, superblock->n_dir_band, "dir_band") || 606 606 hpfs_chk_sectors(s, superblock->dir_band_bitmap, 4, "dir_band_bitmap") || 607 607 hpfs_chk_sectors(s, superblock->bitmaps, 4, "bitmaps")) { 608 - mark_dirty(s); 608 + mark_dirty(s, 0); 609 609 goto bail4; 610 610 } 611 611 sbi->sb_dirband_size = a;