All of lore.kernel.org
 help / color / mirror / Atom feed
From: Srinivas Eeda <srinivas.eeda@oracle.com>
To: Gang He <ghe@suse.com>, Mark Fasheh <MFasheh@suse.com>, rgoldwyn@suse.de
Cc: ocfs2-devel@oss.oracle.com, linux-kernel@vger.kernel.org
Subject: Re: [Ocfs2-devel] [PATCH v2 0/4] Add online file check feature
Date: Thu, 29 Oct 2015 00:46:36 -0700	[thread overview]
Message-ID: <5631CEDC.8030901@oracle.com> (raw)
In-Reply-To: <563214C4020000F90001C407@relay2.provo.novell.com>

Hi Gang,

thanks for pointing to explanation of the feature.

What I am curious about is ... what were the real cases that you came 
across prompted this change and how this change would help in that case.

Thanks,
--Srini


On 10/28/2015 09:44 PM, Gang He wrote:
> Hello Srini,
>
> There is a doc about ocfs2 online file check.
>
> OCFS2 online file check
> -----------------------
>
> This document will describe OCFS2 online file check feature.
>
> Introduction
> ============
> OCFS2 is often used in high-availaibility systems. However, OCFS2 usually
> converts the filesystem to read-only on errors. This may not be necessary, since
> turning the filesystem read-only would affect other running processes as well,
> decreasing availability. Then, a mount option (errors=continue) was introduced,
> which would return the EIO to the calling process and terminate furhter
> processing so that the filesystem is not corrupted further. So,the filesystem is
> not converted to read-only, and the problematic file's inode number is reported
> in the kernel log so that the user can try to check/fix this file via online
> filecheck feature.
>
> Scope
> =====
> This effort is to check/fix small issues which may hinder day-to-day operations
> of a cluster filesystem by turning the filesystem read-only. The scope of
> checking/fixing is at the file level, initially for regular files and eventually
> to all files (including system files) of the filesystem.
>
> In case of directory to file links is incorrect, the directory inode is
> reported as erroneous.
>
> This feature is not suited for extravagant checks which involve dependency of
> other components of the filesystem, such as but not limited to, checking if the
> bits for file blocks in the allocation has been set. In case of such an error,
> the offline fsck should/would be recommended.
>
> Finally, such an operation/feature should not be automated lest the filesystem
> may end up with more damage than before the repair attempt. So, this has to
> be performed using user interaction and consent.
>
> User interface
> ==============
> When there are errors in the OCFS2 filesystem, they are usually accompanied
> by the inode number which caused the error. This inode number would be the
> input to check/fix the file.
>
> There is a sysfs file for each OCFS2 file system mounting:
>
>    /sys/fs/ocfs2/<devname>/filecheck
>
> Here, <devname> indicates the name of OCFS2 volumn device which has been already
> mounted. The file above would accept inode numbers. This could be used to
> communicate with kernel space, tell which file(inode number) will be checked or
> fixed. Currently, three operations are supported, which includes checking
> inode, fixing inode and setting the size of result record history.
>
> 1. If you want to know what error exactly happened to <inode> before fixing, do
>
>    # echo "CHECK <inode>" > /sys/fs/ocfs2/<devname>/filecheck
>    # cat /sys/fs/ocfs2/<devname>/filecheck
>
> The output is like this:
>    INO		TYPE		DONE		ERROR
> 39502		0		1		GENERATION
>
> <INO> lists the inode numbers.
> <TYPE> is what kind of operation you've done, 0 for inode check,1 for inode fix.
> <DONE> 	indicates whether the operation has been finished.
> <ERROR> says what kind of errors was found. For the details, please refer to the
> file linux/fs/ocfs2/filecheck.h.
>
> 2. If you determine to fix this inode, do
>
>    # echo "FIX <inode>" > /sys/fs/ocfs2/<devname>/filecheck
>    # cat /sys/fs/ocfs2/<devname>/filecheck
>
> The output is like this:
>    INO		TYPE		DONE		ERROR
> 39502		1		1		SUCCESS
>
> This time, the <ERROR> column indicates whether this fix is successful or not.
>
> 3. The record cache is used to store the history of check/fix result. Its
> defalut size is 10, and can be adjust between the range of 10 ~ 100. You can
> adjust the size like this:
>
>    # echo "SET <size>" > /sys/fs/ocfs2/<devname>/filecheck
>
> Fixing stuff
> ============
> On receivng the inode, the filesystem would read the inode and the
> file metadata. In case of errors, the filesystem would fix the errors
> and report the problems it fixed in the kernel log. As a precautionary measure,
> the inode must first be checked for errors before performing a final fix.
>
> The inode and the fix history will be maintained temporarily in a
> small linked list buffer which would contain the last (N) inodes
> fixed/checked, along with the logs of what errors were reported/fixed.
>
> Thanks
> Gang
>
>
>> Hi Gang,
>>
>> thank you for implementing this. I would like to understand this better
>> on where and how it helps ... would you mind sharing couple
>> examples(real scenarios).
>>
>> Thanks,
>> --Srini
>>
>>
>> On 10/27/2015 11:25 PM, Gang He wrote:
>>> When there are errors in the ocfs2 filesystem,
>>> they are usually accompanied by the inode number which caused the error.
>>> This inode number would be the input to fixing the file.
>>> One of these options could be considered:
>>> A file in the sys filesytem which would accept inode numbers.
>>> This could be used to communication back what has to be fixed or is fixed.
>>> You could write:
>>> $# echo "CHECK <inode>" > /sys/fs/ocfs2/devname/filecheck
>>> or
>>> $# echo "FIX <inode>" > /sys/fs/ocfs2/devname/filecheck
>>>
>>> Compare with first version, I use strncasecmp instead of double strncmp
>>> functions. Second, update the source file contribution vendor.
>>>
>>> Gang He (4):
>>>     ocfs2: export ocfs2_kset for online file check
>>>     ocfs2: sysfile interfaces for online file check
>>>     ocfs2: create/remove sysfile for online file check
>>>     ocfs2: check/fix inode block for online file check
>>>
>>>    fs/ocfs2/Makefile      |   3 +-
>>>    fs/ocfs2/filecheck.c   | 566
>> +++++++++++++++++++++++++++++++++++++++++++++++++
>>>    fs/ocfs2/filecheck.h   |  48 +++++
>>>    fs/ocfs2/inode.c       | 196 ++++++++++++++++-
>>>    fs/ocfs2/inode.h       |   3 +
>>>    fs/ocfs2/ocfs2_trace.h |   2 +
>>>    fs/ocfs2/stackglue.c   |   3 +-
>>>    fs/ocfs2/stackglue.h   |   2 +
>>>    fs/ocfs2/super.c       |   5 +
>>>    9 files changed, 820 insertions(+), 8 deletions(-)
>>>    create mode 100644 fs/ocfs2/filecheck.c
>>>    create mode 100644 fs/ocfs2/filecheck.h
>>>


WARNING: multiple messages have this Message-ID (diff)
From: Srinivas Eeda <srinivas.eeda@oracle.com>
To: Gang He <ghe@suse.com>, Mark Fasheh <MFasheh@suse.com>, rgoldwyn@suse.de
Cc: ocfs2-devel@oss.oracle.com, linux-kernel@vger.kernel.org
Subject: [Ocfs2-devel] [PATCH v2 0/4] Add online file check feature
Date: Thu, 29 Oct 2015 00:46:36 -0700	[thread overview]
Message-ID: <5631CEDC.8030901@oracle.com> (raw)
In-Reply-To: <563214C4020000F90001C407@relay2.provo.novell.com>

Hi Gang,

thanks for pointing to explanation of the feature.

What I am curious about is ... what were the real cases that you came 
across prompted this change and how this change would help in that case.

Thanks,
--Srini


On 10/28/2015 09:44 PM, Gang He wrote:
> Hello Srini,
>
> There is a doc about ocfs2 online file check.
>
> OCFS2 online file check
> -----------------------
>
> This document will describe OCFS2 online file check feature.
>
> Introduction
> ============
> OCFS2 is often used in high-availaibility systems. However, OCFS2 usually
> converts the filesystem to read-only on errors. This may not be necessary, since
> turning the filesystem read-only would affect other running processes as well,
> decreasing availability. Then, a mount option (errors=continue) was introduced,
> which would return the EIO to the calling process and terminate furhter
> processing so that the filesystem is not corrupted further. So,the filesystem is
> not converted to read-only, and the problematic file's inode number is reported
> in the kernel log so that the user can try to check/fix this file via online
> filecheck feature.
>
> Scope
> =====
> This effort is to check/fix small issues which may hinder day-to-day operations
> of a cluster filesystem by turning the filesystem read-only. The scope of
> checking/fixing is at the file level, initially for regular files and eventually
> to all files (including system files) of the filesystem.
>
> In case of directory to file links is incorrect, the directory inode is
> reported as erroneous.
>
> This feature is not suited for extravagant checks which involve dependency of
> other components of the filesystem, such as but not limited to, checking if the
> bits for file blocks in the allocation has been set. In case of such an error,
> the offline fsck should/would be recommended.
>
> Finally, such an operation/feature should not be automated lest the filesystem
> may end up with more damage than before the repair attempt. So, this has to
> be performed using user interaction and consent.
>
> User interface
> ==============
> When there are errors in the OCFS2 filesystem, they are usually accompanied
> by the inode number which caused the error. This inode number would be the
> input to check/fix the file.
>
> There is a sysfs file for each OCFS2 file system mounting:
>
>    /sys/fs/ocfs2/<devname>/filecheck
>
> Here, <devname> indicates the name of OCFS2 volumn device which has been already
> mounted. The file above would accept inode numbers. This could be used to
> communicate with kernel space, tell which file(inode number) will be checked or
> fixed. Currently, three operations are supported, which includes checking
> inode, fixing inode and setting the size of result record history.
>
> 1. If you want to know what error exactly happened to <inode> before fixing, do
>
>    # echo "CHECK <inode>" > /sys/fs/ocfs2/<devname>/filecheck
>    # cat /sys/fs/ocfs2/<devname>/filecheck
>
> The output is like this:
>    INO		TYPE		DONE		ERROR
> 39502		0		1		GENERATION
>
> <INO> lists the inode numbers.
> <TYPE> is what kind of operation you've done, 0 for inode check,1 for inode fix.
> <DONE> 	indicates whether the operation has been finished.
> <ERROR> says what kind of errors was found. For the details, please refer to the
> file linux/fs/ocfs2/filecheck.h.
>
> 2. If you determine to fix this inode, do
>
>    # echo "FIX <inode>" > /sys/fs/ocfs2/<devname>/filecheck
>    # cat /sys/fs/ocfs2/<devname>/filecheck
>
> The output is like this:
>    INO		TYPE		DONE		ERROR
> 39502		1		1		SUCCESS
>
> This time, the <ERROR> column indicates whether this fix is successful or not.
>
> 3. The record cache is used to store the history of check/fix result. Its
> defalut size is 10, and can be adjust between the range of 10 ~ 100. You can
> adjust the size like this:
>
>    # echo "SET <size>" > /sys/fs/ocfs2/<devname>/filecheck
>
> Fixing stuff
> ============
> On receivng the inode, the filesystem would read the inode and the
> file metadata. In case of errors, the filesystem would fix the errors
> and report the problems it fixed in the kernel log. As a precautionary measure,
> the inode must first be checked for errors before performing a final fix.
>
> The inode and the fix history will be maintained temporarily in a
> small linked list buffer which would contain the last (N) inodes
> fixed/checked, along with the logs of what errors were reported/fixed.
>
> Thanks
> Gang
>
>
>> Hi Gang,
>>
>> thank you for implementing this. I would like to understand this better
>> on where and how it helps ... would you mind sharing couple
>> examples(real scenarios).
>>
>> Thanks,
>> --Srini
>>
>>
>> On 10/27/2015 11:25 PM, Gang He wrote:
>>> When there are errors in the ocfs2 filesystem,
>>> they are usually accompanied by the inode number which caused the error.
>>> This inode number would be the input to fixing the file.
>>> One of these options could be considered:
>>> A file in the sys filesytem which would accept inode numbers.
>>> This could be used to communication back what has to be fixed or is fixed.
>>> You could write:
>>> $# echo "CHECK <inode>" > /sys/fs/ocfs2/devname/filecheck
>>> or
>>> $# echo "FIX <inode>" > /sys/fs/ocfs2/devname/filecheck
>>>
>>> Compare with first version, I use strncasecmp instead of double strncmp
>>> functions. Second, update the source file contribution vendor.
>>>
>>> Gang He (4):
>>>     ocfs2: export ocfs2_kset for online file check
>>>     ocfs2: sysfile interfaces for online file check
>>>     ocfs2: create/remove sysfile for online file check
>>>     ocfs2: check/fix inode block for online file check
>>>
>>>    fs/ocfs2/Makefile      |   3 +-
>>>    fs/ocfs2/filecheck.c   | 566
>> +++++++++++++++++++++++++++++++++++++++++++++++++
>>>    fs/ocfs2/filecheck.h   |  48 +++++
>>>    fs/ocfs2/inode.c       | 196 ++++++++++++++++-
>>>    fs/ocfs2/inode.h       |   3 +
>>>    fs/ocfs2/ocfs2_trace.h |   2 +
>>>    fs/ocfs2/stackglue.c   |   3 +-
>>>    fs/ocfs2/stackglue.h   |   2 +
>>>    fs/ocfs2/super.c       |   5 +
>>>    9 files changed, 820 insertions(+), 8 deletions(-)
>>>    create mode 100644 fs/ocfs2/filecheck.c
>>>    create mode 100644 fs/ocfs2/filecheck.h
>>>

  reply	other threads:[~2015-10-29  7:46 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-28  6:25 [PATCH v2 0/4] Add online file check feature Gang He
2015-10-28  6:25 ` [Ocfs2-devel] " Gang He
2015-10-28  6:25 ` [PATCH v2 1/4] ocfs2: export ocfs2_kset for online file check Gang He
2015-10-28  6:25   ` [Ocfs2-devel] " Gang He
2015-11-24 21:47   ` Mark Fasheh
2015-11-24 21:47     ` [Ocfs2-devel] " Mark Fasheh
2015-10-28  6:25 ` [PATCH v2 2/4] ocfs2: sysfile interfaces " Gang He
2015-10-28  6:25   ` [Ocfs2-devel] " Gang He
2015-11-03  7:20   ` Junxiao Bi
2015-11-03  7:20     ` [Ocfs2-devel] " Junxiao Bi
2015-11-03  7:54     ` Gang He
2015-11-03  7:54       ` [Ocfs2-devel] " Gang He
2015-11-03  8:20       ` Junxiao Bi
2015-11-03  8:20         ` [Ocfs2-devel] " Junxiao Bi
2015-11-03  8:30         ` Gang He
2015-11-03  8:30           ` [Ocfs2-devel] " Gang He
2015-11-24 21:46         ` Mark Fasheh
2015-11-24 21:46           ` [Ocfs2-devel] " Mark Fasheh
2015-11-24 21:55           ` Srinivas Eeda
2015-11-24 21:55             ` Srinivas Eeda
2015-11-25  3:29           ` Gang He
2015-11-25  3:29             ` [Ocfs2-devel] " Gang He
2015-11-25  4:43             ` Junxiao Bi
2015-11-25  4:43               ` [Ocfs2-devel] " Junxiao Bi
2015-11-25  5:11               ` Gang He
2015-11-25  5:11                 ` [Ocfs2-devel] " Gang He
2015-12-18 22:37             ` Mark Fasheh
2015-12-18 22:37               ` [Ocfs2-devel] " Mark Fasheh
2015-11-25  4:33           ` Junxiao Bi
2015-11-25  4:33             ` [Ocfs2-devel] " Junxiao Bi
2015-11-24 21:52   ` Mark Fasheh
2015-11-24 21:52     ` Mark Fasheh
2015-10-28  6:26 ` [PATCH v2 3/4] ocfs2: create/remove sysfile " Gang He
2015-10-28  6:26   ` [Ocfs2-devel] " Gang He
2015-11-24 21:53   ` Mark Fasheh
2015-11-24 21:53     ` [Ocfs2-devel] " Mark Fasheh
2015-10-28  6:26 ` [PATCH v2 4/4] ocfs2: check/fix inode block " Gang He
2015-10-28  6:26   ` [Ocfs2-devel] " Gang He
2015-11-03  7:12   ` Junxiao Bi
2015-11-03  7:12     ` [Ocfs2-devel] " Junxiao Bi
2015-11-03  8:15     ` Gang He
2015-11-03  8:15       ` [Ocfs2-devel] " Gang He
2015-11-03  8:29       ` Junxiao Bi
2015-11-03  8:29         ` [Ocfs2-devel] " Junxiao Bi
2015-11-03  8:47         ` Gang He
2015-11-03  8:47           ` [Ocfs2-devel] " Gang He
2015-11-03  9:01           ` Junxiao Bi
2015-11-03  9:01             ` [Ocfs2-devel] " Junxiao Bi
2015-11-03  9:25             ` Gang He
2015-11-03  9:25               ` [Ocfs2-devel] " Gang He
2015-11-24 22:16     ` Mark Fasheh
2015-11-24 22:16       ` Mark Fasheh
2015-11-25  4:11       ` Junxiao Bi
2015-11-25  4:11         ` Junxiao Bi
2015-11-25  5:04         ` Gang He
2015-11-25  5:04           ` Gang He
2015-11-25  5:44           ` Junxiao Bi
2015-11-25  5:44             ` Junxiao Bi
2015-10-28 16:34 ` [Ocfs2-devel] [PATCH v2 0/4] Add online file check feature Srinivas Eeda
2015-10-28 16:34   ` Srinivas Eeda
2015-10-29  4:44   ` Gang He
2015-10-29  4:44     ` Gang He
2015-10-29  7:46     ` Srinivas Eeda [this message]
2015-10-29  7:46       ` Srinivas Eeda
2015-10-29  8:26       ` Gang He
2015-10-29  8:26         ` Gang He
2015-12-02 18:20 ` Pavel Machek
2015-12-02 18:20   ` [Ocfs2-devel] " Pavel Machek
2015-12-03  2:05   ` Gang He
2015-12-03  2:05     ` [Ocfs2-devel] " Gang He
2015-12-03  5:17     ` Greg KH
2015-12-03  5:17       ` [Ocfs2-devel] " Greg KH
2015-12-04  8:36       ` Gang He
2015-12-04  8:36         ` [Ocfs2-devel] " Gang He
2015-12-04  9:20         ` Pavel Machek
2015-12-04  9:20           ` [Ocfs2-devel] " Pavel Machek
2015-12-04 16:40         ` Greg KH
2015-12-04 16:40           ` [Ocfs2-devel] " Greg KH
2015-12-07  3:33           ` Gang He
2015-12-07  3:33             ` [Ocfs2-devel] " Gang He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5631CEDC.8030901@oracle.com \
    --to=srinivas.eeda@oracle.com \
    --cc=MFasheh@suse.com \
    --cc=ghe@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ocfs2-devel@oss.oracle.com \
    --cc=rgoldwyn@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.