xdr_fs.h 2.0 KB

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