linux/fs/afs/xdr_fs.h
<<
>>
Prefs
   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
  11struct 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 */
  50union 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 */
  68struct 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 */
  80union 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 */
  95struct afs_xdr_dir_page {
  96        union afs_xdr_dir_block blocks[AFS_DIR_BLOCKS_PER_PAGE];
  97};
  98
  99#endif /* XDR_FS_H */
 100