2008年05月05日

xattr.h:

C:
  1. /*
  2.   File: linux/ext2_xattr.h
  3.  
  4.   On-disk format of extended attributes for the filesystem.
  5.  
  6.   (C) 2001 Andreas Gruenbacher, <a .gruenbacher@computer.org>
  7. */
  8.  
  9. #include <linux /init.h>
  10. #include </linux><linux /xattr.h>
  11.  
  12. /* Magic value in attribute blocks */
  13. #define EXT2_XATTR_MAGIC                0xEA020000
  14. //定义属性block中使用的魔数(一个标记,唯一的值)
  15.  
  16. /* Maximum number of references to one attribute block */
  17. #define EXT2_XATTR_REFCOUNT_MAX         1024
  18. //定义一个属性block
  19.  
  20. /* Name indexes */
  21. #define EXT2_XATTR_INDEX_USER                   1
  22. #define EXT2_XATTR_INDEX_POSIX_ACL_ACCESS       2
  23. #define EXT2_XATTR_INDEX_POSIX_ACL_DEFAULT      3
  24. #define EXT2_XATTR_INDEX_TRUSTED                4
  25. #define EXT2_XATTR_INDEX_LUSTRE                 5
  26. #define EXT2_XATTR_INDEX_SECURITY               6
  27.  
  28. struct ext2_xattr_header {
  29.         __le32  h_magic;        /* magic number for identification */
  30.         __le32  h_refcount;     /* reference count */
  31.         __le32  h_blocks;       /* number of disk blocks used */
  32.         __le32  h_hash;         /* hash value of all attributes */
  33.         __u32   h_reserved[4];  /* zero right now */
  34. };
  35. //__le32 h_magic; 标识码,为0xEA020000
  36.  
  37. //__le32 h_refcount; 属性块被链接的数目
  38.  
  39. //__le32 h_blocks; 用于扩展属性的块数
  40.  
  41. //__le32 h_hash;  所有属性的哈希值
  42.  
  43. //__u32 h_reserved[4]; 保留变量,目前为0
  44.  
  45. struct ext2_xattr_entry {
  46.         __u8    e_name_len;     /* length of name */
  47.         __u8    e_name_index;   /* attribute name index */
  48.         __le16  e_value_offs;   /* offset in disk block of value */
  49.         __le32  e_value_block;  /* disk block attribute is stored on (n/i) */
  50.         __le32  e_value_size;   /* size of attribute value */
  51.         __le32  e_hash;         /* hash value of name and value */
  52.         char    e_name[0];      /* attribute name */
  53. };
  54.  
  55. //__u8 e_name_len; 属性名长度
  56.  
  57. //__u8 e_name_index; 属性名索引
  58.  
  59. //__le16 e_value_offs; 属性值在值块中的偏移量
  60.  
  61. //__le32 e_value_block;  保存属性值的块的块号
  62.  
  63. //__le32 e_value_size;  属性值长度
  64.  
  65. //__le32 e_hash;  属性名和值的哈希值
  66.  
  67. //char e_name[0];  属性名
  68.  
  69. #define EXT2_XATTR_PAD_BITS             2
  70. #define EXT2_XATTR_PAD          (1<<EXT2_XATTR_PAD_BITS)
  71. #define EXT2_XATTR_ROUND                (EXT2_XATTR_PAD-1)
  72. #define EXT2_XATTR_LEN(name_len) \
  73.         (((name_len) + EXT2_XATTR_ROUND + \
  74.         sizeof(struct ext2_xattr_entry)) & ~EXT2_XATTR_ROUND)
  75. #define EXT2_XATTR_NEXT(entry) \
  76.         ( (struct ext2_xattr_entry *)( \
  77.           (char *)(entry) + EXT2_XATTR_LEN((entry)->e_name_len)) )
  78. #define EXT2_XATTR_SIZE(size) \
  79.         (((size) + EXT2_XATTR_ROUND) & ~EXT2_XATTR_ROUND)
  80.  
  81. # ifdef CONFIG_EXT2_FS_XATTR
  82. //当内核编译时指定使用xattr扩展属性时,xattr相关函数的申明
  83.  
  84. extern struct xattr_handler ext2_xattr_user_handler;
  85. extern struct xattr_handler ext2_xattr_trusted_handler;
  86. extern struct xattr_handler ext2_xattr_acl_access_handler;
  87. extern struct xattr_handler ext2_xattr_acl_default_handler;
  88. extern struct xattr_handler ext2_xattr_security_handler;
  89.  
  90. extern ssize_t ext2_listxattr(struct dentry *, char *, size_t);
  91.  
  92. extern int ext2_xattr_get(struct inode *, int, const char *, void *, size_t);
  93. extern int ext2_xattr_set(struct inode *, int, const char *, const void *, size_t, int);
  94.  
  95. extern void ext2_xattr_delete_inode(struct inode *);
  96. extern void ext2_xattr_put_super(struct super_block *);
  97.  
  98. extern int init_ext2_xattr(void);
  99. extern void exit_ext2_xattr(void);
  100.  
  101. extern struct xattr_handler *ext2_xattr_handlers[];
  102.  
  103. # else  /* CONFIG_EXT2_FS_XATTR */
  104.  
  105. //当内核编译时未使用xattr扩展属性,xattr相关函数被置为空
  106.  
  107. static inline int
  108. ext2_xattr_get(struct inode *inode, int name_index,
  109.                const char *name, void *buffer, size_t size)
  110. {
  111.         return -EOPNOTSUPP;
  112. }
  113.  
  114. static inline int
  115. ext2_xattr_set(struct inode *inode, int name_index, const char *name,
  116.                const void *value, size_t size, int flags)
  117. {
  118.         return -EOPNOTSUPP;
  119. }
  120.  
  121. static inline void
  122. ext2_xattr_delete_inode(struct inode *inode)
  123. {
  124. }
  125.  
  126. static inline void
  127. ext2_xattr_put_super(struct super_block *sb)
  128. {
  129. }
  130.  
  131. static inline int
  132. init_ext2_xattr(void)
  133. {
  134.         return 0;
  135. }
  136.  
  137. static inline void
  138. exit_ext2_xattr(void)
  139. {
  140. }
  141.  
  142. #define ext2_xattr_handlers NULL
  143.  
  144. # endif  /* CONFIG_EXT2_FS_XATTR */
  145.  
  146. #ifdef CONFIG_EXT2_FS_SECURITY
  147. extern int ext2_init_security(struct inode *inode, struct inode *dir);
  148. #else
  149. static inline int ext2_init_security(struct inode *inode, struct inode *dir)
  150. {
  151.         return 0;
  152. }
  153. #endif

xip.h:

C:
  1. /*
  2.  *  linux/fs//xip.h
  3.  *
  4.  * Copyright (C) 2005 IBM Corporation
  5.  * Author: Carsten Otte (cotte@de.ibm.com)
  6.  */
  7.  
  8. #ifdef CONFIG_EXT2_FS_XIP
  9. //当内核编译时指定使用xip扩展属性时,xip相关操作的函数申明
  10. extern void ext2_xip_verify_sb (struct super_block *);
  11. extern int ext2_clear_xip_target (struct inode *, int);
  12.  
  13. static inline int ext2_use_xip (struct super_block *sb)
  14. {
  15.         struct ext2_sb_info *sbi = EXT2_SB(sb);
  16.         return (sbi->s_mount_opt & EXT2_MOUNT_XIP);
  17. }
  18. struct page* ext2_get_xip_page (struct address_space *, sector_t, int);
  19. #define mapping_is_xip(map) unlikely(map->a_ops->get_xip_page)
  20. #else
  21. //当内核编译时未指定使用xattr扩展属性时,置这些函数操作为空
  22.  
  23. #define mapping_is_xip(map)                     0
  24. #define ext2_xip_verify_sb(sb)                  do { } while (0)
  25. #define ext2_use_xip(sb)                        0
  26. #define ext2_clear_xip_target(inode, chain)     0
  27. #define ext2_get_xip_page                       NULL
  28. #endif

标签 :

2 楼了已经

  • luguo写于08年05月05日

    哎,dp同学的毕设好做啊,写写注释就完~! ;-)

  • cocobear写于08年05月06日

    你也找一个好做得呗……

发表评论

在下面加入你的评论,或者 trackback 从你的博客站点。 订阅本文的评论。

:

:

:

« Ext2文件系统源代码分析(1)
» Ext2文件系统源代码分析(3)