Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 173168
b: refs/heads/master
c: 2693130
h: refs/heads/master
v: v3
  • Loading branch information
Frederic Weisbecker committed Sep 14, 2009
1 parent 9377baa commit b3ba252
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d663af807d8bb226394cb7e02f4665f6141a8140
refs/heads/master: 26931309a47747fd31b2ef029c29d47794c2d93d
19 changes: 11 additions & 8 deletions trunk/fs/reiserfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,7 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
__le32 *item;
int done;
int fs_gen;
int lock_depth;
struct reiserfs_transaction_handle *th = NULL;
/* space reserved in transaction batch:
. 3 balancings in direct->indirect conversion
Expand All @@ -620,11 +621,11 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
loff_t new_offset =
(((loff_t) block) << inode->i_sb->s_blocksize_bits) + 1;

reiserfs_write_lock(inode->i_sb);
lock_depth = reiserfs_write_lock_once(inode->i_sb);
version = get_inode_item_key_version(inode);

if (!file_capable(inode, block)) {
reiserfs_write_unlock(inode->i_sb);
reiserfs_write_unlock_once(inode->i_sb, lock_depth);
return -EFBIG;
}

Expand All @@ -636,7 +637,7 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
/* find number of block-th logical block of the file */
ret = _get_block_create_0(inode, block, bh_result,
create | GET_BLOCK_READ_DIRECT);
reiserfs_write_unlock(inode->i_sb);
reiserfs_write_unlock_once(inode->i_sb, lock_depth);
return ret;
}
/*
Expand Down Expand Up @@ -754,7 +755,7 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
if (!dangle && th)
retval = reiserfs_end_persistent_transaction(th);

reiserfs_write_unlock(inode->i_sb);
reiserfs_write_unlock_once(inode->i_sb, lock_depth);

/* the item was found, so new blocks were not added to the file
** there is no need to make sure the inode is updated with this
Expand Down Expand Up @@ -1005,9 +1006,11 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
* long time. reschedule if needed and also release the write
* lock for others.
*/
reiserfs_write_unlock(inode->i_sb);
cond_resched();
reiserfs_write_lock(inode->i_sb);
if (need_resched()) {
reiserfs_write_unlock_once(inode->i_sb, lock_depth);
schedule();
lock_depth = reiserfs_write_lock_once(inode->i_sb);
}

retval = search_for_position_by_key(inode->i_sb, &key, &path);
if (retval == IO_ERROR) {
Expand Down Expand Up @@ -1042,7 +1045,7 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
retval = err;
}

reiserfs_write_unlock(inode->i_sb);
reiserfs_write_unlock_once(inode->i_sb, lock_depth);
reiserfs_check_path(&path);
return retval;
}
Expand Down

0 comments on commit b3ba252

Please sign in to comment.