From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roman Zippel Subject: [PATCH 2/6] relax dirty check Date: Thu, 21 Oct 2004 01:13:12 +0200 (CEST) Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Return-path: Received: from scrub.xs4all.nl ([194.109.195.176]:46243 "EHLO scrub.xs4all.nl") by vger.kernel.org with ESMTP id S270216AbUJTXNP (ORCPT ); Wed, 20 Oct 2004 19:13:15 -0400 To: Andrew Morton , linux-fsdevel@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org hfs has two dirty bits, but currently OS X uses only one of them, so match its behaviour, so that a uncleanly unmounted disk can be mounted r/w again, after it has been checked. Signed-off-by: Roman Zippel Index: linux-2.6-hfs/fs/hfs/mdb.c =================================================================== --- linux-2.6-hfs.orig/fs/hfs/mdb.c 2004-10-19 19:34:42.000000000 +0200 +++ linux-2.6-hfs/fs/hfs/mdb.c 2004-10-21 00:43:00.652087825 +0200 @@ -200,8 +200,7 @@ int hfs_mdb_get(struct super_block *sb) } attrib = mdb->drAtrb; - if (!(attrib & cpu_to_be16(HFS_SB_ATTRIB_UNMNT)) - || (attrib & cpu_to_be16(HFS_SB_ATTRIB_INCNSTNT))) { + if (!(attrib & cpu_to_be16(HFS_SB_ATTRIB_UNMNT))) { hfs_warn("HFS-fs warning: Filesystem was not cleanly unmounted, " "running fsck.hfs is recommended. mounting read-only.\n"); sb->s_flags |= MS_RDONLY; @@ -212,8 +211,9 @@ int hfs_mdb_get(struct super_block *sb) } if (!(sb->s_flags & MS_RDONLY)) { /* Mark the volume uncleanly unmounted in case we crash */ - mdb->drAtrb = attrib & cpu_to_be16(~HFS_SB_ATTRIB_UNMNT); - mdb->drAtrb = attrib | cpu_to_be16(HFS_SB_ATTRIB_INCNSTNT); + attrib &= cpu_to_be16(~HFS_SB_ATTRIB_UNMNT); + attrib |= cpu_to_be16(HFS_SB_ATTRIB_INCNSTNT); + mdb->drAtrb = attrib; mdb->drWrCnt = cpu_to_be32(be32_to_cpu(mdb->drWrCnt) + 1); mdb->drLsMod = hfs_mtime(); Index: linux-2.6-hfs/fs/hfs/super.c =================================================================== --- linux-2.6-hfs.orig/fs/hfs/super.c 2004-10-19 19:34:42.000000000 +0200 +++ linux-2.6-hfs/fs/hfs/super.c 2004-10-21 00:43:00.652087825 +0200 @@ -98,8 +98,7 @@ int hfs_remount(struct super_block *sb, if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) return 0; if (!(*flags & MS_RDONLY)) { - if (!(HFS_SB(sb)->mdb->drAtrb & cpu_to_be16(HFS_SB_ATTRIB_UNMNT)) - || (HFS_SB(sb)->mdb->drAtrb & cpu_to_be16(HFS_SB_ATTRIB_INCNSTNT))) { + if (!(HFS_SB(sb)->mdb->drAtrb & cpu_to_be16(HFS_SB_ATTRIB_UNMNT))) { printk("HFS-fs warning: Filesystem was not cleanly unmounted, " "running fsck.hfs is recommended. leaving read-only.\n"); sb->s_flags |= MS_RDONLY; Index: linux-2.6-hfs/fs/hfsplus/super.c =================================================================== --- linux-2.6-hfs.orig/fs/hfsplus/super.c 2004-10-19 19:34:43.000000000 +0200 +++ linux-2.6-hfs/fs/hfsplus/super.c 2004-10-21 00:43:00.683082502 +0200 @@ -246,8 +246,7 @@ int hfsplus_remount(struct super_block * if (!(*flags & MS_RDONLY)) { struct hfsplus_vh *vhdr = HFSPLUS_SB(sb).s_vhdr; - if ((vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_INCNSTNT)) || - !(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) { + if (!(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) { printk("HFS+-fs warning: Filesystem was not cleanly unmounted, " "running fsck.hfsplus is recommended. leaving read-only.\n"); sb->s_flags |= MS_RDONLY; @@ -332,8 +331,7 @@ static int hfsplus_fill_super(struct sup sb->s_op = &hfsplus_sops; sb->s_maxbytes = MAX_LFS_FILESIZE; - if ((vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_INCNSTNT)) || - !(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) { + if (!(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) { if (!silent) printk("HFS+-fs warning: Filesystem was not cleanly unmounted, " "running fsck.hfsplus is recommended. mounting read-only.\n");