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
nexedi
linux
Commits
bae45de0
Commit
bae45de0
authored
Apr 04, 2007
by
Chris Mason
Committed by
David Woodhouse
Apr 04, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Btrfs: add dir inode index
Signed-off-by:
Chris Mason
<
chris.mason@oracle.com
>
parent
b1a4d965
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
33 additions
and
9 deletions
+33
-9
fs/btrfs/ctree.h
fs/btrfs/ctree.h
+8
-7
fs/btrfs/dir-item.c
fs/btrfs/dir-item.c
+19
-0
fs/btrfs/super.c
fs/btrfs/super.c
+2
-2
fs/btrfs/sysfs.c
fs/btrfs/sysfs.c
+4
-0
No files found.
fs/btrfs/ctree.h
View file @
bae45de0
...
...
@@ -282,41 +282,42 @@ struct btrfs_root {
* for every name in a directory.
*/
#define BTRFS_DIR_ITEM_KEY 2
#define BTRFS_DIR_INDEX_KEY 3
/*
* inline data is file data that fits in the btree.
*/
#define BTRFS_INLINE_DATA_KEY
3
#define BTRFS_INLINE_DATA_KEY
4
/*
* extent data is for data that can't fit in the btree. It points to
* a (hopefully) huge chunk of disk
*/
#define BTRFS_EXTENT_DATA_KEY
4
#define BTRFS_EXTENT_DATA_KEY
5
/*
* csum items have the checksums for data in the extents
*/
#define BTRFS_CSUM_ITEM_KEY
5
#define BTRFS_CSUM_ITEM_KEY
6
/*
* root items point to tree roots. There are typically in the root
* tree used by the super block to find all the other trees
*/
#define BTRFS_ROOT_ITEM_KEY
6
#define BTRFS_ROOT_ITEM_KEY
7
/*
* extent items are in the extent map tree. These record which blocks
* are used, and how many references there are to each block
*/
#define BTRFS_EXTENT_ITEM_KEY
7
#define BTRFS_EXTENT_ITEM_KEY
8
/*
* the inode map records which inode numbers are in use and where
* they actually live on disk
*/
#define BTRFS_INODE_MAP_ITEM_KEY
8
#define BTRFS_INODE_MAP_ITEM_KEY
9
/*
* string items are for debugging. They just store a short string of
* data in the FS
*/
#define BTRFS_STRING_ITEM_KEY
9
#define BTRFS_STRING_ITEM_KEY
10
static
inline
u64
btrfs_inode_generation
(
struct
btrfs_inode_item
*
i
)
{
...
...
fs/btrfs/dir-item.c
View file @
bae45de0
...
...
@@ -37,6 +37,25 @@ int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root
name_ptr
=
(
char
*
)(
dir_item
+
1
);
btrfs_memcpy
(
root
,
path
->
nodes
[
0
]
->
b_data
,
name_ptr
,
name
,
name_len
);
btrfs_mark_buffer_dirty
(
path
->
nodes
[
0
]);
btrfs_release_path
(
root
,
path
);
btrfs_set_key_type
(
&
key
,
BTRFS_DIR_INDEX_KEY
);
key
.
offset
=
objectid
;
ret
=
btrfs_insert_empty_item
(
trans
,
root
,
path
,
&
key
,
data_size
);
// FIXME clear the dirindex bit
if
(
ret
)
goto
out
;
dir_item
=
btrfs_item_ptr
(
btrfs_buffer_leaf
(
path
->
nodes
[
0
]),
path
->
slots
[
0
],
struct
btrfs_dir_item
);
btrfs_set_dir_objectid
(
dir_item
,
objectid
);
btrfs_set_dir_type
(
dir_item
,
type
);
btrfs_set_dir_flags
(
dir_item
,
0
);
btrfs_set_dir_name_len
(
dir_item
,
name_len
);
name_ptr
=
(
char
*
)(
dir_item
+
1
);
btrfs_memcpy
(
root
,
path
->
nodes
[
0
]
->
b_data
,
name_ptr
,
name
,
name_len
);
btrfs_mark_buffer_dirty
(
path
->
nodes
[
0
]);
out:
btrfs_release_path
(
root
,
path
);
btrfs_free_path
(
path
);
...
...
fs/btrfs/super.c
View file @
bae45de0
...
...
@@ -447,7 +447,7 @@ static int btrfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
mutex_lock
(
&
root
->
fs_info
->
fs_mutex
);
key
.
objectid
=
inode
->
i_ino
;
key
.
flags
=
0
;
btrfs_set_key_type
(
&
key
,
BTRFS_DIR_I
TEM
_KEY
);
btrfs_set_key_type
(
&
key
,
BTRFS_DIR_I
NDEX
_KEY
);
key
.
offset
=
filp
->
f_pos
;
path
=
btrfs_alloc_path
();
btrfs_init_path
(
path
);
...
...
@@ -477,7 +477,7 @@ static int btrfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
item
=
leaf
->
items
+
slot
;
if
(
btrfs_disk_key_objectid
(
&
item
->
key
)
!=
key
.
objectid
)
break
;
if
(
btrfs_disk_key_type
(
&
item
->
key
)
!=
BTRFS_DIR_I
TEM
_KEY
)
if
(
btrfs_disk_key_type
(
&
item
->
key
)
!=
BTRFS_DIR_I
NDEX
_KEY
)
continue
;
if
(
btrfs_disk_key_offset
(
&
item
->
key
)
<
filp
->
f_pos
)
continue
;
...
...
fs/btrfs/sysfs.c
0 → 100644
View file @
bae45de0
#include <linux/module.h>
#include "ctree.h"
#include "disk-io.h"
#include "transaction.h"
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