Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Jun 2017 17:01:43 -0700
From:      Mark Millard <markmi@dsl-only.net>
To:        kib@FreeBSD.org, FreeBSD Current <freebsd-current@freebsd.org>, freebsd-hackers@freebsd.org, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>
Subject:   INO64 in head: Does sys/boot/common/ufsread.c need its "typedef uint32_t ufs_ino_t;" replaced?
Message-ID:  <3AF2C2DB-1A61-4EC3-BCB7-B05D99273561@dsl-only.net>

next in thread | raw e-mail | index | archive | help
buildworld via clang for powerpc64 and powerpc fails for lack of
`__udivdi3' referenced in sys/boot/common/ufsread.c fsread_size
code. But this lead to me looking around and I found a conceptually
separate possible issue. . .

sys/sys/_types.h :

typedef	__uint64_t	__ino_t;	/* inode number */

# find /usr/src/sys/ -exec grep __ino_t {} \; -print | more
typedef __ino_t         ino_t;
/usr/src/sys/sys/stat.h
typedef __ino_t         ino_t;          /* inode number */
/usr/src/sys/sys/types.h
typedef __uint64_t      __ino_t;        /* inode number */
/usr/src/sys/sys/_types.h
typedef __ino_t         ino_t;
/usr/src/sys/sys/dirent.h


sys/boot/common/ufsread.c :

. . .
#include <ufs/ufs/dinode.h>
#include <ufs/ufs/dir.h>
#include <ufs/ffs/fs.h>
. . .
typedef uint32_t        ufs_ino_t;
. . .

Note the 32-bit type above. The headers included
have use of the 64-bit ino_t type as well, for
example:

sys/ufs/ufs/diniode.h :

. . .
#define UFS_ROOTINO     ((ino_t)2)
. . .
#define UFS_WINO        ((ino_t)1)
. . .

sys/ufs/ffs/fs.h :

. . .
#define ino_to_cg(fs, x)        (((ino_t)(x)) / (fs)->fs_ipg)
#define ino_to_fsba(fs, x)                                              =
\
        ((ufs2_daddr_t)(cgimin(fs, ino_to_cg(fs, (ino_t)(x))) +         =
\
            (blkstofrags((fs), ((((ino_t)(x)) % (fs)->fs_ipg) / =
INOPB(fs))))))
#define ino_to_fsbo(fs, x)      (((ino_t)(x)) % INOPB(fs))
. . .


I believe the powerpc64/powerpc issue
gives evidence of ino_t being used in
addition ot ufs_ino_t in
sys/boot/common/ufsread.c 's fsread_size .


Other things that look 32-bit inode-ish:
(I do not claim to know that any of this
matters.)

sys/ufs/ufs/dir.h has:

struct  direct {
        u_int32_t d_ino;                /* inode number of entry */
. . .
struct dirtemplate {
        u_int32_t       dot_ino;
. . .
        u_int32_t       dotdot_ino;
. . .

struct odirtemplate {
        u_int32_t       dot_ino;
. . .
        u_int32_t       dotdot_ino;
. . .


sys/ufs/ffs/fs.h has:

struct jrefrec {
. . .
        uint32_t        jr_ino;

struct jmvrec {
. . .
        uint32_t        jm_ino;

struct jblkrec {
. . .
        uint32_t        jb_ino;

struct jtrncrec {
. . .
        uint32_t        jt_ino;



=3D=3D=3D
Mark Millard
markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3AF2C2DB-1A61-4EC3-BCB7-B05D99273561>