check return status of all write/fwrite functions as required by glibc 2.4

From: Luca Berra <bluca@vodka.it>

glibc 2.4 is pedantic on ignoring return values from fprintf, fwrite and
write, so now we check the rval and actually do something with it.
in the Grow.c case i only print a warning, since i don't think we can do
anything in case we fail invalidating those superblocks (is should never
happen, but then...)

Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
Neil Brown 2006-05-29 02:06:32 +00:00
parent 280a927d3d
commit 9fca7d6236
7 changed files with 25 additions and 12 deletions

View File

@ -451,7 +451,9 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
if (strcmp(update, "uuid")==0 && if (strcmp(update, "uuid")==0 &&
ident->bitmap_fd) ident->bitmap_fd)
bitmap_update_uuid(ident->bitmap_fd, info.uuid); if (bitmap_update_uuid(ident->bitmap_fd, info.uuid) != 0)
fprintf(stderr, Name ": Could not update uuid on %s.\n",
devname);
} else } else
#endif #endif
{ {

5
Grow.c
View File

@ -801,7 +801,10 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
memset(&bsb, 0, sizeof(bsb)); memset(&bsb, 0, sizeof(bsb));
for (i=odisks; i<d ; i++) { for (i=odisks; i<d ; i++) {
lseek64(fdlist[i], (offsets[i]+last_block)<<9, 0); lseek64(fdlist[i], (offsets[i]+last_block)<<9, 0);
write(fdlist[i], &bsb, sizeof(bsb)); if (write(fdlist[i], &bsb, sizeof(bsb)) < 0) {
fprintf(stderr, Name ": %s: failed to invalidate metadata for raid disk %d\n",
devname, i);
}
} }
/* unsuspend. */ /* unsuspend. */

View File

@ -521,7 +521,7 @@ static void alert(char *event, char *dev, char *disc, char *mailaddr, char *mail
int n; int n;
fprintf(mp, "\nP.S. The /proc/mdstat file current contains the following:\n\n"); fprintf(mp, "\nP.S. The /proc/mdstat file current contains the following:\n\n");
while ( (n=fread(buf, 1, sizeof(buf), mdstat)) > 0) while ( (n=fread(buf, 1, sizeof(buf), mdstat)) > 0)
fwrite(buf, 1, n, mp); n=fwrite(buf, 1, n, mp); /* yes, i don't care about the result */
fclose(mdstat); fclose(mdstat);
} }
fclose(mp); fclose(mp);

View File

@ -399,16 +399,22 @@ out:
return rv; return rv;
} }
void bitmap_update_uuid(int fd, int *uuid) int bitmap_update_uuid(int fd, int *uuid)
{ {
struct bitmap_super_s bm; struct bitmap_super_s bm;
lseek(fd, 0, 0); if (lseek(fd, 0, 0) != 0)
return 1;
if (read(fd, &bm, sizeof(bm)) != sizeof(bm)) if (read(fd, &bm, sizeof(bm)) != sizeof(bm))
return; return 1;
if (bm.magic != __cpu_to_le32(BITMAP_MAGIC)) if (bm.magic != __cpu_to_le32(BITMAP_MAGIC))
return; return 1;
memcpy(bm.uuid, uuid, 16); memcpy(bm.uuid, uuid, 16);
if (lseek(fd, 0, 0) != 0)
return 2;
if (write(fd, &bm, sizeof(bm)) != sizeof(bm)) {
lseek(fd, 0, 0);
return 2;
}
lseek(fd, 0, 0); lseek(fd, 0, 0);
write(fd, &bm, sizeof(bm)); return 0;
lseek(fd, 0, 0);
} }

View File

@ -381,7 +381,7 @@ extern int CreateBitmap(char *filename, int force, char uuid[16],
unsigned long long array_size, unsigned long long array_size,
int major); int major);
extern int ExamineBitmap(char *filename, int brief, struct supertype *st); extern int ExamineBitmap(char *filename, int brief, struct supertype *st);
extern void bitmap_update_uuid(int fd, int *uuid); extern int bitmap_update_uuid(int fd, int *uuid);
extern int md_get_version(int fd); extern int md_get_version(int fd);
extern int get_linux_version(void); extern int get_linux_version(void);

View File

@ -625,7 +625,8 @@ static int store_super0(struct supertype *st, int fd, void *sbv)
if (super->state & (1<<MD_SB_BITMAP_PRESENT)) { if (super->state & (1<<MD_SB_BITMAP_PRESENT)) {
struct bitmap_super_s * bm = (struct bitmap_super_s*)(super+1); struct bitmap_super_s * bm = (struct bitmap_super_s*)(super+1);
if (__le32_to_cpu(bm->magic) == BITMAP_MAGIC) if (__le32_to_cpu(bm->magic) == BITMAP_MAGIC)
write(fd, bm, sizeof(*bm)); if (write(fd, bm, sizeof(*bm)) != sizeof(*bm))
return 5;
} }
fsync(fd); fsync(fd);

View File

@ -715,7 +715,8 @@ static int store_super1(struct supertype *st, int fd, void *sbv)
(((char*)sb)+1024); (((char*)sb)+1024);
if (__le32_to_cpu(bm->magic) == BITMAP_MAGIC) { if (__le32_to_cpu(bm->magic) == BITMAP_MAGIC) {
locate_bitmap1(st, fd, sbv); locate_bitmap1(st, fd, sbv);
write(fd, bm, sizeof(*bm)); if (write(fd, bm, sizeof(*bm)) != sizeof(*bm))
return 5;
} }
} }
fsync(fd); fsync(fd);