• Kenji Kaneshige's avatar
    PCI: Fix wrong reference counter check for proc_dir_entry · 79df4c60
    Kenji Kaneshige authored
    Fix wrong counter check for proc_dir_entry in pci_proc_detach_device().
    
    The pci_proc_detach_device() returns with -EBUSY before calling
    remove_proc_entry() if the reference counter of proc_dir_entry is not
    0. But this check is wrong and pci_proc_detach_device() always fails
    because the reference counter of proc_dir_entry is initialized with 1
    at creating time and decremented in remove_proc_entry(). This bug
    cause strange behaviour as followings:
    
    - Accessing /proc/bus/pci/XXXX/YY file after hot-removing pci adapter
      card causes kernel panic.
    
    - Repeating hot-add/hot-remove of pci adapter card increases files
      with the same name under /proc/bus/pci/XXXX/ directory. For example:
    
        # pwd
        /proc/bus/pci/0002:09
        # ls
        01.0
        # for i in `seq 5`
        > do
        > echo 0 > /sys/bus/pci/slots/0009_0032/power
        > echo 1 > /sys/bus/pci/slots/0009_0032/power
        > done
        # ls
        01.0  01.0  01.0  01.0  01.0  01.0
    
    The pci_proc_detach_device() should check if the reference counter is
    not larger than 1 instead.
    Signed-off-by: default avatarKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    79df4c60
proc.c 9.93 KB