From: Mark Fasheh <mfasheh@suse.com>
To: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, ocfs2-devel@oss.oracle.com,
jack@suse.cz
Subject: [Ocfs2-devel] [PATCH 19/56] mm: Export pdflush_operation()
Date: Wed, 31 Dec 2008 15:09:49 -0800 [thread overview]
Message-ID: <20081231230949.GL17410@wotan.suse.de> (raw)
In-Reply-To: <20081231221723.GA14548@mail.oracle.com>
On Wed, Dec 31, 2008 at 02:17:24PM -0800, Joel Becker wrote:
> On Wed, Dec 31, 2008 at 11:28:54AM -0800, Mark Fasheh wrote:
> > On Wed, Dec 24, 2008 at 05:05:44PM -0800, Mark Fasheh wrote:
> > > On Mon, Dec 22, 2008 at 04:01:04PM -0800, Andrew Morton wrote:
> > > > On Mon, 22 Dec 2008 13:48:00 -0800
> > > > Mark Fasheh <mfasheh@suse.com> wrote:
> > > >
> > > > > OCSF2 will need to queue up work for periodic syncing of quotas
> > > > > among nodes in the cluster. pdflush() is good thread for this so
> > > > > export it's controlling function so that OCFS2 can use it.
> > > >
> > > > I trust that nothing will explode if pdflush_operation() fails
> > > > to do anything and returns -1?
> > >
> > > Hmm, Jan do you have any opinion here? I'm wondering if we just need our own
> > > thread for this after all...
> > > --Mark
> >
> > Ok, looking at this closer, it seems like this could be a problem after all.
> > Starving the quota syncing thread doesn't seem like a great idea either.
>
> Definitely don't like the pdflush method. You guys are right
> that it is buggy.
>
> > The following patch changes things to use a workqueue. Really, this doesn't
> > seem like a big deal anyway - the workqueue has reasonable overhead.
>
> I like the patch overall. A couple comments.
>
> > I could add this on top of my upstream branch along with a revert of the
> > 'mm: Export pdflush_operation()' patch, or I could work this into the patch
> > series so we never get the export patch in the 1st place.
>
> Regarding merge, I'd rather drop the export patch and merge this
> with the patch that uses pdflush_operation().
Sounds good. I think (hope) that shouldn't be too bad :)
> > diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
> > index a5f6e2a..07deec5 100644
> > --- a/fs/ocfs2/quota_local.c
> > +++ b/fs/ocfs2/quota_local.c
> > @@ -780,7 +780,7 @@ static int ocfs2_local_free_info(struct super_block *sb, int type)
> > /* At this point we know there are no more dquots and thus
> > * even if there's some sync in the pdflush queue, it won't
> > * find any dquots and return without doing anything */
> > - del_timer_sync(&oinfo->dqi_sync_timer);
> > + cancel_delayed_work_sync(&oinfo->dqi_sync_work);
> > iput(oinfo->dqi_gqinode);
> > ocfs2_simple_drop_lockres(OCFS2_SB(sb), &oinfo->dqi_gqlock);
> > ocfs2_lock_res_free(&oinfo->dqi_gqlock);
>
> Ok, I found what I was looking for. The workqueue is not
> flushed when unmounting a single volume, and I wanted to be sure that
> was correct. It is, as vfs_quota_disable() calls ->write_info() before
> calling ->free_file_info() here. So we can just cancel any delayed work
> and forget about it safely.
>
> > diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
> > index a79e67b..25ccf22 100644
> > --- a/fs/ocfs2/super.c
> > +++ b/fs/ocfs2/super.c
> > @@ -1326,6 +1326,10 @@ static int __init ocfs2_init(void)
> > mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
> > }
> >
> > + status = ocfs2_quota_setup();
> > + if (status)
> > + goto leave;
> > +
> > ocfs2_set_locking_protocol();
> >
> > status = register_quota_format(&ocfs2_quota_format);
>
> Don't you need to shutdown the quota workqueue if
> register_quota_format() fails?
Yep, good catch. Fixed patch follows. I'll start merging it all now.
--Mark
From: Mark Fasheh <mfasheh@suse.com>
ocfs2/quota: Use workqueue for periodic syncing instead of pdflush()
Using pdflush_operation() for this was potentially buggy - we could get into
a situation where the work function never gets run. Instead, just create a
workqueue, 'o2quota' and just constantly queue a delayed work item. The
impact of this should be pretty minimal.
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
---
fs/ocfs2/quota.h | 5 +++-
fs/ocfs2/quota_global.c | 48 ++++++++++++++++++++++++++++++----------------
fs/ocfs2/quota_local.c | 2 +-
fs/ocfs2/super.c | 7 ++++++
4 files changed, 43 insertions(+), 19 deletions(-)
diff --git a/fs/ocfs2/quota.h b/fs/ocfs2/quota.h
index abf6941..6d190c0 100644
--- a/fs/ocfs2/quota.h
+++ b/fs/ocfs2/quota.h
@@ -60,7 +60,7 @@ struct ocfs2_mem_dqinfo {
struct buffer_head *dqi_lqi_bh; /* Buffer head with local quota file inode */
struct buffer_head *dqi_ibh; /* Buffer with information header */
struct qtree_mem_dqinfo dqi_gi; /* Info about global file */
- struct timer_list dqi_sync_timer; /* Timer for syncing dquots */
+ struct delayed_work dqi_sync_work; /* Work for syncing dquots */
struct ocfs2_quota_recovery *dqi_rec; /* Pointer to recovery
* information, in case we
* enable quotas on file
@@ -114,4 +114,7 @@ int ocfs2_read_quota_block(struct inode *inode, u64 v_block,
extern struct dquot_operations ocfs2_quota_operations;
extern struct quota_format_type ocfs2_quota_format;
+int ocfs2_quota_setup(void);
+void ocfs2_quota_shutdown(void);
+
#endif /* _OCFS2_QUOTA_H */
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index 9184953..6aff8f2 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -7,8 +7,8 @@
#include <linux/quotaops.h>
#include <linux/dqblk_qtree.h>
#include <linux/jiffies.h>
-#include <linux/timer.h>
#include <linux/writeback.h>
+#include <linux/workqueue.h>
#define MLOG_MASK_PREFIX ML_QUOTA
#include <cluster/masklog.h>
@@ -25,7 +25,9 @@
#include "uptodate.h"
#include "quota.h"
-static void qsync_timer_fn(unsigned long oinfo_ptr);
+static struct workqueue_struct *ocfs2_quota_wq = NULL;
+
+static void qsync_work_fn(struct work_struct *work);
static void ocfs2_global_disk2memdqb(struct dquot *dquot, void *dp)
{
@@ -348,10 +350,10 @@ int ocfs2_global_read_info(struct super_block *sb, int type)
oinfo->dqi_gi.dqi_usable_bs = sb->s_blocksize -
OCFS2_QBLK_RESERVED_SPACE;
oinfo->dqi_gi.dqi_qtree_depth = qtree_depth(&oinfo->dqi_gi);
- setup_timer(&oinfo->dqi_sync_timer, qsync_timer_fn,
- (unsigned long)oinfo);
- mod_timer(&oinfo->dqi_sync_timer,
- round_jiffies(jiffies + oinfo->dqi_syncjiff));
+ INIT_DELAYED_WORK(&oinfo->dqi_sync_work, qsync_work_fn);
+ queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
+ oinfo->dqi_syncjiff);
+
out_err:
mlog_exit(status);
return status;
@@ -594,21 +596,16 @@ out:
return status;
}
-static void ocfs2_do_qsync(unsigned long oinfo_ptr)
+static void qsync_work_fn(struct work_struct *work)
{
- struct ocfs2_mem_dqinfo *oinfo = (struct ocfs2_mem_dqinfo *)oinfo_ptr;
+ struct ocfs2_mem_dqinfo *oinfo = container_of(work,
+ struct ocfs2_mem_dqinfo,
+ dqi_sync_work.work);
struct super_block *sb = oinfo->dqi_gqinode->i_sb;
dquot_scan_active(sb, ocfs2_sync_dquot_helper, oinfo->dqi_type);
-}
-
-static void qsync_timer_fn(unsigned long oinfo_ptr)
-{
- struct ocfs2_mem_dqinfo *oinfo = (struct ocfs2_mem_dqinfo *)oinfo_ptr;
-
- pdflush_operation(ocfs2_do_qsync, oinfo_ptr);
- mod_timer(&oinfo->dqi_sync_timer,
- round_jiffies(jiffies + oinfo->dqi_syncjiff));
+ queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
+ oinfo->dqi_syncjiff);
}
/*
@@ -1009,3 +1006,20 @@ struct dquot_operations ocfs2_quota_operations = {
.alloc_dquot = ocfs2_alloc_dquot,
.destroy_dquot = ocfs2_destroy_dquot,
};
+
+int ocfs2_quota_setup(void)
+{
+ ocfs2_quota_wq = create_workqueue("o2quot");
+ if (!ocfs2_quota_wq)
+ return -ENOMEM;
+ return 0;
+}
+
+void ocfs2_quota_shutdown(void)
+{
+ if (ocfs2_quota_wq) {
+ flush_workqueue(ocfs2_quota_wq);
+ destroy_workqueue(ocfs2_quota_wq);
+ ocfs2_quota_wq = NULL;
+ }
+}
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
index a5f6e2a..07deec5 100644
--- a/fs/ocfs2/quota_local.c
+++ b/fs/ocfs2/quota_local.c
@@ -780,7 +780,7 @@ static int ocfs2_local_free_info(struct super_block *sb, int type)
/* At this point we know there are no more dquots and thus
* even if there's some sync in the pdflush queue, it won't
* find any dquots and return without doing anything */
- del_timer_sync(&oinfo->dqi_sync_timer);
+ cancel_delayed_work_sync(&oinfo->dqi_sync_work);
iput(oinfo->dqi_gqinode);
ocfs2_simple_drop_lockres(OCFS2_SB(sb), &oinfo->dqi_gqlock);
ocfs2_lock_res_free(&oinfo->dqi_gqlock);
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index a79e67b..43ed113 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1326,11 +1326,16 @@ static int __init ocfs2_init(void)
mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
}
+ status = ocfs2_quota_setup();
+ if (status)
+ goto leave;
+
ocfs2_set_locking_protocol();
status = register_quota_format(&ocfs2_quota_format);
leave:
if (status < 0) {
+ ocfs2_quota_shutdown();
ocfs2_free_mem_caches();
exit_ocfs2_uptodate_cache();
}
@@ -1347,6 +1352,8 @@ static void __exit ocfs2_exit(void)
{
mlog_entry_void();
+ ocfs2_quota_shutdown();
+
if (ocfs2_wq) {
flush_workqueue(ocfs2_wq);
destroy_workqueue(ocfs2_wq);
--
1.5.6
WARNING: multiple messages have this Message-ID (diff)
From: Mark Fasheh <mfasheh@suse.com>
To: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, ocfs2-devel@oss.oracle.com,
jack@suse.cz
Subject: Re: [Ocfs2-devel] [PATCH 19/56] mm: Export pdflush_operation()
Date: Wed, 31 Dec 2008 15:09:49 -0800 [thread overview]
Message-ID: <20081231230949.GL17410@wotan.suse.de> (raw)
In-Reply-To: <20081231221723.GA14548@mail.oracle.com>
On Wed, Dec 31, 2008 at 02:17:24PM -0800, Joel Becker wrote:
> On Wed, Dec 31, 2008 at 11:28:54AM -0800, Mark Fasheh wrote:
> > On Wed, Dec 24, 2008 at 05:05:44PM -0800, Mark Fasheh wrote:
> > > On Mon, Dec 22, 2008 at 04:01:04PM -0800, Andrew Morton wrote:
> > > > On Mon, 22 Dec 2008 13:48:00 -0800
> > > > Mark Fasheh <mfasheh@suse.com> wrote:
> > > >
> > > > > OCSF2 will need to queue up work for periodic syncing of quotas
> > > > > among nodes in the cluster. pdflush() is good thread for this so
> > > > > export it's controlling function so that OCFS2 can use it.
> > > >
> > > > I trust that nothing will explode if pdflush_operation() fails
> > > > to do anything and returns -1?
> > >
> > > Hmm, Jan do you have any opinion here? I'm wondering if we just need our own
> > > thread for this after all...
> > > --Mark
> >
> > Ok, looking at this closer, it seems like this could be a problem after all.
> > Starving the quota syncing thread doesn't seem like a great idea either.
>
> Definitely don't like the pdflush method. You guys are right
> that it is buggy.
>
> > The following patch changes things to use a workqueue. Really, this doesn't
> > seem like a big deal anyway - the workqueue has reasonable overhead.
>
> I like the patch overall. A couple comments.
>
> > I could add this on top of my upstream branch along with a revert of the
> > 'mm: Export pdflush_operation()' patch, or I could work this into the patch
> > series so we never get the export patch in the 1st place.
>
> Regarding merge, I'd rather drop the export patch and merge this
> with the patch that uses pdflush_operation().
Sounds good. I think (hope) that shouldn't be too bad :)
> > diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
> > index a5f6e2a..07deec5 100644
> > --- a/fs/ocfs2/quota_local.c
> > +++ b/fs/ocfs2/quota_local.c
> > @@ -780,7 +780,7 @@ static int ocfs2_local_free_info(struct super_block *sb, int type)
> > /* At this point we know there are no more dquots and thus
> > * even if there's some sync in the pdflush queue, it won't
> > * find any dquots and return without doing anything */
> > - del_timer_sync(&oinfo->dqi_sync_timer);
> > + cancel_delayed_work_sync(&oinfo->dqi_sync_work);
> > iput(oinfo->dqi_gqinode);
> > ocfs2_simple_drop_lockres(OCFS2_SB(sb), &oinfo->dqi_gqlock);
> > ocfs2_lock_res_free(&oinfo->dqi_gqlock);
>
> Ok, I found what I was looking for. The workqueue is not
> flushed when unmounting a single volume, and I wanted to be sure that
> was correct. It is, as vfs_quota_disable() calls ->write_info() before
> calling ->free_file_info() here. So we can just cancel any delayed work
> and forget about it safely.
>
> > diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
> > index a79e67b..25ccf22 100644
> > --- a/fs/ocfs2/super.c
> > +++ b/fs/ocfs2/super.c
> > @@ -1326,6 +1326,10 @@ static int __init ocfs2_init(void)
> > mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
> > }
> >
> > + status = ocfs2_quota_setup();
> > + if (status)
> > + goto leave;
> > +
> > ocfs2_set_locking_protocol();
> >
> > status = register_quota_format(&ocfs2_quota_format);
>
> Don't you need to shutdown the quota workqueue if
> register_quota_format() fails?
Yep, good catch. Fixed patch follows. I'll start merging it all now.
--Mark
From: Mark Fasheh <mfasheh@suse.com>
ocfs2/quota: Use workqueue for periodic syncing instead of pdflush()
Using pdflush_operation() for this was potentially buggy - we could get into
a situation where the work function never gets run. Instead, just create a
workqueue, 'o2quota' and just constantly queue a delayed work item. The
impact of this should be pretty minimal.
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
---
fs/ocfs2/quota.h | 5 +++-
fs/ocfs2/quota_global.c | 48 ++++++++++++++++++++++++++++++----------------
fs/ocfs2/quota_local.c | 2 +-
fs/ocfs2/super.c | 7 ++++++
4 files changed, 43 insertions(+), 19 deletions(-)
diff --git a/fs/ocfs2/quota.h b/fs/ocfs2/quota.h
index abf6941..6d190c0 100644
--- a/fs/ocfs2/quota.h
+++ b/fs/ocfs2/quota.h
@@ -60,7 +60,7 @@ struct ocfs2_mem_dqinfo {
struct buffer_head *dqi_lqi_bh; /* Buffer head with local quota file inode */
struct buffer_head *dqi_ibh; /* Buffer with information header */
struct qtree_mem_dqinfo dqi_gi; /* Info about global file */
- struct timer_list dqi_sync_timer; /* Timer for syncing dquots */
+ struct delayed_work dqi_sync_work; /* Work for syncing dquots */
struct ocfs2_quota_recovery *dqi_rec; /* Pointer to recovery
* information, in case we
* enable quotas on file
@@ -114,4 +114,7 @@ int ocfs2_read_quota_block(struct inode *inode, u64 v_block,
extern struct dquot_operations ocfs2_quota_operations;
extern struct quota_format_type ocfs2_quota_format;
+int ocfs2_quota_setup(void);
+void ocfs2_quota_shutdown(void);
+
#endif /* _OCFS2_QUOTA_H */
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index 9184953..6aff8f2 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -7,8 +7,8 @@
#include <linux/quotaops.h>
#include <linux/dqblk_qtree.h>
#include <linux/jiffies.h>
-#include <linux/timer.h>
#include <linux/writeback.h>
+#include <linux/workqueue.h>
#define MLOG_MASK_PREFIX ML_QUOTA
#include <cluster/masklog.h>
@@ -25,7 +25,9 @@
#include "uptodate.h"
#include "quota.h"
-static void qsync_timer_fn(unsigned long oinfo_ptr);
+static struct workqueue_struct *ocfs2_quota_wq = NULL;
+
+static void qsync_work_fn(struct work_struct *work);
static void ocfs2_global_disk2memdqb(struct dquot *dquot, void *dp)
{
@@ -348,10 +350,10 @@ int ocfs2_global_read_info(struct super_block *sb, int type)
oinfo->dqi_gi.dqi_usable_bs = sb->s_blocksize -
OCFS2_QBLK_RESERVED_SPACE;
oinfo->dqi_gi.dqi_qtree_depth = qtree_depth(&oinfo->dqi_gi);
- setup_timer(&oinfo->dqi_sync_timer, qsync_timer_fn,
- (unsigned long)oinfo);
- mod_timer(&oinfo->dqi_sync_timer,
- round_jiffies(jiffies + oinfo->dqi_syncjiff));
+ INIT_DELAYED_WORK(&oinfo->dqi_sync_work, qsync_work_fn);
+ queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
+ oinfo->dqi_syncjiff);
+
out_err:
mlog_exit(status);
return status;
@@ -594,21 +596,16 @@ out:
return status;
}
-static void ocfs2_do_qsync(unsigned long oinfo_ptr)
+static void qsync_work_fn(struct work_struct *work)
{
- struct ocfs2_mem_dqinfo *oinfo = (struct ocfs2_mem_dqinfo *)oinfo_ptr;
+ struct ocfs2_mem_dqinfo *oinfo = container_of(work,
+ struct ocfs2_mem_dqinfo,
+ dqi_sync_work.work);
struct super_block *sb = oinfo->dqi_gqinode->i_sb;
dquot_scan_active(sb, ocfs2_sync_dquot_helper, oinfo->dqi_type);
-}
-
-static void qsync_timer_fn(unsigned long oinfo_ptr)
-{
- struct ocfs2_mem_dqinfo *oinfo = (struct ocfs2_mem_dqinfo *)oinfo_ptr;
-
- pdflush_operation(ocfs2_do_qsync, oinfo_ptr);
- mod_timer(&oinfo->dqi_sync_timer,
- round_jiffies(jiffies + oinfo->dqi_syncjiff));
+ queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
+ oinfo->dqi_syncjiff);
}
/*
@@ -1009,3 +1006,20 @@ struct dquot_operations ocfs2_quota_operations = {
.alloc_dquot = ocfs2_alloc_dquot,
.destroy_dquot = ocfs2_destroy_dquot,
};
+
+int ocfs2_quota_setup(void)
+{
+ ocfs2_quota_wq = create_workqueue("o2quot");
+ if (!ocfs2_quota_wq)
+ return -ENOMEM;
+ return 0;
+}
+
+void ocfs2_quota_shutdown(void)
+{
+ if (ocfs2_quota_wq) {
+ flush_workqueue(ocfs2_quota_wq);
+ destroy_workqueue(ocfs2_quota_wq);
+ ocfs2_quota_wq = NULL;
+ }
+}
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
index a5f6e2a..07deec5 100644
--- a/fs/ocfs2/quota_local.c
+++ b/fs/ocfs2/quota_local.c
@@ -780,7 +780,7 @@ static int ocfs2_local_free_info(struct super_block *sb, int type)
/* At this point we know there are no more dquots and thus
* even if there's some sync in the pdflush queue, it won't
* find any dquots and return without doing anything */
- del_timer_sync(&oinfo->dqi_sync_timer);
+ cancel_delayed_work_sync(&oinfo->dqi_sync_work);
iput(oinfo->dqi_gqinode);
ocfs2_simple_drop_lockres(OCFS2_SB(sb), &oinfo->dqi_gqlock);
ocfs2_lock_res_free(&oinfo->dqi_gqlock);
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index a79e67b..43ed113 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1326,11 +1326,16 @@ static int __init ocfs2_init(void)
mlog(ML_ERROR, "Unable to create ocfs2 debugfs root.\n");
}
+ status = ocfs2_quota_setup();
+ if (status)
+ goto leave;
+
ocfs2_set_locking_protocol();
status = register_quota_format(&ocfs2_quota_format);
leave:
if (status < 0) {
+ ocfs2_quota_shutdown();
ocfs2_free_mem_caches();
exit_ocfs2_uptodate_cache();
}
@@ -1347,6 +1352,8 @@ static void __exit ocfs2_exit(void)
{
mlog_entry_void();
+ ocfs2_quota_shutdown();
+
if (ocfs2_wq) {
flush_workqueue(ocfs2_wq);
destroy_workqueue(ocfs2_wq);
--
1.5.6
next prev parent reply other threads:[~2008-12-31 23:09 UTC|newest]
Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-22 21:47 [Ocfs2-devel] [git patches] Ocfs2 patches for merge window, batch 2/3 Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 01/56] quota: Add callbacks for allocating and destroying dquot structures Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 02/56] quota: Increase size of variables for limits and inode usage Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 03/56] quota: Remove bogus 'optimization' in check_idq() and check_bdq() Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 04/56] quota: Make _SUSPENDED just a flag Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 05/56] quota: Allow to separately enable quota accounting and enforcing limits Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 06/56] ext3: Use sb_any_quota_loaded() instead of sb_any_quota_enabled() Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 07/56] ext4: " Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 08/56] reiserfs: " Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 09/56] quota: Remove compatibility function sb_any_quota_enabled() Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 10/56] quota: Introduce DQUOT_QUOTA_SYS_FILE flag Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 11/56] quota: Move quotaio_v[12].h from include/linux/ to fs/ Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 12/56] quota: Split off quota tree handling into a separate file Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 13/56] quota: Convert union in mem_dqinfo to a pointer Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 14/56] quota: Allow negative usage of space and inodes Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 15/56] quota: Keep which entries were set by SETQUOTA quotactl Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 16/56] quota: Update version number Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 17/56] quota: Add helpers to allow ocfs2 specific quota initialization, freeing and recovery Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:47 ` [Ocfs2-devel] [PATCH 18/56] quota: Implement function for scanning active dquots Mark Fasheh
2008-12-22 21:47 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 19/56] mm: Export pdflush_operation() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-23 0:01 ` [Ocfs2-devel] " Andrew Morton
2008-12-23 0:01 ` Andrew Morton
2008-12-25 1:05 ` [Ocfs2-devel] " Mark Fasheh
2008-12-25 1:05 ` Mark Fasheh
2008-12-31 19:28 ` [Ocfs2-devel] " Mark Fasheh
2008-12-31 19:28 ` Mark Fasheh
2008-12-31 22:17 ` [Ocfs2-devel] " Joel Becker
2008-12-31 22:17 ` Joel Becker
2008-12-31 23:09 ` Mark Fasheh [this message]
2008-12-31 23:09 ` [Ocfs2-devel] " Mark Fasheh
2009-01-05 13:27 ` Jan Kara
2009-01-05 13:27 ` Jan Kara
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 20/56] ocfs2: Support nested transactions Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 21/56] ocfs2: Assign feature bits and system inodes to quota feature and quota files Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 22/56] ocfs2: Mark system files as not subject to quota accounting Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 23/56] ocfs2: Implementation of local and global quota file handling Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-23 0:11 ` [Ocfs2-devel] " Andrew Morton
2008-12-23 0:11 ` Andrew Morton
2008-12-25 0:29 ` [Ocfs2-devel] " Mark Fasheh
2008-12-25 0:29 ` Mark Fasheh
2008-12-26 2:29 ` [Ocfs2-devel] " Andrew Morton
2008-12-26 2:29 ` Andrew Morton
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 24/56] ocfs2: Add quota calls for allocation and freeing of inodes and space Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 25/56] ocfs2: Implement quota syncing thread Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 26/56] ocfs2: Implement quota recovery Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 27/56] ocfs2: Enable quota accounting on mount, disable on umount Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 28/56] jbd2: Add BH_JBDPrivateStart Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 29/56] ocfs2: Use BH_JBDPrivateStart instead of BH_Unshadow Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 30/56] ocfs2: Add missing initialization Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 31/56] ocfs2: Fix ocfs2_read_quota_block() error handling Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 32/56] ocfs2: Fix oops when extending quota files Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 33/56] ocfs2: Make ocfs2_get_quota_block() consistent with ocfs2_read_quota_block() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 34/56] ocfs2: Fix build warnings (64-bit types vs long long) Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 35/56] quota: Unexport dqblk_v1.h and dqblk_v2.h Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 36/56] quota: Export dquot_alloc() and dquot_destroy() functions Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 37/56] reiserfs: Add default allocation routines for quota structures Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 38/56] ext3: " Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 39/56] ext4: " Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 40/56] ocfs2: fix indendation in ocfs2_dquot_drop_slow Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 41/56] ocfs2/quota: sparse fixes for quota Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 42/56] ocfs2: Dirty the entire bucket in ocfs2_bucket_value_truncate() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 43/56] ocfs2: Narrow the transaction for deleting xattrs from a bucket Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 44/56] ocfs2: Dirty the entire first bucket in ocfs2_extend_xattr_bucket() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 45/56] ocfs2: Dirty the entire first bucket in ocfs2_cp_xattr_cluster() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 46/56] ocfs2: Explain t_is_new " Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 47/56] ocfs2: Use ocfs2_cp_xattr_bucket() in ocfs2_mv_xattr_bucket_cross_cluster() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 48/56] ocfs2: Rename ocfs2_cp_xattr_cluster() to ocfs2_mv_xattr_buckets() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 49/56] ocfs2: ocfs2_mv_xattr_buckets() can handle a partial cluster now Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 50/56] ocfs2: Use ocfs2_mv_xattr_buckets() in ocfs2_mv_xattr_bucket_cross_cluster() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 51/56] ocfs2: Start using buckets in ocfs2_adjust_xattr_cross_cluster() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 52/56] ocfs2: Pass buckets into ocfs2_mv_xattr_bucket_cross_cluster() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 53/56] ocfs2: Move buckets up into ocfs2_add_new_xattr_cluster() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 54/56] ocfs2: Move buckets up into ocfs2_add_new_xattr_bucket() Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 55/56] ocfs2: Pass xs->bucket " Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
2008-12-22 21:48 ` [Ocfs2-devel] [PATCH 56/56] ocfs2/quota: Add QUOTA in mlog_attribute Mark Fasheh
2008-12-22 21:48 ` Mark Fasheh
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=20081231230949.GL17410@wotan.suse.de \
--to=mfasheh@suse.com \
--cc=akpm@linux-foundation.org \
--cc=jack@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--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.