~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/f2fs/xattr.h

Version: ~ [ linux-5.8-rc3 ] ~ [ linux-5.7.5 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.48 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.129 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.185 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.228 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.228 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.85 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * fs/f2fs/xattr.h
  3  *
  4  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  5  *             http://www.samsung.com/
  6  *
  7  * Portions of this code from linux/fs/ext2/xattr.h
  8  *
  9  * On-disk format of extended attributes for the ext2 filesystem.
 10  *
 11  * (C) 2001 Andreas Gruenbacher, <a.gruenbacher@computer.org>
 12  *
 13  * This program is free software; you can redistribute it and/or modify
 14  * it under the terms of the GNU General Public License version 2 as
 15  * published by the Free Software Foundation.
 16  */
 17 #ifndef __F2FS_XATTR_H__
 18 #define __F2FS_XATTR_H__
 19 
 20 #include <linux/init.h>
 21 #include <linux/xattr.h>
 22 
 23 /* Magic value in attribute blocks */
 24 #define F2FS_XATTR_MAGIC                0xF2F52011
 25 
 26 /* Maximum number of references to one attribute block */
 27 #define F2FS_XATTR_REFCOUNT_MAX         1024
 28 
 29 /* Name indexes */
 30 #define F2FS_SYSTEM_ADVISE_NAME                 "system.advise"
 31 #define F2FS_XATTR_INDEX_USER                   1
 32 #define F2FS_XATTR_INDEX_POSIX_ACL_ACCESS       2
 33 #define F2FS_XATTR_INDEX_POSIX_ACL_DEFAULT      3
 34 #define F2FS_XATTR_INDEX_TRUSTED                4
 35 #define F2FS_XATTR_INDEX_LUSTRE                 5
 36 #define F2FS_XATTR_INDEX_SECURITY               6
 37 #define F2FS_XATTR_INDEX_ADVISE                 7
 38 /* Should be same as EXT4_XATTR_INDEX_ENCRYPTION */
 39 #define F2FS_XATTR_INDEX_ENCRYPTION             9
 40 
 41 #define F2FS_XATTR_NAME_ENCRYPTION_CONTEXT      "c"
 42 
 43 struct f2fs_xattr_header {
 44         __le32  h_magic;        /* magic number for identification */
 45         __le32  h_refcount;     /* reference count */
 46         __u32   h_reserved[4];  /* zero right now */
 47 };
 48 
 49 struct f2fs_xattr_entry {
 50         __u8    e_name_index;
 51         __u8    e_name_len;
 52         __le16  e_value_size;   /* size of attribute value */
 53         char    e_name[0];      /* attribute name */
 54 };
 55 
 56 #define XATTR_HDR(ptr)          ((struct f2fs_xattr_header *)(ptr))
 57 #define XATTR_ENTRY(ptr)        ((struct f2fs_xattr_entry *)(ptr))
 58 #define XATTR_FIRST_ENTRY(ptr)  (XATTR_ENTRY(XATTR_HDR(ptr) + 1))
 59 #define XATTR_ROUND             (3)
 60 
 61 #define XATTR_ALIGN(size)       ((size + XATTR_ROUND) & ~XATTR_ROUND)
 62 
 63 #define ENTRY_SIZE(entry) (XATTR_ALIGN(sizeof(struct f2fs_xattr_entry) + \
 64                         entry->e_name_len + le16_to_cpu(entry->e_value_size)))
 65 
 66 #define XATTR_NEXT_ENTRY(entry) ((struct f2fs_xattr_entry *)((char *)(entry) +\
 67                         ENTRY_SIZE(entry)))
 68 
 69 #define IS_XATTR_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
 70 
 71 #define list_for_each_xattr(entry, addr) \
 72                 for (entry = XATTR_FIRST_ENTRY(addr);\
 73                                 !IS_XATTR_LAST_ENTRY(entry);\
 74                                 entry = XATTR_NEXT_ENTRY(entry))
 75 #define MAX_XATTR_BLOCK_SIZE    (PAGE_SIZE - sizeof(struct node_footer))
 76 #define VALID_XATTR_BLOCK_SIZE  (MAX_XATTR_BLOCK_SIZE - sizeof(__u32))
 77 #define MIN_OFFSET(i)           XATTR_ALIGN(inline_xattr_size(i) +      \
 78                                                 VALID_XATTR_BLOCK_SIZE)
 79 
 80 #define MAX_VALUE_LEN(i)        (MIN_OFFSET(i) -                        \
 81                                 sizeof(struct f2fs_xattr_header) -      \
 82                                 sizeof(struct f2fs_xattr_entry))
 83 
 84 /*
 85  * On-disk structure of f2fs_xattr
 86  * We use inline xattrs space + 1 block for xattr.
 87  *
 88  * +--------------------+
 89  * | f2fs_xattr_header  |
 90  * |                    |
 91  * +--------------------+
 92  * | f2fs_xattr_entry   |
 93  * | .e_name_index = 1  |
 94  * | .e_name_len = 3    |
 95  * | .e_value_size = 14 |
 96  * | .e_name = "foo"    |
 97  * | "value_of_xattr"   |<- value_offs = e_name + e_name_len
 98  * +--------------------+
 99  * | f2fs_xattr_entry   |
100  * | .e_name_index = 4  |
101  * | .e_name = "bar"    |
102  * +--------------------+
103  * |                    |
104  * |        Free        |
105  * |                    |
106  * +--------------------+<- MIN_OFFSET
107  * |   node_footer      |
108  * | (nid, ino, offset) |
109  * +--------------------+
110  *
111  **/
112 
113 #ifdef CONFIG_F2FS_FS_XATTR
114 extern const struct xattr_handler f2fs_xattr_user_handler;
115 extern const struct xattr_handler f2fs_xattr_trusted_handler;
116 extern const struct xattr_handler f2fs_xattr_advise_handler;
117 extern const struct xattr_handler f2fs_xattr_security_handler;
118 
119 extern const struct xattr_handler *f2fs_xattr_handlers[];
120 
121 extern int f2fs_setxattr(struct inode *, int, const char *,
122                                 const void *, size_t, struct page *, int);
123 extern int f2fs_getxattr(struct inode *, int, const char *, void *,
124                                                 size_t, struct page *);
125 extern ssize_t f2fs_listxattr(struct dentry *, char *, size_t);
126 #else
127 
128 #define f2fs_xattr_handlers     NULL
129 static inline int f2fs_setxattr(struct inode *inode, int index,
130                 const char *name, const void *value, size_t size,
131                 struct page *page, int flags)
132 {
133         return -EOPNOTSUPP;
134 }
135 static inline int f2fs_getxattr(struct inode *inode, int index,
136                         const char *name, void *buffer,
137                         size_t buffer_size, struct page *dpage)
138 {
139         return -EOPNOTSUPP;
140 }
141 static inline ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer,
142                 size_t buffer_size)
143 {
144         return -EOPNOTSUPP;
145 }
146 #endif
147 
148 #ifdef CONFIG_F2FS_FS_SECURITY
149 extern int f2fs_init_security(struct inode *, struct inode *,
150                                 const struct qstr *, struct page *);
151 #else
152 static inline int f2fs_init_security(struct inode *inode, struct inode *dir,
153                                 const struct qstr *qstr, struct page *ipage)
154 {
155         return 0;
156 }
157 #endif
158 #endif /* __F2FS_XATTR_H__ */
159 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp