1. Nov 02, 2023
  2. Oct 29, 2023
    • Kees Cook's avatar
      seq_buf: Introduce DECLARE_SEQ_BUF and seq_buf_str() · dcc4e572
      Kees Cook authored
      Solve two ergonomic issues with struct seq_buf;
      
      1) Too much boilerplate is required to initialize:
      
      	struct seq_buf s;
      	char buf[32];
      
      	seq_buf_init(s, buf, sizeof(buf));
      
      Instead, we can build this directly on the stack. Provide
      DECLARE_SEQ_BUF() macro to do this:
      
      	DECLARE_SEQ_BUF(s, 32);
      
      2) %NUL termination is fragile and requires 2 steps to get a valid
         C String (and is a layering violation exposing the "internals" of
         seq_buf):
      
      	seq_buf_terminate(s);
      	do_something(s->buffer);
      
      Instead, we can just return s->buffer directly after terminating it in
      the refactored seq_buf_terminate(), now known as seq_buf_str():
      
      	do_something(seq_buf_str(s));
      
      Link: https://lore.kernel.org/linux-trace-kernel/20231027155634.make.260-kees@kernel.org
      Link: https://lore.kernel.org/linux-trace-kernel/20231026194033.it.702-kees@kernel.org/
      
      
      
      Cc: Yosry Ahmed <yosryahmed@google.com>
      Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Justin Stitt <justinstitt@google.com>
      Cc: Kent Overstreet <kent.overstreet@linux.dev>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Yun Zhou <yun.zhou@windriver.com>
      Cc: Jacob Keller <jacob.e.keller@intel.com>
      Cc: Zhen Lei <thunder.leizhen@huawei.com>
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      dcc4e572
  3. Oct 26, 2023
  4. Oct 24, 2023
  5. Oct 21, 2023
  6. Oct 20, 2023
  7. Oct 19, 2023
  8. Oct 05, 2023
    • Steven Rostedt (Google)'s avatar
      tracing: Make system_callback() function static · 5ddd8baa
      Steven Rostedt (Google) authored
      The system_callback() function in trace_events.c is only used within that
      file. The "static" annotation was missed.
      
      Fixes: 5790b1fb
      
       ("eventfs: Remove eventfs_file and just use eventfs_inode")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Closes: https://lore.kernel.org/oe-kbuild-all/202310051743.y9EobbUr-lkp@intel.com/
      
      
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      5ddd8baa
    • Steven Rostedt (Google)'s avatar
      eventfs: Use eventfs_remove_events_dir() · 2819f23a
      Steven Rostedt (Google) authored
      The update to removing the eventfs_file changed the way the events top
      level directory was handled. Instead of returning a dentry, it now returns
      the eventfs_inode. In this changed, the removing of the events top level
      directory is not much different than removing any of the other
      directories. Because of this, the removal just called eventfs_remove_dir()
      instead of eventfs_remove_events_dir().
      
      Although eventfs_remove_dir() does the clean up, it misses out on the
      dget() of the ei->dentry done in eventfs_create_events_dir(). It makes
      more sense to match eventfs_create_events_dir() with a specific function
      eventfs_remove_events_dir() and this specific function can then perform
      the dput() to the dentry that had the dget() when it was created.
      
      Fixes: 5790b1fb
      
       ("eventfs: Remove eventfs_file and just use eventfs_inode")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Closes: https://lore.kernel.org/oe-kbuild-all/202310051743.y9EobbUr-lkp@intel.com/
      
      
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      2819f23a
    • Steven Rostedt (Google)'s avatar
      tracing/selftests: Update kprobe args char/string to match new functions · f5d9e8e0
      Steven Rostedt (Google) authored
      The function that the kprobe_args_char and kprobes_arg_string attaches to
      for its test has changed its name once again. Now we need to check for
      eventfs_create_dir(), and if it exists, use that, otherwise check for
      eventfs_add_dir() and if that exists use that, otherwise use the original
      tracefs_create_dir()!
      
      Link: https://lore.kernel.org/linux-trace-kernel/20230914163535.487267410@goodmis.org
      
      
      
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Ajay Kaher <akaher@vmware.com>
      Acked-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      f5d9e8e0
    • Steven Rostedt (Google)'s avatar
      eventfs: Remove eventfs_file and just use eventfs_inode · 5790b1fb
      Steven Rostedt (Google) authored
      Instead of having a descriptor for every file represented in the eventfs
      directory, only have the directory itself represented. Change the API to
      send in a list of entries that represent all the files in the directory
      (but not other directories). The entry list contains a name and a callback
      function that will be used to create the files when they are accessed.
      
      struct eventfs_inode *eventfs_create_events_dir(const char *name, struct dentry *parent,
      						const struct eventfs_entry *entries,
      						int size, void *data);
      
      is used for the top level eventfs directory, and returns an eventfs_inode
      that will be used by:
      
      struct eventfs_inode *eventfs_create_dir(const char *name, struct eventfs_inode *parent,
      					 const struct eventfs_entry *entries,
      					 int size, void *data);
      
      where both of the above take an array of struct eventfs_entry entries for
      every file that is in the directory.
      
      The entries are defined by:
      
      typedef int (*eventfs_callback)(const char *name, umode_t *mode, void **data,
      				const struct file_operations **fops);
      
      struct eventfs_entry {
      	const char			*name;
      	eventfs_callback		callback;
      };
      
      Where the name is the name of the file and the callback gets called when
      the file is being created. The callback passes in the name (in case the
      same callback is used for multiple files), a pointer to the mode, data and
      fops. The data will be pointing to the data that was passed in
      eventfs_create_dir() or eventfs_create_events_dir() but may be overridden
      to point to something else, as it will be used to point to the
      inode->i_private that is created. The information passed back from the
      callback is used to create the dentry/inode.
      
      If the callback fills the data and the file should be created, it must
      return a positive number. On zero or negative, the file is ignored.
      
      This logic may also be used as a prototype to convert entire pseudo file
      systems into just-in-time allocation.
      
      The "show_events_dentry" file has been updated to show the directories,
      and any files they have.
      
      With just the eventfs_file allocations:
      
       Before after deltas for meminfo (in kB):
      
         MemFree:		-14360
         MemAvailable:	-14260
         Buffers:		40
         Cached:		24
         Active:		44
         Inactive:		48
         Inactive(anon):	28
         Active(file):	44
         Inactive(file):	20
         Dirty:		-4
         AnonPages:		28
         Mapped:		4
         KReclaimable:	132
         Slab:		1604
         SReclaimable:	132
         SUnreclaim:		1472
         Committed_AS:	12
      
       Before after deltas for slabinfo:
      
         <slab>:		<objects>	[ * <size> = <total>]
      
         ext4_inode_cache	27		[* 1184 = 31968 ]
         extent_status	102		[*   40 = 4080 ]
         tracefs_inode_cache	144		[*  656 = 94464 ]
         buffer_head		39		[*  104 = 4056 ]
         shmem_inode_cache	49		[*  800 = 39200 ]
         filp			-53		[*  256 = -13568 ]
         dentry		251		[*  192 = 48192 ]
         lsm_file_cache	277		[*   32 = 8864 ]
         vm_area_struct	-14		[*  184 = -2576 ]
         trace_event_file	1748		[*   88 = 153824 ]
         kmalloc-1k		35		[* 1024 = 35840 ]
         kmalloc-256		49		[*  256 = 12544 ]
         kmalloc-192		-28		[*  192 = -5376 ]
         kmalloc-128		-30		[*  128 = -3840 ]
         kmalloc-96		10581		[*   96 = 1015776 ]
         kmalloc-64		3056		[*   64 = 195584 ]
         kmalloc-32		1291		[*   32 = 41312 ]
         kmalloc-16		2310		[*   16 = 36960 ]
         kmalloc-8		9216		[*    8 = 73728 ]
      
       Free memory dropped by 14,360 kB
       Available memory dropped by 14,260 kB
       Total slab additions in size: 1,771,032 bytes
      
      With this change:
      
       Before after deltas for meminfo (in kB):
      
         MemFree:		-12084
         MemAvailable:	-11976
         Buffers:		32
         Cached:		32
         Active:		72
         Inactive:		168
         Inactive(anon):	176
         Active(file):	72
         Inactive(file):	-8
         Dirty:		24
         AnonPages:		196
         Mapped:		8
         KReclaimable:	148
         Slab:		836
         SReclaimable:	148
         SUnreclaim:		688
         Committed_AS:	324
      
       Before after deltas for slabinfo:
      
         <slab>:		<objects>	[ * <size> = <total>]
      
         tracefs_inode_cache	144		[* 656 = 94464 ]
         shmem_inode_cache	-23		[* 800 = -18400 ]
         filp			-92		[* 256 = -23552 ]
         dentry		179		[* 192 = 34368 ]
         lsm_file_cache	-3		[* 32 = -96 ]
         vm_area_struct	-13		[* 184 = -2392 ]
         trace_event_file	1748		[* 88 = 153824 ]
         kmalloc-1k		-49		[* 1024 = -50176 ]
         kmalloc-256		-27		[* 256 = -6912 ]
         kmalloc-128		1864		[* 128 = 238592 ]
         kmalloc-64		4685		[* 64 = 299840 ]
         kmalloc-32		-72		[* 32 = -2304 ]
         kmalloc-16		256		[* 16 = 4096 ]
         total = 721352
      
       Free memory dropped by 12,084 kB
       Available memory dropped by 11,976 kB
       Total slab additions in size:  721,352 bytes
      
      That's over 2 MB in savings per instance for free and available memory,
      and over 1 MB in savings per instance of slab memory.
      
      Link: https://lore.kernel.org/linux-trace-kernel/20231003184059.4924468e@gandalf.local.home
      Link: https://lore.kernel.org/linux-trace-kernel/20231004165007.43d79161@gandalf.local.home
      
      
      
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Ajay Kaher <akaher@vmware.com>
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      5790b1fb
  9. Oct 04, 2023
  10. Oct 02, 2023
  11. Oct 01, 2023