Message ID | 20240212213922.783301-26-surenb@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Memory allocation profiling | expand |
On Mon, Feb 12, 2024 at 01:39:11PM -0800, Suren Baghdasaryan wrote: > From: Kent Overstreet <kent.overstreet@linux.dev> > > This adds an alloc_hooks() wrapper around kmem_alloc(), so that we can > have allocations accounted to the proper callsite. > > Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> > Signed-off-by: Suren Baghdasaryan <surenb@google.com> > --- > fs/xfs/kmem.c | 4 ++-- > fs/xfs/kmem.h | 10 ++++------ > 2 files changed, 6 insertions(+), 8 deletions(-) > > diff --git a/fs/xfs/kmem.c b/fs/xfs/kmem.c > index c557a030acfe..9aa57a4e2478 100644 > --- a/fs/xfs/kmem.c > +++ b/fs/xfs/kmem.c > @@ -8,7 +8,7 @@ > #include "xfs_trace.h" > > void * > -kmem_alloc(size_t size, xfs_km_flags_t flags) > +kmem_alloc_noprof(size_t size, xfs_km_flags_t flags) > { > int retries = 0; > gfp_t lflags = kmem_flags_convert(flags); > @@ -17,7 +17,7 @@ kmem_alloc(size_t size, xfs_km_flags_t flags) > trace_kmem_alloc(size, flags, _RET_IP_); > > do { > - ptr = kmalloc(size, lflags); > + ptr = kmalloc_noprof(size, lflags); > if (ptr || (flags & KM_MAYFAIL)) > return ptr; > if (!(++retries % 100)) > diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h > index b987dc2c6851..c4cf1dc2a7af 100644 > --- a/fs/xfs/kmem.h > +++ b/fs/xfs/kmem.h > @@ -6,6 +6,7 @@ > #ifndef __XFS_SUPPORT_KMEM_H__ > #define __XFS_SUPPORT_KMEM_H__ > > +#include <linux/alloc_tag.h> > #include <linux/slab.h> > #include <linux/sched.h> > #include <linux/mm.h> > @@ -56,18 +57,15 @@ kmem_flags_convert(xfs_km_flags_t flags) > return lflags; > } > > -extern void *kmem_alloc(size_t, xfs_km_flags_t); > static inline void kmem_free(const void *ptr) > { > kvfree(ptr); > } > > +extern void *kmem_alloc_noprof(size_t, xfs_km_flags_t); > +#define kmem_alloc(...) alloc_hooks(kmem_alloc_noprof(__VA_ARGS__)) > > -static inline void * > -kmem_zalloc(size_t size, xfs_km_flags_t flags) > -{ > - return kmem_alloc(size, flags | KM_ZERO); > -} > +#define kmem_zalloc(_size, _flags) kmem_alloc((_size), (_flags) | KM_ZERO) > > /* > * Zone interfaces > -- > 2.43.0.687.g38aa6559b0-goog These changes can be dropped - the fs/xfs/kmem.[ch] stuff is now gone in linux-xfs/for-next. -Dave.
On Wed, Feb 14, 2024 at 2:22 PM Dave Chinner <david@fromorbit.com> wrote: > > On Mon, Feb 12, 2024 at 01:39:11PM -0800, Suren Baghdasaryan wrote: > > From: Kent Overstreet <kent.overstreet@linux.dev> > > > > This adds an alloc_hooks() wrapper around kmem_alloc(), so that we can > > have allocations accounted to the proper callsite. > > > > Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> > > Signed-off-by: Suren Baghdasaryan <surenb@google.com> > > --- > > fs/xfs/kmem.c | 4 ++-- > > fs/xfs/kmem.h | 10 ++++------ > > 2 files changed, 6 insertions(+), 8 deletions(-) > > > > diff --git a/fs/xfs/kmem.c b/fs/xfs/kmem.c > > index c557a030acfe..9aa57a4e2478 100644 > > --- a/fs/xfs/kmem.c > > +++ b/fs/xfs/kmem.c > > @@ -8,7 +8,7 @@ > > #include "xfs_trace.h" > > > > void * > > -kmem_alloc(size_t size, xfs_km_flags_t flags) > > +kmem_alloc_noprof(size_t size, xfs_km_flags_t flags) > > { > > int retries = 0; > > gfp_t lflags = kmem_flags_convert(flags); > > @@ -17,7 +17,7 @@ kmem_alloc(size_t size, xfs_km_flags_t flags) > > trace_kmem_alloc(size, flags, _RET_IP_); > > > > do { > > - ptr = kmalloc(size, lflags); > > + ptr = kmalloc_noprof(size, lflags); > > if (ptr || (flags & KM_MAYFAIL)) > > return ptr; > > if (!(++retries % 100)) > > diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h > > index b987dc2c6851..c4cf1dc2a7af 100644 > > --- a/fs/xfs/kmem.h > > +++ b/fs/xfs/kmem.h > > @@ -6,6 +6,7 @@ > > #ifndef __XFS_SUPPORT_KMEM_H__ > > #define __XFS_SUPPORT_KMEM_H__ > > > > +#include <linux/alloc_tag.h> > > #include <linux/slab.h> > > #include <linux/sched.h> > > #include <linux/mm.h> > > @@ -56,18 +57,15 @@ kmem_flags_convert(xfs_km_flags_t flags) > > return lflags; > > } > > > > -extern void *kmem_alloc(size_t, xfs_km_flags_t); > > static inline void kmem_free(const void *ptr) > > { > > kvfree(ptr); > > } > > > > +extern void *kmem_alloc_noprof(size_t, xfs_km_flags_t); > > +#define kmem_alloc(...) alloc_hooks(kmem_alloc_noprof(__VA_ARGS__)) > > > > -static inline void * > > -kmem_zalloc(size_t size, xfs_km_flags_t flags) > > -{ > > - return kmem_alloc(size, flags | KM_ZERO); > > -} > > +#define kmem_zalloc(_size, _flags) kmem_alloc((_size), (_flags) | KM_ZERO) > > > > /* > > * Zone interfaces > > -- > > 2.43.0.687.g38aa6559b0-goog > > These changes can be dropped - the fs/xfs/kmem.[ch] stuff is now > gone in linux-xfs/for-next. Thanks for the note. Will drop in the next submission. > > -Dave. > -- > Dave Chinner > david@fromorbit.com
diff --git a/fs/xfs/kmem.c b/fs/xfs/kmem.c index c557a030acfe..9aa57a4e2478 100644 --- a/fs/xfs/kmem.c +++ b/fs/xfs/kmem.c @@ -8,7 +8,7 @@ #include "xfs_trace.h" void * -kmem_alloc(size_t size, xfs_km_flags_t flags) +kmem_alloc_noprof(size_t size, xfs_km_flags_t flags) { int retries = 0; gfp_t lflags = kmem_flags_convert(flags); @@ -17,7 +17,7 @@ kmem_alloc(size_t size, xfs_km_flags_t flags) trace_kmem_alloc(size, flags, _RET_IP_); do { - ptr = kmalloc(size, lflags); + ptr = kmalloc_noprof(size, lflags); if (ptr || (flags & KM_MAYFAIL)) return ptr; if (!(++retries % 100)) diff --git a/fs/xfs/kmem.h b/fs/xfs/kmem.h index b987dc2c6851..c4cf1dc2a7af 100644 --- a/fs/xfs/kmem.h +++ b/fs/xfs/kmem.h @@ -6,6 +6,7 @@ #ifndef __XFS_SUPPORT_KMEM_H__ #define __XFS_SUPPORT_KMEM_H__ +#include <linux/alloc_tag.h> #include <linux/slab.h> #include <linux/sched.h> #include <linux/mm.h> @@ -56,18 +57,15 @@ kmem_flags_convert(xfs_km_flags_t flags) return lflags; } -extern void *kmem_alloc(size_t, xfs_km_flags_t); static inline void kmem_free(const void *ptr) { kvfree(ptr); } +extern void *kmem_alloc_noprof(size_t, xfs_km_flags_t); +#define kmem_alloc(...) alloc_hooks(kmem_alloc_noprof(__VA_ARGS__)) -static inline void * -kmem_zalloc(size_t size, xfs_km_flags_t flags) -{ - return kmem_alloc(size, flags | KM_ZERO); -} +#define kmem_zalloc(_size, _flags) kmem_alloc((_size), (_flags) | KM_ZERO) /* * Zone interfaces