summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-05-29 02:06:32 +0000
committerNeil Brown <neilb@suse.de>2006-05-29 02:06:32 +0000
commit9fca7d6236e9775d0269b9802f740c08db46f4d7 (patch)
treeaef0c99d844a3eacf037294e6722079c01c44ae9
parent280a927d3d8da258a70df13df4f780d823fc1da2 (diff)
downloadmdadm-9fca7d6236e9775d0269b9802f740c08db46f4d7.tar.gz
mdadm-9fca7d6236e9775d0269b9802f740c08db46f4d7.tar.xz
mdadm-9fca7d6236e9775d0269b9802f740c08db46f4d7.zip
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>
-rw-r--r--Assemble.c4
-rw-r--r--Grow.c5
-rw-r--r--Monitor.c2
-rw-r--r--bitmap.c18
-rw-r--r--mdadm.h2
-rw-r--r--super0.c3
-rw-r--r--super1.c3
7 files changed, 25 insertions, 12 deletions
diff --git a/Assemble.c b/Assemble.c
index 816a88e..cb97f8c 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -451,7 +451,9 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
if (strcmp(update, "uuid")==0 &&
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
#endif
{
diff --git a/Grow.c b/Grow.c
index 8c8aa28..61347b7 100644
--- a/Grow.c
+++ b/Grow.c
@@ -801,7 +801,10 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
memset(&bsb, 0, sizeof(bsb));
for (i=odisks; i<d ; i++) {
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. */
diff --git a/Monitor.c b/Monitor.c
index 7314cdc..246b9c5 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -521,7 +521,7 @@ static void alert(char *event, char *dev, char *disc, char *mailaddr, char *mail
int n;
fprintf(mp, "\nP.S. The /proc/mdstat file current contains the following:\n\n");
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(mp);
diff --git a/bitmap.c b/bitmap.c
index 8210278..59410d5 100644
--- a/bitmap.c
+++ b/bitmap.c
@@ -399,16 +399,22 @@ out:
return rv;
}
-void bitmap_update_uuid(int fd, int *uuid)
+int bitmap_update_uuid(int fd, int *uuid)
{
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))
- return;
+ return 1;
if (bm.magic != __cpu_to_le32(BITMAP_MAGIC))
- return;
+ return 1;
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);
- write(fd, &bm, sizeof(bm));
- lseek(fd, 0, 0);
+ return 0;
}
diff --git a/mdadm.h b/mdadm.h
index 46d4ec0..848c6f1 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -381,7 +381,7 @@ extern int CreateBitmap(char *filename, int force, char uuid[16],
unsigned long long array_size,
int major);
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 get_linux_version(void);
diff --git a/super0.c b/super0.c
index 4d02300..f14f076 100644
--- a/super0.c
+++ b/super0.c
@@ -625,7 +625,8 @@ static int store_super0(struct supertype *st, int fd, void *sbv)
if (super->state & (1<<MD_SB_BITMAP_PRESENT)) {
struct bitmap_super_s * bm = (struct bitmap_super_s*)(super+1);
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);
diff --git a/super1.c b/super1.c
index 8f648f6..28332cd 100644
--- a/super1.c
+++ b/super1.c
@@ -715,7 +715,8 @@ static int store_super1(struct supertype *st, int fd, void *sbv)
(((char*)sb)+1024);
if (__le32_to_cpu(bm->magic) == BITMAP_MAGIC) {
locate_bitmap1(st, fd, sbv);
- write(fd, bm, sizeof(*bm));
+ if (write(fd, bm, sizeof(*bm)) != sizeof(*bm))
+ return 5;
}
}
fsync(fd);