diff -ruN --exclude=CVS /usr/ports/sysutils/smartmontools/Makefile /root/smartmontools/Makefile --- /usr/ports/sysutils/smartmontools/Makefile 2011-07-22 08:38:53.000000000 +0200 +++ /root/smartmontools/Makefile 2011-09-25 21:09:31.000000000 +0200 @@ -7,7 +7,7 @@ PORTNAME= smartmontools PORTVERSION= 5.41 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= sysutils MASTER_SITES= SF diff -ruN --exclude=CVS /usr/ports/sysutils/smartmontools/files/patch-os_freebsd /root/smartmontools/files/patch-os_freebsd --- /usr/ports/sysutils/smartmontools/files/patch-os_freebsd 1970-01-01 01:00:00.000000000 +0100 +++ /root/smartmontools/files/patch-os_freebsd 2011-09-25 21:06:22.000000000 +0200 @@ -0,0 +1,51 @@ +Index: os_freebsd.cpp +=================================================================== +--- os_freebsd.cpp (revision 3407) ++++ os_freebsd.cpp (revision 3419) +@@ -287,12 +287,12 @@ + request.flags=ATA_CMD_CONTROL; + break; + case ata_cmd_in::data_in: +- request.flags=ATA_CMD_READ; ++ request.flags=ATA_CMD_READ | ATA_CMD_CONTROL;; + request.data=(char *)in.buffer; + request.count=in.size; + break; + case ata_cmd_in::data_out: +- request.flags=ATA_CMD_WRITE; ++ request.flags=ATA_CMD_WRITE | ATA_CMD_CONTROL; + request.data=(char *)in.buffer; + request.count=in.size; + break; +@@ -405,11 +405,8 @@ + request->count, + request->timeout * 1000); // timeout in seconds + ++ ccb.ataio.cmd.flags = CAM_ATAIO_NEEDRESULT; + // ata_28bit_cmd +- if (request->flags == ATA_CMD_CONTROL) +- ccb.ataio.cmd.flags = CAM_ATAIO_NEEDRESULT; +- else +- ccb.ataio.cmd.flags = 0; + ccb.ataio.cmd.command = request->u.ata.command; + ccb.ataio.cmd.features = request->u.ata.feature; + ccb.ataio.cmd.lba_low = request->u.ata.lba; +@@ -435,7 +432,17 @@ + return -1; + } + +- request->u.ata.count = ccb.ataio.res.sector_count; ++ request->u.ata.lba = ++ ((u_int64_t)(ccb.ataio.res.lba_low)) | ++ ((u_int64_t)(ccb.ataio.res.lba_mid) << 8) | ++ ((u_int64_t)(ccb.ataio.res.lba_high) << 16) | ++ ((u_int64_t)(ccb.ataio.res.lba_low_exp) << 24) | ++ ((u_int64_t)(ccb.ataio.res.lba_mid_exp) << 32) | ++ ((u_int64_t)(ccb.ataio.res.lba_high_exp) << 40); ++ ++ request->u.ata.count = ccb.ataio.res.sector_count | (ccb.ataio.res.sector_count_exp << 8); ++ request->error = ccb.ataio.res.error; ++ + return 0; + } +