patch-2.4.0-prerelease linux/fs/inode.c
Next file: linux/fs/isofs/Makefile
Previous file: linux/fs/hpfs/namei.c
Back to the patch index
Back to the overall index
- Lines: 47
- Date:
Fri Dec 29 15:35:42 2000
- Orig file:
v2.4.0-test12/linux/fs/inode.c
- Orig date:
Mon Dec 11 17:59:45 2000
diff -u --recursive --new-file v2.4.0-test12/linux/fs/inode.c linux/fs/inode.c
@@ -100,7 +100,9 @@
memset(inode, 0, sizeof(*inode));
init_waitqueue_head(&inode->i_wait);
INIT_LIST_HEAD(&inode->i_hash);
- INIT_LIST_HEAD(&inode->i_data.pages);
+ INIT_LIST_HEAD(&inode->i_data.clean_pages);
+ INIT_LIST_HEAD(&inode->i_data.dirty_pages);
+ INIT_LIST_HEAD(&inode->i_data.locked_pages);
INIT_LIST_HEAD(&inode->i_dentry);
INIT_LIST_HEAD(&inode->i_dirty_buffers);
sema_init(&inode->i_sem, 1);
@@ -198,16 +200,25 @@
iput(inode);
spin_lock(&inode_lock);
} else {
+ unsigned dirty;
+
list_del(&inode->i_list);
list_add(&inode->i_list, atomic_read(&inode->i_count)
? &inode_in_use
: &inode_unused);
/* Set I_LOCK, reset I_DIRTY */
+ dirty = inode->i_state & I_DIRTY;
inode->i_state |= I_LOCK;
inode->i_state &= ~I_DIRTY;
spin_unlock(&inode_lock);
- write_inode(inode, sync);
+ filemap_fdatasync(inode->i_mapping);
+
+ /* Don't write the inode if only I_DIRTY_PAGES was set */
+ if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC))
+ write_inode(inode, sync);
+
+ filemap_fdatawait(inode->i_mapping);
spin_lock(&inode_lock);
inode->i_state &= ~I_LOCK;
@@ -595,7 +606,7 @@
inode->i_pipe = NULL;
inode->i_bdev = NULL;
inode->i_data.a_ops = &empty_aops;
- inode->i_data.host = (void*)inode;
+ inode->i_data.host = inode;
inode->i_mapping = &inode->i_data;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)