On Wed, Jul 22, 2020 at 11:05:16AM +0200, Carlos Maiolino wrote: > xlog_ticket_alloc() is always called under NOFS context, except from > unmount path, which eitherway is holding many FS locks, so, there is no > need for its callers to keep passing allocation flags into it. > > change xlog_ticket_alloc() to use default kmem_cache_zalloc(), remove > its alloc_flags argument, and always use GFP_NOFS | __GFP_NOFAIL flags. > > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> Looks decent, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > --- > > Changelog: > V2: > - Remove alloc_flags argument from xlog_ticket_alloc() > and update patch description accordingly. > > fs/xfs/xfs_log.c | 9 +++------ > fs/xfs/xfs_log_cil.c | 3 +-- > fs/xfs/xfs_log_priv.h | 4 +--- > 3 files changed, 5 insertions(+), 11 deletions(-) > > diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c > index 00fda2e8e7380..ad0c69ee89475 100644 > --- a/fs/xfs/xfs_log.c > +++ b/fs/xfs/xfs_log.c > @@ -433,7 +433,7 @@ xfs_log_reserve( > XFS_STATS_INC(mp, xs_try_logspace); > > ASSERT(*ticp == NULL); > - tic = xlog_ticket_alloc(log, unit_bytes, cnt, client, permanent, 0); > + tic = xlog_ticket_alloc(log, unit_bytes, cnt, client, permanent); > *ticp = tic; > > xlog_grant_push_ail(log, tic->t_cnt ? tic->t_unit_res * tic->t_cnt > @@ -3408,15 +3408,12 @@ xlog_ticket_alloc( > int unit_bytes, > int cnt, > char client, > - bool permanent, > - xfs_km_flags_t alloc_flags) > + bool permanent) > { > struct xlog_ticket *tic; > int unit_res; > > - tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags); > - if (!tic) > - return NULL; > + tic = kmem_cache_zalloc(xfs_log_ticket_zone, GFP_NOFS | __GFP_NOFAIL); > > unit_res = xfs_log_calc_unit_res(log->l_mp, unit_bytes); > > diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c > index 9ed90368ab311..56c32eecffead 100644 > --- a/fs/xfs/xfs_log_cil.c > +++ b/fs/xfs/xfs_log_cil.c > @@ -37,8 +37,7 @@ xlog_cil_ticket_alloc( > { > struct xlog_ticket *tic; > > - tic = xlog_ticket_alloc(log, 0, 1, XFS_TRANSACTION, 0, > - KM_NOFS); > + tic = xlog_ticket_alloc(log, 0, 1, XFS_TRANSACTION, 0); > > /* > * set the current reservation to zero so we know to steal the basic > diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h > index 75a62870b63af..1c6fdbf3d5066 100644 > --- a/fs/xfs/xfs_log_priv.h > +++ b/fs/xfs/xfs_log_priv.h > @@ -464,9 +464,7 @@ xlog_ticket_alloc( > int unit_bytes, > int count, > char client, > - bool permanent, > - xfs_km_flags_t alloc_flags); > - > + bool permanent); > > static inline void > xlog_write_adv_cnt(void **ptr, int *len, int *off, size_t bytes) > -- > 2.26.2 >