patch-2.3.23 linux/fs/inode.c
Next file: linux/fs/iobuf.c
Previous file: linux/fs/hpfs/inode.c
Back to the patch index
Back to the overall index
- Lines: 87
- Date:
Tue Oct 19 10:22:19 1999
- Orig file:
v2.3.22/linux/fs/inode.c
- Orig date:
Sat Oct 9 11:47:50 1999
diff -u --recursive --new-file v2.3.22/linux/fs/inode.c linux/fs/inode.c
@@ -89,6 +89,7 @@
memset(inode, 0, sizeof(*inode));
init_waitqueue_head(&inode->i_wait);
INIT_LIST_HEAD(&inode->i_hash);
+ INIT_LIST_HEAD(&inode->i_pages);
INIT_LIST_HEAD(&inode->i_dentry);
sema_init(&inode->i_sem, 1);
spin_lock_init(&inode->i_shared_lock);
@@ -401,7 +402,7 @@
prune_icache(count);
/* FIXME: kmem_cache_shrink here should tell us
the number of pages freed, and it should
- work in a __GFP_DMA/__GFP_BIGMEM behaviour
+ work in a __GFP_DMA/__GFP_HIGHMEM behaviour
to free only the interesting pages in
function of the needs of the current allocation. */
kmem_cache_shrink(inode_cachep);
@@ -429,7 +430,7 @@
* by hand after calling find_inode now! This simplify iunique and won't
* add any additional branch in the common code.
*/
-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;
@@ -445,6 +446,8 @@
continue;
if (inode->i_ino != ino)
continue;
+ if (find_actor && !find_actor(inode, ino, opaque))
+ continue;
break;
}
return inode;
@@ -504,7 +507,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;
@@ -514,7 +517,7 @@
spin_lock(&inode_lock);
/* We released the lock, so.. */
- old = find_inode(sb, ino, head);
+ old = find_inode(sb, ino, head, find_actor, opaque);
if (!old)
{
list_add(&inode->i_list, &inode_in_use);
@@ -570,7 +573,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;
@@ -595,13 +598,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) {
__iget(inode);
spin_unlock(&inode_lock);
@@ -614,7 +617,7 @@
* get_new_inode() will do the right thing, 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);
}
void insert_inode_hash(struct inode *inode)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)