From 3ff1f264e99d01b87dc9816c4432e8ab48bfb1d0 Mon Sep 17 00:00:00 2001 From: Juli Mallett Date: Thu, 23 Jan 2003 23:58:22 +0000 Subject: [PATCH] bwrite, not sbwrite, needs to open for writing and write. --- lib/libufs/block.c | 13 +++++++++++++ lib/libufs/sblock.c | 11 +---------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/libufs/block.c b/lib/libufs/block.c index 234991a62363..2b06dbfb4efc 100644 --- a/lib/libufs/block.c +++ b/lib/libufs/block.c @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -74,14 +75,26 @@ ssize_t bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size) { ssize_t cnt; + int rofd; ERROR(disk, NULL); + rofd = disk->d_fd; + + disk->d_fd = open(disk->d_name, O_WRONLY); + if (disk->d_fd < 0) { + ERROR(disk, "failed to open disk for writing"); + return -1; + } + cnt = pwrite(disk->d_fd, data, size, (off_t)(blockno * disk->d_bsize)); if (cnt != size) { ERROR(disk, "short write to block device"); return -1; } + + close(disk->d_fd); + disk->d_fd = rofd; return cnt; } diff --git a/lib/libufs/sblock.c b/lib/libufs/sblock.c index ef6c9de8311d..d769edb29142 100644 --- a/lib/libufs/sblock.c +++ b/lib/libufs/sblock.c @@ -38,7 +38,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include @@ -94,18 +93,12 @@ int sbwrite(struct uufsd *disk, int all) { struct fs *fs; - int i, rofd; + int i; ERROR(disk, NULL); fs = &disk->d_fs; - rofd = disk->d_fd; - disk->d_fd = open(disk->d_name, O_WRONLY); - if (disk->d_fd < 0) { - ERROR(disk, "failed to open disk"); - return -1; - } if (bwrite(disk, disk->d_sblock, fs, SBLOCKSIZE) == -1) { ERROR(disk, "failed to write superblock"); return -1; @@ -118,7 +111,5 @@ sbwrite(struct uufsd *disk, int all) return -1; } } - close(disk->d_fd); - disk->d_fd = rofd; return 0; }