GFS2: Add explanation of extended attr on-disk format

Some useful info regarding the on-disk representation of
GFS2 extended attributes.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
Steven Whitehouse 2009-08-25 13:44:04 +01:00
parent d34843d0c4
commit b6ed2e03df
1 changed files with 22 additions and 0 deletions

View File

@ -333,6 +333,28 @@ struct gfs2_leaf {
/* /*
* Extended attribute header format * Extended attribute header format
*
* This works in a similar way to dirents. There is a fixed size header
* followed by a variable length section made up of the name and the
* associated data. In the case of a "stuffed" entry, the value is
* inline directly after the name, the ea_num_ptrs entry will be
* zero in that case. For non-"stuffed" entries, there will be
* a set of pointers (aligned to 8 byte boundary) to the block(s)
* containing the value.
*
* The blocks containing the values and the blocks containing the
* extended attribute headers themselves all start with the common
* metadata header. Each inode, if it has extended attributes, will
* have either a single block containing the extended attribute headers
* or a single indirect block pointing to blocks containing the
* extended attribure headers.
*
* The maximim size of the data part of an extended attribute is 64k
* so the number of blocks required depends upon block size. Since the
* block size also determines the number of pointers in an indirect
* block, its a fairly complicated calculation to work out the maximum
* number of blocks that an inode may have relating to extended attributes.
*
*/ */
#define GFS2_EA_MAX_NAME_LEN 255 #define GFS2_EA_MAX_NAME_LEN 255