From: Dave Chinner <dchinner@xxxxxxxxxx> The VFS allows an anonymous temporary file to be named at a later time via a linkat() syscall. Inodes that are created as O_TMPFILE are marked with a special flag I_LINKABLE that tells the VFS that it is OK to add a link to the inode even though it currently has a zero link count. To support this in XFS, we need to have xfs_link() detect this flag is set and behave appropriately when detected. When this situation is detected, we have ot ensure that the transaciton reservation takes into account the additional overhead of removing the inode from the unlinked list. Once we have determined that we can add the directory entry for the new link, we can remove the inode from the unlinked list and then add the directory entry. We do the operation in this order so that the AGI locking versus directory block allocation (and hence AGF locking) is the same as xfs_create() does. Finally, when we bump the link count, we need to ensure we don't assert fail on the zero link count that the O_TMPFILE inode has. This is the only case where incremeting the link count when it is zero is now valid, so we need to make sure that xfs_bumplink() checks this precisely. The VFS should ensure that I_LINKABLE is removed on the first link of an anonymous file so care is needed to ensure that the checks capture this behaviour, too. Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> --- fs/xfs/xfs_utils.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/xfs/xfs_utils.c b/fs/xfs/xfs_utils.c index 0025c78..fb2fa6c 100644 --- a/fs/xfs/xfs_utils.c +++ b/fs/xfs/xfs_utils.c @@ -293,6 +293,7 @@ xfs_bumplink( { xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); + /* tmpfiles won't like this */ ASSERT(ip->i_d.di_nlink > 0); ip->i_d.di_nlink++; inc_nlink(VFS_I(ip)); -- 1.8.3.2 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs