Hi folks, This is v3 of the following patchset https://lore.kernel.org/r/20201124155130.40848-1-hsiangkao@xxxxxxxxxx , which tends to simplify xfs_dialloc() logic. This version includes Dave's original patch https://lore.kernel.org/r/20201124221623.GC2842436@xxxxxxxxxxxxxxxxxxx to avoid the original double call of xfs_dialloc() and confusing ialloc_context with some split in order for better review and minor modification (e.g. ino isn't passed in xfs_ialloc()). I'm not quite sure what's messy ENOSPC mentioned in the original patch since return 0 and *ipp = NULL in xfs_dir_ialloc() would cause NULL-dereference in its callers, so I leave this part alone, although I think noroom has no use at all (it can be cleaned up as well with a following patch) (at a glance, the final shape looks almost ok...) I dropped [PATCH v1 3/3] since xfs_ialloc_select_ag() already looks simple enough (comments about this are welcome... I can re-add this if needed.) I ran xfstests -g auto with the whole series and it seems no noticable strange happening, yet I'm not quite sure if it may still have potential issues... Thanks for your time. changes since v2: - use struct xfs_dquot_acct * instead of void * on dqinfo (Darrick); - rename xfs_ialloc() to xfs_dir_ialloc_init() (Dave); - fix a temporary state compile error due to (ialloc_context -> &ialloc_context) on [PATCH v2 3/6]; - collect more RVBs from the reply of v2; - Cc Eric to confirm dqinfo; changes since v1: - add Dave's patch with spilt and minor update; - update comments above xfs_ialloc_ag_alloc() suggested by Darrick; - collect RVBs to "xfs: convert noroom, okalloc in xfs_dialloc() to bool" "xfs: kill ialloced in xfs_dialloc()" since no real logic changes ("(!error)" to "(error==0)" suggested by Darrick has been updated). Thanks, Gao Xiang Dave Chinner (4): xfs: introduce xfs_dialloc_roll() xfs: move on-disk inode allocation out of xfs_ialloc() xfs: move xfs_dialloc_roll() into xfs_dialloc() xfs: spilt xfs_dialloc() into 2 functions Gao Xiang (2): xfs: convert noroom, okalloc in xfs_dialloc() to bool xfs: kill ialloced in xfs_dialloc() fs/xfs/libxfs/xfs_ialloc.c | 173 ++++++++++++++------------- fs/xfs/libxfs/xfs_ialloc.h | 36 +++--- fs/xfs/xfs_inode.c | 237 +++++++++---------------------------- 3 files changed, 163 insertions(+), 283 deletions(-) -- 2.18.4