• J
    drivers/pci/hotplug: Add missing pci_dev_get · 4ba7d0f0
    Julia Lawall 提交于
    pci_get_slot does a pci_dev_get, so pci_dev_put needs to be called in an
    error case.
    
    An alterative would be to move the test_and_set_bit before the call to
    pci_get_slot.
    
    The problem was fixed using the following semantic patch.
    (http://www.emn.fr/x-info/coccinelle/)
    
    // <smpl>
    @@
    local idexpression *n;
    statement S1,S2;
    expression E,E1;
    expression *ptr != NULL;
    type T,T1;
    @@
    
    (
    if (!(n = pci_get_slot(...))) S1
    |
    n = pci_get_slot(...)
    )
    <... when != pci_dev_put(n)
        when != if (...) { <+... pci_dev_put(n) ...+> }
        when != true !n  || ...
        when != n = (T)E
        when != E = n
    if (!n || ...) S2
    ...>
    (
      return \(0\|<+...n...+>\|ptr\);
    |
    + pci_dev_put(n);
    return ...;
    |
    pci_dev_put(n);
    |
    n = (T1)E1
    |
    E1 = n
    )
    // </smpl>
    Signed-off-by: NJulia Lawall <julia@diku.dk>
    Signed-off-by: NJesse Barnes <jbarnes@virtuousgeek.org>
    4ba7d0f0
fakephp.c 9.1 KB