]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ufs: get rid of ubh_{ubhcpymem,memcpyubh}()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 11 Mar 2023 01:44:59 +0000 (20:44 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 18 Oct 2024 21:35:31 +0000 (17:35 -0400)
used only in ufs_read_cylinder_structures()/ufs_put_super_internal()
and there we can just as well avoid bothering with ufs_buffer_head
and just deal with it fragment-by-fragment.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/ufs/super.c
fs/ufs/util.c
fs/ufs/util.h

index bc625788589c06b1a7f9912d1c33be0f7db6101f..e876c60e70eac391a2382bac4189160eccab23e2 100644 (file)
@@ -505,7 +505,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;
-       struct ufs_buffer_head * ubh;
        unsigned char * base, * space;
        unsigned size, blks, i;
 
@@ -521,21 +520,13 @@ static int ufs_read_cylinder_structures(struct super_block *sb)
        if (!base)
                goto failed; 
        sbi->s_csp = (struct ufs_csum *)space;
-       for (i = 0; i < blks; i += uspi->s_fpb) {
-               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);
-               
-               if (!ubh)
+       for (i = 0; i < blks; i++) {
+               struct buffer_head *bh = sb_bread(sb, uspi->s_csaddr + i);
+               if (!bh)
                        goto failed;
-
-               ubh_ubhcpymem (space, ubh, size);
-
-               space += size;
-               ubh_brelse (ubh);
-               ubh = NULL;
+               memcpy(space, bh->b_data, uspi->s_fsize);
+               space += uspi->s_fsize;
+               brelse (bh);
        }
 
        /*
@@ -645,7 +636,6 @@ static void ufs_put_super_internal(struct super_block *sb)
 {
        struct ufs_sb_info *sbi = UFS_SB(sb);
        struct ufs_sb_private_info *uspi = sbi->s_uspi;
-       struct ufs_buffer_head * ubh;
        unsigned char * base, * space;
        unsigned blks, size, i;
 
@@ -656,18 +646,17 @@ static void ufs_put_super_internal(struct super_block *sb)
        size = uspi->s_cssize;
        blks = (size + uspi->s_fsize - 1) >> uspi->s_fshift;
        base = space = (char*) sbi->s_csp;
-       for (i = 0; i < blks; i += uspi->s_fpb) {
-               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);
-               ubh_mark_buffer_dirty (ubh);
-               ubh_brelse (ubh);
+       for (i = 0; i < blks; i++, space += uspi->s_fsize) {
+               struct buffer_head *bh = sb_bread(sb, uspi->s_csaddr + i);
+
+               if (unlikely(!bh)) { // better than an oops...
+                       ufs_panic(sb, __func__,
+                               "can't write part of cylinder group summary");
+                       continue;
+               }
+               memcpy(bh->b_data, space, uspi->s_fsize);
+               mark_buffer_dirty(bh);
+               brelse(bh);
        }
        for (i = 0; i < sbi->s_cg_loaded; i++) {
                ufs_put_cylinder (sb, i);
index 2acf191eb89ede0a7df7d667e948f74228cc2ac6..f0e906ab4ddd9c52681f9cc9cc3914b5ad03b872 100644 (file)
@@ -99,20 +99,6 @@ void ubh_mark_buffer_dirty (struct ufs_buffer_head * ubh)
                mark_buffer_dirty (ubh->bh[i]);
 }
 
-void ubh_mark_buffer_uptodate (struct ufs_buffer_head * ubh, int flag)
-{
-       unsigned i;
-       if (!ubh)
-               return;
-       if (flag) {
-               for ( i = 0; i < ubh->count; i++ )
-                       set_buffer_uptodate (ubh->bh[i]);
-       } else {
-               for ( i = 0; i < ubh->count; i++ )
-                       clear_buffer_uptodate (ubh->bh[i]);
-       }
-}
-
 void ubh_sync_block(struct ufs_buffer_head *ubh)
 {
        if (ubh) {
@@ -146,38 +132,6 @@ int ubh_buffer_dirty (struct ufs_buffer_head * ubh)
        return result;
 }
 
-void _ubh_ubhcpymem_(struct ufs_sb_private_info * uspi, 
-       unsigned char * mem, struct ufs_buffer_head * ubh, unsigned size)
-{
-       unsigned len, bhno;
-       if (size > (ubh->count << uspi->s_fshift))
-               size = ubh->count << uspi->s_fshift;
-       bhno = 0;
-       while (size) {
-               len = min_t(unsigned int, size, uspi->s_fsize);
-               memcpy (mem, ubh->bh[bhno]->b_data, len);
-               mem += uspi->s_fsize;
-               size -= len;
-               bhno++;
-       }
-}
-
-void _ubh_memcpyubh_(struct ufs_sb_private_info * uspi, 
-       struct ufs_buffer_head * ubh, unsigned char * mem, unsigned size)
-{
-       unsigned len, bhno;
-       if (size > (ubh->count << uspi->s_fshift))
-               size = ubh->count << uspi->s_fshift;
-       bhno = 0;
-       while (size) {
-               len = min_t(unsigned int, size, uspi->s_fsize);
-               memcpy (ubh->bh[bhno]->b_data, mem, len);
-               mem += uspi->s_fsize;
-               size -= len;
-               bhno++;
-       }
-}
-
 dev_t
 ufs_get_inode_dev(struct super_block *sb, struct ufs_inode_info *ufsi)
 {
index fafae166ee553167739831f0b92d838ecaeef1f5..391bb4f11d7447fb2d5bbd00e5d054dd2e250fb1 100644 (file)
@@ -263,14 +263,9 @@ extern struct ufs_buffer_head * ubh_bread_uspi(struct ufs_sb_private_info *, str
 extern void ubh_brelse (struct ufs_buffer_head *);
 extern void ubh_brelse_uspi (struct ufs_sb_private_info *);
 extern void ubh_mark_buffer_dirty (struct ufs_buffer_head *);
-extern void ubh_mark_buffer_uptodate (struct ufs_buffer_head *, int);
 extern void ubh_sync_block(struct ufs_buffer_head *);
 extern void ubh_bforget (struct ufs_buffer_head *);
 extern int  ubh_buffer_dirty (struct ufs_buffer_head *);
-#define ubh_ubhcpymem(mem,ubh,size) _ubh_ubhcpymem_(uspi,mem,ubh,size)
-extern void _ubh_ubhcpymem_(struct ufs_sb_private_info *, unsigned char *, struct ufs_buffer_head *, unsigned);
-#define ubh_memcpyubh(ubh,mem,size) _ubh_memcpyubh_(uspi,ubh,mem,size)
-extern void _ubh_memcpyubh_(struct ufs_sb_private_info *, struct ufs_buffer_head *, unsigned char *, unsigned);
 
 /* This functions works with cache pages*/
 struct folio *ufs_get_locked_folio(struct address_space *mapping, pgoff_t index);