Possible bug in ata-disk.c

Andriy Gapon avg at icyb.net.ua
Fri Dec 11 15:02:35 UTC 2009


on 11/12/2009 16:10 Grzegorz Bernacki said the following:
> Hi,
> 
> I've looked over ATA code and I've noticed that setting
> DISKFLAG_CANDELETE big in disk->d_flags clears DISKFLAGS_CANFLUSHCAHCE
> bit if it was set. Below is the patch.
> 
> --- a/sys/dev/ata/ata-disk.c
> +++ b/sys/dev/ata/ata-disk.c
> @@ -133,11 +133,11 @@ ad_attach(device_t dev)
>      adp->disk->d_unit = device_get_unit(dev);
>      if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
>         adp->disk->d_flags = DISKFLAG_CANFLUSHCACHE;
>      if ((atadev->param.support.command2 & ATA_SUPPORT_CFA) ||
>         atadev->param.config == ATA_PROTO_CFA)
> -       adp->disk->d_flags |= DISKFLAG_CANDELETE;
> +       adp->disk->d_flags = DISKFLAG_CANDELETE;
>      snprintf(adp->disk->d_ident, sizeof(adp->disk->d_ident), "ad:%s",
>         atadev->param.serial);
>      disk_create(adp->disk, DISK_VERSION);
>      device_add_child(dev, "subdisk", device_get_unit(dev));
>      ad_firmware_geom_adjust(dev, adp->disk);

It seems that you are correct.
The only confusing thing is that you supplied a reverse diff :)

-- 
Andriy Gapon


More information about the freebsd-current mailing list