]>
Commit | Line | Data |
---|---|---|
dd9fbcb8 DH |
1 | /* AFS fileserver XDR types |
2 | * | |
3 | * Copyright (C) 2018 Red Hat, Inc. All Rights Reserved. | |
4 | * Written by David Howells ([email protected]) | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU General Public Licence | |
8 | * as published by the Free Software Foundation; either version | |
9 | * 2 of the Licence, or (at your option) any later version. | |
10 | */ | |
11 | ||
12 | #ifndef XDR_FS_H | |
13 | #define XDR_FS_H | |
14 | ||
15 | struct afs_xdr_AFSFetchStatus { | |
16 | __be32 if_version; | |
17 | #define AFS_FSTATUS_VERSION 1 | |
18 | __be32 type; | |
19 | __be32 nlink; | |
20 | __be32 size_lo; | |
21 | __be32 data_version_lo; | |
22 | __be32 author; | |
23 | __be32 owner; | |
24 | __be32 caller_access; | |
25 | __be32 anon_access; | |
26 | __be32 mode; | |
27 | __be32 parent_vnode; | |
28 | __be32 parent_unique; | |
29 | __be32 seg_size; | |
30 | __be32 mtime_client; | |
31 | __be32 mtime_server; | |
32 | __be32 group; | |
33 | __be32 sync_counter; | |
34 | __be32 data_version_hi; | |
35 | __be32 lock_count; | |
36 | __be32 size_hi; | |
37 | __be32 abort_code; | |
38 | } __packed; | |
39 | ||
4ea219a8 DH |
40 | #define AFS_DIR_HASHTBL_SIZE 128 |
41 | #define AFS_DIR_DIRENT_SIZE 32 | |
42 | #define AFS_DIR_SLOTS_PER_BLOCK 64 | |
43 | #define AFS_DIR_BLOCK_SIZE 2048 | |
44 | #define AFS_DIR_BLOCKS_PER_PAGE (PAGE_SIZE / AFS_DIR_BLOCK_SIZE) | |
45 | #define AFS_DIR_MAX_SLOTS 65536 | |
46 | #define AFS_DIR_BLOCKS_WITH_CTR 128 | |
47 | #define AFS_DIR_MAX_BLOCKS 1023 | |
48 | #define AFS_DIR_RESV_BLOCKS 1 | |
49 | #define AFS_DIR_RESV_BLOCKS0 13 | |
50 | ||
51 | /* | |
52 | * Directory entry structure. | |
53 | */ | |
00317636 | 54 | union afs_xdr_dirent { |
4ea219a8 | 55 | struct { |
00317636 DH |
56 | u8 valid; |
57 | u8 unused[1]; | |
4ea219a8 DH |
58 | __be16 hash_next; |
59 | __be32 vnode; | |
60 | __be32 unique; | |
00317636 DH |
61 | u8 name[16]; |
62 | u8 overflow[4]; /* if any char of the name (inc | |
4ea219a8 DH |
63 | * NUL) reaches here, consume |
64 | * the next dirent too */ | |
65 | } u; | |
00317636 DH |
66 | u8 extended_name[32]; |
67 | } __packed; | |
4ea219a8 DH |
68 | |
69 | /* | |
00317636 | 70 | * Directory block header (one at the beginning of every 2048-byte block). |
4ea219a8 | 71 | */ |
00317636 | 72 | struct afs_xdr_dir_hdr { |
4ea219a8 DH |
73 | __be16 npages; |
74 | __be16 magic; | |
75 | #define AFS_DIR_MAGIC htons(1234) | |
00317636 DH |
76 | u8 reserved; |
77 | u8 bitmap[8]; | |
78 | u8 pad[19]; | |
79 | } __packed; | |
4ea219a8 DH |
80 | |
81 | /* | |
82 | * Directory block layout | |
83 | */ | |
00317636 DH |
84 | union afs_xdr_dir_block { |
85 | struct afs_xdr_dir_hdr hdr; | |
4ea219a8 DH |
86 | |
87 | struct { | |
00317636 DH |
88 | struct afs_xdr_dir_hdr hdr; |
89 | u8 alloc_ctrs[AFS_DIR_MAX_BLOCKS]; | |
4ea219a8 | 90 | __be16 hashtable[AFS_DIR_HASHTBL_SIZE]; |
00317636 | 91 | } meta; |
4ea219a8 | 92 | |
00317636 DH |
93 | union afs_xdr_dirent dirents[AFS_DIR_SLOTS_PER_BLOCK]; |
94 | } __packed; | |
4ea219a8 DH |
95 | |
96 | /* | |
97 | * Directory layout on a linux VM page. | |
98 | */ | |
00317636 DH |
99 | struct afs_xdr_dir_page { |
100 | union afs_xdr_dir_block blocks[AFS_DIR_BLOCKS_PER_PAGE]; | |
4ea219a8 DH |
101 | }; |
102 | ||
dd9fbcb8 | 103 | #endif /* XDR_FS_H */ |