On Wed, Nov 13, 2019 at 09:14:48AM +1100, Dave Chinner wrote: > If the dquots are not attached to the inode, how would you pass the > 3 dquots per inode down the stack to where they are actually used > inside the filesystem? I mean, we have to get the dquots attached to > the transaction so we can update them in xfs_trans_commit -> > xfs_trans_apply_dquot_deltas(), so somehow we'd have to get them > from the high level file/inode operations down to the XFS > transaction context. And things like writeback need dquots attached > for delayed allocation, so various aops would need to do dquot > lookups, too... My prime idea was to attach them to the transaction and keep them over transaction roles. Then see what is left and probably use an on-stack struct containing three dquots. At that point I know if that idea was feasible, because if we have too many deep callstacks where we need to pass that struct it obviously isn't. > I can see the advantage of doing rcu dquot cache lookups in the xfs > context where we are attaching the dquots to the transaction rather > than attaching them to the inode, but I can't see how the "do it at > a high level" aspect of this would work.... Most of our ops really just have one transaction / set of rolled over permanent transactions, because if they didn't they wouldn't be atomic..