From: Joel Becker <Joel.Becker@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH 2/3] ocfs2: throttle back local alloc when low on disk space
Date: Thu, 31 Jul 2008 14:11:32 -0700 [thread overview]
Message-ID: <20080731211132.GD14766@mail.oracle.com> (raw)
In-Reply-To: <1217536922-28328-3-git-send-email-mfasheh@suse.com>
On Thu, Jul 31, 2008 at 01:42:01PM -0700, Mark Fasheh wrote:
> @@ -476,16 +515,18 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
>
> mutex_lock(&local_alloc_inode->i_mutex);
>
> - if (osb->local_alloc_state != OCFS2_LA_ENABLED) {
> - status = -ENOSPC;
> - goto bail;
> - }
> -
> - if (bits_wanted > osb->local_alloc_bits) {
> - mlog(0, "Asking for more than my max window size!\n");
> + /*
> + * We must double check state and allocator bits because
> + * another process may have changed them while holding i_mutex.
> + */
> + spin_lock(&osb->osb_lock);
> + if (!ocfs2_la_state_enabled(osb) ||
> + (bits_wanted > osb->local_alloc_bits)) {
> + spin_unlock(&osb->osb_lock);
> status = -ENOSPC;
> goto bail;
> }
> + spin_unlock(&osb->osb_lock);
>
> alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
>
> @@ -513,6 +554,21 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
> mlog_errno(status);
> goto bail;
> }
> +
> + /*
> + * Under certain conditions, the window slide code
> + * might have reduced the number of bits available or
> + * disabled the the local alloc entirely. Re-check
> + * here and return -ENOSPC if necessary.
> + */
> + status = -ENOSPC;
> + if (!ocfs2_la_state_enabled(osb))
> + goto bail;
> +
Up above you take osb_lock, here you don't. Now, if I read your
later comment correctly, you don't need osb_lock in either place,
because the read is safe under the mutex.
Joel
--
"Get right to the heart of matters.
It's the heart that matters more."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
next prev parent reply other threads:[~2008-07-31 21:11 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-31 20:41 [Ocfs2-devel] [PATCH 0/3] Dynamic local alloc (halfway there) Mark Fasheh
2008-07-31 20:42 ` [Ocfs2-devel] [PATCH 1/3] ocfs2: Track local alloc bits internally Mark Fasheh
2008-07-31 21:16 ` Joel Becker
2008-07-31 20:42 ` [Ocfs2-devel] [PATCH 2/3] ocfs2: throttle back local alloc when low on disk space Mark Fasheh
2008-07-31 21:11 ` Joel Becker [this message]
2008-07-31 20:42 ` [Ocfs2-devel] [PATCH 3/3] ocfs2: track local alloc state via debugfs Mark Fasheh
2008-07-31 21:16 ` Joel Becker
2008-08-13 19:10 ` [Ocfs2-devel] [PATCH 0/3] Dynamic local alloc (halfway there) Marcos E. Matsunaga
2008-08-13 19:52 ` Mark Fasheh
2008-08-13 20:47 ` Marcos E. Matsunaga
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=20080731211132.GD14766@mail.oracle.com \
--to=joel.becker@oracle.com \
--cc=ocfs2-devel@oss.oracle.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 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.