cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
From: Bob Peterson <rpeterso@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [GFS2 0/3] fallocate and quota fixes
Date: Wed, 18 Mar 2015 13:09:08 -0400 (EDT)	[thread overview]
Message-ID: <1174684166.7065080.1426698548537.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <1426664198-40395-1-git-send-email-adas@redhat.com>

----- Original Message -----
> This is a revised version of the patches required to properly fix the
> fallocate quota issue described in bz1174295
> 
> patch1: This patch supplies gfs2_quota_check() with the number of blocks
> 	the caller intends to allocate in the current operation, resulting
> 	in a more accurate quota check.
> 
> patch2: gfs2_quota_check() and gfs2_inplace_reserve() return the number
> 	of blocks available subject to quota limits and rgrp size
> 	respectively. These functions don't return error if atleast
> 	ap.min_target (if set) blocks are allocatable.
> 
> patch3: The fallocate() function uses the features of patch2 to determine
> 	how many total blocks are available for allocation and uses them
> 	right away, instead of guessing/retrying inefficiently.
> 
> The behavior of quota enforcement is altered by this patchset.
> i.   Quotas are exceeded (a warning message is also issued to syslog) before
>      the actual usage blocks exceed the imposed limit. In fact, the actual
>      usage can never exceed the limit. Whenever it is determined that the
>      completion of an operation will cause a quota to exceed its limit, such
>      an operation is aborted with -EDQUOT and a 'quota exceeded' message is
>      dispatched. Note: When min_target is set and allowed blocks are >=
>      min_target, we don't issue an error. It is assumed that the caller will
>      only allocate the allowed blocks.
> ii.  The gfs2_write_calc_reserv()/calc_max_reserv() functions are used to
>      map between available blocks and the data bytes that can be written
>      using them. Typically, for large files, some blocks are used up for
>      metadata and only the remaining blocks can be used for data. Example:
>      To write only a handful of bytes that would easily fit in one block, we
>      might have to allocate an extra bunch of intermediate metadata blocks.
>      If we had only 1 block left in our allotted quota, this operation would
>      likely fail.
> 
> The functions mentioned in ii. are not very efficient. They always compute
> the worst case number of extra blocks required and it is often the case that
> not all those extra blocks are used. We need to find a better algorithm to
> get a tighter estimate on the blocks needed for a given number of bytes.
> 
> I've run some basic tests and things seem to be holding up. The failing case
> in bz1174295 is fixed using this patchset. I'll do test build and pass it on
> to Nate to test with.
> 
> Abhi Das (3):
>   gfs2: perform quota checks against allocation parameters
>   gfs2: allow quota_check and inplace_reserve to return available blocks
>   gfs2: allow fallocate to max out quotas/fs efficiently
> 
>  fs/gfs2/aops.c   |  6 ++---
>  fs/gfs2/bmap.c   |  2 +-
>  fs/gfs2/file.c   | 81
>  ++++++++++++++++++++++++++++++++++++--------------------
>  fs/gfs2/incore.h |  4 ++-
>  fs/gfs2/inode.c  | 18 +++++++------
>  fs/gfs2/quota.c  | 54 +++++++++++++++++++++++++++----------
>  fs/gfs2/quota.h  |  8 +++---
>  fs/gfs2/rgrp.c   | 20 ++++++++++----
>  fs/gfs2/rgrp.h   |  3 ++-
>  fs/gfs2/xattr.c  |  2 +-
>  10 files changed, 133 insertions(+), 65 deletions(-)
> 
> --
> 1.8.1.4

Hi,

ACK to all three.
Now pushed to the for-next branch of the linux-gfs2.git git tree.

Regards,

Bob Peterson



  parent reply	other threads:[~2015-03-18 17:09 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-18  7:36 [Cluster-devel] [GFS2 0/3] fallocate and quota fixes Abhi Das
2015-03-18  7:36 ` [Cluster-devel] [GFS2 1/3] gfs2: perform quota checks against allocation parameters Abhi Das
2015-03-18  7:36 ` [Cluster-devel] [GFS2 2/3] gfs2: allow quota_check and inplace_reserve to return available blocks Abhi Das
2015-03-18  7:36 ` [Cluster-devel] [GFS2 3/3] gfs2: allow fallocate to max out quotas/fs efficiently Abhi Das
2015-03-18 13:40 ` [Cluster-devel] [GFS2 0/3] fallocate and quota fixes Steven Whitehouse
2015-03-18 17:09 ` Bob Peterson [this message]
  -- strict thread matches above, loose matches on Subject: below --
2015-02-25  5:17 Abhi Das
2015-02-25  9:19 ` Steven Whitehouse
2015-02-25 14:06 ` Bob Peterson

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=1174684166.7065080.1426698548537.JavaMail.zimbra@redhat.com \
    --to=rpeterso@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).