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 36/39] ubifs: implement ubifs_get_qsize to get quota size in ubifs
Date: Mon, 21 Sep 2015 19:02:30 +0800	[thread overview]
Message-ID: <55FFE3C6.2020609@cn.fujitsu.com> (raw)
In-Reply-To: <20150921094452.GC9028@quack.suse.cz>

On 09/21/2015 05:44 PM, Jan Kara wrote:
> On Mon 21-09-15 17:16:49, Dongsheng Yang wrote:
>> On 09/21/2015 05:13 PM, Jan Kara wrote:
>>> On Mon 21-09-15 12:35:01, Dongsheng Yang wrote:
>>>> On 09/18/2015 07:20 PM, Jan Kara wrote:
>>>>>> .... TBH, there is a little different with other filesystems. I did not
>>>>>> use the "disk" space, but the file space in ubifs quota, although dquot
>>>>>> means disk quota. Same with btrfs quota. If we use disk space for quota,
>>>>>> the most common problem from user is that: why I did not reach the limit
>>>>>> but I can not write any byte. COW in btrfs or out-place-updating in
>>>>>> ubifs makes this problem much worse.
>>>>>>
>>>>>> So I choose file space here for ubifs.
>>>>>
>>>>> OK, so these are really two separate questions. I understand your choice of
>>>>> using file space as the amount of space to account for quota purposes and
>>>>> I'm fine with that choice. Another thing is that regardless of how you
>>>>> decide to do quota accounting, you must maintain i_blocks / i_bytes to
>>>>> contain proper value because dquot_transfer() uses that information to update
>>>>> quota usage when inode owner is changed.
>>>>
>>>> But if we don't use i_blocks to get qsize, what we care only in
>>>> dquot_transter() is dquot->dq_dqb. That means, even if the i_blocks
>>>> is not correct in dquot_transfer() in ubifs, that's okey, because we
>>>> will never use this value, right?
>>>
>>> dquot_transfer() will use the value - when file F changes owner from user A
>>> to user B, then you need to decrement amount of space used by F from A's
>>> quota usage and add that amount to B's quota usage. And the amount of space
>>> is obtained via inode_get_bytes() which uses i_blocks and i_bytes. See
>>> __dquot_transfer() in fs/quota/dquot.c for details.
>>
>> Yes, I see it. But if ubifs doesn't use i_blocks and i_bytes to stand
>> for quota size, as I mentioned I want to use i_size. Then we will never
>> use i_blocks. So we only need a to transfer dquot->dq_dqb values. That
>> means, even the i_blocks in dquot_transfer() is not correct, we don't
>> care it. we only need to make sure values in dquot_dq_dqb are
>> transfered, such as dquot->dq_dqb->curspace for user B is equal with
>> i_size.
>
> I think you are missing one thing:
>
> Assume user A has files F1 (1MB) F2 (2MB) F3 (3MB).
> User B has one file G1 (4MB).
>
> So user A uses 6 MB in total (stored in dquot for user A in dqb_curspace
> field). User B uses 4MB.
>
> Now you do "chown B F1"
>
> You need to change dq_dqb of F1 to point to user B quota structure as you
> explain, that is correct. However you also need to subtract 1MB from user
> A's total usage (which is stored in struct dquot for user A) since file F1
> no longer belongs to him. And you need to add 1 MB to user B's total usage.
>
> After this user A will have total usage of 5 MB and user B has usage of 5
> MB as well. You need to properly update the total usage of each user so
> that you can check the usage against quota limits.

But that's all done in dquot_transfer(). It dquot_decr_space(from) and
dquot_incr_space(to). Let me show the test result in my implementation.

(1). root -> 1M/2M/3M     yds ->4M

[root@atest-guest linux_compile]# ll -h /mnt/ubifs/
total 11M
-rw-r--r--. 1 root root 1.0M Sep 21 15:54 1M
-rw-r--r--. 1 root root 2.0M Sep 21 15:54 2M
-rw-r--r--. 1 root root 3.0M Sep 21 15:54 3M
-rw-r--r--. 1 yds  root 4.0M Sep 21 15:55 4M
-rw-------. 1 root root 6.0K Sep 21 15:53 aquota.group
-rw-------. 1 root root 7.0K Sep 21 15:53 aquota.user
[root@atest-guest linux_compile]# repquota -u /mnt/ubifs/
*** Report for user quotas on device /dev/ubi0_0
Block grace time: 7days; Inode grace time: 7days
                         Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    6144       0       0              4     0     0
yds       --    4096       0       0              1     0     0


(2). chown yds /mnt/ubifs/1M
[root@atest-guest linux_compile]# chown yds /mnt/ubifs/1M
[root@atest-guest linux_compile]# ll -h /mnt/ubifs/
total 11M
-rw-r--r--. 1 yds  root 1.0M Sep 21 15:54 1M
-rw-r--r--. 1 root root 2.0M Sep 21 15:54 2M
-rw-r--r--. 1 root root 3.0M Sep 21 15:54 3M
-rw-r--r--. 1 yds  root 4.0M Sep 21 15:55 4M
-rw-------. 1 root root 6.0K Sep 21 15:53 aquota.group
-rw-------. 1 root root 7.0K Sep 21 15:53 aquota.user
[root@atest-guest linux_compile]# repquota -u /mnt/ubifs/
*** Report for user quotas on device /dev/ubi0_0
Block grace time: 7days; Inode grace time: 7days
                         Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    5120       0       0              3     0     0
yds       --    5120       0       0              2     0     0


(3). quotacheck and check again.
[root@atest-guest linux_compile]# quotaoff /mnt/ubifs && quotacheck -u 
/mnt/ubifs/
[root@atest-guest linux_compile]# ll -h /mnt/ubifs
total 11M
-rw-r--r--. 1 yds  root 1.0M Sep 21 15:54 1M
-rw-r--r--. 1 root root 2.0M Sep 21 15:54 2M
-rw-r--r--. 1 root root 3.0M Sep 21 15:54 3M
-rw-r--r--. 1 yds  root 4.0M Sep 21 15:55 4M
-rw-------. 1 root root 6.0K Sep 21 15:53 aquota.group
-rw-------. 1 root root 7.0K Sep 21 16:00 aquota.user
[root@atest-guest linux_compile]# repquota -u /mnt/ubifs/
*** Report for user quotas on device /dev/ubi0_0
Block grace time: 7days; Inode grace time: 7days
                         Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --    5120       0       0              3     0     0
yds       --    5120       0       0              2     0     0

Yang
>
> 								Honza
>


  reply	other threads:[~2015-09-21 11:08 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
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 [this message]
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=55FFE3C6.2020609@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.