VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
b4d0d230ccfb5 (Thomas Gleixner 2019-05-20 19:08:01 +0200   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   2) /* AFS fileserver XDR types
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   3)  *
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   4)  * Copyright (C) 2018 Red Hat, Inc. All Rights Reserved.
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   5)  * Written by David Howells (dhowells@redhat.com)
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   6)  */
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   7) 
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   8) #ifndef XDR_FS_H
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100   9) #define XDR_FS_H
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  10) 
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  11) struct afs_xdr_AFSFetchStatus {
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  12) 	__be32	if_version;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  13) #define AFS_FSTATUS_VERSION	1
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  14) 	__be32	type;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  15) 	__be32	nlink;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  16) 	__be32	size_lo;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  17) 	__be32	data_version_lo;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  18) 	__be32	author;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  19) 	__be32	owner;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  20) 	__be32	caller_access;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  21) 	__be32	anon_access;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  22) 	__be32	mode;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  23) 	__be32	parent_vnode;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  24) 	__be32	parent_unique;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  25) 	__be32	seg_size;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  26) 	__be32	mtime_client;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  27) 	__be32	mtime_server;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  28) 	__be32	group;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  29) 	__be32	sync_counter;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  30) 	__be32	data_version_hi;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  31) 	__be32	lock_count;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  32) 	__be32	size_hi;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  33) 	__be32	abort_code;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  34) } __packed;
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100  35) 
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  36) #define AFS_DIR_HASHTBL_SIZE	128
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  37) #define AFS_DIR_DIRENT_SIZE	32
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  38) #define AFS_DIR_SLOTS_PER_BLOCK	64
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  39) #define AFS_DIR_BLOCK_SIZE	2048
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  40) #define AFS_DIR_BLOCKS_PER_PAGE	(PAGE_SIZE / AFS_DIR_BLOCK_SIZE)
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  41) #define AFS_DIR_MAX_SLOTS	65536
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  42) #define AFS_DIR_BLOCKS_WITH_CTR	128
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  43) #define AFS_DIR_MAX_BLOCKS	1023
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  44) #define AFS_DIR_RESV_BLOCKS	1
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  45) #define AFS_DIR_RESV_BLOCKS0	13
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  46) 
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  47) /*
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  48)  * Directory entry structure.
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  49)  */
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  50) union afs_xdr_dirent {
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  51) 	struct {
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  52) 		u8		valid;
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  53) 		u8		unused[1];
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  54) 		__be16		hash_next;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  55) 		__be32		vnode;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  56) 		__be32		unique;
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  57) 		u8		name[];
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  58) 		/* When determining the number of dirent slots needed to
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  59) 		 * represent a directory entry, name should be assumed to be 16
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  60) 		 * bytes, due to a now-standardised (mis)calculation, but it is
366911cd762db (David Howells   2020-12-23 10:39:57 +0000  61) 		 * in fact 20 bytes in size.  afs_dir_calc_slots() should be
366911cd762db (David Howells   2020-12-23 10:39:57 +0000  62) 		 * used for this.
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  63) 		 *
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  64) 		 * For names longer than (16 or) 20 bytes, extra slots should
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  65) 		 * be annexed to this one using the extended_name format.
26982a89cad77 (David Howells   2020-12-21 22:37:58 +0000  66) 		 */
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  67) 	} u;
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  68) 	u8			extended_name[32];
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  69) } __packed;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  70) 
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  71) /*
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  72)  * Directory block header (one at the beginning of every 2048-byte block).
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  73)  */
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  74) struct afs_xdr_dir_hdr {
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  75) 	__be16		npages;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  76) 	__be16		magic;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  77) #define AFS_DIR_MAGIC htons(1234)
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  78) 	u8		reserved;
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  79) 	u8		bitmap[8];
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  80) 	u8		pad[19];
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  81) } __packed;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  82) 
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  83) /*
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  84)  * Directory block layout
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  85)  */
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  86) union afs_xdr_dir_block {
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  87) 	struct afs_xdr_dir_hdr		hdr;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  88) 
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  89) 	struct {
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  90) 		struct afs_xdr_dir_hdr	hdr;
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  91) 		u8			alloc_ctrs[AFS_DIR_MAX_BLOCKS];
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  92) 		__be16			hashtable[AFS_DIR_HASHTBL_SIZE];
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  93) 	} meta;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  94) 
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  95) 	union afs_xdr_dirent	dirents[AFS_DIR_SLOTS_PER_BLOCK];
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100  96) } __packed;
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  97) 
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  98) /*
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100  99)  * Directory layout on a linux VM page.
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100 100)  */
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100 101) struct afs_xdr_dir_page {
0031763698d19 (David Howells   2018-04-06 14:17:25 +0100 102) 	union afs_xdr_dir_block	blocks[AFS_DIR_BLOCKS_PER_PAGE];
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100 103) };
4ea219a839bf8 (David Howells   2018-04-06 14:17:25 +0100 104) 
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 105) /*
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 106)  * Calculate the number of dirent slots required for any given name length.
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 107)  * The calculation is made assuming the part of the name in the first slot is
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 108)  * 16 bytes, rather than 20, but this miscalculation is now standardised.
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 109)  */
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 110) static inline unsigned int afs_dir_calc_slots(size_t name_len)
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 111) {
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 112) 	name_len++; /* NUL-terminated */
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 113) 	return 1 + ((name_len + 15) / AFS_DIR_DIRENT_SIZE);
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 114) }
366911cd762db (David Howells   2020-12-23 10:39:57 +0000 115) 
dd9fbcb8e1034 (David Howells   2018-04-06 14:17:24 +0100 116) #endif /* XDR_FS_H */