From b14f65f3f08022df52ec59c65d4c4d93ead15b9e Mon Sep 17 00:00:00 2001 From: Frederic Weisbecker Date: Tue, 5 Jan 2010 00:15:38 +0100 Subject: [PATCH] --- yaml --- r: 178908 b: refs/heads/master c: 108d3943c021f0b66e860ba98ded40b82b677bd7 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/reiserfs/inode.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 257691efaedf..20cbfe32f70a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5fe1533fda8ae005541bd418a7a8bc4fa0cda522 +refs/heads/master: 108d3943c021f0b66e860ba98ded40b82b677bd7 diff --git a/trunk/fs/reiserfs/inode.c b/trunk/fs/reiserfs/inode.c index 47dbfb18877a..c876341ea738 100644 --- a/trunk/fs/reiserfs/inode.c +++ b/trunk/fs/reiserfs/inode.c @@ -3140,8 +3140,17 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) journal_end(&th, inode->i_sb, jbegin_count); } } - if (!error) + if (!error) { + /* + * Relax the lock here, as it might truncate the + * inode pages and wait for inode pages locks. + * To release such page lock, the owner needs the + * reiserfs lock + */ + reiserfs_write_unlock_once(inode->i_sb, depth); error = inode_setattr(inode, attr); + depth = reiserfs_write_lock_once(inode->i_sb); + } } if (!error && reiserfs_posixacl(inode->i_sb)) {