-static int is_seen_fsid(u8 *fsid)
-{
- u8 hash = fsid[0];
- int slot = hash % SEEN_FSID_HASH_SIZE;
- struct seen_fsid *seen = seen_fsid_hash[slot];
-
- return seen ? 1 : 0;
-}
-
-static int add_seen_fsid(u8 *fsid)
-{
- u8 hash = fsid[0];
- int slot = hash % SEEN_FSID_HASH_SIZE;
- struct seen_fsid *seen = seen_fsid_hash[slot];
- struct seen_fsid *alloc;
-
- if (!seen)
- goto insert;
-
- while (1) {
- if (memcmp(seen->fsid, fsid, BTRFS_FSID_SIZE) == 0)
- return -EEXIST;
-
- if (!seen->next)
- break;
-
- seen = seen->next;
- }
-
-insert:
-
- alloc = malloc(sizeof(*alloc));
- if (!alloc)
- return -ENOMEM;
-
- alloc->next = NULL;
- memcpy(alloc->fsid, fsid, BTRFS_FSID_SIZE);
-
- if (seen)
- seen->next = alloc;
- else
- seen_fsid_hash[slot] = alloc;
-
- return 0;
-}
-
-static void free_seen_fsid(void)
-{
- int slot;
- struct seen_fsid *seen;
- struct seen_fsid *next;
-
- for (slot = 0; slot < SEEN_FSID_HASH_SIZE; slot++) {
- seen = seen_fsid_hash[slot];
- while (seen) {
- next = seen->next;
- free(seen);
- seen = next;
- }
- seen_fsid_hash[slot] = NULL;
- }
-}
-