Index: head/sysutils/ufs_copy/Makefile =================================================================== --- head/sysutils/ufs_copy/Makefile (revision 394436) +++ head/sysutils/ufs_copy/Makefile (revision 394437) @@ -1,26 +1,26 @@ # Created by: MANTANI Nobutaka # $FreeBSD$ PORTNAME= ufs_copy PORTVERSION= 20060921 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= sysutils MASTER_SITES= http://people.freebsd.org/~simokawa/ufs/ DISTNAME= ufs-${PORTVERSION} MAINTAINER= nobutaka@FreeBSD.org COMMENT= Fast copy utility for UFS filesystem USES= uidfix WRKSRC= ${WRKDIR}/ufs MAKE_ARGS= BINDIR=${PREFIX}/sbin PORTDOCS= README OPTIONS_DEFINE= DOCS post-install: ${MKDIR} ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/${PORTDOCS} ${STAGEDIR}${DOCSDIR} .include Index: head/sysutils/ufs_copy/files/patch-ufs_copy.c =================================================================== --- head/sysutils/ufs_copy/files/patch-ufs_copy.c (revision 394436) +++ head/sysutils/ufs_copy/files/patch-ufs_copy.c (revision 394437) @@ -1,60 +1,70 @@ --- ufs_copy.c.orig 2006-09-21 15:28:09.000000000 +0900 -+++ ufs_copy.c 2007-12-27 23:28:55.000000000 +0900 ++++ ufs_copy.c 2015-08-17 11:45:07.797947000 +0900 @@ -111,9 +111,11 @@ main(int argc, char *argv[]) { struct fstab *fs; - int ch, eval=0; + int ch, eval=0, md; char *snapshot = NULL; - char *src, *dst; + char *src, *dst, *snap = NULL; + char mddev[256]; + FILE *readp; #ifdef USEMMAP while ((ch = getopt(argc, argv, "aBb:ceMms:v")) != -1) @@ -174,6 +176,21 @@ eval = system(buf); if (eval) errx(eval, "mksnap_ffs failed"); + + snprintf(buf, sizeof(buf), + "/sbin/mdconfig -a -n -t vnode -f %s", src); + fprintf(stderr, "%s\n", buf); + readp = popen(buf, "r"); + if (readp == NULL) + errx(eval, "mdconfig failed"); + eval = fscanf(readp, "%d", &md); + if (eval != 1) + errx(eval, "mdconfig failed"); + pclose(readp); + snprintf(mddev, sizeof(mddev), "/dev/md%d", md); + snap = src; + src = mddev; + fprintf(stderr, "attached %s as memory disk %s\n", snap, mddev); } if ((fs = getfsfile(src)) == NULL) { @@ -188,9 +205,19 @@ } if (snapshot) { - fprintf(stderr, "removing snapshot file %s ... ", src); + char buf[1024]; + + snprintf(buf, sizeof(buf), + "/sbin/mdconfig -d -u %d", md); + fprintf(stderr, "%s\n", buf); + eval = system(buf); + if (eval) + errx(eval, "mdconfig failed"); + fprintf(stderr, "detached memory disk %s\n", mddev); + + fprintf(stderr, "removing snapshot file %s ... ", snap); fflush(stderr); - if (unlink(src) == 0) + if (unlink(snap) == 0) fprintf(stderr, "done\n"); else fprintf(stderr, "failed\n"); +@@ -262,6 +289,9 @@ + } + } + bcopy(&src, &dst, sizeof(dst)); ++#if __FreeBSD_version >= 900011 ++ dst.d_sbcsum = NULL; ++#endif + dst.d_name = dst_path; + dst.d_fd = open(dst_path, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR ); + if (dst.d_fd < 0) {