mirror of
https://github.com/versity/scoutfs.git
synced 2026-09-07 16:47:11 +00:00
scoutfs-utils: print extent items
Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
+54
-6
@@ -156,9 +156,10 @@ struct scoutfs_segment_block {
|
||||
#define SCOUTFS_READDIR_KEY 6
|
||||
#define SCOUTFS_LINK_BACKREF_KEY 7
|
||||
#define SCOUTFS_SYMLINK_KEY 8
|
||||
#define SCOUTFS_EXTENT_KEY 9
|
||||
#define SCOUTFS_FILE_EXTENT_KEY 9
|
||||
#define SCOUTFS_ORPHAN_KEY 10
|
||||
#define SCOUTFS_DATA_KEY 11
|
||||
#define SCOUTFS_FREE_EXTENT_BLKNO_KEY 11
|
||||
#define SCOUTFS_FREE_EXTENT_BLOCKS_KEY 12
|
||||
/* not found in the fs */
|
||||
#define SCOUTFS_MAX_UNUSED_KEY 253
|
||||
#define SCOUTFS_NET_ADDR_KEY 254
|
||||
@@ -198,11 +199,28 @@ struct scoutfs_orphan_key {
|
||||
__be64 ino;
|
||||
} __packed;
|
||||
|
||||
/* value is data payload bytes */
|
||||
struct scoutfs_data_key {
|
||||
/* no value */
|
||||
struct scoutfs_file_extent_key {
|
||||
__u8 type;
|
||||
__be64 ino;
|
||||
__be64 block;
|
||||
__be64 last_blk_off;
|
||||
__be64 last_blkno;
|
||||
__be64 blocks;
|
||||
} __packed;
|
||||
|
||||
/* no value */
|
||||
struct scoutfs_free_extent_blkno_key {
|
||||
__u8 type;
|
||||
__be64 node_id;
|
||||
__be64 last_blkno;
|
||||
__be64 blocks;
|
||||
} __packed;
|
||||
|
||||
struct scoutfs_free_extent_blocks_key {
|
||||
__u8 type;
|
||||
__be64 node_id;
|
||||
__be64 blocks;
|
||||
__be64 last_blkno;
|
||||
} __packed;
|
||||
|
||||
/* value is each item's part of the full xattr value for the off/len */
|
||||
@@ -362,11 +380,41 @@ struct scoutfs_net_header {
|
||||
__u8 type;
|
||||
__u8 status;
|
||||
__u8 data[0];
|
||||
};
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* When there's no more free inodes this will be sent with ino = ~0 and
|
||||
* nr = 0.
|
||||
*/
|
||||
struct scoutfs_net_inode_alloc {
|
||||
__le64 ino;
|
||||
__le64 nr;
|
||||
} __packed;
|
||||
|
||||
struct scoutfs_net_key_range {
|
||||
__le16 start_len;
|
||||
__le16 end_len;
|
||||
__u8 key_bytes[0];
|
||||
} __packed;
|
||||
|
||||
struct scoutfs_net_manifest_entries {
|
||||
__le16 nr;
|
||||
struct scoutfs_manifest_entry ments[0];
|
||||
} __packed;
|
||||
|
||||
struct scoutfs_net_segnos {
|
||||
__le16 nr;
|
||||
__le64 segnos[0];
|
||||
} __packed;
|
||||
|
||||
enum {
|
||||
/* sends and receives a struct scoutfs_timeval */
|
||||
SCOUTFS_NET_TRADE_TIME = 0,
|
||||
SCOUTFS_NET_ALLOC_INODES,
|
||||
SCOUTFS_NET_MANIFEST_RANGE_ENTRIES,
|
||||
SCOUTFS_NET_ALLOC_SEGNO,
|
||||
SCOUTFS_NET_RECORD_SEGMENT,
|
||||
SCOUTFS_NET_BULK_ALLOC,
|
||||
SCOUTFS_NET_UNKNOWN,
|
||||
};
|
||||
|
||||
|
||||
+46
-9
@@ -160,14 +160,6 @@ static void print_readdir(void *key, int key_len, void *val, int val_len)
|
||||
name);
|
||||
}
|
||||
|
||||
static void print_data(void *key, int key_len, void *val, int val_len)
|
||||
{
|
||||
struct scoutfs_data_key *dat = key;
|
||||
|
||||
printf(" data: ino %llu block %llu\n",
|
||||
be64_to_cpu(dat->ino), be64_to_cpu(dat->block));
|
||||
}
|
||||
|
||||
static void print_link_backref(void *key, int key_len, void *val, int val_len)
|
||||
{
|
||||
struct scoutfs_link_backref_key *lbkey = key;
|
||||
@@ -188,6 +180,49 @@ static void print_symlink(void *key, int key_len, void *val, int val_len)
|
||||
be64_to_cpu(skey->ino), name);
|
||||
}
|
||||
|
||||
/*
|
||||
* Just print the calculated starting blk_off/blkno, we can add a flag
|
||||
* to print the raw values before the math if needed.
|
||||
*/
|
||||
static void print_file_extent(void *key, int key_len, void *val, int val_len)
|
||||
{
|
||||
struct scoutfs_file_extent_key *fext = key;
|
||||
u64 blocks = be64_to_cpu(fext->blocks);
|
||||
u64 blk_off = be64_to_cpu(fext->last_blk_off) - blocks + 1;
|
||||
u64 blkno = be64_to_cpu(fext->last_blkno) - blocks + 1;
|
||||
|
||||
printf(" extent: ino %llu blk_off %llu blkno %llu blocks %llu\n",
|
||||
be64_to_cpu(fext->ino), blk_off, blkno, blocks);
|
||||
}
|
||||
|
||||
static void print_free_extent(void *key, int key_len, void *val, int val_len)
|
||||
{
|
||||
struct scoutfs_free_extent_blkno_key *blk = key;
|
||||
struct scoutfs_free_extent_blocks_key *bks = key;
|
||||
u64 last_blkno;
|
||||
u64 node_id;
|
||||
u64 blocks;
|
||||
u64 blkno;
|
||||
char *str;
|
||||
|
||||
if (blk->type == SCOUTFS_FREE_EXTENT_BLKNO_KEY) {
|
||||
str = "free (blkno)";
|
||||
node_id = be64_to_cpu(blk->node_id);
|
||||
last_blkno = be64_to_cpu(blk->last_blkno);
|
||||
blocks = be64_to_cpu(blk->blocks);
|
||||
} else {
|
||||
str = "free (blocks)";
|
||||
node_id = be64_to_cpu(bks->node_id);
|
||||
last_blkno = be64_to_cpu(bks->last_blkno);
|
||||
blocks = be64_to_cpu(bks->blocks);
|
||||
}
|
||||
|
||||
blkno = last_blkno - blocks + 1;
|
||||
|
||||
printf(" %s: node_id %llx blkno %llu blocks %llu\n",
|
||||
str, node_id, blkno, blocks);
|
||||
}
|
||||
|
||||
typedef void (*print_func_t)(void *key, int key_len, void *val, int val_len);
|
||||
|
||||
static print_func_t printers[] = {
|
||||
@@ -198,7 +233,9 @@ static print_func_t printers[] = {
|
||||
[SCOUTFS_READDIR_KEY] = print_readdir,
|
||||
[SCOUTFS_SYMLINK_KEY] = print_symlink,
|
||||
[SCOUTFS_LINK_BACKREF_KEY] = print_link_backref,
|
||||
[SCOUTFS_DATA_KEY] = print_data,
|
||||
[SCOUTFS_FILE_EXTENT_KEY] = print_file_extent,
|
||||
[SCOUTFS_FREE_EXTENT_BLKNO_KEY] = print_free_extent,
|
||||
[SCOUTFS_FREE_EXTENT_BLOCKS_KEY] = print_free_extent,
|
||||
};
|
||||
|
||||
/* utils uses big contiguous allocations */
|
||||
|
||||
Reference in New Issue
Block a user