diff --git a/sys/vfs/hammer/hammer_ioctl.c b/sys/vfs/hammer/hammer_ioctl.c index 267ded3..15ba9ee 100644 --- a/sys/vfs/hammer/hammer_ioctl.c +++ b/sys/vfs/hammer/hammer_ioctl.c @@ -34,6 +34,7 @@ * $DragonFly: src/sys/vfs/hammer/hammer_ioctl.c,v 1.32 2008/11/13 02:23:29 dillon Exp $ */ +#include #include "hammer.h" static int hammer_ioc_gethistory(hammer_transaction_t trans, hammer_inode_t ip, @@ -48,6 +49,8 @@ static int hammer_ioc_set_version(hammer_transaction_t trans, struct hammer_ioc_version *ver); static int hammer_ioc_get_info(hammer_transaction_t trans, struct hammer_ioc_info *info); +static int hammer_ioc_dummy(hammer_transaction_t trans, + struct hammer_ioc_dummy *info); static int hammer_ioc_add_snapshot(hammer_transaction_t trans, hammer_inode_t ip, struct hammer_ioc_snapshot *snap); static int hammer_ioc_del_snapshot(hammer_transaction_t trans, hammer_inode_t ip, @@ -228,6 +231,12 @@ hammer_ioctl(hammer_inode_t ip, u_long com, caddr_t data, int fflag, &trans, ip, (struct hammer_ioc_data *)data); } break; + case HAMMERIOC_DUMMY: + if (error == 0) { + error = hammer_ioc_dummy( + &trans, (struct hammer_ioc_dummy *)data); + } + break; default: error = EOPNOTSUPP; break; @@ -571,7 +580,7 @@ hammer_ioc_set_version(hammer_transaction_t trans, hammer_inode_t ip, struct hammer_cursor cursor; hammer_volume_t volume; int error; - int over = hmp->version; +int over = hmp->version; /* * Generally do not allow downgrades. However, version 4 can @@ -1020,6 +1029,72 @@ again: static int +hammer_ioc_dummy(hammer_transaction_t trans, struct hammer_ioc_dummy *data) +{ + struct hammer_cursor cursor; + hammer_node_ondisk_t dsknode; + u_int32_t localization; + char *str; + int status = 0; + int error; + + kprintf("DEBUG: ioctl dummy called\n"); + + localization = 0; + error = hammer_init_cursor(trans, &cursor, NULL, NULL); + if (error) { + hammer_done_cursor(&cursor); + return -1; + } + + cursor.key_beg.localization = HAMMER_DEF_LOCALIZATION + + HAMMER_LOCALIZE_MISC; + cursor.key_beg.obj_id = HAMMER_OBJID_ROOT; + cursor.key_beg.create_tid = 0; + cursor.key_beg.delete_tid = 0; + cursor.key_beg.rec_type = HAMMER_RECTYPE_PFS; + cursor.key_beg.obj_type = 0; + cursor.key_beg.key = 0; + cursor.key_end.key = HAMMER_MAX_KEY; + cursor.asof = HAMMER_MAX_TID; + cursor.flags |= HAMMER_CURSOR_ASOF; + + error = hammer_btree_first(&cursor); + while (error == 0) { + if (error) { + kprintf("DEBUG: NO record\n"); + } else { + kprintf("DEBUG: Found record\n"); + error = hammer_ip_resolve_data(&cursor); + if (error) + kprintf("DEBUG: Failed to resolve cursor data\n"); + else { + dsknode = cursor.node->ondisk; + uuid_to_string(&cursor.data->pfsd.unique_uuid, &str, &status); + kprintf("DEBUG: node type=%d\n", dsknode->type); + kprintf("DEBUG: pfs_id=%d snaps=%s\n", + (cursor.key_beg.localization >> 16), str); + } + localization += (1 << 16); +// cursor.key_beg.localization = localization; +// cursor.key_end = cursor.key_beg; +// cursor.key_end.key = HAMMER_MAX_KEY; + + error = hammer_btree_iterate(&cursor); + if (error) + kprintf("DEBUG: Failed to ITERATE cursor\n"); + } + + kprintf("DEBUG: localization=%x\n", cursor.key_beg.localization); + + } + hammer_done_cursor(&cursor); + + return 0; +} + +static +int hammer_ioc_get_data(hammer_transaction_t trans, hammer_inode_t ip, struct hammer_ioc_data *data) { diff --git a/sys/vfs/hammer/hammer_ioctl.h b/sys/vfs/hammer/hammer_ioctl.h index 6db417a..790ccbd 100644 --- a/sys/vfs/hammer/hammer_ioctl.h +++ b/sys/vfs/hammer/hammer_ioctl.h @@ -241,6 +241,12 @@ struct hammer_ioc_info { int64_t reservedext[16]; }; +struct hammer_ioc_dummy { + struct hammer_ioc_head head; + + int value; +}; + /* * HAMMERIOC_GET_PSEUDOFS * HAMMERIOC_SET_PSEUDOFS @@ -495,6 +501,6 @@ struct hammer_ioc_data { #define HAMMERIOC_DEDUP _IOWR('h',25,struct hammer_ioc_dedup) #define HAMMERIOC_GET_DATA _IOWR('h',26,struct hammer_ioc_data) #define HAMMERIOC_LIST_VOLUMES _IOWR('h',27,struct hammer_ioc_volume_list) +#define HAMMERIOC_DUMMY _IOWR('h',28, struct hammer_ioc_dummy) #endif -