Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 19326
b: refs/heads/master
c: a4fc471
h: refs/heads/master
v: v3
  • Loading branch information
Patrick Caulfield authored and Linus Torvalds committed Feb 1, 2006
1 parent 35eb8c6 commit 0469224
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: aa14edeb994f8f7e223d02ad14780bf2fa719f6d
refs/heads/master: a4fc4717fc55a3bcd3cfdafa285b7af164b83051
45 changes: 11 additions & 34 deletions trunk/drivers/md/dm-log.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ void dm_destroy_dirty_log(struct dirty_log *log)
/*
* The on-disk version of the metadata.
*/
#define MIRROR_DISK_VERSION 1
#define MIRROR_DISK_VERSION 2
#define LOG_OFFSET 2

struct log_header {
Expand Down Expand Up @@ -157,7 +157,6 @@ struct log_c {
struct log_header *disk_header;

struct io_region bits_location;
uint32_t *disk_bits;
};

/*
Expand All @@ -166,20 +165,20 @@ struct log_c {
*/
static inline int log_test_bit(uint32_t *bs, unsigned bit)
{
return test_bit(bit, (unsigned long *) bs) ? 1 : 0;
return ext2_test_bit(bit, (unsigned long *) bs) ? 1 : 0;
}

static inline void log_set_bit(struct log_c *l,
uint32_t *bs, unsigned bit)
{
set_bit(bit, (unsigned long *) bs);
ext2_set_bit(bit, (unsigned long *) bs);
l->touched = 1;
}

static inline void log_clear_bit(struct log_c *l,
uint32_t *bs, unsigned bit)
{
clear_bit(bit, (unsigned long *) bs);
ext2_clear_bit(bit, (unsigned long *) bs);
l->touched = 1;
}

Expand Down Expand Up @@ -219,6 +218,11 @@ static int read_header(struct log_c *log)
log->header.nr_regions = 0;
}

#ifdef __LITTLE_ENDIAN
if (log->header.version == 1)
log->header.version = 2;
#endif

if (log->header.version != MIRROR_DISK_VERSION) {
DMWARN("incompatible disk log version");
return -EINVAL;
Expand All @@ -239,45 +243,24 @@ static inline int write_header(struct log_c *log)
/*----------------------------------------------------------------
* Bits IO
*--------------------------------------------------------------*/
static inline void bits_to_core(uint32_t *core, uint32_t *disk, unsigned count)
{
unsigned i;

for (i = 0; i < count; i++)
core[i] = le32_to_cpu(disk[i]);
}

static inline void bits_to_disk(uint32_t *core, uint32_t *disk, unsigned count)
{
unsigned i;

/* copy across the clean/dirty bitset */
for (i = 0; i < count; i++)
disk[i] = cpu_to_le32(core[i]);
}

static int read_bits(struct log_c *log)
{
int r;
unsigned long ebits;

r = dm_io_sync_vm(1, &log->bits_location, READ,
log->disk_bits, &ebits);
log->clean_bits, &ebits);
if (r)
return r;

bits_to_core(log->clean_bits, log->disk_bits,
log->bitset_uint32_count);
return 0;
}

static int write_bits(struct log_c *log)
{
unsigned long ebits;
bits_to_disk(log->clean_bits, log->disk_bits,
log->bitset_uint32_count);
return dm_io_sync_vm(1, &log->bits_location, WRITE,
log->disk_bits, &ebits);
log->clean_bits, &ebits);
}

/*----------------------------------------------------------------
Expand Down Expand Up @@ -433,11 +416,6 @@ static int disk_ctr(struct dirty_log *log, struct dm_target *ti,
size = dm_round_up(lc->bitset_uint32_count * sizeof(uint32_t),
1 << SECTOR_SHIFT);
lc->bits_location.count = size >> SECTOR_SHIFT;
lc->disk_bits = vmalloc(size);
if (!lc->disk_bits) {
vfree(lc->disk_header);
goto bad;
}
return 0;

bad:
Expand All @@ -451,7 +429,6 @@ static void disk_dtr(struct dirty_log *log)
struct log_c *lc = (struct log_c *) log->context;
dm_put_device(lc->ti, lc->log_dev);
vfree(lc->disk_header);
vfree(lc->disk_bits);
core_dtr(log);
}

Expand Down

0 comments on commit 0469224

Please sign in to comment.