2009-09-15 06:28:17

by Toshiyuki Okajima

[permalink] [raw]
Subject: [PATCH 2/3][RFC] ext3: add a message in remount/umount for ext3

From: Toshiyuki Okajima <[email protected]>

ext3 doesn't log a record of having unmounted the filesystem. And ext3 doesn't
log a record when the filesystem is remounted also with read-only. Therefore
in the system log, we cannot judge whether or not at the certain time this
filesystem user touches it.
For enterprise users, they often want to know when a certain filesystem is
mounted/remounted/unmounted.

So, we output the message to the system log when the filesystem is
remounted/unmounted.

Signed-off-by: Toshiyuki Okajima <[email protected]>
---
fs/ext3/super.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)

diff -Nurp linux-2.6.31.orig/fs/ext3/super.c linux-2.6.31/fs/ext3/super.c
--- linux-2.6.31.orig/fs/ext3/super.c 2009-09-10 07:13:59.000000000 +0900
+++ linux-2.6.31/fs/ext3/super.c 2009-09-11 17:08:24.742407628 +0900
@@ -328,6 +328,26 @@ void ext3_update_dynamic_rev(struct supe
*/
}

+static void ext3_print_mount_message(struct super_block *sb,
+ int is_remount)
+{
+ printk(KERN_INFO "EXT3 FS %s on %s, ",
+ is_remount? "remounted": "mounted", sb->s_id);
+ if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
+ char b[BDEVNAME_SIZE];
+
+ printk("external journal on %s\n",
+ bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
+ } else {
+ printk("internal journal\n");
+ }
+}
+
+static void ext3_print_umount_message(struct super_block *sb)
+{
+ printk(KERN_INFO "EXT3 FS unmounted from %s\n", sb->s_id);
+}
+
/*
* Open the external journal device
*/
@@ -448,6 +468,7 @@ static void ext3_put_super (struct super
sb->s_fs_info = NULL;
kfree(sbi->s_blockgroup_lock);
kfree(sbi);
+ ext3_print_umount_message(sb);

unlock_kernel();
}
@@ -1296,15 +1317,6 @@ static int ext3_setup_super(struct super
EXT3_INODES_PER_GROUP(sb),
sbi->s_mount_opt);

- printk(KERN_INFO "EXT3 FS on %s, ", sb->s_id);
- if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
- char b[BDEVNAME_SIZE];


2009-09-15 14:23:33

by Andreas Dilger

[permalink] [raw]
Subject: Re: [PATCH 2/3][RFC] ext3: add a message in remount/umount for ext3

[NB - removed Stephen from CC list]

On Sep 15, 2009 15:24 +0900, Toshiyuki Okajima wrote:
> +static void ext3_print_mount_message(struct super_block *sb,
> + int is_remount)
> +{
> + printk(KERN_INFO "EXT3 FS %s on %s, ",
> + is_remount? "remounted": "mounted", sb->s_id);
> + if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
> + char b[BDEVNAME_SIZE];
> +
> + printk("external journal on %s\n",
> + bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
> + } else {
> + printk("internal journal\n");
> + }

This won't necessarily work as you expected, because the separate
printk() calls will result in the message being printed on separate
lines of output.

Instead, this should print this all in a single line:

char jbuf[BDEVNAME_SIZE + 20] = "internal journal";

if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
sprintf(jbuf, "external journal on ");
bdevname(EXT3_SB(sb)->s_journal->j_dev,
jbuf + 20));
}

printk(KERN_INFO "EXT3 FS %s on %s, %s\n",
is_remount? "remounted": "mounted", sb->s_id, jbuf)

> @@ -1296,15 +1317,6 @@ static int ext3_setup_super(struct super
> - printk(KERN_INFO "EXT3 FS on %s, ", sb->s_id);
> - if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
> - char b[BDEVNAME_SIZE];
> -
> - printk("external journal on %s\n",
> - bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
> - } else {
> - printk("internal journal\n");
> - }

Interesting, it was broken already... Well, best to fix it anyways.
The same should be done for the ext4 patch.

Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.


2009-09-16 04:53:32

by Toshiyuki Okajima

[permalink] [raw]
Subject: Re: [PATCH 2/3][RFC] ext3: add a message in remount/umount for ext3

Hi Andreas,

On Tue, 15 Sep 2009 08:23:33 -0600
Andreas Dilger <[email protected]> wrote:
> [NB - removed Stephen from CC list]
>
> On Sep 15, 2009 15:24 +0900, Toshiyuki Okajima wrote:
> > +static void ext3_print_mount_message(struct super_block *sb,
> > + int is_remount)
> > +{
> > + printk(KERN_INFO "EXT3 FS %s on %s, ",
> > + is_remount? "remounted": "mounted", sb->s_id);
> > + if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
> > + char b[BDEVNAME_SIZE];
> > +
> > + printk("external journal on %s\n",
> > + bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
> > + } else {
> > + printk("internal journal\n");
> > + }
>
> This won't necessarily work as you expected, because the separate
> printk() calls will result in the message being printed on separate
> lines of output.
Thanks for your comment.
I'll apply it into new patch.

>
> Instead, this should print this all in a single line:
>
> char jbuf[BDEVNAME_SIZE + 20] = "internal journal";
>
> if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
> sprintf(jbuf, "external journal on ");
> bdevname(EXT3_SB(sb)->s_journal->j_dev,
> jbuf + 20));
> }
>
> printk(KERN_INFO "EXT3 FS %s on %s, %s\n",
> is_remount? "remounted": "mounted", sb->s_id, jbuf)
>
> > @@ -1296,15 +1317,6 @@ static int ext3_setup_super(struct super
> > - printk(KERN_INFO "EXT3 FS on %s, ", sb->s_id);
> > - if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
> > - char b[BDEVNAME_SIZE];
> > -
> > - printk("external journal on %s\n",
> > - bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
> > - } else {
> > - printk("internal journal\n");
> > - }
>
> Interesting, it was broken already... Well, best to fix it anyways.
> The same should be done for the ext4 patch.

Thanks,
Toshiyuki Okajima