summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJan Harkes <jaharkes@cs.cmu.edu>2002-05-19 19:24:57 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-05-19 19:24:57 -0700
commit7a24f1a6d522cce1e319f434a202f7d6944924bc (patch)
tree721c18041fdb99868f0baabf989b46b1df80ed3e /include
parentfa82a1dad8713f50233150710637981776dcdf3a (diff)
[PATCH] iget_locked [1/6]
Fix a race in iget4. The fs specific data that is used to find an inode should be initialized while still holding the inode lock. It adds a 'set' callback function that should be a non-blocking FS provided function which initializes the private parts of the inode so that the 'test' callback function can correctly match new inodes. Touches all filesystems that use iget4 (Coda/NFS/ReiserFS).
Diffstat (limited to 'include')
-rw-r--r--include/linux/fs.h5
-rw-r--r--include/linux/reiserfs_fs.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 5534da65ff74..4b551cb0326a 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1207,11 +1207,10 @@ extern void force_delete(struct inode *);
extern struct inode * igrab(struct inode *);
extern ino_t iunique(struct super_block *, ino_t);
-typedef int (*find_inode_t)(struct inode *, unsigned long, void *);
-extern struct inode * iget4(struct super_block *, unsigned long, find_inode_t, void *);
+extern struct inode * iget4(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
static inline struct inode *iget(struct super_block *sb, unsigned long ino)
{
- return iget4(sb, ino, NULL, NULL);
+ return iget4(sb, ino, NULL, NULL, NULL);
}
extern void __iget(struct inode * inode);
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index a64b5bc5e7de..22c5547e86bc 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -1820,6 +1820,8 @@ void padd_item (char * item, int total_length, int length);
void reiserfs_read_inode (struct inode * inode) ;
void reiserfs_read_inode2(struct inode * inode, void *p) ;
+int reiserfs_find_actor(struct inode * inode, void *p) ;
+int reiserfs_init_locked_inode(struct inode * inode, void *p) ;
void reiserfs_delete_inode (struct inode * inode);
void reiserfs_write_inode (struct inode * inode, int) ;
struct dentry *reiserfs_get_dentry(struct super_block *, void *) ;