diff options
Diffstat (limited to 'fs/ufs/super.c')
-rw-r--r-- | fs/ufs/super.c | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/fs/ufs/super.c b/fs/ufs/super.c index e9a42c711a9e..d4aacee593ff 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c | |||
@@ -221,7 +221,7 @@ void ufs_error (struct super_block * sb, const char * function, | |||
221 | va_list args; | 221 | va_list args; |
222 | 222 | ||
223 | uspi = UFS_SB(sb)->s_uspi; | 223 | uspi = UFS_SB(sb)->s_uspi; |
224 | usb1 = ubh_get_usb_first(USPI_UBH); | 224 | usb1 = ubh_get_usb_first(uspi); |
225 | 225 | ||
226 | if (!(sb->s_flags & MS_RDONLY)) { | 226 | if (!(sb->s_flags & MS_RDONLY)) { |
227 | usb1->fs_clean = UFS_FSBAD; | 227 | usb1->fs_clean = UFS_FSBAD; |
@@ -253,7 +253,7 @@ void ufs_panic (struct super_block * sb, const char * function, | |||
253 | va_list args; | 253 | va_list args; |
254 | 254 | ||
255 | uspi = UFS_SB(sb)->s_uspi; | 255 | uspi = UFS_SB(sb)->s_uspi; |
256 | usb1 = ubh_get_usb_first(USPI_UBH); | 256 | usb1 = ubh_get_usb_first(uspi); |
257 | 257 | ||
258 | if (!(sb->s_flags & MS_RDONLY)) { | 258 | if (!(sb->s_flags & MS_RDONLY)) { |
259 | usb1->fs_clean = UFS_FSBAD; | 259 | usb1->fs_clean = UFS_FSBAD; |
@@ -420,21 +420,18 @@ static int ufs_read_cylinder_structures (struct super_block *sb) { | |||
420 | if (i + uspi->s_fpb > blks) | 420 | if (i + uspi->s_fpb > blks) |
421 | size = (blks - i) * uspi->s_fsize; | 421 | size = (blks - i) * uspi->s_fsize; |
422 | 422 | ||
423 | if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) { | 423 | if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) |
424 | ubh = ubh_bread(sb, | 424 | ubh = ubh_bread(sb, |
425 | fs64_to_cpu(sb, usb->fs_u11.fs_u2.fs_csaddr) + i, size); | 425 | fs64_to_cpu(sb, usb->fs_u11.fs_u2.fs_csaddr) + i, size); |
426 | if (!ubh) | 426 | else |
427 | goto failed; | ||
428 | ubh_ubhcpymem (space, ubh, size); | ||
429 | sbi->s_csp[ufs_fragstoblks(i)]=(struct ufs_csum *)space; | ||
430 | } | ||
431 | else { | ||
432 | ubh = ubh_bread(sb, uspi->s_csaddr + i, size); | 427 | ubh = ubh_bread(sb, uspi->s_csaddr + i, size); |
433 | if (!ubh) | 428 | |
434 | goto failed; | 429 | if (!ubh) |
435 | ubh_ubhcpymem(space, ubh, size); | 430 | goto failed; |
436 | sbi->s_csp[ufs_fragstoblks(i)]=(struct ufs_csum *)space; | 431 | |
437 | } | 432 | ubh_ubhcpymem (space, ubh, size); |
433 | sbi->s_csp[ufs_fragstoblks(i)]=(struct ufs_csum *)space; | ||
434 | |||
438 | space += size; | 435 | space += size; |
439 | ubh_brelse (ubh); | 436 | ubh_brelse (ubh); |
440 | ubh = NULL; | 437 | ubh = NULL; |
@@ -539,6 +536,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent) | |||
539 | struct inode *inode; | 536 | struct inode *inode; |
540 | unsigned block_size, super_block_size; | 537 | unsigned block_size, super_block_size; |
541 | unsigned flags; | 538 | unsigned flags; |
539 | unsigned super_block_offset; | ||
542 | 540 | ||
543 | uspi = NULL; | 541 | uspi = NULL; |
544 | ubh = NULL; | 542 | ubh = NULL; |
@@ -586,10 +584,11 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent) | |||
586 | if (!uspi) | 584 | if (!uspi) |
587 | goto failed; | 585 | goto failed; |
588 | 586 | ||
587 | super_block_offset=UFS_SBLOCK; | ||
588 | |||
589 | /* Keep 2Gig file limit. Some UFS variants need to override | 589 | /* Keep 2Gig file limit. Some UFS variants need to override |
590 | this but as I don't know which I'll let those in the know loosen | 590 | this but as I don't know which I'll let those in the know loosen |
591 | the rules */ | 591 | the rules */ |
592 | |||
593 | switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) { | 592 | switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) { |
594 | case UFS_MOUNT_UFSTYPE_44BSD: | 593 | case UFS_MOUNT_UFSTYPE_44BSD: |
595 | UFSD(("ufstype=44bsd\n")) | 594 | UFSD(("ufstype=44bsd\n")) |
@@ -601,7 +600,8 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent) | |||
601 | flags |= UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD; | 600 | flags |= UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD; |
602 | break; | 601 | break; |
603 | case UFS_MOUNT_UFSTYPE_UFS2: | 602 | case UFS_MOUNT_UFSTYPE_UFS2: |
604 | UFSD(("ufstype=ufs2\n")) | 603 | UFSD(("ufstype=ufs2\n")); |
604 | super_block_offset=SBLOCK_UFS2; | ||
605 | uspi->s_fsize = block_size = 512; | 605 | uspi->s_fsize = block_size = 512; |
606 | uspi->s_fmask = ~(512 - 1); | 606 | uspi->s_fmask = ~(512 - 1); |
607 | uspi->s_fshift = 9; | 607 | uspi->s_fshift = 9; |
@@ -725,19 +725,16 @@ again: | |||
725 | /* | 725 | /* |
726 | * read ufs super block from device | 726 | * read ufs super block from device |
727 | */ | 727 | */ |
728 | if ( (flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) { | 728 | |
729 | ubh = ubh_bread_uspi(uspi, sb, uspi->s_sbbase + SBLOCK_UFS2/block_size, super_block_size); | 729 | ubh = ubh_bread_uspi(uspi, sb, uspi->s_sbbase + super_block_offset/block_size, super_block_size); |
730 | } | 730 | |
731 | else { | ||
732 | ubh = ubh_bread_uspi(uspi, sb, uspi->s_sbbase + UFS_SBLOCK/block_size, super_block_size); | ||
733 | } | ||
734 | if (!ubh) | 731 | if (!ubh) |
735 | goto failed; | 732 | goto failed; |
736 | 733 | ||
737 | 734 | ||
738 | usb1 = ubh_get_usb_first(USPI_UBH); | 735 | usb1 = ubh_get_usb_first(uspi); |
739 | usb2 = ubh_get_usb_second(USPI_UBH); | 736 | usb2 = ubh_get_usb_second(uspi); |
740 | usb3 = ubh_get_usb_third(USPI_UBH); | 737 | usb3 = ubh_get_usb_third(uspi); |
741 | usb = (struct ufs_super_block *) | 738 | usb = (struct ufs_super_block *) |
742 | ((struct ufs_buffer_head *)uspi)->bh[0]->b_data ; | 739 | ((struct ufs_buffer_head *)uspi)->bh[0]->b_data ; |
743 | 740 | ||
@@ -1006,8 +1003,8 @@ static void ufs_write_super (struct super_block *sb) { | |||
1006 | UFSD(("ENTER\n")) | 1003 | UFSD(("ENTER\n")) |
1007 | flags = UFS_SB(sb)->s_flags; | 1004 | flags = UFS_SB(sb)->s_flags; |
1008 | uspi = UFS_SB(sb)->s_uspi; | 1005 | uspi = UFS_SB(sb)->s_uspi; |
1009 | usb1 = ubh_get_usb_first(USPI_UBH); | 1006 | usb1 = ubh_get_usb_first(uspi); |
1010 | usb3 = ubh_get_usb_third(USPI_UBH); | 1007 | usb3 = ubh_get_usb_third(uspi); |
1011 | 1008 | ||
1012 | if (!(sb->s_flags & MS_RDONLY)) { | 1009 | if (!(sb->s_flags & MS_RDONLY)) { |
1013 | usb1->fs_time = cpu_to_fs32(sb, get_seconds()); | 1010 | usb1->fs_time = cpu_to_fs32(sb, get_seconds()); |
@@ -1049,8 +1046,8 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data) | |||
1049 | 1046 | ||
1050 | uspi = UFS_SB(sb)->s_uspi; | 1047 | uspi = UFS_SB(sb)->s_uspi; |
1051 | flags = UFS_SB(sb)->s_flags; | 1048 | flags = UFS_SB(sb)->s_flags; |
1052 | usb1 = ubh_get_usb_first(USPI_UBH); | 1049 | usb1 = ubh_get_usb_first(uspi); |
1053 | usb3 = ubh_get_usb_third(USPI_UBH); | 1050 | usb3 = ubh_get_usb_third(uspi); |
1054 | 1051 | ||
1055 | /* | 1052 | /* |
1056 | * Allow the "check" option to be passed as a remount option. | 1053 | * Allow the "check" option to be passed as a remount option. |
@@ -1124,7 +1121,7 @@ static int ufs_statfs (struct super_block *sb, struct kstatfs *buf) | |||
1124 | lock_kernel(); | 1121 | lock_kernel(); |
1125 | 1122 | ||
1126 | uspi = UFS_SB(sb)->s_uspi; | 1123 | uspi = UFS_SB(sb)->s_uspi; |
1127 | usb1 = ubh_get_usb_first (USPI_UBH); | 1124 | usb1 = ubh_get_usb_first (uspi); |
1128 | usb = (struct ufs_super_block *) | 1125 | usb = (struct ufs_super_block *) |
1129 | ((struct ufs_buffer_head *)uspi)->bh[0]->b_data ; | 1126 | ((struct ufs_buffer_head *)uspi)->bh[0]->b_data ; |
1130 | 1127 | ||