2014-04-11 22:32:27

by Theodore Ts'o

[permalink] [raw]
Subject: Pretty-printing file.f_mode and file.f_flags in trace points


I want to add some trace points which display f_mode and f_flags from
struct file in a human way. I found the following handy macros defined
in fs/nfs/nfstrace.h:

#define show_open_flags(flags) \
__print_flags((unsigned long)flags, "|", \
{ O_CREAT, "O_CREAT" }, \
{ O_EXCL, "O_EXCL" }, \
{ O_TRUNC, "O_TRUNC" }, \
{ O_APPEND, "O_APPEND" }, \
{ O_DSYNC, "O_DSYNC" }, \
{ O_DIRECT, "O_DIRECT" }, \
{ O_DIRECTORY, "O_DIRECTORY" })

#define show_fmode_flags(mode) \
__print_flags(mode, "|", \
{ ((__force unsigned long)FMODE_READ), "READ" }, \
{ ((__force unsigned long)FMODE_WRITE), "WRITE" }, \
{ ((__force unsigned long)FMODE_EXEC), "EXEC" })

I could just cut and paste these and drop them in
include/trace/events/ext4.h, but it would probably be better to have a
common header file. The question is where to put them. Does
include/trace/fs.h make sense to everyone? Or should put them
somewhere else, such as linux/fs.h?

Cheers,

- Ted


2014-04-11 22:47:55

by Trond Myklebust

[permalink] [raw]
Subject: Re: Pretty-printing file.f_mode and file.f_flags in trace points

Hi Ted,

On Apr 11, 2014, at 18:32, Theodore Ts'o <[email protected]> wrote:

>
> I want to add some trace points which display f_mode and f_flags from
> struct file in a human way. I found the following handy macros defined
> in fs/nfs/nfstrace.h:
>
> #define show_open_flags(flags) \
> __print_flags((unsigned long)flags, "|", \
> { O_CREAT, "O_CREAT" }, \
> { O_EXCL, "O_EXCL" }, \
> { O_TRUNC, "O_TRUNC" }, \
> { O_APPEND, "O_APPEND" }, \
> { O_DSYNC, "O_DSYNC" }, \
> { O_DIRECT, "O_DIRECT" }, \
> { O_DIRECTORY, "O_DIRECTORY" })
>
> #define show_fmode_flags(mode) \
> __print_flags(mode, "|", \
> { ((__force unsigned long)FMODE_READ), "READ" }, \
> { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \
> { ((__force unsigned long)FMODE_EXEC), "EXEC" })
>
> I could just cut and paste these and drop them in
> include/trace/events/ext4.h, but it would probably be better to have a
> common header file. The question is where to put them. Does
> include/trace/fs.h make sense to everyone? Or should put them
> somewhere else, such as linux/fs.h?

I?d vote for creating a new file, rather than reusing include/linux/fs.h. The latter is included in way too many other headers...

include/trace/fs.h sounds just fine to me if Steven and the other tracepoint gurus are OK with it.

Cheers
Trond
_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]

2014-04-11 22:57:09

by Theodore Ts'o

[permalink] [raw]
Subject: Re: Pretty-printing file.f_mode and file.f_flags in trace points

On Fri, Apr 11, 2014 at 06:47:52PM -0400, Trond Myklebust wrote:
> > I could just cut and paste these and drop them in
> > include/trace/events/ext4.h, but it would probably be better to have a
> > common header file. The question is where to put them. Does
> > include/trace/fs.h make sense to everyone? Or should put them
> > somewhere else, such as linux/fs.h?
>
> I’d vote for creating a new file, rather than reusing
> include/linux/fs.h. The latter is included in way too many other
> headers...

That was my preference as well. Assuming Steve is OK with
include/trace/fs.h, any objections if I carry a patch in the ext4 tree
which moves these macros from fs/nfs/nfstrace.h into that new file?

Cheers,

- Ted

2014-04-11 23:00:56

by Trond Myklebust

[permalink] [raw]
Subject: Re: Pretty-printing file.f_mode and file.f_flags in trace points


On Apr 11, 2014, at 18:57, Theodore Ts'o <[email protected]> wrote:

> On Fri, Apr 11, 2014 at 06:47:52PM -0400, Trond Myklebust wrote:
>>> I could just cut and paste these and drop them in
>>> include/trace/events/ext4.h, but it would probably be better to have a
>>> common header file. The question is where to put them. Does
>>> include/trace/fs.h make sense to everyone? Or should put them
>>> somewhere else, such as linux/fs.h?
>>
>> I?d vote for creating a new file, rather than reusing
>> include/linux/fs.h. The latter is included in way too many other
>> headers...
>
> That was my preference as well. Assuming Steve is OK with
> include/trace/fs.h, any objections if I carry a patch in the ext4 tree
> which moves these macros from fs/nfs/nfstrace.h into that new file?

That would be fine by me.

Cheers
Trond
_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]

2014-04-12 01:42:59

by Steven Rostedt

[permalink] [raw]
Subject: Re: Pretty-printing file.f_mode and file.f_flags in trace points

On Fri, 11 Apr 2014 18:32:27 -0400
Theodore Ts'o <[email protected]> wrote:

>
> I want to add some trace points which display f_mode and f_flags from
> struct file in a human way. I found the following handy macros defined
> in fs/nfs/nfstrace.h:
>
> #define show_open_flags(flags) \
> __print_flags((unsigned long)flags, "|", \
> { O_CREAT, "O_CREAT" }, \
> { O_EXCL, "O_EXCL" }, \
> { O_TRUNC, "O_TRUNC" }, \
> { O_APPEND, "O_APPEND" }, \
> { O_DSYNC, "O_DSYNC" }, \
> { O_DIRECT, "O_DIRECT" }, \
> { O_DIRECTORY, "O_DIRECTORY" })
>
> #define show_fmode_flags(mode) \
> __print_flags(mode, "|", \
> { ((__force unsigned long)FMODE_READ), "READ" }, \
> { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \
> { ((__force unsigned long)FMODE_EXEC), "EXEC" })
>
> I could just cut and paste these and drop them in
> include/trace/events/ext4.h, but it would probably be better to have a
> common header file. The question is where to put them. Does
> include/trace/fs.h make sense to everyone? Or should put them
> somewhere else, such as linux/fs.h?
>

An include file for headers that are only in the include/trace/event
directory is fine to be in include/trace. That is, if you have a macro
used by multiple include/trace/events/*.h files, just put it in
include/trace. I don't even think it needs to be in the events part.

Oh, and I'm fine if it is used by TRACE_EVENT files that are in other
locations like fs/nfs/nfstrace.h.

For adding a helper include/trace/fs.h file used by files in
include/trace/events/ and other trace headers...

Acked-by: Steven Rostedt <[email protected]>

-- Steve