Re: [PATCH] hfsplus: fix issue with unzeroed unused b-tree nodes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



--- On Tue, 12/2/13, Vyacheslav Dubeyko <slava@xxxxxxxxxxx> 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@xxxxxxxxx>
> Signed-off-by: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
> Tested-by: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>

Acked-by: Hin-Tak Leung <htl10@xxxxxxxxxxxxxxxxxxxxx>

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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux