Module Name: src
Committed By: perseant
Date: Mon Jul 1 22:15:22 UTC 2024
Modified Files:
src/sys/fs/exfatfs [perseant-exfatfs]: exfatfs.h exfatfs_cksum.c
exfatfs_cksum.h exfatfs_conv.c exfatfs_conv.h exfatfs_dirent.h
exfatfs_extern.c exfatfs_extern.h exfatfs_inode.h exfatfs_mount.h
exfatfs_rename.c exfatfs_rename.h exfatfs_tables.c exfatfs_tables.h
exfatfs_trie.c exfatfs_trie.h exfatfs_trie_basic.c
exfatfs_trie_basic.h exfatfs_vfsops.c exfatfs_vfsops.h
exfatfs_vnops.c exfatfs_vnops.h
Log Message:
Update to match the NetBSD style guide.
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/fs/exfatfs/exfatfs.h \
src/sys/fs/exfatfs/exfatfs_cksum.c src/sys/fs/exfatfs/exfatfs_cksum.h \
src/sys/fs/exfatfs/exfatfs_conv.c src/sys/fs/exfatfs/exfatfs_conv.h \
src/sys/fs/exfatfs/exfatfs_dirent.h src/sys/fs/exfatfs/exfatfs_extern.c \
src/sys/fs/exfatfs/exfatfs_extern.h src/sys/fs/exfatfs/exfatfs_inode.h \
src/sys/fs/exfatfs/exfatfs_mount.h src/sys/fs/exfatfs/exfatfs_rename.c \
src/sys/fs/exfatfs/exfatfs_rename.h src/sys/fs/exfatfs/exfatfs_tables.c \
src/sys/fs/exfatfs/exfatfs_tables.h src/sys/fs/exfatfs/exfatfs_trie.c \
src/sys/fs/exfatfs/exfatfs_trie.h src/sys/fs/exfatfs/exfatfs_trie_basic.c \
src/sys/fs/exfatfs/exfatfs_trie_basic.h \
src/sys/fs/exfatfs/exfatfs_vfsops.c src/sys/fs/exfatfs/exfatfs_vfsops.h \
src/sys/fs/exfatfs/exfatfs_vnops.c src/sys/fs/exfatfs/exfatfs_vnops.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/fs/exfatfs/exfatfs.h
diff -u src/sys/fs/exfatfs/exfatfs.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,31 @@
-/* $NetBSD: exfatfs.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef FS_EXFATFS_EXFATFS_H_
#define FS_EXFATFS_EXFATFS_H_
@@ -63,7 +90,8 @@ struct exfatfs {
#define xf_FatLength xf_exfatdfs.xdf_FatLength
#define xf_ClusterHeapOffset xf_exfatdfs.xdf_ClusterHeapOffset
#define xf_ClusterCount xf_exfatdfs.xdf_ClusterCount
-#define xf_FirstClusterOfRootDirectory xf_exfatdfs.xdf_FirstClusterOfRootDirectory
+#define xf_FirstClusterOfRootDirectory \
+ xf_exfatdfs.xdf_FirstClusterOfRootDirectory
#define xf_VolumeSerialNumber xf_exfatdfs.xdf_VolumeSerialNumber
#define xf_FileSystemRevision xf_exfatdfs.xdf_FileSystemRevision
#define EXFATFS_MAJOR(fs) (((fs)->xf_FileSystemRevision & 0xFF00) >> 8)
@@ -108,7 +136,8 @@ struct exfatfs {
* DEV_BSIZE is 512 bytes and cluster numbers are 4 bytes,
* so there are 128 = 2**7 entries per DEV_BSIZE.
*/
-#define EXFATFS_FATBLK(fs, clust) (((fs)->xf_FatOffset >> ((fs)->xf_BytesPerSectorShift - DEV_BSHIFT)) + ((clust) >> 7))
+#define EXFATFS_FATBLK(fs, clust) (((fs)->xf_FatOffset >> \
+ ((fs)->xf_BytesPerSectorShift - DEV_BSHIFT)) + ((clust) >> 7))
#define EXFATFS_FATOFF(clust) ((clust) & 0x7F)
#if 0
@@ -144,18 +173,26 @@ struct exfatfs_args {
#define EXFATFS_DIRENT2BYTES(fs, e) ((e) << EXFATFS_DIRENT_BASESHIFT)
/* Convert from sizeof(dirent) to cluster */
-#define EXFATFS_DIRENT_SHIFT(fs) ((fs)->xf_BytesPerSectorShift + (fs)->xf_SectorsPerClusterShift - EXFATFS_DIRENT_BASESHIFT)
+#define EXFATFS_DIRENT_SHIFT(fs) ((fs)->xf_BytesPerSectorShift + \
+ (fs)->xf_SectorsPerClusterShift - EXFATFS_DIRENT_BASESHIFT)
-#define EXFATFS_DIRENT2DEVBSIZE(fs, e) ((e) >> (DEV_BSHIFT - EXFATFS_DIRENT_BASESHIFT))
-#define EXFATFS_DEVBSIZE2DIRENT(fs, e) ((e) << (DEV_BSHIFT - EXFATFS_DIRENT_BASESHIFT))
-#define EXFATFS_DIRENT2FSSEC(fs, e) ((e) >> (fs->xf_BytesPerSectorShift - EXFATFS_DIRENT_BASESHIFT))
-#define EXFATFS_FSSEC2DIRENT(fs, sec) ((sec) << (fs->xf_BytesPerSectorShift - EXFATFS_DIRENT_BASESHIFT))
+#define EXFATFS_DIRENT2DEVBSIZE(fs, e) ((e) >> (DEV_BSHIFT - \
+ EXFATFS_DIRENT_BASESHIFT))
+#define EXFATFS_DEVBSIZE2DIRENT(fs, e) ((e) << (DEV_BSHIFT \
+ - EXFATFS_DIRENT_BASESHIFT))
+#define EXFATFS_DIRENT2FSSEC(fs, e) ((e) >> (fs->xf_BytesPerSectorShift \
+ - EXFATFS_DIRENT_BASESHIFT))
+#define EXFATFS_FSSEC2DIRENT(fs, sec) ((sec) << (fs->xf_BytesPerSectorShift \
+ - EXFATFS_DIRENT_BASESHIFT))
/* If we have an entry number we may need to convert it to lbn and offset */
-#define EXFATFS_DIRENT2ENTRY(fs, e) EXFATFS_BYTES2DIRENT((fs), (EXFATFS_DIRENT2BYTES((fs), (e)) & SECMASK(fs)))
+#define EXFATFS_DIRENT2ENTRY(fs, e) EXFATFS_BYTES2DIRENT((fs), \
+ (EXFATFS_DIRENT2BYTES((fs), (e)) & SECMASK(fs)))
-#define EXFATFS_CLUST_ENTRY2INO(fs, clust, entry) ((((uint64_t)clust) << EXFATFS_DIRENT_SHIFT(fs)) | (entry))
-#define EXFATFS_HWADDR_ENTRY2INO(fs, bn, entry) ((EXFATFS_HWADDR2CLUSTER((fs), (bn)) << EXFATFS_DIRENT_SHIFT(fs)) | (entry))
+#define EXFATFS_CLUST_ENTRY2INO(fs, clust, entry) ((((uint64_t)clust) \
+ << EXFATFS_DIRENT_SHIFT(fs)) | (entry))
+#define EXFATFS_HWADDR_ENTRY2INO(fs, bn, entry) ((EXFATFS_HWADDR2CLUSTER((fs),\
+ (bn)) << EXFATFS_DIRENT_SHIFT(fs)) | (entry))
#define INO2CLUST(ino) ((ino) >> EXFATFS_DIRENT_SHIFT(fs))
#define INO2ENTRY(ino) ((ino) & ((1 << EXFATFS_DIRENT_SHIFT(fs)) - 1))
#define ROOTDIRCLUST 1
@@ -165,24 +202,40 @@ struct exfatfs_args {
/*
* Units conversions between clusters, filesystem sectors and DEV_BSIZE.
*/
-#define EXFATFS_FSSEC2DEVBSIZE(fs, bn) ((bn) << ((fs)->xf_BytesPerSectorShift - DEV_BSHIFT))
-#define EXFATFS_DEVBSIZE2FSSEC(fs, bn) ((bn) >> ((fs)->xf_BytesPerSectorShift - DEV_BSHIFT))
-#define EXFATFS_BYTES2CLUSTER(fs, n) ((n) >> ((fs)->xf_BytesPerSectorShift + (fs)->xf_SectorsPerClusterShift))
+#define EXFATFS_FSSEC2DEVBSIZE(fs, bn) ((bn) << ((fs)->xf_BytesPerSectorShift \
+ - DEV_BSHIFT))
+#define EXFATFS_DEVBSIZE2FSSEC(fs, bn) ((bn) >> ((fs)->xf_BytesPerSectorShift \
+ - DEV_BSHIFT))
+#define EXFATFS_BYTES2CLUSTER(fs, n) ((n) >> ((fs)->xf_BytesPerSectorShift \
+ + (fs)->xf_SectorsPerClusterShift))
#define EXFATFS_BYTES2FSSEC(fs, n) ((n) >> ((fs)->xf_BytesPerSectorShift))
#define EXFATFS_FSSEC2BYTES(fs, n) ((n) << ((fs)->xf_BytesPerSectorShift))
-#define EXFATFS_CLUSTER2BYTES(fs, cn) ((cn) << ((fs)->xf_BytesPerSectorShift + (fs)->xf_SectorsPerClusterShift))
-#define EXFATFS_CLUSTER2DEVBSIZE(fs, cn) ((cn) << ((fs)->xf_BytesPerSectorShift + (fs)->xf_SectorsPerClusterShift - DEV_BSHIFT))
-#define EXFATFS_DEVBSIZE2CLUSTER(fs, bn) ((bn) >> ((fs)->xf_BytesPerSectorShift + (fs)->xf_SectorsPerClusterShift - DEV_BSHIFT))
-#define EXFATFS_CLUSTER2FSSEC(fs, clust) ((clust) << (fs)->xf_SectorsPerClusterShift)
-#define EXFATFS_FSSEC2CLUSTER(fs, lbn) ((lbn) >> (fs)->xf_SectorsPerClusterShift)
+#define EXFATFS_CLUSTER2BYTES(fs, cn) ((cn) << ((fs)->xf_BytesPerSectorShift \
+ + (fs)->xf_SectorsPerClusterShift))
+#define EXFATFS_CLUSTER2DEVBSIZE(fs, cn) ((cn) << ((fs)->xf_BytesPerSectorShift\
+ + (fs)->xf_SectorsPerClusterShift - DEV_BSHIFT))
+#define EXFATFS_DEVBSIZE2CLUSTER(fs, bn) ((bn) >> ((fs)->xf_BytesPerSectorShift\
+ + (fs)->xf_SectorsPerClusterShift - DEV_BSHIFT))
+#define EXFATFS_CLUSTER2FSSEC(fs, clust) ((clust) << \
+ (fs)->xf_SectorsPerClusterShift)
+#define EXFATFS_FSSEC2CLUSTER(fs, lbn) ((lbn) >> \
+ (fs)->xf_SectorsPerClusterShift)
#define SECSIZE(fs) (1 << (fs)->xf_BytesPerSectorShift)
#define SECMASK(fs) (SECSIZE(fs) - 1)
-#define CLUSTERSIZE(fs) (1 << ((fs)->xf_BytesPerSectorShift + (fs)->xf_SectorsPerClusterShift))
+#define CLUSTERSIZE(fs) (1 << ((fs)->xf_BytesPerSectorShift + \
+ (fs)->xf_SectorsPerClusterShift))
#define CLUSTERMASK(fs) (CLUSTERSIZE(fs) - 1)
-
-#define EXFATFS_CLUSTER2HWADDR(fs, clust) (EXFATFS_CLUSTER2FSSEC((fs), (clust) - 2) + (fs)->xf_ClusterHeapOffset)
-#define EXFATFS_HWADDR2CLUSTER(fs, bn) (EXFATFS_FSSEC2CLUSTER((fs), (bn) - (fs)->xf_ClusterHeapOffset) + 2)
+/* The unit in which I/O is performed */
+#define IOSIZE(fs) MIN(CLUSTERSIZE(fs), MAXPHYS)
+#define IOMASK(fs) (IOSIZE(fs) - 1)
+
+#define EXFATFS_CLUSTER2HWADDR(fs, clust) (EXFATFS_CLUSTER2FSSEC((fs), \
+ (clust) - 2) + (fs)->xf_ClusterHeapOffset)
+#define EXFATFS_HWADDR2CLUSTER(fs, bn) (EXFATFS_FSSEC2CLUSTER((fs), (bn) \
+ - (fs)->xf_ClusterHeapOffset) + 2)
/* The offset of this block relative to start of cluster, in dirent units */
-#define EXFATFS_HWADDR2DIRENT(fs, bn) EXFATFS_DEVBSIZE2DIRENT((fs), ((bn) - EXFATFS_CLUSTER2HWADDR((fs), EXFATFS_HWADDR2CLUSTER((fs), (bn)))))
+#define EXFATFS_HWADDR2DIRENT(fs, bn) EXFATFS_DEVBSIZE2DIRENT((fs), \
+ ((bn) - EXFATFS_CLUSTER2HWADDR((fs), \
+ EXFATFS_HWADDR2CLUSTER((fs), (bn)))))
#endif /* FS_EXFATFS_EXFATFS_H_ */
Index: src/sys/fs/exfatfs/exfatfs_cksum.c
diff -u src/sys/fs/exfatfs/exfatfs_cksum.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_cksum.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_cksum.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_cksum.c Mon Jul 1 22:15:21 2024
@@ -1,7 +1,7 @@
-/* $NetBSD: exfatfs_cksum.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_cksum.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
- * Copyright (c) 2022 The NetBSD Foundation, Inc.
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_cksum.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_cksum.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
#include <sys/types.h>
#ifdef _KERNEL
@@ -48,7 +48,7 @@ __KERNEL_RCSID(0, "$NetBSD: exfatfs_cksu
#ifdef EXFATFS_CKSUM_DEBUG
# define DPRINTF(x) printf x
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
/*
@@ -135,78 +135,6 @@ uint16_t exfatfs_cksum16(uint16_t seed,
return cksum;
}
-/*
-uint32_t BootChecksum(uint8_t *sectors, uint16_t BytesPerSector)
-{
- uint32_t NumberOfBytes = (uint32_t)BytesPerSector * 11;
- uint32_t Checksum = 0;
- uint32_t Index;
-
- for (Index = 0; Index < NumberOfBytes; Index++)
- {
- if ((Index == 106) || (Index == 107) || (Index == 112))
- {
- continue;
- }
- Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (uint32_t)Sectors[Index];
- }
-
- return Checksum;
-}
-*/
-
-/*
-uint16_t EntrySetChecksum(uint8_t * Entries, uint8_t SecondaryCount)
-{
- uint16_t NumberOfBytes = ((uint16_t)SecondaryCount + 1) * 32;
- uint16_t Checksum = 0;
- uint16_t Index;
-
- for (Index = 0; Index < NumberOfBytes; Index++)
- {
- if ((Index == 2) || (Index == 3))
- {
- continue;
- }
- Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (uint16_t)Entries[Index];
- }
- return Checksum;
-}
-
-uint32_t TableChecksum
-(
- uint8_t * Table, // points to an in-memory copy of the up-case table
- uint64_t DataLength
-)
-{
- uint32_t Checksum = 0;
- uint64_t Index;
-
- for (Index = 0; Index < DataLength; Index++)
- {
- Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (uint32_t)Table[Index];
- }
-
- return Checksum;
-}
-*/
-
-/*
-uint16_t NameHash (uint16_t *FileName, uint8_t NameLength)
-{
- uint8_t * Buffer = (uint8_t *)FileName;
- uint16_t NumberOfBytes = (uint16_t)NameLength * 2;
- uint16_t Hash = 0;
- uint16_t Index;
-
- for (Index = 0; Index < NumberOfBytes; Index++)
- {
- Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (uint16_t)Buffer[Index];
- }
- return Hash;
-}
-*/
-
void htole_bootblock(struct exfatfs *out, struct exfatfs *in)
{
memcpy(out, in, sizeof(in->xf_JumpBoot)
Index: src/sys/fs/exfatfs/exfatfs_cksum.h
diff -u src/sys/fs/exfatfs/exfatfs_cksum.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_cksum.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_cksum.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_cksum.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,31 @@
-/* $NetBSD: exfatfs_cksum.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_cksum.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_CKSUM_H_
#define EXFATFS_CKSUM_H_
@@ -8,17 +35,12 @@
#include <fs/exfatfs/exfatfs.h>
#include <fs/exfatfs/exfatfs_dirent.h>
-uint32_t exfatfs_cksum32(uint32_t seed, uint8_t *data, uint64_t datalen,
- uint8_t *ignore, uint8_t ignorelen);
-uint16_t exfatfs_namehash(struct exfatfs *fs,
- uint16_t seed, uint16_t *name, int namelen);
-uint16_t exfatfs_cksum16(uint16_t seed, uint8_t *data, uint64_t datalen,
- uint8_t *ignore, uint8_t ignorelen);
-void htole_bootblock(struct exfatfs *out, struct exfatfs *in);
-void letoh_bootblock(struct exfatfs *out, struct exfatfs *in);
-void htole_dfe(struct exfatfs_dfe *out,
- struct exfatfs_dfe *in);
-void letoh_dfe(struct exfatfs_dfe *out,
- struct exfatfs_dfe *in);
+uint32_t exfatfs_cksum32(uint32_t, uint8_t *, uint64_t, uint8_t *, uint8_t);
+uint16_t exfatfs_namehash(struct exfatfs *, uint16_t, uint16_t *, int);
+uint16_t exfatfs_cksum16(uint16_t, uint8_t *, uint64_t, uint8_t *, uint8_t);
+void htole_bootblock(struct exfatfs *, struct exfatfs *);
+void letoh_bootblock(struct exfatfs *, struct exfatfs *);
+void htole_dfe(struct exfatfs_dfe *, struct exfatfs_dfe *);
+void letoh_dfe(struct exfatfs_dfe *, struct exfatfs_dfe *);
#endif /* EXFATFS_CKSUM_H_ */
Index: src/sys/fs/exfatfs/exfatfs_conv.c
diff -u src/sys/fs/exfatfs/exfatfs_conv.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_conv.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_conv.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_conv.c Mon Jul 1 22:15:21 2024
@@ -1,7 +1,7 @@
-/* $NetBSD: exfatfs_conv.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_conv.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
- * Copyright (c) 2022 The NetBSD Foundation, Inc.
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,10 +25,6 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_conv.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
-
/*-
* Copyright (C) 1995, 1997 Wolfgang Solfrank.
* Copyright (C) 1995, 1997 TooLs GmbH.
@@ -77,6 +73,9 @@ __KERNEL_RCSID(0, "$NetBSD: exfatfs_conv
*
*/
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_conv.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
+
#if HAVE_NBTOOL_CONFIG_H
#include "nbtool_config.h"
#endif
@@ -86,9 +85,6 @@ __KERNEL_RCSID(0, "$NetBSD: exfatfs_conv
#define KASSERT(x) assert(x)
#endif
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_conv.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
-
/*
* System include files.
*/
@@ -158,7 +154,8 @@ static int utf8ucs2(const u_int8_t *, in
* file timestamps. The passed in unix time is assumed to be in GMT.
*/
void
-exfatfs_unix2dostime(const struct timespec *tsp, int gmtoff, uint32_t *dtp, uint8_t *dhp)
+exfatfs_unix2dostime(const struct timespec *tsp, int gmtoff, uint32_t *dtp,
+ uint8_t *dhp)
{
u_long t;
struct clock_ymdhms ymd;
@@ -210,7 +207,8 @@ invalid_dos_date:
* not be too efficient.
*/
struct timespec *
-exfatfs_dos2unixtime(uint32_t dt, u_int8_t dh, int gmtoff, struct timespec *tsp)
+exfatfs_dos2unixtime(uint32_t dt, u_int8_t dh, int gmtoff,
+ struct timespec *tsp)
{
time_t seconds;
struct clock_ymdhms ymd;
@@ -245,7 +243,8 @@ exfatfs_dos2unixtime(uint32_t dt, u_int8
* User-space versions of the above.
*/
void
-exfatfs_unix2dostime(const struct timespec *tsp, int gmtoff, uint32_t *dtp, uint8_t *dhp)
+exfatfs_unix2dostime(const struct timespec *tsp, int gmtoff, uint32_t *dtp,
+ uint8_t *dhp)
{
time_t t;
struct tm *tm;
@@ -292,12 +291,14 @@ invalid_dos_date:
}
struct timespec *
-exfatfs_dos2unixtime(uint32_t dt, uint8_t dh, int gmtoff, struct timespec *tsp) {
+exfatfs_dos2unixtime(uint32_t dt, uint8_t dh, int gmtoff, struct timespec *tsp)
+{
struct tm tm;
time_t seconds;
memset(&tm, 0, sizeof(tm));
- tm.tm_year = ((dt & DT_YEAR_MASK) >> DT_YEAR_SHIFT) + DOSBIASYEAR - 1900;
+ tm.tm_year = ((dt & DT_YEAR_MASK) >> DT_YEAR_SHIFT)
+ + DOSBIASYEAR - 1900;
tm.tm_mon = ((dt & DT_MONTH_MASK) - 1) >> DT_MONTH_SHIFT;
tm.tm_mday = (dt & DT_DAY_MASK) >> DT_DAY_SHIFT;
tm.tm_hour = (dt & DT_HOURS_MASK) >> DT_HOURS_SHIFT;
@@ -380,7 +381,9 @@ utf8ucs2(const u_int8_t *in, int n, u_in
return 2;
} else if (in[0] <= 0xef) {
if (n < 3) return 0;
- outch = (in[0] & 0x1f) << 12 | (in[1] & 0x3f) << 6 | (in[2] & 0x3f);
+ outch = (in[0] & 0x1f) << 12
+ | (in[1] & 0x3f) << 6
+ | (in[2] & 0x3f);
if (out)
*out = htole16(outch);
return 3;
@@ -438,5 +441,3 @@ exfatfs_utf8ucs2str(const u_int8_t *in,
return p - out;
}
-
-
Index: src/sys/fs/exfatfs/exfatfs_conv.h
diff -u src/sys/fs/exfatfs/exfatfs_conv.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_conv.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_conv.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_conv.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,31 @@
-/* $NetBSD: exfatfs_conv.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_conv.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_CONV_H_
#define EXFATFS_CONV_H_
@@ -12,6 +39,8 @@ struct timespec;
int exfatfs_ucs2utf8str(const uint16_t *, int, uint8_t *, int);
int exfatfs_utf8ucs2str(const uint8_t *, int, uint16_t *, int);
-void exfatfs_unix2dostime(const struct timespec *tsp, int gmtoff, uint32_t *, uint8_t *);
-struct timespec *exfatfs_dos2unixtime(uint32_t dt, uint8_t dh, int gmtoff, struct timespec *tsp);
+void exfatfs_unix2dostime(const struct timespec *, int, uint32_t *, uint8_t *);
+struct timespec *exfatfs_dos2unixtime(uint32_t, uint8_t, int,
+ struct timespec *);
+
#endif /* EXFATFS_CONV_H_ */
Index: src/sys/fs/exfatfs/exfatfs_dirent.h
diff -u src/sys/fs/exfatfs/exfatfs_dirent.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_dirent.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_dirent.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_dirent.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,31 @@
-/* $NetBSD: exfatfs_dirent.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_dirent.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_DIRENT_H_
#define EXFATFS_DIRENT_H_
@@ -11,7 +38,8 @@ struct exfatfs_dirent {
#define XD_ENTRYTYPE_TYPECODE_MASK 0x1f /* All values valid */
#define XD_ENTRYTYPE_TYPEIMPORTANCE_MASK 0x20 /* 0 = critical, 1 = benign */
#define XD_ENTRYTYPE_TYPECATEGORY_MASK 0x40 /* 0 = primary, 1 = secondary */
-#define ISPRIMARY(dp) (((dp)->xd_entryType & XD_ENTRYTYPE_TYPECATEGORY_MASK) == 0)
+#define ISPRIMARY(dp) (((dp)->xd_entryType & XD_ENTRYTYPE_TYPECATEGORY_MASK) \
+ == 0)
#define XD_ENTRYTYPE_INUSE_MASK 0x80 /* 0 = not in use, 1 = in use */
#define ISINUSE(dp) (((dp)->xd_entryType & XD_ENTRYTYPE_INUSE_MASK) > 0)
@@ -43,8 +71,10 @@ struct exfatfs_dirent_plus {
struct exfatfs_dirent_primary {
uint8_t xd_entryType; /* Byte 0 */
- uint8_t xd_secondaryCount; /* Byte 1 */ /* # of secondary entries after this one */
- uint16_t xd_setChecksum; /* Bytes 2-3 */ /* Checksum of all dirents, excluding this field */
+ /* # of secondary entries after this one */
+ uint8_t xd_secondaryCount; /* Byte 1 */
+ /* Checksum of all dirents, excluding this field */
+ uint16_t xd_setChecksum; /* Bytes 2-3 */
uint16_t xd_generalPrimaryFlags; /* Bytes 4-5 */
#define XD_GENERALPRIMARYFLAGS_ALLOCATIONPOSSIBLE_MASK 0x0001
#define XD_GENERALPRIMARYFLAGS_NOFATCHAIN 0x0002
@@ -112,7 +142,8 @@ struct exfatfs_dfe {
#define XD_FILEATTR_RESERVED1 0x0008
#define XD_FILEATTR_DIRECTORY 0x0010
#define XD_FILEATTR_ARCHIVE 0x0020
-#define XD_FILEATTR_SYMLINK 0x0040 /* Non-standard, from dorimanx/exfat-nofuse */
+/* Non-standard, from dorimanx/exfat-nofuse */
+#define XD_FILEATTR_SYMLINK 0x0040
uint8_t xd_reserved1[2];
uint32_t xd_createTimestamp;
uint32_t xd_lastModifiedTimestamp;
Index: src/sys/fs/exfatfs/exfatfs_extern.c
diff -u src/sys/fs/exfatfs/exfatfs_extern.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_extern.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_extern.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_extern.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_extern.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_extern.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -69,7 +69,7 @@ typedef struct uvvnode uvnode_t;
# include <stdio.h>
# endif /* !_KERNEL */
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
#ifdef _KERNEL
@@ -204,7 +204,8 @@ exfatfs_bmap_shared(struct vnode *vp, da
}
assert(pcn >= 2 && pcn < fs->xf_ClusterCount + 2);
/* Read the FAT to find the next cluster */
- if ((error = bread(fs->xf_devvp, EXFATFS_FATBLK(fs, pcn), SECSIZE(fs), 0, &bp)) != 0) {
+ if ((error = bread(fs->xf_devvp, EXFATFS_FATBLK(fs, pcn),
+ SECSIZE(fs), 0, &bp)) != 0) {
printf("failed to read FAT pcn %u block 0x%x\n",
(unsigned)pcn, (unsigned)EXFATFS_FATBLK(fs, pcn));
goto errout;
@@ -238,7 +239,7 @@ exfatfs_bmap_shared(struct vnode *vp, da
xip->xi_fatcache_pc = pcn;
*bnp = EXFATFS_CLUSTER2HWADDR(fs, pcn)
+ EXFATFS_FSSEC2DEVBSIZE(fs, (targetlbn
- & ((1 << fs->xf_SectorsPerClusterShift) - 1)));
+ & ((1 << fs->xf_SectorsPerClusterShift) - 1)));
/* If we found it, hint the rest of the cluster. */
run = EXFATFS_CLUSTER2FSSEC(fs, targetcn + 1) - targetlbn - 1;
@@ -246,7 +247,7 @@ exfatfs_bmap_shared(struct vnode *vp, da
*runp = run;
}
- DPRINTF(("BMAP return lcn %d at pcn 0x%lx -> lbn %d..%d at bn 0x%lx..0x%lx\n",
+ DPRINTF(("BMAP lcn %d at pcn 0x%lx -> lbn %d..%d at bn 0x%lx..0x%lx\n",
(int)lcn, (unsigned long)pcn,
(int)targetlbn, (int)(targetlbn + run),
(unsigned long)*bnp,
@@ -256,7 +257,8 @@ errout:
return error;
}
-int exfatfs_mountfs_shared(struct vnode *devvp, struct exfatfs_mount *xmp, unsigned secsize, struct exfatfs **fsp)
+int exfatfs_mountfs_shared(struct vnode *devvp, struct exfatfs_mount *xmp,
+ unsigned secsize, struct exfatfs **fsp)
{
struct exfatfs *fs = NULL;
struct buf *bp;
@@ -304,7 +306,7 @@ int exfatfs_mountfs_shared(struct vnode
secsize, 0, &bp)) < 0) {
DPRINTF(("bread (., %lu, %lu, ., .) errno %d\n",
(unsigned long)((bn + boot_offset)
- << (secshift - DEV_BSHIFT)),
+ << (secshift - DEV_BSHIFT)),
(unsigned long)secsize, error));
continue;
}
@@ -917,10 +919,16 @@ exfatfs_scandir(struct vnode *dvp,
uint16_t ucs2[NAME_MAX];
uint8_t utf8[NAME_MAX];
int namlen;
- exfatfs_get_file_name(xip, ucs2, &namlen, sizeof(ucs2));
- namlen = exfatfs_ucs2utf8str(ucs2, namlen, utf8, sizeof(utf8));
- printf("trace process inum 0x%lx primary 0x%hhx valid %d len %d name %.*s\n",
- INUM(xip), xip->xi_direntp[0]->xd_entryType, valid, namlen, namlen, utf8);
+ exfatfs_get_file_name(xip, ucs2,
+ &namlen, sizeof(ucs2));
+ namlen = exfatfs_ucs2utf8str(ucs2,
+ namlen, utf8, sizeof(utf8));
+ printf("trace process inum 0x%lx"
+ " primary 0x%hhx valid %d"
+ " len %d name %.*s\n",
+ INUM(xip),
+ xip->xi_direntp[0]->xd_entryType,
+ valid, namlen, namlen, utf8);
}
#endif /* TRACE_INUM */
@@ -930,8 +938,10 @@ exfatfs_scandir(struct vnode *dvp,
assert(xip->xi_direntp[1] != NULL);
assert(dxip->xi_serial == dserial);
if (validfunc != NULL) {
- flags = (*validfunc)(arg, xip, EXFATFS_DIRENT2BYTES(fs, off));
- assert(dxip->xi_serial == dserial);
+ flags = (*validfunc)(arg, xip,
+ EXFATFS_DIRENT2BYTES(fs, off));
+ assert(dxip->xi_serial
+ == dserial);
if (flags & SCANDIR_DONTFREE) {
/*
* Caller will free
@@ -939,11 +949,14 @@ exfatfs_scandir(struct vnode *dvp,
* Get ourselves a
* new one.
*/
- xip = exfatfs_newxfinode(fs, 0, 0);
+ xip = exfatfs_newxfinode
+ (fs, 0, 0);
}
- assert(dxip->xi_serial == dserial);
+ assert(dxip->xi_serial
+ == dserial);
if (flags & SCANDIR_STOP) {
- DPRINTF((" SCANDIR_STOP\n"));
+ DPRINTF((" SCANDIR"
+ "_STOP\n"));
goto out;
}
}
Index: src/sys/fs/exfatfs/exfatfs_extern.h
diff -u src/sys/fs/exfatfs/exfatfs_extern.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_extern.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_extern.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_extern.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_extern.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_extern.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -25,24 +25,31 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
+
+#ifndef EXFATFS_EXTERN_H_
+#define EXFATFS_EXTERN_H_
+
#include <sys/types.h>
#include <sys/vnode.h>
#include <fs/exfatfs/exfatfs.h>
#include <fs/exfatfs/exfatfs_inode.h>
#include <fs/exfatfs/exfatfs_mount.h>
-int exfatfs_bmap_shared(struct vnode *vp, daddr_t bn, struct vnode **vpp,
- daddr_t *bnp, int *runp);
-int exfatfs_mountfs_shared(struct vnode *devvp, struct exfatfs_mount *, unsigned secsize, struct exfatfs **fsp);
+int exfatfs_bmap_shared(struct vnode *, daddr_t, struct vnode **, daddr_t *,
+ int *);
+int exfatfs_mountfs_shared(struct vnode *, struct exfatfs_mount *, unsigned,
+ struct exfatfs **);
struct xfinode *exfatfs_newxfinode(struct exfatfs *, uint32_t, uint32_t);
struct exfatfs_dirent *exfatfs_newdirent(void);
int exfatfs_get_file_name(struct xfinode *, uint16_t *, int *, int);
int exfatfs_set_file_name(struct xfinode *, uint16_t *, int);
void exfatfs_freexfinode(struct xfinode *);
void exfatfs_freedirent(struct exfatfs_dirent *);
-int exfatfs_scandir(struct vnode *dvp, off_t startoff, off_t *endoff,
- unsigned (*emptyfunc)(void *, off_t, off_t),
- unsigned (*validfunc)(void *, struct xfinode *, off_t),
+int exfatfs_scandir(struct vnode *, off_t, off_t *,
+ unsigned (*)(void *, off_t, off_t),
+ unsigned (*)(void *, struct xfinode *, off_t),
void *arg);
#define SCANDIR_STOP 0x00000001
#define SCANDIR_DONTFREE 0x00000002
+
+#endif /* EXFATFS_EXTERN_H_ */
Index: src/sys/fs/exfatfs/exfatfs_inode.h
diff -u src/sys/fs/exfatfs/exfatfs_inode.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_inode.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_inode.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_inode.h Mon Jul 1 22:15:21 2024
@@ -1,6 +1,35 @@
-/* $NetBSD: exfatfs_inode.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_inode.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * Some of this code is derived from msdosfs, which bore the following
+ * copyright notice:
+ */
+/*-
* Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
* Copyright (C) 1994, 1995, 1997 TooLs GmbH.
* All rights reserved.
@@ -63,13 +92,20 @@ struct exfatfs_lookup_results {
/* Vnode key; taken from msdosfs */
struct exfatfs_dirent_key {
- uint32_t dk_dirclust; /* cluster of the (primary) directory file containing this entry */
- uint32_t dk_diroffset; /* offset of this entry in the directory cluster, in dirent units */
- void *dk_dirgen; /* non zero and unique for unlinked nodes */
+ /* cluster of the (primary) directory file containing this entry */
+ uint32_t dk_dirclust;
+ /* offset of this entry in the directory cluster, in dirent units */
+ uint32_t dk_diroffset;
+ /* non zero and unique for unlinked nodes */
+ void *dk_dirgen;
};
#define EXFATFS_FENCE 2
#define EXFATFS_MAXDIRENT 19 /* File + Stream + 17 * File Name */
+
+/*
+ * The in-memory structure representing an exFAT file.
+ */
struct xfinode {
struct genfs_node i_gnode; /* Must be first */
#ifdef EXFATFS_FENCE
@@ -103,7 +139,7 @@ struct xfinode {
* Sections held on disk
*/
struct exfatfs_dirent *xi_direntp[EXFATFS_MAXDIRENT];
- daddr_t xi_dirent_blk[EXFATFS_MAXDIRENT]; /* Location on disk, or NULL */
+ daddr_t xi_dirent_blk[EXFATFS_MAXDIRENT]; /* Location on disk */
int xi_dirent_off[EXFATFS_MAXDIRENT]; /* Offset within block */
/* File Entry, one of the above pointers */
@@ -121,17 +157,60 @@ struct xfinode {
#define GET_DFE_CREATE10MS(xip) DFE(xip)->xd_create10msIncrement
#define GET_DFE_CREATE_UTCOFF(xip) DFE(xip)->xd_createUtcOffset
-#define SET_DFE_SET_CHECKSUM(xip, v) do { DFE(xip)->xd_setChecksum = (v); } while(0)
-#define SET_DFE_SECONDARY_COUNT(xip, v) do { DFE(xip)->xd_secondaryCount = (v); } while(0)
-#define SET_DFE_FILE_ATTRIBUTES(xip, v) do { DFE(xip)->xd_fileAttributes = (v); } while(0)
-#define SET_DFE_LAST_MODIFIED(xip, v) do { DFE(xip)->xd_lastModifiedTimestamp = (v); } while(0)
-#define SET_DFE_LAST_MODIFIED10MS(xip, v) do { DFE(xip)->xd_lastModified10msIncrement = (v); } while(0)
-#define SET_DFE_LAST_MODIFIED_UTCOFF(xip, v) do { DFE(xip)->xd_lastModifiedUtcOffset = (v); } while(0)
-#define SET_DFE_LAST_ACCESSED(xip, v) do { DFE(xip)->xd_lastAccessedTimestamp = (v); } while(0)
-#define SET_DFE_LAST_ACCESSED_UTCOFF(xip, v) do { DFE(xip)->xd_lastAccessedUtcOffset = (v); } while(0)
-#define SET_DFE_CREATE(xip, v) do { DFE(xip)->xd_createTimestamp = (v); } while(0)
-#define SET_DFE_CREATE10MS(xip, v) do { DFE(xip)->xd_create10msIncrement = (v); } while(0)
-#define SET_DFE_CREATE_UTCOFF(xip, v) do { DFE(xip)->xd_createUtcOffset = (v); } while(0)
+#define SET_DFE_SET_CHECKSUM(xip, v) \
+do { \
+ DFE(xip)->xd_setChecksum = (v); \
+} while(0)
+
+#define SET_DFE_SECONDARY_COUNT(xip, v) \
+do { \
+ DFE(xip)->xd_secondaryCount = (v); \
+} while(0)
+
+#define SET_DFE_FILE_ATTRIBUTES(xip, v) \
+do { \
+ DFE(xip)->xd_fileAttributes = (v); \
+} while(0)
+
+#define SET_DFE_LAST_MODIFIED(xip, v) \
+do { \
+ DFE(xip)->xd_lastModifiedTimestamp = (v); \
+} while(0)
+
+#define SET_DFE_LAST_MODIFIED10MS(xip, v) \
+do { \
+ DFE(xip)->xd_lastModified10msIncrement = (v); \
+} while(0)
+
+#define SET_DFE_LAST_MODIFIED_UTCOFF(xip, v) \
+do { \
+ DFE(xip)->xd_lastModifiedUtcOffset = (v); \
+} while(0)
+
+#define SET_DFE_LAST_ACCESSED(xip, v) \
+do { \
+ DFE(xip)->xd_lastAccessedTimestamp = (v); \
+} while(0)
+
+#define SET_DFE_LAST_ACCESSED_UTCOFF(xip, v) \
+do { \
+ DFE(xip)->xd_lastAccessedUtcOffset = (v); \
+} while(0)
+
+#define SET_DFE_CREATE(xip, v) \
+do { \
+ DFE(xip)->xd_createTimestamp = (v); \
+} while(0)
+
+#define SET_DFE_CREATE10MS(xip, v) \
+do { \
+ DFE(xip)->xd_create10msIncrement = (v); \
+} while(0)
+
+#define SET_DFE_CREATE_UTCOFF(xip, v) \
+do { \
+ DFE(xip)->xd_createUtcOffset = (v); \
+} while(0)
#define ISDIRECTORY(xip) (DFE(xip)->xd_fileAttributes & XD_FILEATTR_DIRECTORY)
#define ISREADONLY(xip) (DFE(xip)->xd_fileAttributes & XD_FILEATTR_READONLY)
@@ -147,19 +226,54 @@ struct xfinode {
#define GET_DSE_FIRSTCLUSTER(xip) DSE(xip)->xd_firstCluster
#define GET_DSE_DATALENGTH(xip) DSE(xip)->xd_dataLength
-#define SET_DSE_NAMELENGTH(xip, v) do { DSE(xip)->xd_nameLength = (v); } while(0)
-#define SET_DSE_NAMEHASH(xip, v) do { DSE(xip)->xd_nameHash = (v); } while(0)
-#define SET_DSE_VALIDDATALENGTH(xip, v) do { DSE(xip)->xd_validDataLength = (v); } while(0)
-#define SET_DSE_FIRSTCLUSTER(xip, v) do { DSE(xip)->xd_firstCluster = (v); } while(0)
-#define SET_DSE_DATALENGTH(xip, v) do { DSE(xip)->xd_dataLength = (v); } while(0)
-
-#define IS_DSE_ALLOCPOSSIBLE(xip) (DSE(xip)->xd_generalSecondaryFlags & XD_FLAG_ALLOCPOSSIBLE)
-#define SET_DSE_ALLOCPOSSIBLE(xip) do { DSE(xip)->xd_generalSecondaryFlags |= XD_FLAG_ALLOCPOSSIBLE; } while (0)
-#define CLR_DSE_ALLOCPOSSIBLE(xip) do { DSE(xip)->xd_generalSecondaryFlags &= ~XD_FLAG_ALLOCPOSSIBLE; } while (0)
-
-#define IS_DSE_NOFATCHAIN(xip) (DSE(xip)->xd_generalSecondaryFlags & XD_FLAG_NOFATCHAIN)
-#define SET_DSE_NOFATCHAIN(xip) do { DSE(xip)->xd_generalSecondaryFlags |= XD_FLAG_NOFATCHAIN; } while (0)
-#define CLR_DSE_NOFATCHAIN(xip) do { DSE(xip)->xd_generalSecondaryFlags &= ~XD_FLAG_NOFATCHAIN; } while (0)
+#define SET_DSE_NAMELENGTH(xip, v) \
+do { \
+ DSE(xip)->xd_nameLength = (v); \
+} while(0)
+
+#define SET_DSE_NAMEHASH(xip, v) \
+do { \
+ DSE(xip)->xd_nameHash = (v); \
+} while(0)
+
+#define SET_DSE_VALIDDATALENGTH(xip, v) \
+do { \
+ DSE(xip)->xd_validDataLength = (v); \
+} while(0)
+
+#define SET_DSE_FIRSTCLUSTER(xip, v) \
+do { \
+ DSE(xip)->xd_firstCluster = (v); \
+} while(0)
+
+#define SET_DSE_DATALENGTH(xip, v) \
+do { \
+ DSE(xip)->xd_dataLength = (v); \
+} while(0)
+
+#define IS_DSE_ALLOCPOSSIBLE(xip) \
+ (DSE(xip)->xd_generalSecondaryFlags & XD_FLAG_ALLOCPOSSIBLE)
+#define SET_DSE_ALLOCPOSSIBLE(xip) \
+do { \
+ DSE(xip)->xd_generalSecondaryFlags |= XD_FLAG_ALLOCPOSSIBLE; \
+} while (0)
+
+#define CLR_DSE_ALLOCPOSSIBLE(xip) \
+do { \
+ DSE(xip)->xd_generalSecondaryFlags &= ~XD_FLAG_ALLOCPOSSIBLE; \
+} while (0)
+
+#define IS_DSE_NOFATCHAIN(xip) \
+ (DSE(xip)->xd_generalSecondaryFlags & XD_FLAG_NOFATCHAIN)
+#define SET_DSE_NOFATCHAIN(xip) \
+do { \
+ DSE(xip)->xd_generalSecondaryFlags |= XD_FLAG_NOFATCHAIN; \
+} while (0)
+
+#define CLR_DSE_NOFATCHAIN(xip) \
+do { \
+ DSE(xip)->xd_generalSecondaryFlags &= ~XD_FLAG_NOFATCHAIN; \
+} while (0)
unsigned long xi_serial; /* Serial number, for debugging */
@@ -170,30 +284,34 @@ struct xfinode {
#ifdef _KERNEL
#define GETPARENT(xip, dvp) do { \
- KASSERT(dvp != NULL); \
- if (xip->xi_parentvp == NULL && dvp != NULL) { \
- KASSERT(dvp->v_data != xip); \
- ++xip->xi_fs->xf_nparent; \
- DPRINTF(("getparent %s:%d ino 0x%lx parent 0x%lx now %d\n", \
- __FILE__, __LINE__, (unsigned long)INUM(xip), \
- (unsigned long)INUM(VTOXI(dvp)), \
- xip->xi_fs->xf_nparent)); \
- xip->xi_parentvp = dvp; \
- vref(dvp); \
- } \
- } while (0)
+ KASSERT(dvp != NULL); \
+ if (xip->xi_parentvp == NULL && dvp != NULL) { \
+ KASSERT(dvp->v_data != xip); \
+ ++xip->xi_fs->xf_nparent; \
+ DPRINTF(("getparent %s:%d ino 0x%lx " \
+ "parent 0x%lx now %d\n", \
+ __FILE__, __LINE__, \
+ (unsigned long)INUM(xip), \
+ (unsigned long)INUM(VTOXI(dvp)), \
+ xip->xi_fs->xf_nparent)); \
+ xip->xi_parentvp = dvp; \
+ vref(dvp); \
+ } \
+} while (0)
#define PUTPARENT(xip) do { \
- if (xip->xi_parentvp != NULL) { \
- --xip->xi_fs->xf_nparent; \
- DPRINTF(("putparent %s:%d ino 0x%lx parent 0x%lx now %d\n", \
- __FILE__, __LINE__, (unsigned long)INUM(xip), \
- (unsigned long)INUM(VTOXI(xip->xi_parentvp)), \
- xip->xi_fs->xf_nparent)); \
- vrele(xip->xi_parentvp); \
- xip->xi_parentvp = NULL; \
- } \
- } while (0)
+ if (xip->xi_parentvp != NULL) { \
+ --xip->xi_fs->xf_nparent; \
+ DPRINTF(("putparent %s:%d ino 0x%lx " \
+ "parent 0x%lx now %d\n", \
+ __FILE__, __LINE__, \
+ (unsigned long)INUM(xip), \
+ (unsigned long)INUM(VTOXI(xip->xi_parentvp)), \
+ xip->xi_fs->xf_nparent)); \
+ vrele(xip->xi_parentvp); \
+ xip->xi_parentvp = NULL; \
+ } \
+} while (0)
#else
#define GETPARENT(xip, dvp)
#define PUTPARENT(xip)
@@ -205,7 +323,8 @@ void exfatfs_check_fence(struct exfatfs
# define exfatfs_check_fence(fs)
#endif
-#define INUM(xip) EXFATFS_CLUST_ENTRY2INO((xip)->xi_fs, (xip)->xi_dirclust, (xip)->xi_diroffset)
+#define INUM(xip) EXFATFS_CLUST_ENTRY2INO((xip)->xi_fs, (xip)->xi_dirclust, \
+ (xip)->xi_diroffset)
/*
* Values for the xi_flag field of the xfinode.
@@ -214,7 +333,7 @@ void exfatfs_check_fence(struct exfatfs
#define XI_CREATE 0x0002 /* Creation time update */
#define XI_ACCESS 0x0004 /* Access time update */
#define XI_MODIFIED 0x0008 /* Xfinode has been modified. */
-#define XI_RENAME 0x0010 /* Xfinode is in the process of being renamed */
+#define XI_RENAME 0x0010 /* Xfinode is being renamed */
#define EXFATFS_MAXNAMELEN 255
Index: src/sys/fs/exfatfs/exfatfs_mount.h
diff -u src/sys/fs/exfatfs/exfatfs_mount.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_mount.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_mount.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_mount.h Mon Jul 1 22:15:21 2024
@@ -1,3 +1,31 @@
+/* $NetBSD: exfatfs_mount.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_MOUNT_H_
#define EXFATFS_MOUNT_H_
Index: src/sys/fs/exfatfs/exfatfs_rename.c
diff -u src/sys/fs/exfatfs/exfatfs_rename.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_rename.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_rename.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_rename.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_rename.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_rename.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2011, 2022 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_rename.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_rename.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -57,7 +57,7 @@ __KERNEL_RCSID(0, "$NetBSD: exfatfs_rena
#ifdef EXFATFS_RENAME_DEBUG
# define DPRINTF(x) printf x
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
/*
@@ -365,8 +365,8 @@ exfatfs_gro_rename(struct mount *mp, kau
KASSERT(fxip != NULL);
KASSERT(fs != NULL);
- DPRINTF(("exfatfs_gro_rename(mp=%p, cred=%p, fdvp=%p, fcnp=%p, fde=%p, fvp=%p,\n",
- mp, cred, fdvp, fcnp, fde, fvp));
+ DPRINTF(("exfatfs_gro_rename(mp=%p, cred=%p, fdvp=%p, fcnp=%p, fde=%p,"
+ " fvp=%p,\n", mp, cred, fdvp, fcnp, fde, fvp));
DPRINTF((" tdvp=%p, tcnp=%p, tde=%p, tvp=%p, tvp_nlinkp=%p)\n",
tdvp, tcnp, tde, tvp, tvp_nlinkp));
Index: src/sys/fs/exfatfs/exfatfs_rename.h
diff -u src/sys/fs/exfatfs/exfatfs_rename.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_rename.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_rename.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_rename.h Mon Jul 1 22:15:21 2024
@@ -1,7 +1,7 @@
-/* $NetBSD: exfatfs_rename.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_rename.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
- * Copyright (c) 2011, 2022 The NetBSD Foundation, Inc.
+ * Copyright (c) 2011, 2022, 2024 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
@@ -31,6 +31,6 @@
#ifndef EXFATFS_RENAME_H_
#define EXFATFS_RENAME_H_
-int exfatfs_rename(void *v);
+int exfatfs_rename(void *);
#endif /* EXFATFS_RENAME_H_ */
Index: src/sys/fs/exfatfs/exfatfs_tables.c
diff -u src/sys/fs/exfatfs/exfatfs_tables.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_tables.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_tables.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_tables.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_tables.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_tables.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_tables.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_tables.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
#include <sys/types.h>
#include <sys/queue.h>
@@ -469,7 +469,8 @@ exfatfs_check_filename_ucs2(uint16_t *na
return 0;
}
-MALLOC_JUSTDEFINE(M_EURO, "Exfatfs upcase table", "Exfatfs upcase table list entry");
+MALLOC_JUSTDEFINE(M_EURO, "Exfatfs upcase table", \
+ "Exfatfs upcase table list entry");
void
exfatfs_load_uctable(struct exfatfs *fs, uint16_t *table, int len)
@@ -566,7 +567,9 @@ exfatfs_upcase_str(struct exfatfs *fs, u
* Implement strcasecmp() using this particular upcase table.
* We don't care *how* the file names differ, only *whether* they differ.
*/
-int exfatfs_upcase_cmp(struct exfatfs *fs, uint16_t *s1, int len1, uint16_t *s2, int len2) {
+int exfatfs_upcase_cmp(struct exfatfs *fs, uint16_t *s1, int len1,
+ uint16_t *s2, int len2)
+{
int i, r;
for (i = 0; i < len1 && i < len2; i++) {
Index: src/sys/fs/exfatfs/exfatfs_tables.h
diff -u src/sys/fs/exfatfs/exfatfs_tables.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_tables.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_tables.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_tables.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,31 @@
-/* $NetBSD: exfatfs_tables.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_tables.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_TABLES_H_
#define EXFATFS_TABLES_H_
Index: src/sys/fs/exfatfs/exfatfs_trie.c
diff -u src/sys/fs/exfatfs/exfatfs_trie.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_trie.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_trie.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_trie.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_trie.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_trie.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_trie.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_trie.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
#include <sys/types.h>
#include <sys/buf.h>
@@ -55,7 +55,8 @@ typedef struct uvnode uvnode_t;
# include <stdlib.h>
# include <string.h>
# include <errno.h>
-# define pool_get(a, b) (struct xf_bitmap_node *)malloc(sizeof(struct xf_bitmap_node))
+# define pool_get(a, b) (struct xf_bitmap_node *) \
+ malloc(sizeof(struct xf_bitmap_node))
# define pool_put(a, b) free((b))
#endif
@@ -67,7 +68,7 @@ typedef struct uvnode uvnode_t;
#ifdef EXFATFS_TRIE_DEBUG
# define DPRINTF(x) printf x
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
/*
@@ -76,9 +77,11 @@ typedef struct uvnode uvnode_t;
extern struct pool exfatfs_bitmap_pool;
-static int exfatfs_bitmap_alloc_basic(struct exfatfs *fs, uint32_t start, uint32_t end, uint32_t *cp, int alloc);
+static int exfatfs_bitmap_alloc_basic(struct exfatfs *fs, uint32_t start,
+ uint32_t end, uint32_t *cp, int alloc);
#ifndef USE_BASIC
-static int exfatfs_bitmap_isalloc_basic(struct exfatfs *fs, uint32_t cno, int *tfp);
+static int exfatfs_bitmap_isalloc_basic(struct exfatfs *fs, uint32_t cno,
+ int *tfp);
#endif /* USE_BASIC */
@@ -209,7 +212,8 @@ exfatfs_bitmap_scan(struct exfatfs *fs,
if (bnp->children[i] == NULL) {
/* We must be empty */
if (bnp->count == 0) {
- bnp->children[i] = pool_get(&exfatfs_bitmap_pool, PR_WAITOK);
+ bnp->children[i] = pool_get(
+ &exfatfs_bitmap_pool, PR_WAITOK);
memset(bnp->children[i], 0, sizeof(*bnp));
} else
continue;
@@ -342,8 +346,9 @@ exfatfs_init_trie(struct exfatfs *fs, in
/* Discover which is the top level */
for (i = BOTTOM_LEVEL; ; i++) {
DPRINTF(("TRIE: level %d gives %llu vs %llu\n", i,
- (unsigned long long)fs->xf_ClusterCount,
- (unsigned long long)(1 << (i * TBN_CHILDREN_SHIFT)) - 1));
+ (unsigned long long)fs->xf_ClusterCount,
+ (unsigned long long)
+ (1 << (i * TBN_CHILDREN_SHIFT)) - 1));
if (fs->xf_ClusterCount < (1 << (i * TBN_CHILDREN_SHIFT)) - 1) {
fs->xf_bitmap_toplevel = i;
break;
@@ -359,8 +364,9 @@ exfatfs_init_trie(struct exfatfs *fs, in
/* Populate from disk */
for (i = 0; i < GET_DSE_VALIDDATALENGTH(VTOXI(fs->xf_bitmapvp));
i += SECSIZE(fs)) {
- if ((error = bread(fs->xf_bitmapvp, i >> fs->xf_BytesPerSectorShift,
- SECSIZE(fs), 0, &bp)) != 0)
+ if ((error = bread(fs->xf_bitmapvp,
+ i >> fs->xf_BytesPerSectorShift,
+ SECSIZE(fs), 0, &bp)) != 0)
return error;
DPRINTF(("TRIE: read lblkno %lu blkno 0x%lx\n",
(unsigned long)bp->b_lblkno,
@@ -371,7 +377,8 @@ exfatfs_init_trie(struct exfatfs *fs, in
break;
byte = ((char *)bp->b_data)[j];
if (cno + NBBY > fs->xf_ClusterCount)
- byte &= ((1 << (fs->xf_ClusterCount & (NBBY - 1))) - 1);
+ byte &= ((1 << (fs->xf_ClusterCount
+ & (NBBY - 1))) - 1);
bitcount = byte2bitcount[byte];
DPRINTF(("TRIE: cluster %lu..%lu, %d busy\n",
(unsigned long)(cno),
@@ -451,7 +458,8 @@ exfatfs_bitmap_destroy_trie(struct exfat
*/
static int
-exfatfs_bitmap_alloc_basic(struct exfatfs *fs, uint32_t start, uint32_t end, uint32_t *cp, int alloc)
+exfatfs_bitmap_alloc_basic(struct exfatfs *fs, uint32_t start, uint32_t end,
+ uint32_t *cp, int alloc)
{
daddr_t lbn, blkno;
uint32_t r, ostart, c;
@@ -476,13 +484,16 @@ exfatfs_bitmap_alloc_basic(struct exfatf
(unsigned)LBNOFF2CLUSTER(fs, lbn, off),
(unsigned)end));
while (LBNOFF2CLUSTER(fs, lbn, off) < end) {
- exfatfs_bmap_shared(fs->xf_bitmapvp, lbn, NULL, &blkno, NULL);
+ exfatfs_bmap_shared(fs->xf_bitmapvp, lbn, NULL, &blkno,
+ NULL);
DPRINTF((" lbn %u -> bn 0x%x\n",
(unsigned)lbn, (unsigned)blkno));
- if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0, &bp)) != 0)
+ if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0,
+ &bp)) != 0)
return error;
DPRINTF((" search %u..%u\n",
- (unsigned)off, (unsigned)(1 << BITMAPSHIFT(fs))));
+ (unsigned)off,
+ (unsigned)(1 << BITMAPSHIFT(fs))));
while (off < (1 << BITMAPSHIFT(fs))
&& LBNOFF2CLUSTER(fs, lbn, off) < end) {
data = (uint8_t *)bp->b_data;
@@ -494,8 +505,10 @@ exfatfs_bitmap_alloc_basic(struct exfatf
}
if (r != INVALID) {
assert(r >= 2 && r < fs->xf_ClusterCount - 2);
- DPRINTF(("basic allocate cluster %u/%u at lbn %u bit %d\n",
- (unsigned)r, (unsigned)end, (unsigned)lbn, (int)off));
+ DPRINTF(("basic allocate cluster %u/%u"
+ " at lbn %u bit %d\n",
+ (unsigned)r, (unsigned)end,
+ (unsigned)lbn, (int)off));
setbit(data, off);
bdwrite(bp);
--fs->xf_FreeClusterCount;
@@ -596,7 +609,8 @@ exfatfs_bitmap_init_basic(struct exfatfs
++cn;
}
} else {
- fs->xf_FreeClusterCount -= byte2bitcount[data[off]];
+ fs->xf_FreeClusterCount
+ -= byte2bitcount[data[off]];
cn += NBBY;
}
}
@@ -764,4 +778,3 @@ int exfatfs_bitmap_dealloc(struct exfatf
return exfatfs_bitmap_dealloc_trie(fs, cno);
}
#endif /* ! TEST_TRIE */
-
Index: src/sys/fs/exfatfs/exfatfs_trie.h
diff -u src/sys/fs/exfatfs/exfatfs_trie.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_trie.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_trie.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_trie.h Mon Jul 1 22:15:21 2024
@@ -1,4 +1,31 @@
-/* $NetBSD: exfatfs_trie.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_trie.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_TRIE_H_
#define EXFATFS_TRIE_H_
Index: src/sys/fs/exfatfs/exfatfs_trie_basic.c
diff -u src/sys/fs/exfatfs/exfatfs_trie_basic.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_trie_basic.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_trie_basic.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_trie_basic.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_trie_basic.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_trie_basic.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_trie_basic.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_trie_basic.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
#include <sys/types.h>
#include <sys/buf.h>
@@ -55,7 +55,8 @@ typedef struct uvnode uvnode_t;
# include <stdlib.h>
# include <string.h>
# include <errno.h>
-# define pool_get(a, b) (struct xf_bitmap_node *)malloc(sizeof(struct xf_bitmap_node))
+# define pool_get(a, b) (struct xf_bitmap_node *) \
+ malloc(sizeof(struct xf_bitmap_node))
# define pool_put(a, b) free((b))
#endif
@@ -64,7 +65,7 @@ typedef struct uvnode uvnode_t;
#ifdef EXFATFS_TRIE_DEBUG
# define DPRINTF(x) printf x
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
/*
@@ -73,7 +74,8 @@ typedef struct uvnode uvnode_t;
extern struct pool exfatfs_bitmap_pool;
-#define BN_FULL(bp, level) ((bp)->count == (1 << (level * BN_CHILDREN_SHIFT)) - 1)
+#define BN_FULL(bp, level) ((bp)->count == (1 << (level * BN_CHILDREN_SHIFT)) \
+ - 1)
/* Convert cluster number to disk address and offset */
#define NBBYSHIFT 3 /* 1 << NBBYSHIFT == NBBY == 8 */
@@ -142,7 +144,8 @@ exfatfs_bitmap_adj(struct exfatfs *fs,
return 0;
secno = cno >> (fs->xf_SectorsPerClusterShift
+ fs->xf_BytesPerSectorShift + NBBY);
- if ((error = bread(fs->xf_bitmapvp, secno, BN_BLOCK_SIZE, 0, &bp)) != 0)
+ if ((error = bread(fs->xf_bitmapvp, secno, BN_BLOCK_SIZE, 0,
+ &bp)) != 0)
return error;
data = (uint8_t *)bp->b_data;
if (dir > 0)
@@ -159,7 +162,8 @@ exfatfs_bitmap_adj(struct exfatfs *fs,
if (bnp->count == 0 || BN_FULL(bnp, level)) {
for (i = 0; i < BN_CHILDREN_COUNT; i++)
if (bnp->children[i] != NULL)
- pool_put(&exfatfs_bitmap_pool, bnp->children[i]);
+ pool_put(&exfatfs_bitmap_pool,
+ bnp->children[i]);
exfatfs_check_fence(fs);
return 0;
}
@@ -169,7 +173,8 @@ exfatfs_bitmap_adj(struct exfatfs *fs,
bnp->children[rcno] = pool_get(&exfatfs_bitmap_pool, PR_WAITOK);
memset(bnp->children[rcno], 0, sizeof(*bnp));
}
- return exfatfs_bitmap_adj(fs, bnp->children[rcno], cno, --level, dir, alloc);
+ return exfatfs_bitmap_adj(fs, bnp->children[rcno], cno, --level, dir,
+ alloc);
}
/*
@@ -201,7 +206,8 @@ exfatfs_bitmap_scan(struct exfatfs *fs,
if (level == BOTTOM_LEVEL) {
secno = start >> (fs->xf_SectorsPerClusterShift
+ fs->xf_BytesPerSectorShift + NBBY);
- if ((error = bread(fs->xf_bitmapvp, secno, BN_BLOCK_SIZE, 0, &bp)) != 0)
+ if ((error = bread(fs->xf_bitmapvp, secno, BN_BLOCK_SIZE, 0,
+ &bp)) != 0)
return error;
data = (uint8_t *)bp->b_data;
r = INVALID;
@@ -220,8 +226,9 @@ exfatfs_bitmap_scan(struct exfatfs *fs,
break;
}
if (alloc && r != INVALID) {
- DPRINTF(("TRIE: allocate cluster %u at lbn %u byte %d bit %d\n",
- (unsigned)r, (unsigned)bp->b_lblkno, (int)i, (int)j));
+ DPRINTF(("TRIE: allocate cluster %u at lbn %u byte %d"
+ " bit %d\n", (unsigned)r,
+ (unsigned)bp->b_lblkno, (int)i, (int)j));
data[i] |= (1 << j);
bdwrite(bp);
} else
@@ -240,7 +247,8 @@ exfatfs_bitmap_scan(struct exfatfs *fs,
if (bnp->children[i] == NULL) /* Empty (or full) section */
return (i << (BN_CHILDREN_SHIFT * level));
- error = exfatfs_bitmap_scan(fs, bnp->children[i], start, --level, &r, alloc);
+ error = exfatfs_bitmap_scan(fs, bnp->children[i], start,
+ --level, &r, alloc);
if (error == 0 && r != INVALID) {
*cp = (i << (BN_CHILDREN_SHIFT * level)) | r;
exfatfs_check_fence(fs);
@@ -272,8 +280,9 @@ exfatfs_init_trie(struct exfatfs *fs, in
/* Discover which is the top level */
for (i = BOTTOM_LEVEL; ; i++) {
DPRINTF(("TRIE: level %d gives %llu vs %llu\n", i,
- (unsigned long long)fs->xf_ClusterCount,
- (unsigned long long)(1 << (i * BN_CHILDREN_SHIFT)) - 1));
+ (unsigned long long)fs->xf_ClusterCount,
+ (unsigned long long)
+ (1 << (i * BN_CHILDREN_SHIFT)) - 1));
if (fs->xf_ClusterCount < (1 << (i * BN_CHILDREN_SHIFT)) - 1) {
fs->xf_bitmap_toplevel = i;
break;
@@ -287,8 +296,10 @@ exfatfs_init_trie(struct exfatfs *fs, in
}
/* Populate from disk */
- for (i = 0; i < VTOXI(fs->xf_bitmapvp)->xi_validDataLength; i += SECSIZE(fs)) {
- if ((error = bread(fs->xf_bitmapvp, i >> fs->xf_BytesPerSectorShift,
+ for (i = 0; i < VTOXI(fs->xf_bitmapvp)->xi_validDataLength;
+ i += SECSIZE(fs)) {
+ if ((error = bread(fs->xf_bitmapvp,
+ i >> fs->xf_BytesPerSectorShift,
SECSIZE(fs), 0, &bp)) != 0)
return error;
DPRINTF(("TRIE: read lblkno %lu blkno 0x%lx\n",
@@ -300,7 +311,8 @@ exfatfs_init_trie(struct exfatfs *fs, in
break;
byte = ((char *)bp->b_data)[j];
if (cno + NBBY > fs->xf_ClusterCount)
- byte &= ((1 << (fs->xf_ClusterCount & (NBBY - 1))) - 1);
+ byte &= ((1 << (fs->xf_ClusterCount
+ & (NBBY - 1))) - 1);
bitcount = byte2bitcount[byte];
DPRINTF(("TRIE: cluster %lu..%lu, %d busy\n",
(unsigned long)(cno),
@@ -377,13 +389,16 @@ exfatfs_bitmap_alloc(struct exfatfs *fs,
(unsigned)LBNOFF2CLUSTER(fs, lbn, off),
(unsigned)end));
while (LBNOFF2CLUSTER(fs, lbn, off) < end) {
- exfatfs_bmap_shared(fs->xf_bitmapvp, lbn, NULL, &blkno, NULL);
+ exfatfs_bmap_shared(fs->xf_bitmapvp, lbn, NULL, &blkno,
+ NULL);
DPRINTF((" lbn %u -> bn 0x%x\n",
(unsigned)lbn, (unsigned)blkno));
- if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0, &bp)) != 0)
+ if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0,
+ &bp)) != 0)
return error;
DPRINTF((" search %u..%u\n",
- (unsigned)off, (unsigned)(1 << BITMAPSHIFT(fs))));
+ (unsigned)off,
+ (unsigned)(1 << BITMAPSHIFT(fs))));
while (off < (1 << BITMAPSHIFT(fs))
&& LBNOFF2CLUSTER(fs, lbn, off) < end) {
data = (uint8_t *)bp->b_data;
@@ -395,8 +410,10 @@ exfatfs_bitmap_alloc(struct exfatfs *fs,
}
if (r != INVALID) {
assert(r >= 2 && r < fs->xf_ClusterCount - 2);
- DPRINTF(("basic allocate cluster %u/%u at lbn %u bit %d\n",
- (unsigned)r, (unsigned)end, (unsigned)lbn, (int)off));
+ DPRINTF(("basic allocate cluster %u/%u at lbn"
+ " %u bit %d\n", (unsigned)r,
+ (unsigned)end, (unsigned)lbn,
+ (int)off));
setbit(data, off);
bdwrite(bp);
#ifdef _KERNEL
@@ -483,14 +500,17 @@ exfatfs_bitmap_init(struct exfatfs *fs,
exfatfs_bmap_shared(fs->xf_bitmapvp, lbn, NULL, &blkno, NULL);
DPRINTF((" lbn %u -> bn 0x%x\n",
(unsigned)lbn, (unsigned)blkno));
- if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0, &bp)) != 0) {
+ if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0, &bp))
+ != 0) {
printf("bread(%p, %u, %u) returned %d\n",
- fs->xf_devvp, (unsigned)blkno, (unsigned)SECSIZE(fs), error);
+ fs->xf_devvp, (unsigned)blkno,
+ (unsigned)SECSIZE(fs), error);
return error;
}
#if 1
for (data = (uint8_t *)bp->b_data;
- data - (uint8_t *)bp->b_data < SECSIZE(fs) && LBNOFF2CLUSTER(fs, lbn, off + NBBY) < end;
+ data - (uint8_t *)bp->b_data < SECSIZE(fs)
+ && LBNOFF2CLUSTER(fs, lbn, off + NBBY) < end;
++data) {
fs->xf_FreeClusterCount -= byte2bitcount[*data];
off += NBBY;
@@ -518,4 +538,3 @@ exfatfs_bitmap_destroy(struct exfatfs *f
{
}
#endif /* ! EXFATFS_USE_TRIE */
-
Index: src/sys/fs/exfatfs/exfatfs_trie_basic.h
diff -u src/sys/fs/exfatfs/exfatfs_trie_basic.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_trie_basic.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_trie_basic.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_trie_basic.h Mon Jul 1 22:15:21 2024
@@ -1,6 +1,33 @@
-/* $NetBSD: exfatfs_trie_basic.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
-#ifndef EXFATFS_TRIE_H_
-#define EXFATFS_TRIE_H_
+/* $NetBSD: exfatfs_trie_basic.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef EXFATFS_TRIE_BASIC_H_
+#define EXFATFS_TRIE_BASIC_H_
#define BN_CHILDREN_SHIFT 8
#define BN_CHILDREN_COUNT (1 << BN_CHILDREN_SHIFT)
@@ -13,10 +40,10 @@ struct xf_bitmap_node {
uint32_t count;
};
-int exfatfs_bitmap_init(struct exfatfs *fs, int);
-void exfatfs_bitmap_destroy(struct exfatfs *fs);
+int exfatfs_bitmap_init(struct exfatfs *, int);
+void exfatfs_bitmap_destroy(struct exfatfs *);
-int exfatfs_bitmap_alloc(struct exfatfs *fs, uint32_t start, uint32_t *cp);
-int exfatfs_bitmap_dealloc(struct exfatfs *fs, uint32_t cno);
+int exfatfs_bitmap_alloc(struct exfatfs *, uint32_t, uint32_t *);
+int exfatfs_bitmap_dealloc(struct exfatfs *, uint32_t);
-#endif /* EXFATFS_TRIE_H_ */
+#endif /* EXFATFS_TRIE_BASIC_H_ */
Index: src/sys/fs/exfatfs/exfatfs_vfsops.c
diff -u src/sys/fs/exfatfs/exfatfs_vfsops.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_vfsops.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_vfsops.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_vfsops.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_vfsops.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_vfsops.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_vfsops.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_vfsops.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
struct vm_page;
@@ -66,7 +66,7 @@ struct vm_page;
#ifdef EXFATFS_VFSOPS_DEBUG
# define DPRINTF(x) printf x
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
static int update_mp(struct mount *, struct exfatfs_args *);
Index: src/sys/fs/exfatfs/exfatfs_vfsops.h
diff -u src/sys/fs/exfatfs/exfatfs_vfsops.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_vfsops.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_vfsops.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_vfsops.h Mon Jul 1 22:15:21 2024
@@ -1,24 +1,54 @@
-/* $NetBSD: exfatfs_vfsops.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_vfsops.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_VFSOPS_H_
#define EXFATFS_VFSOPS_H_
-int exfatfs_getnewvnode(struct exfatfs *fs, struct vnode *dvp,
- uint32_t clust, uint32_t off, unsigned type,
- void *xip, struct vnode **vpp);
+int exfatfs_getnewvnode(struct exfatfs *, struct vnode *,
+ uint32_t, uint32_t, unsigned,
+ void *, struct vnode **);
+
#ifdef _KERNEL
void exfatfs_init(void);
-int exfatfs_loadvnode(struct mount *mp, struct vnode *vp, const void *key, size_t key_len, const void **new_key);
-int exfatfs_mount(struct mount *mp, const char *path, void *data, size_t *data_len);
-int exfatfs_mountfs(struct vnode *, struct mount *, struct lwp *, struct exfatfs_args *);
-int exfatfs_finish_mountfs(struct exfatfs *fs);
+int exfatfs_loadvnode(struct mount *, struct vnode *, const void *, size_t,
+ const void **);
+int exfatfs_mount(struct mount *, const char *, void *, size_t *);
+int exfatfs_mountfs(struct vnode *, struct mount *, struct lwp *,
+ struct exfatfs_args *);
+int exfatfs_finish_mountfs(struct exfatfs *);
int exfatfs_mountroot(void);
/* void exfatfs_reinit(void); */
-int exfatfs_root(struct mount *mp, int unused, struct vnode **vpp);
-int exfatfs_start(struct mount *mp, int flags);
-int exfatfs_statvfs(struct mount *mp, struct statvfs *sbp);
-int exfatfs_sync(struct mount *mp, int waitfor, kauth_cred_t cred);
-int exfatfs_unmount(struct mount *mp, int mntflags);
-int exfatfs_vget(struct mount *mp, ino_t ino, int unused, struct vnode **vpp);
+int exfatfs_root(struct mount *, int, struct vnode **);
+int exfatfs_start(struct mount *, int);
+int exfatfs_statvfs(struct mount *, struct statvfs *);
+int exfatfs_sync(struct mount *, int, kauth_cred_t);
+int exfatfs_unmount(struct mount *, int);
+int exfatfs_vget(struct mount *, ino_t, int, struct vnode **);
#endif /* _KERNEL */
#endif /* EXFATFS_VFSOPS_H_ */
Index: src/sys/fs/exfatfs/exfatfs_vnops.c
diff -u src/sys/fs/exfatfs/exfatfs_vnops.c:1.1.2.1 src/sys/fs/exfatfs/exfatfs_vnops.c:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_vnops.c:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_vnops.c Mon Jul 1 22:15:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: exfatfs_vnops.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_vnops.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
/*-
* Copyright (c) 2022 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exfatfs_vnops.c,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exfatfs_vnops.c,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $");
#include <sys/buf.h>
#include <sys/dirent.h>
@@ -89,7 +89,7 @@ static uint8_t PRIMARY_IGNORE_LEN = 2;
#ifdef EXFATFS_VNOPS_DEBUG
# define DPRINTF(x) printf x
#else
-# define DPRINTF(x)
+# define DPRINTF(x) __nothing
#endif
/*
@@ -293,9 +293,12 @@ exfatfs_setattr(void *v)
if (error)
goto bad;
if (vap->va_atime.tv_sec != VNOVAL)
- exfatfs_unix2dostime(&vap->va_atime, fs->xf_gmtoff, &DFE(xip)->xd_lastAccessedTimestamp, NULL);
+ exfatfs_unix2dostime(&vap->va_atime, fs->xf_gmtoff,
+ &DFE(xip)->xd_lastAccessedTimestamp, NULL);
if (vap->va_mtime.tv_sec != VNOVAL)
- exfatfs_unix2dostime(&vap->va_mtime, fs->xf_gmtoff, &DFE(xip)->xd_lastModifiedTimestamp, &DFE(xip)->xd_lastModified10msIncrement);
+ exfatfs_unix2dostime(&vap->va_mtime, fs->xf_gmtoff,
+ &DFE(xip)->xd_lastModifiedTimestamp,
+ &DFE(xip)->xd_lastModified10msIncrement);
DFE(xip)->xd_fileAttributes |= XD_FILEATTR_ARCHIVE;
xip->xi_flag |= XI_MODIFIED;
de_changed = 1;
@@ -415,8 +418,10 @@ exfatfs_read(void *v)
off = uio->uio_offset & (SECSIZE(fs) - 1);
n = uio->uio_resid - uio->uio_offset;
- if (uio->uio_offset + uio->uio_resid > GET_DSE_VALIDDATALENGTH(xip))
- n -= uio->uio_offset + uio->uio_resid - GET_DSE_VALIDDATALENGTH(xip);
+ if (uio->uio_offset + uio->uio_resid >
+ GET_DSE_VALIDDATALENGTH(xip))
+ n -= uio->uio_offset + uio->uio_resid
+ - GET_DSE_VALIDDATALENGTH(xip);
n = MIN(n, bp->b_resid - off);
if (n > 0)
error = uiomove((char *)bp->b_data + off, n, uio);
@@ -517,10 +522,12 @@ exfatfs_write(void *v)
/* DPRINTF(("write past valid data length\n")); */
if (uio->uio_offset + resid > GET_DSE_DATALENGTH(xip)) {
DPRINTF(("write past allocation\n"));
- if ((error = deextend(xip, uio->uio_offset + resid, ioflag, cred)) != 0)
+ if ((error = deextend(xip, uio->uio_offset + resid,
+ ioflag, cred)) != 0)
goto errexit;
DPRINTF(("now vdl=%llu dl=%llu\n",
- (unsigned long long)GET_DSE_VALIDDATALENGTH(xip),
+ (unsigned long long)
+ GET_DSE_VALIDDATALENGTH(xip),
(unsigned long long)GET_DSE_DATALENGTH(xip)));
}
@@ -531,7 +538,8 @@ exfatfs_write(void *v)
rem = round_page(GET_DSE_VALIDDATALENGTH(xip))
- GET_DSE_VALIDDATALENGTH(xip);
if (rem > 0)
- ubc_zerorange(&vp->v_uobj, (off_t)GET_DSE_VALIDDATALENGTH(xip),
+ ubc_zerorange(&vp->v_uobj,
+ (off_t)GET_DSE_VALIDDATALENGTH(xip),
rem, UBC_VNODE_FLAGS(vp));
extended = 1;
}
@@ -625,7 +633,8 @@ exfatfs_writeback(struct xfinode *xip)
for (i = 0; i < EXFATFS_MAXDIRENT
&& xip->xi_direntp[i]
&& xip->xi_dirent_blk[i]; i++) {
- DPRINTF((" write inum 0x%lx i=%d type 0x%x bn %lx off %d = cn 0x%lx off 0x%lx\n",
+ DPRINTF((" write inum 0x%lx i=%d type 0x%x bn %lx off %d"
+ " = cn 0x%lx off 0x%lx\n",
(unsigned long)INUM(xip), i,
xip->xi_direntp[i]->xd_entryType,
xip->xi_dirent_blk[i],
@@ -675,7 +684,8 @@ exfatfs_update(struct vnode *vp, const s
struct xfinode *xip;
DPRINTF(("exfatfs_update %p (0x%lx) flags 0x%x xiflags 0x%lx\n",
- vp, (unsigned long)INUM(VTOXI(vp)), flags, VTOXI(vp)->xi_flag));
+ vp, (unsigned long)INUM(VTOXI(vp)), flags,
+ VTOXI(vp)->xi_flag));
if (vp->v_mount->mnt_flag & MNT_RDONLY) {
DPRINTF(("exfatfs_update: ro\n"));
@@ -839,7 +849,7 @@ exfatfs_findempty(struct vnode *dvp, str
KASSERT(len > 2);
KASSERT(len <= EXFATFS_MAXDIRENT);
- DPRINTF(("exfatfs_findempty searching dir 0x%lx bytes 0..%llu of %llu\n",
+ DPRINTF(("exfatfs_findempty search dir 0x%lx bytes 0..%llu of %llu\n",
(unsigned long)INUM(dxip),
(unsigned long long)GET_DSE_VALIDDATALENGTH(dxip),
(unsigned long long)GET_DSE_DATALENGTH(dxip)));
@@ -852,7 +862,8 @@ exfatfs_findempty(struct vnode *dvp, str
for (off = 0; off < GET_DSE_VALIDDATALENGTH(dxip); off += SECSIZE(fs)) {
lbn = EXFATFS_BYTES2FSSEC(fs, off);
VOP_BMAP(dvp, lbn, NULL, &blkno, NULL);
- if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0, &bp)) != 0)
+ if ((error = bread(fs->xf_devvp, blkno, SECSIZE(fs), 0, &bp))
+ != 0)
return error;
for (so = 0; so < SECSIZE(fs); so += sizeof(*dirent)) {
dirent = (struct exfatfs_dirent *)
@@ -868,11 +879,15 @@ exfatfs_findempty(struct vnode *dvp, str
++contig;
if (contig >= len) {
brelse(bp, 0);
- DPRINTF(("dir 0x%lx has %d empty entries at byte %lld (entry %u) bn 0x%lx..0x%lx\n",
+ DPRINTF(("dir 0x%lx has %d empty"
+ " entries at byte %lld"
+ " (entry %u) bn 0x%lx..0x%lx"
+ "\n",
(unsigned long)INUM(dxip),
contig,
(long long)r,
- (unsigned)EXFATFS_BYTES2DIRENT(fs, r),
+ (unsigned)
+ EXFATFS_BYTES2DIRENT(fs, r),
rblkno, blkno));
goto havespace;
}
@@ -892,7 +907,8 @@ exfatfs_findempty(struct vnode *dvp, str
newsize = r + len * sizeof(*dirent);
if (GET_DSE_DATALENGTH(dxip) < newsize) {
/* We need to allocate blocks before extending */
- if ((error = deextend(dxip, roundup2(newsize, CLUSTERSIZE(fs)), 0, NOCRED)) != 0)
+ if ((error = deextend(dxip, roundup2(newsize, CLUSTERSIZE(fs)),
+ 0, NOCRED)) != 0)
return error;
DPRINTF((" allocated dir 0x%lx to %llu\n",
(unsigned long)INUM(dxip),
@@ -1095,7 +1111,8 @@ exfatfs_alloc(struct vnode *dvp, struct
cnp->cn_flags);
VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK);
- DPRINTF(("exfatfs_alloc: new entry is 0x%lx\n", (unsigned long)INUM(xip)));
+ DPRINTF(("exfatfs_alloc: new entry is 0x%lx\n",
+ (unsigned long)INUM(xip)));
return (0);
errout:
@@ -1320,7 +1337,8 @@ exfatfs_lookup(void *v)
*vpp = NULL;
- DPRINTF(("exfatfs_lookup(%p, %p, {%x, %x, %d:\"%*s\"=%hhx,%hhx,%hhx})\n",
+ DPRINTF(("exfatfs_lookup(%p, %p, {%x, %x, %d:\"%*s\"=%hhx,%hhx,%hhx})"
+ "\n",
dvp, vpp,
(unsigned)cnp->cn_nameiop,
(unsigned)cnp->cn_flags,
@@ -1362,11 +1380,13 @@ exfatfs_lookup(void *v)
#ifdef TRACE_INUM
if (INUM(dxip) == TRACE_INUM) {
if (*vpp == NULLVP) {
- printf("cache_lookup returned ENOENT for name %.*s\n",
+ printf("cache_lookup returned ENOENT for name"
+ " %.*s\n",
(int)cnp->cn_namelen, cnp->cn_nameptr);
} else {
KASSERT(VTOXI(*vpp) != NULL);
- printf("cache_lookup returned ino 0x%lx for name %.*s\n",
+ printf("cache_lookup returned ino 0x%lx for"
+ " name %.*s\n",
INUM(VTOXI(*vpp)), (int)cnp->cn_namelen,
cnp->cn_nameptr);
}
@@ -1425,8 +1445,9 @@ exfatfs_lookup(void *v)
if (fx.xip != NULL) {
#ifdef TRACE_INUM
if (INUM(dxip) == TRACE_INUM || INUM(fx.xip) == TRACE_INUM)
- printf("lookup dino 0x%lx found ino 0x%lx with xip=%p gen %p\n",
- INUM(dxip), INUM(fx.xip), fx.xip, fx.xip->xi_dirgen);
+ printf("lookup dino 0x%lx found ino 0x%lx with xip=%p"
+ " gen %p\n", INUM(dxip), INUM(fx.xip), fx.xip,
+ fx.xip->xi_dirgen);
#endif /* TRACE_INUM */
nvp = NULL;
/* Store xip where loadvnode can find it */
@@ -1636,9 +1657,10 @@ exfatfs_readdir(void *v)
}
dirbuf.d_type = DT_DIR;
dirbuf.d_reclen = _DIRENT_SIZE(&dirbuf);
- DPRINTF(("dirbuf fileno=0x%lx type=%d namlen=%d name=%.*s\n",
- dirbuf.d_fileno, dirbuf.d_type,
- dirbuf.d_namlen,
+ DPRINTF(("dirbuf fileno=0x%lx type=%d namlen=%d"
+ " name=%.*s\n",
+ dirbuf.d_fileno, dirbuf.d_type,
+ dirbuf.d_namlen,
dirbuf.d_namlen, dirbuf.d_name));
if (uio->uio_resid < dirbuf.d_reclen)
goto out;
@@ -1680,9 +1702,10 @@ out:
*ap->a_ncookies = fo.ncookies;
}
- DPRINTF(("readdir: returning %d with resid=%u, offset-BIAS=%llu, eof=%d\n",
- error, (unsigned)uio->uio_resid,
- (unsigned long long)(offset - BIAS),
+ DPRINTF(("readdir: returning %d with resid=%u, offset-BIAS=%llu,"
+ " eof=%d\n",
+ error, (unsigned)uio->uio_resid,
+ (unsigned long long)(offset - BIAS),
*ap->a_eofflag));
exfatfs_check_fence(fs);
return (error);
@@ -1939,10 +1962,12 @@ exfatfs_inactive(void *v)
* it from the directory earlier.
*/
if (xip->xi_refcnt > 0) {
- DPRINTF(("exfatfs_inactive: ino 0x%lx no recycle\n", (unsigned long)INUM(xip)));
+ DPRINTF(("exfatfs_inactive: ino 0x%lx no recycle\n",
+ (unsigned long)INUM(xip)));
*ap->a_recycle = 0;
} else {
- DPRINTF(("exfatfs_inactive: ino 0x%lx yes recycle\n", (unsigned long)INUM(xip)));
+ DPRINTF(("exfatfs_inactive: ino 0x%lx yes recycle\n",
+ (unsigned long)INUM(xip)));
*ap->a_recycle = 1;
#ifdef USE_INACTIVE
if ((vp->v_mount->mnt_flag & MNT_RDONLY) == 0 &&
@@ -2145,7 +2170,8 @@ exfatfs_readlink(void *v)
{
daddr_t blkno;
VOP_BMAP(vp, lbn, NULL, &blkno, NULL);
- error = bread(xip->xi_devvp, blkno, SECSIZE(fs), 0, &bp);
+ error = bread(xip->xi_devvp, blkno, SECSIZE(fs), 0,
+ &bp);
}
#endif /* !SYMLINK_SELF */
if (error)
@@ -2208,7 +2234,7 @@ const struct vnodeopv_entry_desc exfatfs
{ &vop_inactive_desc, exfatfs_inactive }, /* inactive */
{ &vop_reclaim_desc, exfatfs_reclaim }, /* reclaim */
#ifdef EXFATFS_LOCKDEBUG
- { &vop_lock_desc, exfatfs_lock }, /* lock */
+ { &vop_lock_desc, exfatfs_lock }, /* lock */
#else
{ &vop_lock_desc, genfs_lock }, /* lock */
#endif
@@ -2269,8 +2295,9 @@ detrunc(struct xfinode *xip, off_t bytes
}
#endif /* USE_FATCACHE */
- DPRINTF(("inum 0x%lx trunc bytes=%lx lcn=0x%x pcn=0x%x oldcount=0x%x newcount=0x%x\n",
- (unsigned long)INUM(xip), (unsigned long)bytes, (unsigned)lcn, (unsigned)pcn,
+ DPRINTF(("inum 0x%lx trunc bytes=%lx lcn=0x%x pcn=0x%x oldcount=0x%x"
+ " newcount=0x%x\n", (unsigned long)INUM(xip),
+ (unsigned long)bytes, (unsigned)lcn, (unsigned)pcn,
(unsigned)oldcount, (unsigned)newcount));
while (lcn < oldcount) {
@@ -2278,17 +2305,21 @@ detrunc(struct xfinode *xip, off_t bytes
assert(pcn >= 2 && pcn < fs->xf_ClusterCount + 2);
/* Read the FAT to find the next cluster */
- bread(fs->xf_devvp, EXFATFS_FATBLK(fs, pcn), SECSIZE(fs), 0, &bp);
+ bread(fs->xf_devvp, EXFATFS_FATBLK(fs, pcn), SECSIZE(fs), 0,
+ &bp);
opcn = pcn;
pcn = ((uint32_t *)bp->b_data)[EXFATFS_FATOFF(pcn)];
if (lcn >= newcount) {
/* Deallocate cluster */
- DPRINTF(("dealloc cluster 0x%x from ino 0x%x coff %u/%u\n",
+ DPRINTF(("dealloc cluster 0x%x from ino 0x%x coff"
+ " %u/%u\n",
(unsigned)opcn, (unsigned)INUM(xip),
(unsigned)lcn,
- (unsigned)EXFATFS_BYTES2CLUSTER(fs, GET_DSE_DATALENGTH(xip))));
+ (unsigned)EXFATFS_BYTES2CLUSTER(fs,
+ GET_DSE_DATALENGTH(xip))));
exfatfs_bitmap_dealloc(fs, opcn);
- ((uint32_t *)bp->b_data)[EXFATFS_FATOFF(opcn)] = 0xFFFFFFFF;
+ ((uint32_t *)bp->b_data)[EXFATFS_FATOFF(opcn)]
+ = 0xFFFFFFFF;
if (ioflags)
bwrite(bp);
else
@@ -2297,9 +2328,13 @@ detrunc(struct xfinode *xip, off_t bytes
/* Invalidate the pages, if any, in the buffer cache */
#if 0 /* use vtruncbuf instead */
if (ISDIRECTORY(xip) || ISSYMLINK(xip)) {
- for (lbn = 0; lbn < EXFATFS_CLUSTER2FSSEC(fs, 1); ++lbn) {
+ for (lbn = 0;
+ lbn < EXFATFS_CLUSTER2FSSEC(fs, 1); ++lbn) {
binvalbuf(xip->xi_devvp,
- EXFATFS_CLUSTER2HWADDR(fs, pcn) + EXFATFS_FSSEC2DEVBSIZE(fs, lbn));
+ EXFATFS_CLUSTER2HWADDR(fs,
+ pcn)
+ + EXFATFS_FSSEC2DEVBSIZE(fs,
+ lbn));
}
}
#endif /* 0 */
@@ -2336,7 +2371,9 @@ detrunc(struct xfinode *xip, off_t bytes
/*
* Allocate clusters from the free map.
*/
-static int deextend(struct xfinode *xip, off_t bytes, int ioflags, kauth_cred_t cred) {
+static int deextend(struct xfinode *xip, off_t bytes, int ioflags,
+ kauth_cred_t cred)
+{
struct exfatfs *fs = xip->xi_fs;
uint32_t newcount = EXFATFS_BYTES2CLUSTER(fs, bytes) +
((bytes & CLUSTERMASK(fs)) ? 1 : 0);
@@ -2380,7 +2417,8 @@ static int deextend(struct xfinode *xip,
#endif /* USE_FATCACHE */
if (lcn >= newcount) {
- printf("impossible: bytes=%ld datalength=%lu lcn=%u old=%u new=%u\n",
+ printf("impossible: bytes=%ld datalength=%lu lcn=%u old=%u"
+ " new=%u\n",
(long)bytes, (unsigned long)GET_DSE_DATALENGTH(xip),
lcn, oldcount, newcount);
}
@@ -2412,7 +2450,8 @@ static int deextend(struct xfinode *xip,
mutex_exit(&fs->xf_lock);
#endif /* !ALLOC_SEQUENTIAL */
allocated = 1;
- DPRINTF((" allocated lclust %u = pclust 0x%x (following 0x%x)\n", lcn, pcn, opcn));
+ DPRINTF((" allocated lclust %u = pclust 0x%x"
+ " (following 0x%x)\n", lcn, pcn, opcn));
/* Store the allocation */
if (lcn == 0) {
/* Store it in the directory entry */
@@ -2420,11 +2459,14 @@ static int deextend(struct xfinode *xip,
SET_DSE_NOFATCHAIN(xip);
} else {
/* Store it in the FAT, just after opcn */
- if ((error = bread(fs->xf_devvp, EXFATFS_FATBLK(fs, opcn),
+ if ((error = bread(fs->xf_devvp,
+ EXFATFS_FATBLK(fs, opcn),
SECSIZE(fs), 0, &bp)) != 0)
return error;
- ((uint32_t *)bp->b_data)[EXFATFS_FATOFF(opcn)] = pcn;
- DPRINTF(("FAT %lu -> %lu\n", (unsigned long)opcn,
+ ((uint32_t *)bp->b_data)[EXFATFS_FATOFF(opcn)]
+ = pcn;
+ DPRINTF(("FAT %lu -> %lu\n",
+ (unsigned long)opcn,
(unsigned long)pcn));
/*
* If the clusters are not adjacent,
@@ -2432,7 +2474,8 @@ static int deextend(struct xfinode *xip,
* reckoning for bmap.
*/
if (pcn != opcn + 1 && IS_DSE_NOFATCHAIN(xip)) {
- DPRINTF(("inum 0x%lx not consecutive with 0x%x != 0x%x+1\n",
+ DPRINTF(("inum 0x%lx not consecutive"
+ " with 0x%x != 0x%x+1\n",
INUM(xip), pcn, opcn));
CLR_DSE_NOFATCHAIN(xip);
}
@@ -2447,7 +2490,8 @@ static int deextend(struct xfinode *xip,
for (bn = EXFATFS_CLUSTER2HWADDR(fs, pcn);
EXFATFS_HWADDR2CLUSTER(fs, bn) == pcn;
bn += EXFATFS_FSSEC2DEVBSIZE(fs, 1)) {
- bp = getblk(fs->xf_devvp, bn, SECSIZE(fs), 0, 0);
+ bp = getblk(fs->xf_devvp, bn,
+ SECSIZE(fs), 0, 0);
memset(bp->b_data, 0, SECSIZE(fs));
bdwrite(bp);
bp = NULL;
@@ -2468,7 +2512,8 @@ static int deextend(struct xfinode *xip,
if (allocated) {
pcn = 0;
} else {
- if ((error = bread(fs->xf_devvp, EXFATFS_FATBLK(fs, pcn),
+ if ((error = bread(fs->xf_devvp,
+ EXFATFS_FATBLK(fs, pcn),
SECSIZE(fs), 0, &bp)) != 0)
return error;
pcn = ((uint32_t *)bp->b_data)[EXFATFS_FATOFF(pcn)];
Index: src/sys/fs/exfatfs/exfatfs_vnops.h
diff -u src/sys/fs/exfatfs/exfatfs_vnops.h:1.1.2.1 src/sys/fs/exfatfs/exfatfs_vnops.h:1.1.2.2
--- src/sys/fs/exfatfs/exfatfs_vnops.h:1.1.2.1 Sat Jun 29 19:43:26 2024
+++ src/sys/fs/exfatfs/exfatfs_vnops.h Mon Jul 1 22:15:21 2024
@@ -1,39 +1,66 @@
-/* $NetBSD: exfatfs_vnops.h,v 1.1.2.1 2024/06/29 19:43:26 perseant Exp $ */
+/* $NetBSD: exfatfs_vnops.h,v 1.1.2.2 2024/07/01 22:15:21 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2022, 2024 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
#ifndef EXFATFS_VNOPS_H_
#define EXFATFS_VNOPS_H_
-int exfatfs_access(void *v);
-int exfatfs_activate(struct xfinode *xip, bool rekey);
-int exfatfs_advlock(void *v);
-int exfatfs_bmap(void *v);
-int exfatfs_close(void *v);
-int exfatfs_create(void *v);
-int exfatfs_deactivate(struct xfinode *xip, bool rekey);
+int exfatfs_access(void *);
+int exfatfs_activate(struct xfinode *, bool);
+int exfatfs_advlock(void *);
+int exfatfs_bmap(void *);
+int exfatfs_close(void *);
+int exfatfs_create(void *);
+int exfatfs_deactivate(struct xfinode *, bool);
int exfatfs_findempty(struct vnode *, struct xfinode *);
-int exfatfs_fsync(void *v);
-int exfatfs_getattr(void *v);
-int exfatfs_inactive(void *v);
-void exfatfs_itimes(struct xfinode *dep, const struct timespec *acc,
- const struct timespec *mod, const struct timespec *cre);
+int exfatfs_fsync(void *);
+int exfatfs_getattr(void *);
+int exfatfs_inactive(void *);
+void exfatfs_itimes(struct xfinode *, const struct timespec *,
+ const struct timespec *, const struct timespec *);
int exfatfs_lookup(void *);
-int exfatfs_mkdir(void *v);
-int exfatfs_pathconf(void *v);
-int exfatfs_print(void *v);
-int exfatfs_read(void *v);
-int exfatfs_readdir(void *v);
-int exfatfs_readlink(void *v);
-int exfatfs_reclaim(void *v);
-int exfatfs_rekey(struct vnode *vp, struct exfatfs_dirent_key *nkeyp);
-int exfatfs_remove(void *v);
-int exfatfs_rename(void *v);
-int exfatfs_rmdir(void *v);
-int exfatfs_setattr(void *v);
-int exfatfs_strategy(void *v);
-int exfatfs_symlink(void *v);
-int exfatfs_update(struct vnode *vp, const struct timespec *acc,
- const struct timespec *mod, int flags);
-int exfatfs_write(void *v);
-int exfatfs_writeback(struct xfinode *xip);
-int exfatfs_writeback2(struct xfinode *xip, struct xfinode *rxip);
+int exfatfs_mkdir(void *);
+int exfatfs_pathconf(void *);
+int exfatfs_print(void *);
+int exfatfs_read(void *);
+int exfatfs_readdir(void *);
+int exfatfs_readlink(void *);
+int exfatfs_reclaim(void *);
+int exfatfs_rekey(struct vnode *, struct exfatfs_dirent_key *);
+int exfatfs_remove(void *);
+int exfatfs_rename(void *);
+int exfatfs_rmdir(void *);
+int exfatfs_setattr(void *);
+int exfatfs_strategy(void *);
+int exfatfs_symlink(void *);
+int exfatfs_update(struct vnode *, const struct timespec *,
+ const struct timespec *, int);
+int exfatfs_write(void *);
+int exfatfs_writeback(struct xfinode *);
+int exfatfs_writeback2(struct xfinode *, struct xfinode *);
#endif /* EXFATFS_VNOPS_H_ */