Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
721f69c4
Commit
721f69c4
authored
Aug 18, 2009
by
Tao Ma
Committed by
Joel Becker
Sep 22, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ocfs2: Define refcount tree structure.
Signed-off-by:
Tao Ma
<
tao.ma@oracle.com
>
parent
5e404e9e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
3 deletions
+85
-3
fs/ocfs2/ocfs2_fs.h
fs/ocfs2/ocfs2_fs.h
+85
-3
No files found.
fs/ocfs2/ocfs2_fs.h
View file @
721f69c4
...
@@ -68,6 +68,7 @@
...
@@ -68,6 +68,7 @@
#define OCFS2_DIR_TRAILER_SIGNATURE "DIRTRL1"
#define OCFS2_DIR_TRAILER_SIGNATURE "DIRTRL1"
#define OCFS2_DX_ROOT_SIGNATURE "DXDIR01"
#define OCFS2_DX_ROOT_SIGNATURE "DXDIR01"
#define OCFS2_DX_LEAF_SIGNATURE "DXLEAF1"
#define OCFS2_DX_LEAF_SIGNATURE "DXLEAF1"
#define OCFS2_REFCOUNT_BLOCK_SIGNATURE "REFCNT1"
/* Compatibility flags */
/* Compatibility flags */
#define OCFS2_HAS_COMPAT_FEATURE(sb,mask) \
#define OCFS2_HAS_COMPAT_FEATURE(sb,mask) \
...
@@ -160,6 +161,9 @@
...
@@ -160,6 +161,9 @@
/* Metadata checksum and error correction */
/* Metadata checksum and error correction */
#define OCFS2_FEATURE_INCOMPAT_META_ECC 0x0800
#define OCFS2_FEATURE_INCOMPAT_META_ECC 0x0800
/* Refcount tree support */
#define OCFS2_FEATURE_INCOMPAT_REFCOUNT_TREE 0x1000
/*
/*
* backup superblock flag is used to indicate that this volume
* backup superblock flag is used to indicate that this volume
* has backup superblocks.
* has backup superblocks.
...
@@ -223,6 +227,7 @@
...
@@ -223,6 +227,7 @@
#define OCFS2_HAS_XATTR_FL (0x0002)
#define OCFS2_HAS_XATTR_FL (0x0002)
#define OCFS2_INLINE_XATTR_FL (0x0004)
#define OCFS2_INLINE_XATTR_FL (0x0004)
#define OCFS2_INDEXED_DIR_FL (0x0008)
#define OCFS2_INDEXED_DIR_FL (0x0008)
#define OCFS2_HAS_REFCOUNT_FL (0x0010)
/* Inode attributes, keep in sync with EXT2 */
/* Inode attributes, keep in sync with EXT2 */
#define OCFS2_SECRM_FL (0x00000001)
/* Secure deletion */
#define OCFS2_SECRM_FL (0x00000001)
/* Secure deletion */
...
@@ -241,8 +246,11 @@
...
@@ -241,8 +246,11 @@
/*
/*
* Extent record flags (e_node.leaf.flags)
* Extent record flags (e_node.leaf.flags)
*/
*/
#define OCFS2_EXT_UNWRITTEN (0x01)
/* Extent is allocated but
#define OCFS2_EXT_UNWRITTEN (0x01)
/* Extent is allocated but
* unwritten */
* unwritten */
#define OCFS2_EXT_REFCOUNTED (0x02)
/* Extent is reference
* counted in an associated
* refcount tree */
/*
/*
* ioctl commands
* ioctl commands
...
@@ -717,7 +725,8 @@ struct ocfs2_dinode {
...
@@ -717,7 +725,8 @@ struct ocfs2_dinode {
__le64
i_xattr_loc
;
__le64
i_xattr_loc
;
/*80*/
struct
ocfs2_block_check
i_check
;
/* Error checking */
/*80*/
struct
ocfs2_block_check
i_check
;
/* Error checking */
/*88*/
__le64
i_dx_root
;
/* Pointer to dir index root block */
/*88*/
__le64
i_dx_root
;
/* Pointer to dir index root block */
__le64
i_reserved2
[
5
];
/*90*/
__le64
i_refcount_loc
;
__le64
i_reserved2
[
4
];
/*B8*/
union
{
/*B8*/
union
{
__le64
i_pad1
;
/* Generic way to refer to this
__le64
i_pad1
;
/* Generic way to refer to this
64bit union */
64bit union */
...
@@ -901,6 +910,59 @@ struct ocfs2_group_desc
...
@@ -901,6 +910,59 @@ struct ocfs2_group_desc
/*40*/
__u8
bg_bitmap
[
0
];
/*40*/
__u8
bg_bitmap
[
0
];
};
};
struct
ocfs2_refcount_rec
{
/*00*/
__le64
r_cpos
;
/* Physical offset, in clusters */
__le32
r_clusters
;
/* Clusters covered by this extent */
__le32
r_refcount
;
/* Reference count of this extent */
/*10*/
};
#define OCFS2_REFCOUNT_LEAF_FL (0x00000001)
#define OCFS2_REFCOUNT_TREE_FL (0x00000002)
struct
ocfs2_refcount_list
{
/*00*/
__le16
rl_count
;
/* Maximum number of entries possible
in rl_records */
__le16
rl_used
;
/* Current number of used records */
__le32
rl_reserved2
;
__le64
rl_reserved1
;
/* Pad to sizeof(ocfs2_refcount_record) */
/*10*/
struct
ocfs2_refcount_rec
rl_recs
[
0
];
/* Refcount records */
};
struct
ocfs2_refcount_block
{
/*00*/
__u8
rf_signature
[
8
];
/* Signature for verification */
__le16
rf_suballoc_slot
;
/* Slot suballocator this block
belongs to */
__le16
rf_suballoc_bit
;
/* Bit offset in suballocator
block group */
__le32
rf_fs_generation
;
/* Must match superblock */
/*10*/
__le64
rf_blkno
;
/* Offset on disk, in blocks */
__le64
rf_parent
;
/* Parent block, only valid if
OCFS2_REFCOUNT_LEAF_FL is set in
rf_flags */
/*20*/
struct
ocfs2_block_check
rf_check
;
/* Error checking */
__le64
rf_last_eb_blk
;
/* Pointer to last extent block */
/*30*/
__le32
rf_count
;
/* Number of inodes sharing this
refcount tree */
__le32
rf_flags
;
/* See the flags above */
__le32
rf_clusters
;
/* clusters covered by refcount tree. */
__le32
rf_cpos
;
/* cluster offset in refcount tree.*/
/*40*/
__le32
rf_generation
;
/* generation number. all be the same
* for the same refcount tree. */
__le32
rf_reserved0
;
__le64
rf_reserved1
[
7
];
/*80*/
union
{
struct
ocfs2_refcount_list
rf_records
;
/* List of refcount
records */
struct
ocfs2_extent_list
rf_list
;
/* Extent record list,
only valid if
OCFS2_REFCOUNT_TREE_FL
is set in rf_flags */
};
/* Actual on-disk size is one block */
};
/*
/*
* On disk extended attribute structure for OCFS2.
* On disk extended attribute structure for OCFS2.
*/
*/
...
@@ -1312,6 +1374,26 @@ static inline u16 ocfs2_xattr_recs_per_xb(struct super_block *sb)
...
@@ -1312,6 +1374,26 @@ static inline u16 ocfs2_xattr_recs_per_xb(struct super_block *sb)
return
size
/
sizeof
(
struct
ocfs2_extent_rec
);
return
size
/
sizeof
(
struct
ocfs2_extent_rec
);
}
}
static
inline
u16
ocfs2_extent_recs_per_rb
(
struct
super_block
*
sb
)
{
int
size
;
size
=
sb
->
s_blocksize
-
offsetof
(
struct
ocfs2_refcount_block
,
rf_list
.
l_recs
);
return
size
/
sizeof
(
struct
ocfs2_extent_rec
);
}
static
inline
u16
ocfs2_refcount_recs_per_rb
(
struct
super_block
*
sb
)
{
int
size
;
size
=
sb
->
s_blocksize
-
offsetof
(
struct
ocfs2_refcount_block
,
rf_records
.
rl_recs
);
return
size
/
sizeof
(
struct
ocfs2_refcount_rec
);
}
#else
#else
static
inline
int
ocfs2_fast_symlink_chars
(
int
blocksize
)
static
inline
int
ocfs2_fast_symlink_chars
(
int
blocksize
)
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment