I found a little bug (probably) in sys/dev/ata-all.c which somehow corrupts device parameters structure. When I first did "atacontrol list" device info about ad0 looked like this: Master: ad0 <Maxtor 6Y080P0/YAR41BW0> ATA/ATAPI revision 7 after I ran "atacontrol cap ad0" it printed somewhat messy output like having enabled SMART but not supported... then I did "atacontrol list" again and saw that the line about ad0 have changed to something like this: Master: ad0 <W0Maxtor 6Y080P0/YAR41BW0> ATA/ATAPI revision 0 or similar. After some digging and comparing the way "IOCATADEVICES" and "IOCATAGPARM" work I saw (probably) bogus ata_getparam() call. After removing this call to ata_getparam() everything work as expected (atleast that's what it looks like for ~30 min run). "atacontrol cap ad0" shows right results and doesn't screw the device parameters. I just hope that this doesn't break something else but I doubt it coz it just gets info and doesn't set anything. The "giant" patch is attached. It's agains today's -STABLE. regards -------------- next part -------------- --- ata-all.c.old Sat Jul 1 04:10:30 2006 +++ ata-all.c Sat Jul 1 04:40:26 2006 @@ -505,7 +505,6 @@ return error; case IOCATAGPARM: - ata_getparam(atadev, 0); bcopy(&atadev->param, params, sizeof(struct ata_params)); return 0;