root/fs/afs/xdr_fs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */