• Tom Van Braeckel's avatar
    btrfs: explicitly set control file's private_data · d8620958
    Tom Van Braeckel authored
    The private_data member of the Btrfs control device file
    (/dev/btrfs-control) is used to hold the current transaction and needs
    to be initialized to NULL to signify that no transaction is in progress.
    
    We explicitly set the control file's private_data to NULL to be
    independent of whatever value the misc subsystem initializes it to.
    
    Backstory:
    ----------
    
    The misc subsystem (which is used by /dev/btrfs-control) initializes
    a file's private_data to point to the misc device when a driver has
    registered a custom open file operation and initializes it to NULL
    when a custom open file operation has *not* been provided.
    
    This subtle quirk is confusing, to the point where kernel code registers
    *empty* file open operations to have private_data point to the misc
    device structure.
    
    And it leads to bugs, where the addition or removal of a custom open
    file operation surprisingly changes the initial contents of a file's
    private_data structure.
    
    To simplify things in the misc subsystem, a patch [1] has been proposed
    to *always* set private_data to point to the misc device instead of
    only doing this when a custom open file operation has been registered.
    
    But before we can fix this in the misc subsystem itself, we need to
    modify the (few) drivers that rely on this very subtle behavior.
    
    [1] https://lkml.org/lkml/2014/12/4/939Signed-off-by: default avatarMartin Kepplinger <martink@posteo.de>
    Signed-off-by: default avatarTom Van Braeckel <tomvanbraeckel@gmail.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    d8620958
super.c 56.7 KB