• Darrick J. Wong's avatar
    xfs: honor init_xattrs in xfs_init_new_inode for !ATTR fs · 673cd885
    Darrick J. Wong authored
    xfs_init_new_inode ignores the init_xattrs parameter for filesystems
    that do not have ATTR enabled.  As a result, the first init_xattrs file
    to be created by the kernel will not have an attr fork created to store
    acls.  Storing that first acl will add ATTR to the superblock flags, so
    subsequent files will be created with attr forks.  The overhead of this
    is so small that chances are that nobody has noticed this behavior.
    
    However, this is disastrous on a filesystem with parent pointers because
    it requires that a new linkable file /must/ have a pre-existing attr
    fork, and the parent pointers code uses init_xattrs to create that fork.
    The preproduction version of mkfs.xfs used to set this, but the V5 sb
    verifier only requires ATTR2, not ATTR.  There is no guard for
    filesystems with (PARENT && !ATTR).
    
    It turns out that I misunderstood the two flags -- ATTR means that we at
    some point created an attr fork to store xattrs in a file; ATTR2
    apparently means only that inodes have dynamic fork offsets or that the
    filesystem was mounted with the "attr2" option.
    
    Fixes: 2442ee15 ("xfs: eager inode attr fork init needs attr feature awareness")
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
    673cd885
xfs_inode.c 116 KB