summaryrefslogtreecommitdiffstats
path: root/fs/jfs/file.c
diff options
context:
space:
mode:
authorDave Kleikamp <dave.kleikamp@oracle.com>2011-06-20 17:53:46 +0200
committerDave Kleikamp <dave.kleikamp@oracle.com>2011-06-20 17:53:46 +0200
commitd31b53e3cd069e02290ed8a648aa8c7618d6fe77 (patch)
tree529f1fab64d7b525e1a77510f3c9b02d24597c65 /fs/jfs/file.c
parentjfs: Update agstart when resizing volume (diff)
downloadlinux-d31b53e3cd069e02290ed8a648aa8c7618d6fe77.tar.xz
linux-d31b53e3cd069e02290ed8a648aa8c7618d6fe77.zip
JFS: Don't save agno in the inode
Resizing the file system can result in an in-memory inode being remapped to a different aggregate group (AG). A cached AG number can cause problems when trying to free or allocate inodes. Instead, save the IAG's agstart address and calculate the agno when we need it. Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Diffstat (limited to 'fs/jfs/file.c')
-rw-r--r--fs/jfs/file.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/jfs/file.c b/fs/jfs/file.c
index c5ce6c1d1ff4..2f3f531f3606 100644
--- a/fs/jfs/file.c
+++ b/fs/jfs/file.c
@@ -66,9 +66,9 @@ static int jfs_open(struct inode *inode, struct file *file)
struct jfs_inode_info *ji = JFS_IP(inode);
spin_lock_irq(&ji->ag_lock);
if (ji->active_ag == -1) {
- ji->active_ag = ji->agno;
- atomic_inc(
- &JFS_SBI(inode->i_sb)->bmap->db_active[ji->agno]);
+ struct jfs_sb_info *jfs_sb = JFS_SBI(inode->i_sb);
+ ji->active_ag = BLKTOAG(addressPXD(&ji->ixpxd), jfs_sb);
+ atomic_inc( &jfs_sb->bmap->db_active[ji->active_ag]);
}
spin_unlock_irq(&ji->ag_lock);
}