* [PATCH] hfsplus: fix issue with unzeroed unused b-tree nodes
@ 2013-02-12 6:35 Vyacheslav Dubeyko
2013-02-18 18:28 ` Hin-Tak Leung
0 siblings, 1 reply; 2+ messages in thread
From: Vyacheslav Dubeyko @ 2013-02-12 6:35 UTC (permalink / raw)
To: linux-fsdevel, Andrew Morton, Christoph Hellwig, Al Viro
Cc: Kyle Laracey, Hin-Tak Leung
From: Vyacheslav Dubeyko <slava@dubeyko.com>
Subject: [PATCH] hfsplus: fix issue with unzeroed unused b-tree nodes
The fsck_hfs (under MacOS X) complains about unzeroed unused b-tree nodes after deletion of folders' tree under Linux.
SYMPTOMS:
Running Disk Utiltiy's "Verify Disk" on "test" gives the following:
Verifying volume “Test”
Checking file systemChecking Journaled HFS Plus volume.
Checking extents overflow file.
Checking catalog file.
Unused node is not erased (node = 3111)
Checking multi-linked files.
Checking catalog hierarchy.
Checking extended attributes file.
Checking volume bitmap.
Checking volume information.
The volume Test was found corrupt and needs to be repaired.
Error: This disk needs to be repaired. Click Repair Disk.
REPRODUCING PATH:
1. Prepare HFS+ (non-case sensitive) partition (for example, 5GB) under MacOS X.
2. Copy linux kernel source tree (for example, 3.7-rc6 version) on this partition under MacOS X.
3. Then switch to Linux and mount this prepared partition.
4. Execute `sudo rm -r` under prepared directory with linux kernel source tree.
5. Unmount and boot back into OS X.
6. Open up Disk Utility and verify partition.
REPRODUCIBILITY: 100%
FIX:
It is added code of node clearing in hfs_bnode_put() method for the case when node has flag HFS_BNODE_DELETED.
Reported-by: Kyle Laracey <kalaracey@gmail.com>
Signed-off-by: Vyacheslav Dubeyko <slava@dubeyko.com>
Tested-by: Vyacheslav Dubeyko <slava@dubeyko.com>
---
fs/hfsplus/bnode.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/hfsplus/bnode.c b/fs/hfsplus/bnode.c
index 1c42cc5..45d7400 100644
--- a/fs/hfsplus/bnode.c
+++ b/fs/hfsplus/bnode.c
@@ -646,6 +646,8 @@ void hfs_bnode_put(struct hfs_bnode *node)
if (test_bit(HFS_BNODE_DELETED, &node->flags)) {
hfs_bnode_unhash(node);
spin_unlock(&tree->hash_lock);
+ hfs_bnode_clear(node, 0,
+ PAGE_CACHE_SIZE * tree->pages_per_bnode);
hfs_bmap_free(node);
hfs_bnode_free(node);
return;
--
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] hfsplus: fix issue with unzeroed unused b-tree nodes
2013-02-12 6:35 [PATCH] hfsplus: fix issue with unzeroed unused b-tree nodes Vyacheslav Dubeyko
@ 2013-02-18 18:28 ` Hin-Tak Leung
0 siblings, 0 replies; 2+ messages in thread
From: Hin-Tak Leung @ 2013-02-18 18:28 UTC (permalink / raw)
To: linux-fsdevel, Andrew Morton, Christoph Hellwig, Al Viro,
Vyacheslav Dubeyko
Cc: Kyle Laracey
--- On Tue, 12/2/13, Vyacheslav Dubeyko <slava@dubeyko.com> wrote:
> The fsck_hfs (under MacOS X) complains about unzeroed unused
> b-tree nodes after deletion of folders' tree under Linux.
>
> SYMPTOMS:
> Running Disk Utiltiy's "Verify Disk" on "test" gives the
> following:
> Verifying volume “Test”
> Checking file systemChecking Journaled HFS Plus volume.
> Checking extents overflow file.
> Checking catalog file.
> Unused node is not erased (node = 3111)
> Checking multi-linked files.
> Checking catalog hierarchy.
> Checking extended attributes file.
> Checking volume bitmap.
> Checking volume information.
> The volume Test was found corrupt and needs to be repaired.
> Error: This disk needs to be repaired. Click Repair Disk.
>
> REPRODUCING PATH:
> 1. Prepare HFS+ (non-case sensitive) partition (for example,
> 5GB) under MacOS X.
> 2. Copy linux kernel source tree (for example, 3.7-rc6
> version) on this partition under MacOS X.
> 3. Then switch to Linux and mount this prepared partition.
> 4. Execute `sudo rm -r` under prepared directory with linux
> kernel source tree.
> 5. Unmount and boot back into OS X.
> 6. Open up Disk Utility and verify partition.
>
> REPRODUCIBILITY: 100%
>
> FIX:
> It is added code of node clearing in hfs_bnode_put() method
> for the case when node has flag HFS_BNODE_DELETED.
>
> Reported-by: Kyle Laracey <kalaracey@gmail.com>
> Signed-off-by: Vyacheslav Dubeyko <slava@dubeyko.com>
> Tested-by: Vyacheslav Dubeyko <slava@dubeyko.com>
Acked-by: Hin-Tak Leung <htl10@users.sourceforge.net>
I may have seen something like this some time ago but lost in the context of other more pressing issues.
It would seems to be some sort of newly added behavior. since both xnu (the mac os x kernel) and fsck.hfsplus are open-source, it might be interesting to pin point when the new behavior was introduced.
Hin-Tak
> ---
> fs/hfsplus/bnode.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/fs/hfsplus/bnode.c b/fs/hfsplus/bnode.c
> index 1c42cc5..45d7400 100644
> --- a/fs/hfsplus/bnode.c
> +++ b/fs/hfsplus/bnode.c
> @@ -646,6 +646,8 @@ void hfs_bnode_put(struct hfs_bnode
> *node)
> if
> (test_bit(HFS_BNODE_DELETED, &node->flags)) {
>
> hfs_bnode_unhash(node);
>
> spin_unlock(&tree->hash_lock);
> +
> hfs_bnode_clear(node, 0,
> +
> PAGE_CACHE_SIZE *
> tree->pages_per_bnode);
>
> hfs_bmap_free(node);
>
> hfs_bnode_free(node);
>
> return;
> --
> 1.7.9.5
>
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-02-18 18:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-12 6:35 [PATCH] hfsplus: fix issue with unzeroed unused b-tree nodes Vyacheslav Dubeyko
2013-02-18 18:28 ` Hin-Tak Leung
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).