Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/fstyp fstyp: Sync hammer2_disk.h with DragonFly BSD
details: https://anonhg.NetBSD.org/src/rev/757425be8f0b
branches: trunk
changeset: 939014:757425be8f0b
user: tkusumi <tkusumi%NetBSD.org@localhost>
date: Wed Sep 23 14:39:23 2020 +0000
description:
fstyp: Sync hammer2_disk.h with DragonFly BSD
taken-from: DragonFly BSD
diffstat:
usr.sbin/fstyp/hammer2.c | 8 +-
usr.sbin/fstyp/hammer2_disk.h | 107 +++++------------------------------------
2 files changed, 19 insertions(+), 96 deletions(-)
diffs (269 lines):
diff -r 710a899e4eea -r 757425be8f0b usr.sbin/fstyp/hammer2.c
--- a/usr.sbin/fstyp/hammer2.c Wed Sep 23 13:45:14 2020 +0000
+++ b/usr.sbin/fstyp/hammer2.c Wed Sep 23 14:39:23 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: hammer2.c,v 1.5 2020/08/14 18:35:57 tkusumi Exp $ */
+/* $NetBSD: hammer2.c,v 1.6 2020/09/23 14:39:23 tkusumi Exp $ */
/*-
* Copyright (c) 2017-2019 The DragonFly Project
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hammer2.c,v 1.5 2020/08/14 18:35:57 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hammer2.c,v 1.6 2020/09/23 14:39:23 tkusumi Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -79,10 +79,10 @@
}
io_off = bref->data_off & ~HAMMER2_OFF_MASK_RADIX;
- io_base = io_off & ~(hammer2_off_t)(HAMMER2_MINIOSIZE - 1);
+ io_base = io_off & ~(hammer2_off_t)(HAMMER2_LBUFSIZE - 1);
boff = (size_t)(io_off - io_base);
- io_bytes = HAMMER2_MINIOSIZE;
+ io_bytes = HAMMER2_LBUFSIZE;
while (io_bytes + boff < bytes)
io_bytes <<= 1;
diff -r 710a899e4eea -r 757425be8f0b usr.sbin/fstyp/hammer2_disk.h
--- a/usr.sbin/fstyp/hammer2_disk.h Wed Sep 23 13:45:14 2020 +0000
+++ b/usr.sbin/fstyp/hammer2_disk.h Wed Sep 23 14:39:23 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: hammer2_disk.h,v 1.1 2020/01/01 08:56:41 tkusumi Exp $ */
+/* $NetBSD: hammer2_disk.h,v 1.2 2020/09/23 14:39:23 tkusumi Exp $ */
/*
* Copyright (c) 2011-2019 The DragonFly Project. All rights reserved.
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hammer2_disk.h,v 1.1 2020/01/01 08:56:41 tkusumi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hammer2_disk.h,v 1.2 2020/09/23 14:39:23 tkusumi Exp $");
#ifndef _VFS_HAMMER2_DISK_H_
#define _VFS_HAMMER2_DISK_H_
@@ -96,15 +96,6 @@
#define HAMMER2_RADIX_KEY 64 /* number of bits in key */
/*
- * MINALLOCSIZE - The minimum allocation size. This can be smaller
- * or larger than the minimum physical IO size.
- *
- * NOTE: Should not be larger than 1K since inodes
- * are 1K.
- *
- * MINIOSIZE - The minimum IO size. This must be less than
- * or equal to HAMMER2_LBUFSIZE.
- *
* HAMMER2_LBUFSIZE - Nominal buffer size for I/O rollups.
*
* HAMMER2_PBUFSIZE - Topological block size used by files for all
@@ -122,12 +113,6 @@
#define HAMMER2_LBUFRADIX 14 /* logical buf (1<<14) bytes */
#define HAMMER2_LBUFSIZE 16384
-/*
- * Generally speaking we want to use 16K and 64K I/Os
- */
-#define HAMMER2_MINIORADIX HAMMER2_LBUFRADIX
-#define HAMMER2_MINIOSIZE HAMMER2_LBUFSIZE
-
#define HAMMER2_IND_BYTES_MIN 4096
#define HAMMER2_IND_BYTES_NOM HAMMER2_LBUFSIZE
#define HAMMER2_IND_BYTES_MAX HAMMER2_PBUFSIZE
@@ -149,9 +134,6 @@
* resulting in highly efficient storage for files <= 512 bytes and for files
* <= 512KB. Up to 4 directory entries can be referenced from a directory
* without requiring an indirect block.
- *
- * Indirect blocks are typically either 4KB (64 blockrefs / ~4MB represented),
- * or 64KB (1024 blockrefs / ~64MB represented).
*/
#define HAMMER2_SET_RADIX 2 /* radix 2 = 4 entries */
#define HAMMER2_SET_COUNT (1 << HAMMER2_SET_RADIX)
@@ -171,10 +153,9 @@
#define HAMMER2_UUID_STRING "5cbb9ad1-862d-11dc-a94d-01301bb8a9f5"
/*
- * A 4MB segment is reserved at the beginning of each 2GB zone. This segment
+ * A 4MB segment is reserved at the beginning of each 1GB. This segment
* contains the volume header (or backup volume header), the free block
- * table, and possibly other information in the future. A 4MB segment for
- * freemap is reserved at the beginning of every 1GB.
+ * table, and possibly other information in the future.
*
* 4MB = 64 x 64K blocks. Each 4MB segment is broken down as follows:
*
@@ -286,7 +267,7 @@
#define HAMMER2_VOLUME_ALIGN (8 * 1024 * 1024)
#define HAMMER2_VOLUME_ALIGN64 ((hammer2_off_t)HAMMER2_VOLUME_ALIGN)
#define HAMMER2_VOLUME_ALIGNMASK (HAMMER2_VOLUME_ALIGN - 1)
-#define HAMMER2_VOLUME_ALIGNMASK64 ((hammer2_off_t)HAMMER2_VOLUME_ALIGNMASK)
+#define HAMMER2_VOLUME_ALIGNMASK64 ((hammer2_off_t)HAMMER2_VOLUME_ALIGNMASK)
#define HAMMER2_NEWFS_ALIGN (HAMMER2_VOLUME_ALIGN)
#define HAMMER2_NEWFS_ALIGN64 ((hammer2_off_t)HAMMER2_VOLUME_ALIGN)
@@ -439,9 +420,9 @@
#define HAMMER2_BOOT_NOM_BYTES (64*1024*1024)
#define HAMMER2_BOOT_MAX_BYTES (256*1024*1024)
-#define HAMMER2_REDO_MIN_BYTES HAMMER2_VOLUME_ALIGN
-#define HAMMER2_REDO_NOM_BYTES (256*1024*1024)
-#define HAMMER2_REDO_MAX_BYTES (1024*1024*1024)
+#define HAMMER2_AUX_MIN_BYTES HAMMER2_VOLUME_ALIGN
+#define HAMMER2_AUX_NOM_BYTES (256*1024*1024)
+#define HAMMER2_AUX_MAX_BYTES (1024*1024*1024)
/*
* Most HAMMER2 types are implemented as unsigned 64-bit integers.
@@ -482,12 +463,10 @@
* case which means no data associated with the blockref, and
* not the '1 byte' it would otherwise calculate to.
*/
-#define HAMMER2_OFF_BAD ((hammer2_off_t)-1)
#define HAMMER2_OFF_MASK 0xFFFFFFFFFFFFFFC0ULL
#define HAMMER2_OFF_MASK_LO (HAMMER2_OFF_MASK & HAMMER2_PBUFMASK64)
#define HAMMER2_OFF_MASK_HI (~HAMMER2_PBUFMASK64)
#define HAMMER2_OFF_MASK_RADIX 0x000000000000003FULL
-#define HAMMER2_MAX_COPIES 6
/*
* HAMMER2 directory support and pre-defined keys
@@ -748,7 +727,7 @@
#define HAMMER2_BREF_TYPE_VOLUME 255 /* pseudo-type */
#define HAMMER2_BREF_FLAG_PFSROOT 0x01 /* see also related opflag */
-#define HAMMER2_BREF_FLAG_ZERO 0x02
+#define HAMMER2_BREF_FLAG_ZERO 0x02 /* NO LONGER USED */
#define HAMMER2_BREF_FLAG_EMERG_MIP 0x04 /* emerg modified-in-place */
/*
@@ -819,9 +798,6 @@
* until the set actually becomes full (that is, the entries in the set can
* shortcut the indirect blocks when the set is not full). Depending on how
* things are filled multiple indirect blocks will eventually be created.
- *
- * Indirect blocks are typically 4KB (64 entres) or 64KB (1024 entries) and
- * are also treated as fully set-associative.
*/
struct hammer2_blockset {
hammer2_blockref_t blockref[HAMMER2_SET_COUNT];
@@ -905,12 +881,7 @@
typedef struct hammer2_bmap_data hammer2_bmap_data_t;
/*
- * XXX "Inodes ARE directory entries" is no longer the case. Hardlinks are
- * dirents which refer to the same inode#, which is how filesystems usually
- * implement hardlink. The following comments need to be updated.
- *
- * In HAMMER2 inodes ARE directory entries, with a special exception for
- * hardlinks. The inode number is stored in the inode rather than being
+ * The inode number is stored in the inode rather than being
* based on the location of the inode (since the location moves every time
* the inode or anything underneath the inode is modified).
*
@@ -934,18 +905,6 @@
*
* The compression mode can be changed at any time in the inode and is
* recorded on a blockref-by-blockref basis.
- *
- * Hardlinks are supported via the inode map. Essentially the way a hardlink
- * works is that all individual directory entries representing the same file
- * are special cased and specify the same inode number. The actual file
- * is placed in the nearest parent directory that is parent to all instances
- * of the hardlink. If all hardlinks to a file are in the same directory
- * the actual file will also be placed in that directory. This file uses
- * the inode number as the directory entry key and is invisible to normal
- * directory scans. Real directory entry keys are differentiated from the
- * inode number key via bit 63. Access to the hardlink silently looks up
- * the real file and forwards all operations to that file. Removal of the
- * last hardlink also removes the real file.
*/
#define HAMMER2_INODE_BYTES 1024 /* (asserted by code) */
#define HAMMER2_INODE_MAXNAME 256 /* maximum name in bytes */
@@ -1134,37 +1093,8 @@
#define HAMMER2_PFSMODE_RW 0x02
/*
- * Allocation Table
- *
- */
-
-
-/*
- * Flags (8 bits) - blockref, for freemap only
- *
- * Note that the minimum chunk size is 1KB so we could theoretically have
- * 10 bits here, but we might have some future extension that allows a
- * chunk size down to 256 bytes and if so we will need bits 8 and 9.
- */
-#define HAMMER2_AVF_SELMASK 0x03 /* select group */
-#define HAMMER2_AVF_ALL_ALLOC 0x04 /* indicate all allocated */
-#define HAMMER2_AVF_ALL_FREE 0x08 /* indicate all free */
-#define HAMMER2_AVF_RESERVED10 0x10
-#define HAMMER2_AVF_RESERVED20 0x20
-#define HAMMER2_AVF_RESERVED40 0x40
-#define HAMMER2_AVF_RESERVED80 0x80
-#define HAMMER2_AVF_AVMASK32 ((uint32_t)0xFFFFFF00LU)
-#define HAMMER2_AVF_AVMASK64 ((uint64_t)0xFFFFFFFFFFFFFF00LLU)
-
-#define HAMMER2_AV_SELECT_A 0x00
-#define HAMMER2_AV_SELECT_B 0x01
-#define HAMMER2_AV_SELECT_C 0x02
-#define HAMMER2_AV_SELECT_D 0x03
-
-/*
- * The volume header eats a 64K block. There is currently an issue where
- * we want to try to fit all nominal filesystem updates in a 512-byte section
- * but it may be a lost cause due to the need for a blockset.
+ * The volume header eats a 64K block at the beginning of each 2GB zone
+ * up to four copies.
*
* All information is stored in host byte order. The volume header's magic
* number may be checked to determine the byte order. If you wish to mount
@@ -1191,7 +1121,7 @@
* allow HAMMER2 to pick up the others when it checks the copyinfo[]
* array on mount.
*
- * NOTE: root_blockref points to the super-root directory, not the root
+ * NOTE: sroot_blockset points to the super-root directory, not the root
* directory. The root directory will be a subdirectory under the
* super-root.
*
@@ -1199,13 +1129,6 @@
* snapshots (readonly or writable). It is possible to do a
* null-mount of the super-root using special path constructions
* relative to your mounted root.
- *
- * NOTE: HAMMER2 allows any subdirectory tree to be managed as if it were
- * a PFS, including mirroring and storage quota operations, and this is
- * prefered over creating discrete PFSs in the super-root. Instead
- * the super-root is most typically used to create writable snapshots,
- * alternative roots, and so forth. The super-root is also used by
- * the automatic snapshotting mechanism.
*/
#define HAMMER2_VOLUME_ID_HBO 0x48414d3205172011LLU
#define HAMMER2_VOLUME_ID_ABO 0x11201705324d4148LLU
@@ -1234,7 +1157,7 @@
/*
* allocator_size is precalculated at newfs time and does not include
- * reserved blocks, boot, or redo areas.
+ * reserved blocks, boot, or aux areas.
*
* Initial non-reserved-area allocations do not use the freemap
* but instead adjust alloc_iterator. Dynamic allocations take
@@ -1358,7 +1281,7 @@
#define HAMMER2_VOL_VERSION_MIN 1
#define HAMMER2_VOL_VERSION_DEFAULT 1
-#define HAMMER2_VOL_VERSION_WIP 2
+#define HAMMER2_VOL_VERSION_WIP 2
#define HAMMER2_NUM_VOLHDRS 4
Home |
Main Index |
Thread Index |
Old Index