* [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4
@ 2009-07-15 15:54 Jan Kara
2009-07-15 15:54 ` [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned Jan Kara
` (5 more replies)
0 siblings, 6 replies; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:54 UTC (permalink / raw)
To: ocfs2-devel
Hi,
I did some more in-depth testing of OCFS2 quota code, especially with ECC
feature enabled and spotted some problems. First four patches fix them.
I need the fifth patch to be able to mount OCFS2 filesystem with 2.6.31-rc3.
The sixth patch fixes a potential problem when quota syncing interval is
updated while the cluster is running (which is not possible currently).
Joel, could you please merge those patches? Thanks.
Honza
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
@ 2009-07-15 15:54 ` Jan Kara
2009-07-21 21:54 ` Joel Becker
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 2/6] ocfs2: Mark buffer uptodate before calling ocfs2_journal_access_dq() Jan Kara
` (4 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:54 UTC (permalink / raw)
To: ocfs2-devel
Change i_size of global quota files so that it always remains aligned to block
size. This is mainly because the end of quota block may contain checksum (if
checksumming is enabled) and it's a bit awkward for it to be "outside" of quota
file (and it makes life harder for ocfs2-tools).
Signed-off-by: Jan Kara <jack@suse.cz>
---
fs/ocfs2/quota_global.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index edfa60c..5a4ae61 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -211,14 +211,16 @@ ssize_t ocfs2_quota_write(struct super_block *sb, int type,
mutex_lock_nested(&gqinode->i_mutex, I_MUTEX_QUOTA);
if (gqinode->i_size < off + len) {
+ loff_t rounded_end = ALIGN(off + len, sb->s_blocksize);
+
down_write(&OCFS2_I(gqinode)->ip_alloc_sem);
- err = ocfs2_extend_no_holes(gqinode, off + len, off);
+ err = ocfs2_extend_no_holes(gqinode, rounded_end, off);
up_write(&OCFS2_I(gqinode)->ip_alloc_sem);
if (err < 0)
goto out;
err = ocfs2_simple_size_update(gqinode,
oinfo->dqi_gqi_bh,
- off + len);
+ rounded_end);
if (err < 0)
goto out;
new = 1;
--
1.6.0.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 2/6] ocfs2: Mark buffer uptodate before calling ocfs2_journal_access_dq()
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
2009-07-15 15:54 ` [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned Jan Kara
@ 2009-07-15 15:55 ` Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file Jan Kara
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:55 UTC (permalink / raw)
To: ocfs2-devel
In a code path extending local quota files we marked new header
buffer uptodate only after calling ocfs2_journal_access_dq() which
triggers a bug. Fix it and also call ocfs2 variant of the function
marking buffer uptodate.
Signed-off-by: Jan Kara <jack@suse.cz>
---
fs/ocfs2/quota_local.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
index 5a460fa..b624f9b 100644
--- a/fs/ocfs2/quota_local.c
+++ b/fs/ocfs2/quota_local.c
@@ -20,6 +20,7 @@
#include "sysfile.h"
#include "dlmglue.h"
#include "quota.h"
+#include "uptodate.h"
/* Number of local quota structures per block */
static inline unsigned int ol_quota_entries_per_block(struct super_block *sb)
@@ -979,6 +980,8 @@ static struct ocfs2_quota_chunk *ocfs2_local_quota_add_chunk(
mlog_errno(status);
goto out;
}
+ ocfs2_set_new_buffer_uptodate(lqinode, bh);
+
dchunk = (struct ocfs2_local_disk_chunk *)bh->b_data;
handle = ocfs2_start_trans(OCFS2_SB(sb), 2);
@@ -999,7 +1002,6 @@ static struct ocfs2_quota_chunk *ocfs2_local_quota_add_chunk(
memset(dchunk->dqc_bitmap, 0,
sb->s_blocksize - sizeof(struct ocfs2_local_disk_chunk) -
OCFS2_QBLK_RESERVED_SPACE);
- set_buffer_uptodate(bh);
unlock_buffer(bh);
status = ocfs2_journal_dirty(handle, bh);
if (status < 0) {
--
1.6.0.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
2009-07-15 15:54 ` [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 2/6] ocfs2: Mark buffer uptodate before calling ocfs2_journal_access_dq() Jan Kara
@ 2009-07-15 15:55 ` Jan Kara
2009-07-21 22:20 ` Joel Becker
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 4/6] ocfs2: Zero out padding of on disk dquot structure Jan Kara
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:55 UTC (permalink / raw)
To: ocfs2-devel
When we extend local quota file, we should initialize data
in newly allocated block. Firstly because on recovery we could
parse bogus data, secondly so that block checksums are properly
computed.
Signed-off-by: Jan Kara <jack@suse.cz>
---
fs/ocfs2/quota_local.c | 98 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 83 insertions(+), 15 deletions(-)
diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
index b624f9b..9d2993d 100644
--- a/fs/ocfs2/quota_local.c
+++ b/fs/ocfs2/quota_local.c
@@ -941,7 +941,7 @@ static struct ocfs2_quota_chunk *ocfs2_local_quota_add_chunk(
struct ocfs2_local_disk_chunk *dchunk;
int status;
handle_t *handle;
- struct buffer_head *bh = NULL;
+ struct buffer_head *bh = NULL, *dbh = NULL;
u64 p_blkno;
/* We are protected by dqio_sem so no locking needed */
@@ -965,34 +965,32 @@ static struct ocfs2_quota_chunk *ocfs2_local_quota_add_chunk(
mlog_errno(status);
goto out;
}
+ handle = ocfs2_start_trans(OCFS2_SB(sb), 3);
+ if (IS_ERR(handle)) {
+ status = PTR_ERR(handle);
+ mlog_errno(status);
+ goto out;
+ }
+ /* Initialize chunk header */
down_read(&OCFS2_I(lqinode)->ip_alloc_sem);
status = ocfs2_extent_map_get_blocks(lqinode, oinfo->dqi_blocks,
&p_blkno, NULL, NULL);
up_read(&OCFS2_I(lqinode)->ip_alloc_sem);
if (status < 0) {
mlog_errno(status);
- goto out;
+ goto out_trans;
}
bh = sb_getblk(sb, p_blkno);
if (!bh) {
status = -ENOMEM;
mlog_errno(status);
- goto out;
+ goto out_trans;
}
- ocfs2_set_new_buffer_uptodate(lqinode, bh);
-
dchunk = (struct ocfs2_local_disk_chunk *)bh->b_data;
-
- handle = ocfs2_start_trans(OCFS2_SB(sb), 2);
- if (IS_ERR(handle)) {
- status = PTR_ERR(handle);
- mlog_errno(status);
- goto out;
- }
-
+ ocfs2_set_new_buffer_uptodate(lqinode, bh);
status = ocfs2_journal_access_dq(handle, lqinode, bh,
- OCFS2_JOURNAL_ACCESS_WRITE);
+ OCFS2_JOURNAL_ACCESS_CREATE);
if (status < 0) {
mlog_errno(status);
goto out_trans;
@@ -1009,6 +1007,38 @@ static struct ocfs2_quota_chunk *ocfs2_local_quota_add_chunk(
goto out_trans;
}
+ /* Initialize new block with structures */
+ down_read(&OCFS2_I(lqinode)->ip_alloc_sem);
+ status = ocfs2_extent_map_get_blocks(lqinode, oinfo->dqi_blocks + 1,
+ &p_blkno, NULL, NULL);
+ up_read(&OCFS2_I(lqinode)->ip_alloc_sem);
+ if (status < 0) {
+ mlog_errno(status);
+ goto out_trans;
+ }
+ dbh = sb_getblk(sb, p_blkno);
+ if (!dbh) {
+ status = -ENOMEM;
+ mlog_errno(status);
+ goto out_trans;
+ }
+ ocfs2_set_new_buffer_uptodate(lqinode, dbh);
+ status = ocfs2_journal_access_dq(handle, lqinode, dbh,
+ OCFS2_JOURNAL_ACCESS_CREATE);
+ if (status < 0) {
+ mlog_errno(status);
+ goto out_trans;
+ }
+ lock_buffer(dbh);
+ memset(dbh->b_data, 0, sb->s_blocksize - OCFS2_QBLK_RESERVED_SPACE);
+ unlock_buffer(dbh);
+ status = ocfs2_journal_dirty(handle, dbh);
+ if (status < 0) {
+ mlog_errno(status);
+ goto out_trans;
+ }
+
+ /* Update local quotafile info */
oinfo->dqi_blocks += 2;
oinfo->dqi_chunks++;
status = ocfs2_local_write_info(sb, type);
@@ -1033,6 +1063,7 @@ out_trans:
ocfs2_commit_trans(OCFS2_SB(sb), handle);
out:
brelse(bh);
+ brelse(dbh);
kmem_cache_free(ocfs2_qf_chunk_cachep, chunk);
return ERR_PTR(status);
}
@@ -1050,6 +1081,8 @@ static struct ocfs2_quota_chunk *ocfs2_extend_local_quota_file(
struct ocfs2_local_disk_chunk *dchunk;
int epb = ol_quota_entries_per_block(sb);
unsigned int chunk_blocks;
+ struct buffer_head *bh;
+ u64 p_blkno;
int status;
handle_t *handle;
@@ -1077,12 +1110,46 @@ static struct ocfs2_quota_chunk *ocfs2_extend_local_quota_file(
mlog_errno(status);
goto out;
}
- handle = ocfs2_start_trans(OCFS2_SB(sb), 2);
+
+ /* Get buffer from the just added block */
+ down_read(&OCFS2_I(lqinode)->ip_alloc_sem);
+ status = ocfs2_extent_map_get_blocks(lqinode, oinfo->dqi_blocks,
+ &p_blkno, NULL, NULL);
+ up_read(&OCFS2_I(lqinode)->ip_alloc_sem);
+ if (status < 0) {
+ mlog_errno(status);
+ goto out;
+ }
+ bh = sb_getblk(sb, p_blkno);
+ if (!bh) {
+ status = -ENOMEM;
+ mlog_errno(status);
+ goto out;
+ }
+ ocfs2_set_new_buffer_uptodate(lqinode, bh);
+
+ handle = ocfs2_start_trans(OCFS2_SB(sb), 3);
if (IS_ERR(handle)) {
status = PTR_ERR(handle);
mlog_errno(status);
goto out;
}
+ /* Zero created block */
+ status = ocfs2_journal_access_dq(handle, lqinode, bh,
+ OCFS2_JOURNAL_ACCESS_CREATE);
+ if (status < 0) {
+ mlog_errno(status);
+ goto out_trans;
+ }
+ lock_buffer(bh);
+ memset(bh->b_data, 0, sb->s_blocksize);
+ unlock_buffer(bh);
+ status = ocfs2_journal_dirty(handle, bh);
+ if (status < 0) {
+ mlog_errno(status);
+ goto out_trans;
+ }
+ /* Update chunk header */
status = ocfs2_journal_access_dq(handle, lqinode, chunk->qc_headerbh,
OCFS2_JOURNAL_ACCESS_WRITE);
if (status < 0) {
@@ -1099,6 +1166,7 @@ static struct ocfs2_quota_chunk *ocfs2_extend_local_quota_file(
mlog_errno(status);
goto out_trans;
}
+ /* Update file header */
oinfo->dqi_blocks++;
status = ocfs2_local_write_info(sb, type);
if (status < 0) {
--
1.6.0.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 4/6] ocfs2: Zero out padding of on disk dquot structure
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
` (2 preceding siblings ...)
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file Jan Kara
@ 2009-07-15 15:55 ` Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 5/6] ocfs2: Fix initialization of blockcheck stats Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info Jan Kara
5 siblings, 0 replies; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:55 UTC (permalink / raw)
To: ocfs2-devel
Padding fields of on-disk dquot structure were not zeroed. Zero them
so that it's easier to use them later.
Signed-off-by: Jan Kara <jack@suse.cz>
---
fs/ocfs2/quota_global.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index 5a4ae61..8437c6b 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -69,6 +69,7 @@ static void ocfs2_global_mem2diskdqb(void *dp, struct dquot *dquot)
d->dqb_curspace = cpu_to_le64(m->dqb_curspace);
d->dqb_btime = cpu_to_le64(m->dqb_btime);
d->dqb_itime = cpu_to_le64(m->dqb_itime);
+ d->dqb_pad1 = d->dqb_pad2 = 0;
}
static int ocfs2_global_is_id(void *dp, struct dquot *dquot)
--
1.6.0.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 5/6] ocfs2: Fix initialization of blockcheck stats
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
` (3 preceding siblings ...)
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 4/6] ocfs2: Zero out padding of on disk dquot structure Jan Kara
@ 2009-07-15 15:55 ` Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info Jan Kara
5 siblings, 0 replies; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:55 UTC (permalink / raw)
To: ocfs2-devel
We just set blockcheck stats to zeros but we should also
properly initialize the spinlock there.
Signed-off-by: Jan Kara <jack@suse.cz>
---
fs/ocfs2/super.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 7efb349..99c6dfe 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -777,6 +777,7 @@ static int ocfs2_sb_probe(struct super_block *sb,
}
di = (struct ocfs2_dinode *) (*bh)->b_data;
memset(stats, 0, sizeof(struct ocfs2_blockcheck_stats));
+ spin_lock_init(&stats->b_lock);
status = ocfs2_verify_volume(di, *bh, blksize, stats);
if (status >= 0)
goto bail;
--
1.6.0.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
` (4 preceding siblings ...)
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 5/6] ocfs2: Fix initialization of blockcheck stats Jan Kara
@ 2009-07-15 15:55 ` Jan Kara
2009-07-21 22:24 ` Joel Becker
5 siblings, 1 reply; 12+ messages in thread
From: Jan Kara @ 2009-07-15 15:55 UTC (permalink / raw)
To: ocfs2-devel
syncjiff is just a converted value of syncms. Some places which
are updating syncms forgot to update syncjiff as well. Since the
conversion is just a simple division / multiplication and it does
not happen frequently, just remove the syncjiff field to avoid
forgotten conversions.
Signed-off-by: Jan Kara <jack@suse.cz>
---
fs/ocfs2/aops.c | 4 +++-
fs/ocfs2/quota.h | 1 -
fs/ocfs2/quota_global.c | 5 ++---
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index b2c52b3..eaa268f 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -138,9 +138,11 @@ static int ocfs2_get_block(struct inode *inode, sector_t iblock,
mlog_entry("(0x%p, %llu, 0x%p, %d)\n", inode,
(unsigned long long)iblock, bh_result, create);
- if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE)
+ if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n",
inode, inode->i_ino);
+ dump_stack();
+ }
if (S_ISLNK(inode->i_mode)) {
/* this always does I/O for some reason. */
diff --git a/fs/ocfs2/quota.h b/fs/ocfs2/quota.h
index 7365e2e..3fb96fc 100644
--- a/fs/ocfs2/quota.h
+++ b/fs/ocfs2/quota.h
@@ -50,7 +50,6 @@ struct ocfs2_mem_dqinfo {
unsigned int dqi_chunks; /* Number of chunks in local quota file */
unsigned int dqi_blocks; /* Number of blocks allocated for local quota file */
unsigned int dqi_syncms; /* How often should we sync with other nodes */
- unsigned int dqi_syncjiff; /* Precomputed dqi_syncms in jiffies */
struct list_head dqi_chunk; /* List of chunks */
struct inode *dqi_gqinode; /* Global quota file inode */
struct ocfs2_lock_res dqi_gqlock; /* Lock protecting quota information structure */
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
index 8437c6b..c9bb9c7 100644
--- a/fs/ocfs2/quota_global.c
+++ b/fs/ocfs2/quota_global.c
@@ -345,7 +345,6 @@ int ocfs2_global_read_info(struct super_block *sb, int type)
info->dqi_bgrace = le32_to_cpu(dinfo.dqi_bgrace);
info->dqi_igrace = le32_to_cpu(dinfo.dqi_igrace);
oinfo->dqi_syncms = le32_to_cpu(dinfo.dqi_syncms);
- oinfo->dqi_syncjiff = msecs_to_jiffies(oinfo->dqi_syncms);
oinfo->dqi_gi.dqi_blocks = le32_to_cpu(dinfo.dqi_blocks);
oinfo->dqi_gi.dqi_free_blk = le32_to_cpu(dinfo.dqi_free_blk);
oinfo->dqi_gi.dqi_free_entry = le32_to_cpu(dinfo.dqi_free_entry);
@@ -355,7 +354,7 @@ int ocfs2_global_read_info(struct super_block *sb, int type)
oinfo->dqi_gi.dqi_qtree_depth = qtree_depth(&oinfo->dqi_gi);
INIT_DELAYED_WORK(&oinfo->dqi_sync_work, qsync_work_fn);
queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
- oinfo->dqi_syncjiff);
+ msecs_to_jiffies(oinfo->dqi_syncms));
out_err:
mlog_exit(status);
@@ -610,7 +609,7 @@ static void qsync_work_fn(struct work_struct *work)
dquot_scan_active(sb, ocfs2_sync_dquot_helper, oinfo->dqi_type);
queue_delayed_work(ocfs2_quota_wq, &oinfo->dqi_sync_work,
- oinfo->dqi_syncjiff);
+ msecs_to_jiffies(oinfo->dqi_syncms));
}
/*
--
1.6.0.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned
2009-07-15 15:54 ` [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned Jan Kara
@ 2009-07-21 21:54 ` Joel Becker
0 siblings, 0 replies; 12+ messages in thread
From: Joel Becker @ 2009-07-21 21:54 UTC (permalink / raw)
To: ocfs2-devel
On Wed, Jul 15, 2009 at 05:54:59PM +0200, Jan Kara wrote:
> Change i_size of global quota files so that it always remains aligned to block
> size. This is mainly because the end of quota block may contain checksum (if
> checksumming is enabled) and it's a bit awkward for it to be "outside" of quota
> file (and it makes life harder for ocfs2-tools).
>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> fs/ocfs2/quota_global.c | 6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
> index edfa60c..5a4ae61 100644
> --- a/fs/ocfs2/quota_global.c
> +++ b/fs/ocfs2/quota_global.c
> @@ -211,14 +211,16 @@ ssize_t ocfs2_quota_write(struct super_block *sb, int type,
>
> mutex_lock_nested(&gqinode->i_mutex, I_MUTEX_QUOTA);
> if (gqinode->i_size < off + len) {
> + loff_t rounded_end = ALIGN(off + len, sb->s_blocksize);
We have ocfs2_align_bytes_to_blocks() for this.
Joel
--
"Conservative, n. A statesman who is enamoured of existing evils,
as distinguished from the Liberal, who wishes to replace them
with others."
- Ambrose Bierce, The Devil's Dictionary
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file Jan Kara
@ 2009-07-21 22:20 ` Joel Becker
2009-07-21 22:52 ` Jan Kara
0 siblings, 1 reply; 12+ messages in thread
From: Joel Becker @ 2009-07-21 22:20 UTC (permalink / raw)
To: ocfs2-devel
On Wed, Jul 15, 2009 at 05:55:01PM +0200, Jan Kara wrote:
> + handle = ocfs2_start_trans(OCFS2_SB(sb), 3);
> + if (IS_ERR(handle)) {
> + status = PTR_ERR(handle);
> + mlog_errno(status);
> + goto out;
> + }
Can we define the quota credit counts in fs/ocfs2/journal.h like
all of our other transaction constants? I just realized how many raw
numbers there are in the quota c files. Please define the _CREDITS
values appropriately and put them in journal.h with descriptions. You
can do this as a separate patch at the end of the series.
Joel
--
"I think it would be a good idea."
- Mahatma Ghandi, when asked what he thought of Western
civilization
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info Jan Kara
@ 2009-07-21 22:24 ` Joel Becker
2009-07-21 22:55 ` Jan Kara
0 siblings, 1 reply; 12+ messages in thread
From: Joel Becker @ 2009-07-21 22:24 UTC (permalink / raw)
To: ocfs2-devel
On Wed, Jul 15, 2009 at 05:55:04PM +0200, Jan Kara wrote:
> syncjiff is just a converted value of syncms. Some places which
> are updating syncms forgot to update syncjiff as well. Since the
> conversion is just a simple division / multiplication and it does
> not happen frequently, just remove the syncjiff field to avoid
> forgotten conversions.
>
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> fs/ocfs2/aops.c | 4 +++-
> fs/ocfs2/quota.h | 1 -
> fs/ocfs2/quota_global.c | 5 ++---
> 3 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
> index b2c52b3..eaa268f 100644
> --- a/fs/ocfs2/aops.c
> +++ b/fs/ocfs2/aops.c
> @@ -138,9 +138,11 @@ static int ocfs2_get_block(struct inode *inode, sector_t iblock,
> mlog_entry("(0x%p, %llu, 0x%p, %d)\n", inode,
> (unsigned long long)iblock, bh_result, create);
>
> - if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE)
> + if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
> mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n",
> inode, inode->i_ino);
> + dump_stack();
> + }
What's this doing here?
Joel
--
"Win95 file and print sharing are for relatively friendly nets."
- Paul Leach, Microsoft
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file
2009-07-21 22:20 ` Joel Becker
@ 2009-07-21 22:52 ` Jan Kara
0 siblings, 0 replies; 12+ messages in thread
From: Jan Kara @ 2009-07-21 22:52 UTC (permalink / raw)
To: ocfs2-devel
On Tue 21-07-09 15:20:37, Joel Becker wrote:
> On Wed, Jul 15, 2009 at 05:55:01PM +0200, Jan Kara wrote:
> > + handle = ocfs2_start_trans(OCFS2_SB(sb), 3);
> > + if (IS_ERR(handle)) {
> > + status = PTR_ERR(handle);
> > + mlog_errno(status);
> > + goto out;
> > + }
>
> Can we define the quota credit counts in fs/ocfs2/journal.h like
> all of our other transaction constants? I just realized how many raw
> numbers there are in the quota c files. Please define the _CREDITS
> values appropriately and put them in journal.h with descriptions. You
> can do this as a separate patch at the end of the series.
OK, I'll clean up what I find :).
Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info
2009-07-21 22:24 ` Joel Becker
@ 2009-07-21 22:55 ` Jan Kara
0 siblings, 0 replies; 12+ messages in thread
From: Jan Kara @ 2009-07-21 22:55 UTC (permalink / raw)
To: ocfs2-devel
On Tue 21-07-09 15:24:54, Joel Becker wrote:
> On Wed, Jul 15, 2009 at 05:55:04PM +0200, Jan Kara wrote:
> > syncjiff is just a converted value of syncms. Some places which
> > are updating syncms forgot to update syncjiff as well. Since the
> > conversion is just a simple division / multiplication and it does
> > not happen frequently, just remove the syncjiff field to avoid
> > forgotten conversions.
> >
> > Signed-off-by: Jan Kara <jack@suse.cz>
> > ---
> > fs/ocfs2/aops.c | 4 +++-
> > fs/ocfs2/quota.h | 1 -
> > fs/ocfs2/quota_global.c | 5 ++---
> > 3 files changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
> > index b2c52b3..eaa268f 100644
> > --- a/fs/ocfs2/aops.c
> > +++ b/fs/ocfs2/aops.c
> > @@ -138,9 +138,11 @@ static int ocfs2_get_block(struct inode *inode, sector_t iblock,
> > mlog_entry("(0x%p, %llu, 0x%p, %d)\n", inode,
> > (unsigned long long)iblock, bh_result, create);
> >
> > - if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE)
> > + if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) {
> > mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n",
> > inode, inode->i_ino);
> > + dump_stack();
> > + }
>
> What's this doing here?
Oops, that's a remainder of my debugging (I was at one point seeing this
message and it wasn't clear to me how we got there so I've added
dump_stack() there and forgot about it). I'll remove it. Thanks for
spotting this.
Honza
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2009-07-21 22:55 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-15 15:54 [Ocfs2-devel] [PATCH 0/6] Quota fixes for 2.6.31-rc4 Jan Kara
2009-07-15 15:54 ` [Ocfs2-devel] [PATCH 1/6] ocfs2: Make global quota files blocksize aligned Jan Kara
2009-07-21 21:54 ` Joel Becker
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 2/6] ocfs2: Mark buffer uptodate before calling ocfs2_journal_access_dq() Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 3/6] ocfs2: Initialize blocks allocated to local quota file Jan Kara
2009-07-21 22:20 ` Joel Becker
2009-07-21 22:52 ` Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 4/6] ocfs2: Zero out padding of on disk dquot structure Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 5/6] ocfs2: Fix initialization of blockcheck stats Jan Kara
2009-07-15 15:55 ` [Ocfs2-devel] [PATCH 6/6] ocfs2: Remove syncjiff field from quota info Jan Kara
2009-07-21 22:24 ` Joel Becker
2009-07-21 22:55 ` Jan Kara
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.