RE: [PATCH] fat: print s_dev via fat_msg

From: Sungjong Seo
Date: Tue Jul 09 2024 - 02:38:05 EST


> Sungjong Seo <sj1557.seo@xxxxxxxxxxx> writes:
>
> > To clarify MAJOR/MINOR number of a mounted device, fat_msg prints prefix
> > that includes them.
>
> Hm, why do we need the major/minor (why can't use sysfs to resolve if
> need), and why do you care only fat?
> Thanks.
You're right, if you can access to sysfs on a system, this might not
be useful. However, when analyzing problems based on logs, s_dev can be
very helpful for identifying devices. This is because, in systems like
Android, a filesystem gets mounted on a device node with a nickname
like public:179,1.

I think it would be really useful if applied to representative filesystems
for removable storage devices such as fat and exfat. So I will send the
similar PR to exfat as well.

Thanks.
>
> > Signed-off-by: Sungjong Seo <sj1557.seo@xxxxxxxxxxx>
> > ---
> > fs/fat/fat.h | 2 +-
> > fs/fat/misc.c | 4 +++-
> > 2 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/fat/fat.h b/fs/fat/fat.h
> > index 66cf4778cf3b..538bcb3e28e1 100644
> > --- a/fs/fat/fat.h
> > +++ b/fs/fat/fat.h
> > @@ -435,7 +435,7 @@ void __fat_fs_error(struct super_block *sb, int
> report, const char *fmt, ...);
> > #define fat_fs_error_ratelimit(sb, fmt, args...) \
> > __fat_fs_error(sb, __ratelimit(&MSDOS_SB(sb)->ratelimit), fmt , ##
> args)
> >
> > -#define FAT_PRINTK_PREFIX "%sFAT-fs (%s): "
> > +#define FAT_PRINTK_PREFIX "%sFAT-fs (%s[%d:%d]): "
> > #define fat_msg(sb, level, fmt, args...) \
> > do {
\
> > printk_index_subsys_emit(FAT_PRINTK_PREFIX, level, fmt, ##args);\
> > diff --git a/fs/fat/misc.c b/fs/fat/misc.c
> > index c7a2d27120ba..6672cefc5484 100644
> > --- a/fs/fat/misc.c
> > +++ b/fs/fat/misc.c
> > @@ -9,6 +9,7 @@
> >
> > #include "fat.h"
> > #include <linux/iversion.h>
> > +#include <linux/blkdev.h>
> >
> > /*
> > * fat_fs_error reports a file system problem that might indicate fa
> data
> > @@ -59,7 +60,8 @@ void _fat_msg(struct super_block *sb, const char
> *level, const char *fmt, ...)
> > va_start(args, fmt);
> > vaf.fmt = fmt;
> > vaf.va = &args;
> > - _printk(FAT_PRINTK_PREFIX "%pV\n", level, sb->s_id, &vaf);
> > + _printk(FAT_PRINTK_PREFIX "%pV\n", level, sb->s_id,
> > + MAJOR(sb->s_dev), MINOR(sb->s_dev), &vaf);
> > va_end(args);
> > }
>
> --
> OGAWA Hirofumi <hirofumi@xxxxxxxxxxxxxxxxxx>