[PATCH] ufs2 write: inodes write
[firefly-linux-kernel-4.4.55.git] / fs / ufs / super.c
index 1427e44bfd2ae49d869b22b9ec1fa08363f4efc7..cf74548aa85a395cb51872d1ac3299243c275cca 100644 (file)
 /*
  * Print contents of ufs_super_block, useful for debugging
  */
-static void ufs_print_super_stuff(struct super_block *sb, unsigned flags,
+static void ufs_print_super_stuff(struct super_block *sb,
                                  struct ufs_super_block_first *usb1,
                                  struct ufs_super_block_second *usb2,
                                  struct ufs_super_block_third *usb3)
 {
+       u32 magic = fs32_to_cpu(sb, usb3->fs_magic);
+
        printk("ufs_print_super_stuff\n");
-       printk("  magic:     0x%x\n", fs32_to_cpu(sb, usb3->fs_magic));
-       if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) {
+       printk("  magic:     0x%x\n", magic);
+       if (fs32_to_cpu(sb, usb3->fs_magic) == UFS2_MAGIC) {
                printk("  fs_size:   %llu\n", (unsigned long long)
                       fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_size));
                printk("  fs_dsize:  %llu\n", (unsigned long long)
@@ -119,6 +121,12 @@ static void ufs_print_super_stuff(struct super_block *sb, unsigned flags,
                printk("  cs_nbfree(No of free blocks):  %llu\n",
                       (unsigned long long)
                       fs64_to_cpu(sb, usb2->fs_un.fs_u2.cs_nbfree));
+               printk(KERN_INFO"  cs_nifree(Num of free inodes): %llu\n",
+                      (unsigned long long)
+                      fs64_to_cpu(sb, usb3->fs_un1.fs_u2.cs_nifree));
+               printk(KERN_INFO"  cs_nffree(Num of free frags): %llu\n",
+                      (unsigned long long)
+                      fs64_to_cpu(sb, usb3->fs_un1.fs_u2.cs_nffree));
        } else {
                printk(" sblkno:      %u\n", fs32_to_cpu(sb, usb1->fs_sblkno));
                printk(" cblkno:      %u\n", fs32_to_cpu(sb, usb1->fs_cblkno));
@@ -201,7 +209,7 @@ static void ufs_print_cylinder_stuff(struct super_block *sb,
        printk("\n");
 }
 #else
-#  define ufs_print_super_stuff(sb, flags, usb1, usb2, usb3) /**/
+#  define ufs_print_super_stuff(sb, usb1, usb2, usb3) /**/
 #  define ufs_print_cylinder_stuff(sb, cg) /**/
 #endif /* CONFIG_UFS_DEBUG */
 
@@ -424,7 +432,6 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
 {
        struct ufs_sb_info *sbi = UFS_SB(sb);
        struct ufs_sb_private_info *uspi = sbi->s_uspi;
-       unsigned flags = sbi->s_flags;
        struct ufs_buffer_head * ubh;
        unsigned char * base, * space;
        unsigned size, blks, i;
@@ -448,11 +455,7 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
                if (i + uspi->s_fpb > blks)
                        size = (blks - i) * uspi->s_fsize;
 
-               if ((flags & UFS_TYPE_MASK) == UFS_TYPE_UFS2) 
-                       ubh = ubh_bread(sb,
-                               fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_csaddr) + i, size);
-               else 
-                       ubh = ubh_bread(sb, uspi->s_csaddr + i, size);
+               ubh = ubh_bread(sb, uspi->s_csaddr + i, size);
                
                if (!ubh)
                        goto failed;
@@ -547,6 +550,7 @@ static void ufs_put_cstotal(struct super_block *sb)
                        cpu_to_fs32(sb, uspi->cs_total.cs_nffree);
        }
        ubh_mark_buffer_dirty(USPI_UBH(uspi));
+       ufs_print_super_stuff(sb, usb1, usb2, usb3);
        UFSD("EXIT\n");
 }
 
@@ -574,7 +578,9 @@ static void ufs_put_super_internal(struct super_block *sb)
                size = uspi->s_bsize;
                if (i + uspi->s_fpb > blks)
                        size = (blks - i) * uspi->s_fsize;
+
                ubh = ubh_bread(sb, uspi->s_csaddr + i, size);
+
                ubh_memcpyubh (ubh, space, size);
                space += size;
                ubh_mark_buffer_uptodate (ubh, 1);
@@ -888,7 +894,7 @@ magic_found:
        }
 
 
-       ufs_print_super_stuff(sb, flags, usb1, usb2, usb3);
+       ufs_print_super_stuff(sb, usb1, usb2, usb3);
 
        /*
         * Check, if file system was correctly unmounted.
@@ -971,7 +977,12 @@ magic_found:
        uspi->s_npsect = ufs_get_fs_npsect(sb, usb1, usb3);
        uspi->s_interleave = fs32_to_cpu(sb, usb1->fs_interleave);
        uspi->s_trackskew = fs32_to_cpu(sb, usb1->fs_trackskew);
-       uspi->s_csaddr = fs32_to_cpu(sb, usb1->fs_csaddr);
+
+       if (uspi->fs_magic == UFS2_MAGIC)
+               uspi->s_csaddr = fs64_to_cpu(sb, usb3->fs_un1.fs_u2.fs_csaddr);
+       else
+               uspi->s_csaddr = fs32_to_cpu(sb, usb1->fs_csaddr);
+
        uspi->s_cssize = fs32_to_cpu(sb, usb1->fs_cssize);
        uspi->s_cgsize = fs32_to_cpu(sb, usb1->fs_cgsize);
        uspi->s_ntrak = fs32_to_cpu(sb, usb1->fs_ntrak);
@@ -1058,7 +1069,6 @@ static void ufs_write_super(struct super_block *sb)
        unsigned flags;
 
        lock_kernel();
-
        UFSD("ENTER\n");
        flags = UFS_SB(sb)->s_flags;
        uspi = UFS_SB(sb)->s_uspi;