patch-2.2.18 linux/fs/inode.c
Next file: linux/fs/ioctl.c
Previous file: linux/fs/filesystems.c
Back to the patch index
Back to the overall index
- Lines: 91
- Date:
Fri Sep 15 22:10:43 2000
- Orig file:
v2.2.17/fs/inode.c
- Orig date:
Fri Apr 21 12:46:43 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/fs/inode.c linux/fs/inode.c
@@ -529,7 +529,7 @@
/*
* Called with the inode lock held.
*/
-static struct inode * find_inode(struct super_block * sb, unsigned long ino, struct list_head *head)
+static struct inode * find_inode(struct super_block * sb, unsigned long ino, struct list_head *head, find_inode_t find_actor, void *opaque)
{
struct list_head *tmp;
struct inode * inode;
@@ -545,6 +545,8 @@
continue;
if (inode->i_ino != ino)
continue;
+ if (find_actor && !find_actor(inode, ino, opaque))
+ continue;
inode->i_count++;
break;
}
@@ -619,7 +621,7 @@
* We no longer cache the sb_flags in i_flags - see fs.h
* -- rmk@arm.uk.linux.org
*/
-static struct inode * get_new_inode(struct super_block *sb, unsigned long ino, struct list_head *head)
+static struct inode * get_new_inode(struct super_block *sb, unsigned long ino, struct list_head *head, find_inode_t find_actor, void *opaque)
{
struct inode * inode;
struct list_head * tmp = inode_unused.next;
@@ -664,7 +666,7 @@
inode = grow_inodes();
if (inode) {
/* We released the lock, so.. */
- struct inode * old = find_inode(sb, ino, head);
+ struct inode * old = find_inode(sb, ino, head, find_actor, opaque);
if (!old)
goto add_new_inode;
list_add(&inode->i_list, &inode_unused);
@@ -694,7 +696,7 @@
retry:
if (counter > max_reserved) {
head = inode_hashtable + hash(sb,counter);
- inode = find_inode(sb, res = counter++, head);
+ inode = find_inode(sb, res = counter++, head, NULL, NULL);
if (!inode) {
spin_unlock(&inode_lock);
return res;
@@ -720,13 +722,13 @@
return inode;
}
-struct inode *iget(struct super_block *sb, unsigned long ino)
+struct inode *iget4(struct super_block *sb, unsigned long ino, find_inode_t find_actor, void *opaque)
{
struct list_head * head = inode_hashtable + hash(sb,ino);
struct inode * inode;
spin_lock(&inode_lock);
- inode = find_inode(sb, ino, head);
+ inode = find_inode(sb, ino, head, find_actor, opaque);
if (inode) {
spin_unlock(&inode_lock);
wait_on_inode(inode);
@@ -737,7 +739,12 @@
* the inode lock and re-trying the search in case it
* had to block at any point.
*/
- return get_new_inode(sb, ino, head);
+ return get_new_inode(sb, ino, head, find_actor, opaque);
+}
+
+struct inode *iget(struct super_block *sb, unsigned long ino)
+{
+ return iget4(sb, ino, NULL, NULL);
}
void insert_inode_hash(struct inode *inode)
@@ -898,13 +905,13 @@
struct inode * inode;
spin_lock(&inode_lock);
- inode = find_inode(sb, ino, head);
+ inode = find_inode(sb, ino, head, NULL, NULL);
if (inode) {
spin_unlock(&inode_lock);
wait_on_inode(inode);
}
else
- inode = get_new_inode (sb, ino, head);
+ inode = get_new_inode (sb, ino, head, NULL, NULL);
/* When we get the inode, we have to check if it is in use. We
have to release it if it is not. */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)