All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
To: Jan Kara <jack@suse.cz>
Cc: <viro@ZenIV.linux.org.uk>, <dedekind1@gmail.com>,
	<richard.weinberger@gmail.com>, <linux-mtd@lists.infradead.org>,
	<linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH v3 11/39] fs: quota: replace opened calling of ->sync_fs with sync_filesystem
Date: Fri, 18 Sep 2015 13:49:25 +0800	[thread overview]
Message-ID: <55FBA5E5.1040201@cn.fujitsu.com> (raw)
In-Reply-To: <20150917110547.GB32280@quack.suse.cz>

[-- Attachment #1: Type: text/plain, Size: 3163 bytes --]

On 09/17/2015 07:05 PM, Jan Kara wrote:
> On Thu 17-09-15 14:28:26, Dongsheng Yang wrote:
>> On 09/16/2015 06:14 PM, Jan Kara wrote:
>>> On Tue 15-09-15 17:02:06, Dongsheng Yang wrote:
>>>> There are only two places in whole kernel to call ->sync_fs directly. It
>>>> will sync fs even in read-only mode. It's not a good idea and some filesystem
>>>> would warn out if you are syncing in read-only mode. But sync_filesystem()
>>>> does filter this case out. Let's call sync_filesystem() here instead.
>>>>
>>>> Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
>>>
>>> So I'd prefer ubifs used hidden system inodes for quota files, set
>>> DQUOT_QUOTA_SYS_FILE flag and so this code calling sync_fs() could be
>>> completely avoided.
>>
>> Hmmm, I think it's a good idea to make quota files SYS_FILEs. But how
>> about quota-tools? E.g, if quotacheck do some modification
>> on quota files, we would not read them without a sync_fs().
>>
>> Could you help explain how quota works in this case?
>
> So tools like quota(1) or setquota(1) work using quotactl so they don't
> need access to quota files. When quota files are system files, quotacheck
> functionality belongs into the fsck - so fsck.ubifs is responsible for
> checking consistency of quota files. How e.g. e2fsck does it is that when
> scanning inodes, it computes usage for each user / group, loads limits
> information from old quota files and then just creates new quota files with
> updated information if there's any difference to the old quota files.

About quotacheck, I think just call fsync() in it sounds good to me.
Maybe something like the attachment.

OKEY, but I found repquota is still using read() to access quota files.
Please consider that case: 1.we read quota file and there is a pagecache
for it. 2. Then kernel did some modification on quota files. But
if the files is SYS_FILES marked, dquot_quota_sync() would not drop
the pagecache, then 3. repquota would get an outdated data from pagecache.

I am not sure why ext4 works well in this case. There must be something
I am missing.

Maybe we can introduce a Q_GETBLK for quotactl() to make all
quota tools getting informations from ioctl.
>
> Another advantage of the checking functionality being in fsck is that
> fs-specific fsck can gather usage information much more efficiently (and
> fsck has to do full fs scan anyway) and there's no need to propagate quota
> usage information to userspace using FIQSIZE ioctl() and similar stuff...

So, let me try to summary the my opinions about it.
Pros:
	(1). Security. quota files shouldn't be accessible to usespace.
	(2). Efficiency. No need for quotacheck, just do it in fsck.
	(3). No need FIOQSIZE any more.
Cons:
	(1). Incompatibility:
		If I set DQUOT_QUOTA_SYS_FILE currently, there are at
least two commands would not work: quotacheck and repquota. Actually
that means the whole quota is not usable to user.

So, I think the compatibility is important to me. Then what about
setting quota files as regular files at first. After all tools (quota
tools, quotacheck, repquota, fsck) prepared, setting the
DQUOT_QUOTA_SYS_FILE seems better.

Yang
>
> 								Honza
>


[-- Attachment #2: 0001-quotacheck-sync-files-in-quotacheck.patch --]
[-- Type: text/x-patch, Size: 1100 bytes --]

>From 1cf9d072cdd4d17c620834864f79ec5a0765d2bf Mon Sep 17 00:00:00 2001
From: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Date: Fri, 18 Sep 2015 08:40:49 -0400
Subject: [PATCH] quotacheck: sync files in quotacheck.

After a quotacheck, we need to make kernel to see the modification.
Compared with syncing quota files in kernel, we would rather sync
it in quotacheck command.

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
---
 quotacheck.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/quotacheck.c b/quotacheck.c
index 6f34cff..e4b184d 100644
--- a/quotacheck.c
+++ b/quotacheck.c
@@ -768,6 +768,20 @@ rename_new:
 		close(fd);
 	}
 #endif
+
+	/* Do a syncing for the quota file */
+	if ((fd = open(filename, O_RDWR)) < 0) {
+		errstr(_("Cannot open new quota file %s: %s\n"), filename, strerror(errno));
+		free(filename);
+		return -1;
+	}
+        if (fsync(fd)) {
+		errstr(_("Cannot sync quota file %s: %s\n"), filename, strerror(errno));
+		free(filename);
+                return -1;
+        }
+	close(fd);
+
 	free(filename);
 	return 0;
 }
-- 
1.8.3.1


  reply	other threads:[~2015-09-18  5:55 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15  9:01 [PATCH v3 00/39] Add quota supporting in ubifs Dongsheng Yang
2015-09-15  9:01 ` Dongsheng Yang
2015-09-15  9:01 ` [PATCH v3 01/39] fs: introduce a ->s_cdev field into struct super_block Dongsheng Yang
2015-09-15  9:01   ` Dongsheng Yang
2015-10-04  6:31   ` Christoph Hellwig
2015-10-05  8:36     ` Jan Kara
2015-09-15  9:01 ` [PATCH v3 02/39] fs: cleanup: remove the blank line before EXPORT_SYMBOL Dongsheng Yang
2015-09-15  9:01   ` Dongsheng Yang
2015-09-15  9:01 ` [PATCH v3 03/39] fs: super: cleanup: make the comment of each function aligned Dongsheng Yang
2015-09-15  9:01   ` Dongsheng Yang
2015-09-15  9:01 ` [PATCH v3 04/39] fs: super: consolidate the get_super class functions Dongsheng Yang
2015-09-15  9:01   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 05/39] fs: super: introduce a get_super_cdev to get super by a cdev reference Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-10-04  6:32   ` Christoph Hellwig
2015-09-15  9:02 ` [PATCH v3 06/39] fs: super: introduce a get_super_cdev_thawed to get sb by " Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15 21:24   ` Jan Kara
2015-09-15  9:02 ` [PATCH v3 07/39] fs: char_dev: introduce cd_acquire function to acquire cdev Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-16  8:16   ` Jan Kara
2015-09-17  3:30     ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 08/39] fs: introduce a __lookup_dev for internal using Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 09/39] fs: char_dev: introduce lookup_cdev to get cdev by pathname Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 10/39] fs: dquot: skip invalidate_bdev if bdev is NULL Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 11/39] fs: quota: replace opened calling of ->sync_fs with sync_filesystem Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-16 10:14   ` Jan Kara
2015-09-17  6:28     ` Dongsheng Yang
2015-09-17  6:28       ` Dongsheng Yang
2015-09-17 11:05       ` Jan Kara
2015-09-18  5:49         ` Dongsheng Yang [this message]
2015-09-18  9:00           ` Jan Kara
2015-09-21  4:31             ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 12/39] fs: quota: make quota support fs which is running on char dev Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 13/39] fs: introduce a get_qsize() to inode_operations Dongsheng Yang
2015-10-04  6:33   ` Christoph Hellwig
2015-10-05  8:01     ` Jan Kara
2015-09-15  9:02 ` [PATCH v3 14/39] fs: quota: restore i_flags of quota files in dquot_disable Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 15/39] fs: quota: introduce a callback of restore_iflags to quotactl_ops Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-16  9:47   ` Jan Kara
2015-09-15  9:02 ` [PATCH v3 16/39] ubi: introduce a interface to get cdev in ubi_volume Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 17/39] ubifs: extend budget for blocks Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 18/39] ubifs: fill sb->s_cdev in ubifs_fill_super() Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 19/39] ubifs: fill ->s_dev in ubifs_fill_super Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 20/39] ubifs: export read_block() from file.c Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 21/39] ubifs: introduce i_dquot to ubifs_inode Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 22/39] ubifs: implement IO functions for quota files Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 23/39] ubifs: disable quota in ubifs_put_super Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 24/39] ubifs: write quota back in ubifs_sync Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 25/39] ubifs: set/clear MS_RDONLY properly in ubifs_remount Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 26/39] ubifs: suspend & resume quota " Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 27/39] ubifs: check inode with NULL before using it Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 28/39] ubifs: record quota information about inode in ubifs_new_inode Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:35   ` Sheng Yong
2015-09-16  1:46     ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 29/39] ubifs: free quota inode information in ubifs_evict_inode Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 30/39] ubifs: alloc quota space in ubifs writing path Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 31/39] ubifs: free quota space in do_truncation Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 32/39] ubifs: free quota space when deleting a file Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 33/39] ubifs: adapt quota space informatin in do_setattr Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 34/39] ubifs: transfer quota information in changing owner or group Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 35/39] ubifs: write inode in ubifs_quota_write if we are appending Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 36/39] ubifs: implement ubifs_get_qsize to get quota size in ubifs Dongsheng Yang
2015-09-16 10:00   ` Jan Kara
2015-09-17  7:23     ` Dongsheng Yang
2015-09-17  7:23       ` Dongsheng Yang
2015-09-17 12:00       ` Jan Kara
2015-09-18  6:14         ` Dongsheng Yang
2015-09-18 11:20           ` Jan Kara
2015-09-21  4:35             ` Dongsheng Yang
2015-09-21  9:13               ` Jan Kara
2015-09-21  9:16                 ` Dongsheng Yang
2015-09-21  9:44                   ` Jan Kara
2015-09-21 11:02                     ` Dongsheng Yang
2015-09-23  7:42                       ` Jan Kara
2015-09-24  0:50                         ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 37/39] ubifs: implement ubifs_restore_iflags for quotactl_operations Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 38/39] ubifs: fill the quota related fields in ubifs_fill_super Dongsheng Yang
2015-09-15  9:02 ` [PATCH v3 39/39] ubifs: introduce quota related mount options Dongsheng Yang
2015-09-15  9:02   ` Dongsheng Yang
2015-09-15  9:36   ` Sheng Yong
2015-09-16  1:48     ` Dongsheng Yang
2015-10-03 18:57 ` [PATCH v3 00/39] Add quota supporting in ubifs Richard Weinberger
2015-10-04  2:32   ` Dongsheng Yang

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=55FBA5E5.1040201@cn.fujitsu.com \
    --to=yangds.fnst@cn.fujitsu.com \
    --cc=dedekind1@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=richard.weinberger@gmail.com \
    --cc=viro@ZenIV.linux.org.uk \
    /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.