|
Packit |
6ef888 |
#include "clusterautoconfig.h"
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#include <inttypes.h>
|
|
Packit |
6ef888 |
#include <unistd.h>
|
|
Packit |
6ef888 |
#include <stdio.h>
|
|
Packit |
6ef888 |
#include <stdint.h>
|
|
Packit |
6ef888 |
#include <stdlib.h>
|
|
Packit |
6ef888 |
#include <string.h>
|
|
Packit |
6ef888 |
#include <errno.h>
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#include "libgfs2.h"
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
void gfs2_special_free(struct special_blocks *blist)
|
|
Packit |
6ef888 |
{
|
|
Packit |
6ef888 |
struct special_blocks *f;
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
while(!osi_list_empty(&blist->list)) {
|
|
Packit |
6ef888 |
f = osi_list_entry(blist->list.next, struct special_blocks,
|
|
Packit |
6ef888 |
list);
|
|
Packit |
6ef888 |
osi_list_del(&f->list);
|
|
Packit |
6ef888 |
free(f);
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
struct special_blocks *blockfind(struct special_blocks *blist, uint64_t num)
|
|
Packit |
6ef888 |
{
|
|
Packit |
6ef888 |
osi_list_t *head = &blist->list;
|
|
Packit |
6ef888 |
osi_list_t *tmp;
|
|
Packit |
6ef888 |
struct special_blocks *b;
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
for (tmp = head->next; tmp != head; tmp = tmp->next) {
|
|
Packit |
6ef888 |
b = osi_list_entry(tmp, struct special_blocks, list);
|
|
Packit |
6ef888 |
if (b->block == num)
|
|
Packit |
6ef888 |
return b;
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
return NULL;
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
void gfs2_special_add(struct special_blocks *blocklist, uint64_t block)
|
|
Packit |
6ef888 |
{
|
|
Packit |
6ef888 |
struct special_blocks *b;
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
b = malloc(sizeof(struct special_blocks));
|
|
Packit |
6ef888 |
if (b) {
|
|
Packit |
6ef888 |
memset(b, 0, sizeof(*b));
|
|
Packit |
6ef888 |
b->block = block;
|
|
Packit |
6ef888 |
osi_list_add_prev(&b->list, &blocklist->list);
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
void gfs2_special_set(struct special_blocks *blocklist, uint64_t block)
|
|
Packit |
6ef888 |
{
|
|
Packit |
6ef888 |
if (blockfind(blocklist, block))
|
|
Packit |
6ef888 |
return;
|
|
Packit |
6ef888 |
gfs2_special_add(blocklist, block);
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
void gfs2_special_clear(struct special_blocks *blocklist, uint64_t block)
|
|
Packit |
6ef888 |
{
|
|
Packit |
6ef888 |
struct special_blocks *b;
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
b = blockfind(blocklist, block);
|
|
Packit |
6ef888 |
if (b) {
|
|
Packit |
6ef888 |
osi_list_del(&b->list);
|
|
Packit |
6ef888 |
free(b);
|
|
Packit |
6ef888 |
}
|
|
Packit |
6ef888 |
}
|