summaryrefslogtreecommitdiffstats
path: root/fs/inode.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-07-05 23:09:37 +0000
committerRalf Baechle <ralf@linux-mips.org>1999-07-05 23:09:37 +0000
commitaba344fdfed81b2c03d6114c54cfd73a486aa10b (patch)
treed032d8430bf1234c3ecc6f6330d6de6e887e5963 /fs/inode.c
parent40c138bfc6d37dbff5339f84575db1e3cec6e34e (diff)
Merge with Linux 2.3.9.
Diffstat (limited to 'fs/inode.c')
-rw-r--r--fs/inode.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/inode.c b/fs/inode.c
index ba9cc7a78..01fc64d23 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -231,7 +231,7 @@ void write_inode_now(struct inode *inode)
void clear_inode(struct inode *inode)
{
if (inode->i_nrpages)
- truncate_inode_pages(inode, 0);
+ BUG();
wait_on_inode(inode);
if (IS_QUOTAINIT(inode))
DQUOT_DROP(inode);
@@ -261,6 +261,8 @@ static void dispose_list(struct list_head * head)
if (tmp == head)
break;
inode = list_entry(tmp, struct inode, i_list);
+ if (inode->i_nrpages)
+ truncate_inode_pages(inode, 0);
clear_inode(inode);
count++;
}
@@ -735,6 +737,8 @@ void iput(struct inode *inode)
if (op && op->delete_inode) {
void (*delete)(struct inode *) = op->delete_inode;
spin_unlock(&inode_lock);
+ if (inode->i_nrpages)
+ truncate_inode_pages(inode, 0);
delete(inode);
spin_lock(&inode_lock);
}
@@ -778,8 +782,14 @@ kdevname(inode->i_dev), inode->i_ino, atomic_read(&inode->i_sem.count));
int bmap(struct inode * inode, int block)
{
- if (inode->i_op && inode->i_op->bmap)
- return inode->i_op->bmap(inode, block);
+ struct buffer_head tmp;
+
+ if (inode->i_op && inode->i_op->get_block) {
+ tmp.b_state = 0;
+ tmp.b_blocknr = 0;
+ inode->i_op->get_block(inode, block, &tmp, 0);
+ return tmp.b_blocknr;
+ }
return 0;
}