diff options
author | phk <phk@FreeBSD.org> | 2007-12-16 18:02:37 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2007-12-16 18:02:37 +0000 |
commit | f9bd6ffc2d69fbf7654c64c285fb1ad394e53d25 (patch) | |
tree | 266edbea169e3c5da7e39384e9df2a767e149eae /lib/libufs/block.c | |
parent | 6aefba3fce090a5d9bd5fe453607870b1a7e3770 (diff) | |
download | FreeBSD-src-f9bd6ffc2d69fbf7654c64c285fb1ad394e53d25.zip FreeBSD-src-f9bd6ffc2d69fbf7654c64c285fb1ad394e53d25.tar.gz |
Add a berase() function which uses ioctl(DIOCGDELETE) to erase a slab
of the disk.
Diffstat (limited to 'lib/libufs/block.c')
-rw-r--r-- | lib/libufs/block.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/libufs/block.c b/lib/libufs/block.c index c4ff304..5450a5d 100644 --- a/lib/libufs/block.c +++ b/lib/libufs/block.c @@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/mount.h> +#include <sys/disk.h> #include <sys/disklabel.h> #include <sys/stat.h> @@ -133,3 +134,21 @@ bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size) return (cnt); } + +int +berase(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size) +{ + off_t ioarg[2]; + int rv; + + ERROR(disk, NULL); + rv = ufs_disk_write(disk); + if (rv == -1) { + ERROR(disk, "failed to open disk for writing"); + return(rv); + } + ioarg[0] = blockno * disk->d_bsize; + ioarg[1] = size; + rv = ioctl(disk->d_fd, DIOCGDELETE, ioarg); + return (rv); +} |