Skip to content

Commit

Permalink
btrfs: put initial index value of a directory in a constant
Browse files Browse the repository at this point in the history
At btrfs_set_inode_index_count() we refer twice to the number 2 as the
initial index value for a directory (when it's empty), with a proper
comment explaining the reason for that value. In the next patch I'll
have to use that magic value in the directory logging code, so put
the value in a #define at btrfs_inode.h, to avoid hardcoding the
magic value again at tree-log.c.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
  • Loading branch information
fdmanana authored and kdave committed Mar 14, 2022
1 parent a450a4a commit 528ee69
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
12 changes: 10 additions & 2 deletions fs/btrfs/btrfs_inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@
#include "ordered-data.h"
#include "delayed-inode.h"

/*
* Since we search a directory based on f_pos (struct dir_context::pos) we have
* to start at 2 since '.' and '..' have f_pos of 0 and 1 respectively, so
* everybody else has to start at 2 (see btrfs_real_readdir() and dir_emit_dots()).
*/
#define BTRFS_DIR_START_INDEX 2

/*
* ordered_data_close is set by truncate when a file that used
* to have good data has been truncated to zero. When it is set
Expand Down Expand Up @@ -173,8 +180,9 @@ struct btrfs_inode {
u64 disk_i_size;

/*
* if this is a directory then index_cnt is the counter for the index
* number for new files that are created
* If this is a directory then index_cnt is the counter for the index
* number for new files that are created. For an empty directory, this
* must be initialized to BTRFS_DIR_START_INDEX.
*/
u64 index_cnt;

Expand Down
10 changes: 2 additions & 8 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -5971,14 +5971,8 @@ static int btrfs_set_inode_index_count(struct btrfs_inode *inode)
goto out;
ret = 0;

/*
* MAGIC NUMBER EXPLANATION:
* since we search a directory based on f_pos we have to start at 2
* since '.' and '..' have f_pos of 0 and 1 respectively, so everybody
* else has to start at 2
*/
if (path->slots[0] == 0) {
inode->index_cnt = 2;
inode->index_cnt = BTRFS_DIR_START_INDEX;
goto out;
}

Expand All @@ -5989,7 +5983,7 @@ static int btrfs_set_inode_index_count(struct btrfs_inode *inode)

if (found_key.objectid != btrfs_ino(inode) ||
found_key.type != BTRFS_DIR_INDEX_KEY) {
inode->index_cnt = 2;
inode->index_cnt = BTRFS_DIR_START_INDEX;
goto out;
}

Expand Down

0 comments on commit 528ee69

Please sign in to comment.