[Midnightbsd-cvs] src [10618] trunk/lib/libufs/block.c: sync with freebsd
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Jun 9 11:30:56 EDT 2018
Revision: 10618
http://svnweb.midnightbsd.org/src/?rev=10618
Author: laffer1
Date: 2018-06-09 11:30:56 -0400 (Sat, 09 Jun 2018)
Log Message:
-----------
sync with freebsd
Modified Paths:
--------------
trunk/lib/libufs/block.c
Modified: trunk/lib/libufs/block.c
===================================================================
--- trunk/lib/libufs/block.c 2018-06-09 15:29:49 UTC (rev 10617)
+++ trunk/lib/libufs/block.c 2018-06-09 15:30:56 UTC (rev 10618)
@@ -139,10 +139,56 @@
return (cnt);
}
+#ifdef __FreeBSD_kernel__
+
+static int
+berase_helper(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size)
+{
+ off_t ioarg[2];
+
+ ioarg[0] = blockno * disk->d_bsize;
+ ioarg[1] = size;
+ return (ioctl(disk->d_fd, DIOCGDELETE, ioarg));
+}
+
+#else
+
+static int
+berase_helper(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size)
+{
+ char *zero_chunk;
+ off_t offset, zero_chunk_size, pwrite_size;
+ int rv;
+
+ offset = blockno * disk->d_bsize;
+ zero_chunk_size = 65536 * disk->d_bsize;
+ zero_chunk = calloc(1, zero_chunk_size);
+ if (zero_chunk == NULL) {
+ ERROR(disk, "failed to allocate memory");
+ return (-1);
+ }
+ while (size > 0) {
+ pwrite_size = size;
+ if (pwrite_size > zero_chunk_size)
+ pwrite_size = zero_chunk_size;
+ rv = pwrite(disk->d_fd, zero_chunk, pwrite_size, offset);
+ if (rv == -1) {
+ ERROR(disk, "failed writing to disk");
+ break;
+ }
+ size -= rv;
+ offset += rv;
+ rv = 0;
+ }
+ free(zero_chunk);
+ return (rv);
+}
+
+#endif
+
int
berase(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size)
{
- off_t ioarg[2];
int rv;
ERROR(disk, NULL);
@@ -151,8 +197,5 @@
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);
+ return (berase_helper(disk, blockno, size));
}
More information about the Midnightbsd-cvs
mailing list