[Cluster-devel] GFS2: Pre-pull patch posting

2010-03-11 Thread Steven Whitehouse
Here are three small (but important!) fixes to GFS2.

Steve.



[Cluster-devel] [PATCH 2/3] GFS2: Allow the number of committed revokes to temporarily be negative

2010-03-11 Thread Steven Whitehouse
From: Benjamin Marzinski bmarz...@redhat.com

GFS2 tracks the number of revokes and unrevokes that are part of committed
transactions via sd_log_commited_revoke. It is possible for one process to add
revokes during its transaction, while another process unrevokes them during its
transaction. If the second process finishes its transaction first,
sd_log_commited_revoke will be decremented by the number of unrevokes that the
second process did, without first being incremented by the number of revokes
the first process did. This is fine, since all started transactions must be
completed before the journal can be flushed.  However, sd_log_commited_revoke
is an unsigned integer, and log_refund() causes an assertion failure if it
would go negative at the end of a transaction.  This patch makes
sd_log_commited_revoke a signed integer and allows it to go negative.
__gfs2_log_flush() still checks that it mataches the actual number of revokes.

Signed-off-by: Benjamin Marzinski bmarz...@redhat.com
Signed-off-by: Steven Whitehouse swhit...@redhat.com
---
 fs/gfs2/incore.h |2 +-
 fs/gfs2/log.c|3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index b8025e5..3aac46f 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -616,7 +616,7 @@ struct gfs2_sbd {
unsigned int sd_log_blks_reserved;
unsigned int sd_log_commited_buf;
unsigned int sd_log_commited_databuf;
-   unsigned int sd_log_commited_revoke;
+   int sd_log_commited_revoke;
 
unsigned int sd_log_num_buf;
unsigned int sd_log_num_revoke;
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 4511b08..e5bf4b5 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -417,7 +417,7 @@ static unsigned int calc_reserved(struct gfs2_sbd *sdp)
databufhdrs_needed = (sdp-sd_log_commited_databuf +
  (dbuf_limit - 1)) / dbuf_limit;
 
-   if (sdp-sd_log_commited_revoke)
+   if (sdp-sd_log_commited_revoke  0)
revokes = gfs2_struct2blk(sdp, sdp-sd_log_commited_revoke,
  sizeof(u64));
 
@@ -790,7 +790,6 @@ static void log_refund(struct gfs2_sbd *sdp, struct 
gfs2_trans *tr)
gfs2_assert_withdraw(sdp, (((int)sdp-sd_log_commited_buf) = 0) ||
 (((int)sdp-sd_log_commited_databuf) = 0));
sdp-sd_log_commited_revoke += tr-tr_num_revoke - tr-tr_num_revoke_rm;
-   gfs2_assert_withdraw(sdp, ((int)sdp-sd_log_commited_revoke) = 0);
reserved = calc_reserved(sdp);
gfs2_assert_withdraw(sdp, sdp-sd_log_blks_reserved + tr-tr_reserved 
= reserved);
unused = sdp-sd_log_blks_reserved - reserved + tr-tr_reserved;
-- 
1.6.2.5



[Cluster-devel] [PATCH 1/3] GFS2: do not select QUOTA

2010-03-11 Thread Steven Whitehouse
From: Christoph Hellwig h...@infradead.org

gfs2 only needs the quotactl code, not the generic quota implementation.

Signed-off-by: Christoph Hellwig h...@lst.de
Signed-off-by: Steven Whitehouse swhit...@redhat.com
---
 fs/gfs2/Kconfig |1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/fs/gfs2/Kconfig b/fs/gfs2/Kconfig
index 4dcddf8..a47b431 100644
--- a/fs/gfs2/Kconfig
+++ b/fs/gfs2/Kconfig
@@ -8,7 +8,6 @@ config GFS2_FS
select FS_POSIX_ACL
select CRC32
select SLOW_WORK
-   select QUOTA
select QUOTACTL
help
  A cluster filesystem.
-- 
1.6.2.5



[Cluster-devel] [PATCH 3/3] GFS2: Skip check for mandatory locks when unlocking

2010-03-11 Thread Steven Whitehouse
From: Sachin Prabhu spra...@redhat.com

gfs2_lock() will skip locks on file which have mode set to 02666. This is a 
problem in cases where the mode of the file is changed after a process has 
obtained a lock on the file. Such a lock will be skipped and will result in a 
BUG in locks_remove_flock().

gfs2_lock() should skip the check for mandatory locks when unlocking a file.

Signed-off-by: Sachin Prabhu spra...@redhat.com
Signed-off-by: Steven Whitehouse swhit...@redhat.com
---
 fs/gfs2/file.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index a6abbae..e6dd2ae 100644
--- a/fs/gfs2/file.c
+++ b/fs/gfs2/file.c
@@ -640,7 +640,7 @@ static int gfs2_lock(struct file *file, int cmd, struct 
file_lock *fl)
 
if (!(fl-fl_flags  FL_POSIX))
return -ENOLCK;
-   if (__mandatory_lock(ip-i_inode))
+   if (__mandatory_lock(ip-i_inode)  fl-fl_type != F_UNLCK)
return -ENOLCK;
 
if (cmd == F_CANCELLK) {
-- 
1.6.2.5



[Cluster-devel] GFS2: Pull request (fixes)

2010-03-11 Thread Steven Whitehouse
Hi,

Please consider pulling the following small fixes,

Steve.

--
The following changes since commit 57d54889cd00db2752994b389ba714138652e60c:
  Linus Torvalds (1):
Linux 2.6.34-rc1

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git master

Benjamin Marzinski (1):
  GFS2: Allow the number of committed revokes to temporarily be negative

Christoph Hellwig (1):
  GFS2: do not select QUOTA

Sachin Prabhu (1):
  GFS2: Skip check for mandatory locks when unlocking

 fs/gfs2/Kconfig  |1 -
 fs/gfs2/file.c   |2 +-
 fs/gfs2/incore.h |2 +-
 fs/gfs2/log.c|3 +--
 4 files changed, 3 insertions(+), 5 deletions(-)