HI, I'd like to pick off this item and its following 2 items, please avoid the duplicated work, thanks. [RFD 11/17] xfs: factor xfs_create to prepare for O_TMPFILE, [RFD 12/17] xfs: add tmpfile methods [RFD 13/17] xfs: allow linkat() on O_TMPFILE files On Mon, Aug 12, 2013 at 9:20 PM, Dave Chinner <david@xxxxxxxxxxxxx> wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > O_TMPFILE support requires allocating an inode that is not attached to the > a current namespace - it's anonymous. The current inode allocation code runs > through xfs_create() which requires a parent inode and a name to be passed to > it. for O_TMPFILE, we do not have a parent inode or a name so we cannot use > the same calling conventions as xfs_create() to allocate a inode. > > In this case, the inode is anonymous, so it is a property of the allocation > group it is allocated to, not the namespace. Hence all we really need to pass > from the VFS is a struct xfs_mount and the struct xfs_inode pointer that we > return the allocated inode in. > > The allocation of the inode requires a different log reservation to mkdir/create > as there is no directory modification taking place, though we still need to > reserve/account quotas appropriately. We do not need to check if we can add the > entry to the directory, either. > > Hence the majority of the inode allocation code is similar to that in > xfs_create, and so can be factored out of xfs_create() and reused. > > The fact that a parent inode does not exist follows into xfs_dir_ialloc() and > xfs_ialloc(), too. xfs_dir_ialloc() does not actually use the parent inode, just > passes it through to xfs_ialloc(). xfs_ialloc() can handle a null parent inode, > but it results in a target inode number of 0 and so allocation will always > target AG 0, This will effectively serialise O_TMPFILE allocation and removal. > > Hence we should separate the parent inode from the allocation target inode all > the way down to xfs_dialloc() while factoring this code. This will allow us to > use a separate AG rotor to direct allocation of temporary files around different > AGs, allowing them to the allocated and removed concurrently. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- > fs/xfs/xfs_iops.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > index 96dda62..9c20a2c 100644 > --- a/fs/xfs/xfs_iops.c > +++ b/fs/xfs/xfs_iops.c > @@ -112,6 +112,7 @@ xfs_cleanup_inode( > iput(inode); > } > > +/* how much of this does tmpfile need? */ > STATIC int > xfs_vn_mknod( > struct inode *dir, > -- > 1.8.3.2 > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs -- Regards, Zhi Yong Wu _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs