Introduce sysfs_set_num_signed() and use it to set bitmap/offset
mdinfo->bitmap_offset is a signed long and needs to be treated as such when passed to the kernel. This resolves the problem with adding internal bitmaps to a 1.0 array. Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
34a13953fa
commit
012a864129
4
Grow.c
4
Grow.c
|
@ -424,8 +424,8 @@ int Grow_addbitmap(char *devname, int fd, char *file, int chunk, int delay, int
|
|||
if (offset_setable) {
|
||||
st->ss->getinfo_super(st, mdi, NULL);
|
||||
sysfs_init(mdi, fd, -1);
|
||||
rv = sysfs_set_num(mdi, NULL, "bitmap/location",
|
||||
mdi->bitmap_offset);
|
||||
rv = sysfs_set_num_signed(mdi, NULL, "bitmap/location",
|
||||
mdi->bitmap_offset);
|
||||
} else {
|
||||
array.state |= (1<<MD_SB_BITMAP_PRESENT);
|
||||
rv = ioctl(fd, SET_ARRAY_INFO, &array);
|
||||
|
|
2
mdadm.h
2
mdadm.h
|
@ -473,6 +473,8 @@ extern int sysfs_set_str(struct mdinfo *sra, struct mdinfo *dev,
|
|||
char *name, char *val);
|
||||
extern int sysfs_set_num(struct mdinfo *sra, struct mdinfo *dev,
|
||||
char *name, unsigned long long val);
|
||||
extern int sysfs_set_num_signed(struct mdinfo *sra, struct mdinfo *dev,
|
||||
char *name, long long val);
|
||||
extern int sysfs_uevent(struct mdinfo *sra, char *event);
|
||||
extern int sysfs_get_fd(struct mdinfo *sra, struct mdinfo *dev,
|
||||
char *name);
|
||||
|
|
8
sysfs.c
8
sysfs.c
|
@ -428,6 +428,14 @@ int sysfs_set_num(struct mdinfo *sra, struct mdinfo *dev,
|
|||
return sysfs_set_str(sra, dev, name, valstr);
|
||||
}
|
||||
|
||||
int sysfs_set_num_signed(struct mdinfo *sra, struct mdinfo *dev,
|
||||
char *name, long long val)
|
||||
{
|
||||
char valstr[50];
|
||||
sprintf(valstr, "%lli", val);
|
||||
return sysfs_set_str(sra, dev, name, valstr);
|
||||
}
|
||||
|
||||
int sysfs_uevent(struct mdinfo *sra, char *event)
|
||||
{
|
||||
char fname[50];
|
||||
|
|
Loading…
Reference in New Issue