Source-Changes-HG archive

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

[src/trunk]: src/sys/lib/libsa Re-introduce SA_HARDCODED_SECSIZE hack, by whi...



details:   https://anonhg.NetBSD.org/src/rev/4d19db02b0e2
branches:  trunk
changeset: 365861:4d19db02b0e2
user:      rin <rin%NetBSD.org@localhost>
date:      Fri Apr 29 07:42:07 2022 +0000

description:
Re-introduce SA_HARDCODED_SECSIZE hack, by which hardcoded DEV_BSIZE is
used instead of secsize obtained by SAIOSECSIZE ioctl.

This hack avoids divdi3 and friends from being linked, in order to
support variable secsize for some archs.

Should be useful for ancient archs, for which secsize is fixed.

Thanks christos@ for comment.

diffstat:

 sys/lib/libsa/ext2fs.c   |  10 ++--------
 sys/lib/libsa/minixfs3.c |  10 ++--------
 sys/lib/libsa/stand.h    |  25 ++++++++++++++++++++++++-
 sys/lib/libsa/ufs.c      |  12 +++---------
 4 files changed, 31 insertions(+), 26 deletions(-)

diffs (143 lines):

diff -r 35cafcbeef60 -r 4d19db02b0e2 sys/lib/libsa/ext2fs.c
--- a/sys/lib/libsa/ext2fs.c    Fri Apr 29 07:19:33 2022 +0000
+++ b/sys/lib/libsa/ext2fs.c    Fri Apr 29 07:42:07 2022 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ext2fs.c,v 1.33 2022/04/27 14:48:50 rin Exp $  */
+/*     $NetBSD: ext2fs.c,v 1.34 2022/04/29 07:42:07 rin Exp $  */
 
 /*
  * Copyright (c) 1997 Manuel Bouyer.
@@ -415,15 +415,9 @@
        struct ext2fs ext2fs;
        size_t buf_size;
        int rc;
-       u_int secsize;
-
-       secsize = 0;
-       rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
-       if (rc != 0 || secsize == 0)
-               secsize = DEV_BSIZE;
 
        rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-           SBOFF / secsize, SBSIZE, sbbuf, &buf_size);
+           SBOFF / GETSECSIZE(f), SBSIZE, sbbuf, &buf_size);
        if (rc)
                return rc;
 
diff -r 35cafcbeef60 -r 4d19db02b0e2 sys/lib/libsa/minixfs3.c
--- a/sys/lib/libsa/minixfs3.c  Fri Apr 29 07:19:33 2022 +0000
+++ b/sys/lib/libsa/minixfs3.c  Fri Apr 29 07:42:07 2022 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: minixfs3.c,v 1.12 2022/04/27 14:48:50 rin Exp $        */
+/*     $NetBSD: minixfs3.c,v 1.13 2022/04/29 07:42:07 rin Exp $        */
 
 /*-
  * Copyright (c) 2012
@@ -449,7 +449,6 @@
        static uint8_t sbbuf[MINBSIZE];
        size_t buf_size;
        int rc;
-       u_int secsize;
 
        /* We must read amount multiple of sector size, hence we can't
         * read SBSIZE and read MINBSIZE.
@@ -457,13 +456,8 @@
        if (SBSIZE > MINBSIZE)
                return EINVAL;
 
-       secsize = 0;
-       rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
-       if (rc != 0 || secsize == 0)
-               secsize = DEV_BSIZE;
-
        rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-           SUPER_BLOCK_OFF / secsize, MINBSIZE, sbbuf, &buf_size);
+           SUPER_BLOCK_OFF / GETSECSIZE(f), MINBSIZE, sbbuf, &buf_size);
        if (rc)
                return rc;
 
diff -r 35cafcbeef60 -r 4d19db02b0e2 sys/lib/libsa/stand.h
--- a/sys/lib/libsa/stand.h     Fri Apr 29 07:19:33 2022 +0000
+++ b/sys/lib/libsa/stand.h     Fri Apr 29 07:42:07 2022 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: stand.h,v 1.85 2022/04/27 14:48:50 rin Exp $   */
+/*     $NetBSD: stand.h,v 1.86 2022/04/29 07:42:07 rin Exp $   */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -64,6 +64,7 @@
 #ifndef _LIBSA_STAND_H_
 #define        _LIBSA_STAND_H_
 
+#include <sys/param.h>
 #include <sys/types.h>
 #include <sys/cdefs.h>
 #include <sys/stat.h>
@@ -320,4 +321,26 @@
 
 int    atoi(const char *);
 
+#if !defined(SA_HARDCODED_SECSIZE)
+#define        GETSECSIZE(f)   getsecsize(f)
+static inline u_int
+getsecsize(struct open_file *f)
+{
+       int rc;
+       u_int secsize = 0;
+
+       rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
+       if (rc != 0 || secsize == 0)
+               secsize = DEV_BSIZE;
+
+       return secsize;
+}
+#else
+/*
+ * For some archs, divdi3 and friends are required to support variable
+ * sector sizes. Shave them off by making secsize compile-time constant.
+ */
+#define        GETSECSIZE(f)   DEV_BSIZE
+#endif
+
 #endif /* _LIBSA_STAND_H_ */
diff -r 35cafcbeef60 -r 4d19db02b0e2 sys/lib/libsa/ufs.c
--- a/sys/lib/libsa/ufs.c       Fri Apr 29 07:19:33 2022 +0000
+++ b/sys/lib/libsa/ufs.c       Fri Apr 29 07:42:07 2022 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ufs.c,v 1.85 2022/04/27 14:48:50 rin Exp $     */
+/*     $NetBSD: ufs.c,v 1.86 2022/04/29 07:42:07 rin Exp $     */
 
 /*-
  * Copyright (c) 1993
@@ -594,21 +594,15 @@
        struct file *fp = (struct file *)f->f_fsdata;
        int rc;
        size_t buf_size;
-       u_int secsize;
 #ifdef LIBSA_FFSv2
        static daddr_t sblock_try[] = SBLOCKSEARCH;
        int i;
 #endif
 
-       secsize = 0;
-       rc = DEV_IOCTL(f->f_dev)(f, SAIOSECSIZE, &secsize);
-       if (rc != 0 || secsize == 0)
-               secsize = DEV_BSIZE;
-
 #ifdef LIBSA_FFSv2
        for (i = 0; sblock_try[i] != -1; i++) {
                rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-                   sblock_try[i] / secsize, SBLOCKSIZE, fs, &buf_size);
+                   sblock_try[i] / GETSECSIZE(f), SBLOCKSIZE, fs, &buf_size);
                if (rc)
                        return rc;
                if (buf_size != SBLOCKSIZE)
@@ -623,7 +617,7 @@
        return EINVAL;
 #else /* LIBSA_FFSv2 */
        rc = DEV_STRATEGY(f->f_dev)(f->f_devdata, F_READ,
-               SBLOCKOFFSET / secsize, SBLOCKSIZE, fs, &buf_size);
+               SBLOCKOFFSET / GETSECSIZE(f), SBLOCKSIZE, fs, &buf_size);
        if (rc)
                return rc;
        if (buf_size != SBLOCKSIZE)



Home | Main Index | Thread Index | Old Index