Re: rework check_disk_change()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/2/20 5:38 PM, Douglas Gilbert wrote:
On 2020-09-02 10:11 a.m., Christoph Hellwig wrote:
Hi Jens,

this series replaced the not very nice check_disk_change() function with
a new bdev_media_changed that avoids having the ->revalidate_disk call
at its end.  As a result ->revalidate_disk can be removed from a lot of
drivers.


For over 20 years the sg driver has been carrying this snippet that hangs
off the completion callback:

        if (driver_stat & DRIVER_SENSE) {
                 struct scsi_sense_hdr ssh;

                 if (scsi_normalize_sense(sbp, sense_len, &ssh)) {
                         if (!scsi_sense_is_deferred(&ssh)) {
                                 if (ssh.sense_key == UNIT_ATTENTION) {
                                         if (sdp->device->removable)
                                                 sdp->device->changed = 1;
                                 }
                         }
                 }
         }

Is it needed? The unit attention (UA) may not be associated with the
device changing. Shouldn't the SCSI mid-level monitor UAs if they
impact the state of a scsi_device object?

We do; check scsi_io_completion_action() in drivers/scsi/scsi_lib.c
So I don't think you'd need to keep it in sg.c.

Cheers,

Hannes
--
Dr. Hannes Reinecke                Kernel Storage Architect
hare@xxxxxxx                              +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux