40 lines
1.1 KiB
Diff
40 lines
1.1 KiB
Diff
hfsplus: Clear volume header pointers on failure
|
|
|
|
The next patch will use NULL volume header to determine whether
|
|
to flush the superblock. Also fix two failure cases so they
|
|
clear the headers before exiting.
|
|
|
|
Signed-Off-By: Chuck Ebbert <cebbert@redhat.com>
|
|
|
|
--- vanilla-2.6.38-rc2-git9.orig/fs/hfsplus/wrapper.c
|
|
+++ vanilla-2.6.38-rc2-git9/fs/hfsplus/wrapper.c
|
|
@@ -167,7 +167,7 @@ reread:
|
|
break;
|
|
case cpu_to_be16(HFSP_WRAP_MAGIC):
|
|
if (!hfsplus_read_mdb(sbi->s_vhdr, &wd))
|
|
- goto out;
|
|
+ goto out_free_backup_vhdr;
|
|
wd.ablk_size >>= HFSPLUS_SECTOR_SHIFT;
|
|
part_start += wd.ablk_start + wd.embed_start * wd.ablk_size;
|
|
part_size = wd.embed_count * wd.ablk_size;
|
|
@@ -179,7 +179,7 @@ reread:
|
|
* (should do this only for cdrom/loop though)
|
|
*/
|
|
if (hfs_part_find(sb, &part_start, &part_size))
|
|
- goto out;
|
|
+ goto out_free_backup_vhdr;
|
|
goto reread;
|
|
}
|
|
|
|
@@ -230,8 +230,10 @@ reread:
|
|
|
|
out_free_backup_vhdr:
|
|
kfree(sbi->s_backup_vhdr);
|
|
+ sbi->s_backup_vhdr = NULL;
|
|
out_free_vhdr:
|
|
kfree(sbi->s_vhdr);
|
|
+ sbi->s_vhdr = NULL;
|
|
out:
|
|
return error;
|
|
}
|