• Andrey Albershteyn's avatar
    xfs: allow cross-linking special files without project quota · e23d7e82
    Andrey Albershteyn authored
    There's an issue that if special files is created before quota
    project is enabled, then it's not possible to link this file. This
    works fine for normal files. This happens because xfs_quota skips
    special files (no ioctls to set necessary flags). The check for
    having the same project ID for source and destination then fails as
    source file doesn't have any ID.
    
    mkfs.xfs -f /dev/sda
    mount -o prjquota /dev/sda /mnt/test
    
    mkdir /mnt/test/foo
    mkfifo /mnt/test/foo/fifo1
    
    xfs_quota -xc "project -sp /mnt/test/foo 9" /mnt/test
    > Setting up project 9 (path /mnt/test/foo)...
    > xfs_quota: skipping special file /mnt/test/foo/fifo1
    > Processed 1 (/etc/projects and cmdline) paths for project 9 with recursion depth infinite (-1).
    
    ln /mnt/test/foo/fifo1 /mnt/test/foo/fifo1_link
    > ln: failed to create hard link '/mnt/test/testdir/fifo1_link' => '/mnt/test/testdir/fifo1': Invalid cross-device link
    
    mkfifo /mnt/test/foo/fifo2
    ln /mnt/test/foo/fifo2 /mnt/test/foo/fifo2_link
    
    Fix this by allowing linking of special files to the project quota
    if special files doesn't have any ID set (ID = 0).
    Signed-off-by: default avatarAndrey Albershteyn <aalbersh@redhat.com>
    Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
    Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
    e23d7e82
xfs_inode.c 108 KB