博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
inode根据hash后插入
阅读量:4153 次
发布时间:2019-05-25

本文共 1820 字,大约阅读时间需要 6 分钟。

int insert_inode_locked(struct inode *inode){	struct super_block *sb = inode->i_sb;	ino_t ino = inode->i_ino;	struct hlist_head *head = inode_hashtable + hash(sb, ino);	while (1) {		struct inode *old = NULL;		spin_lock(&inode_hash_lock);		hlist_for_each_entry(old, head, i_hash) {			if (old->i_ino != ino)				continue;			if (old->i_sb != sb)				continue;			spin_lock(&old->i_lock);			if (old->i_state & (I_FREEING|I_WILL_FREE)) {				spin_unlock(&old->i_lock);				continue;			}			break;		}		if (likely(!old)) {			spin_lock(&inode->i_lock);			inode->i_state |= I_NEW;			hlist_add_head(&inode->i_hash, head);			spin_unlock(&inode->i_lock);			spin_unlock(&inode_hash_lock);			return 0;		}		__iget(old);		spin_unlock(&old->i_lock);		spin_unlock(&inode_hash_lock);		wait_on_inode(old);		if (unlikely(!inode_unhashed(old))) {			iput(old);			return -EBUSY;		}		iput(old);	}}
 
int insert_inode_locked4(struct inode *inode, unsigned long hashval,		int (*test)(struct inode *, void *), void *data){	struct super_block *sb = inode->i_sb;	struct hlist_head *head = inode_hashtable + hash(sb, hashval);	while (1) {		struct inode *old = NULL;		spin_lock(&inode_hash_lock);		hlist_for_each_entry(old, head, i_hash) {			if (old->i_sb != sb)				continue;			if (!test(old, data))				continue;			spin_lock(&old->i_lock);			if (old->i_state & (I_FREEING|I_WILL_FREE)) {				spin_unlock(&old->i_lock);				continue;			}			break;		}		if (likely(!old)) {			spin_lock(&inode->i_lock);			inode->i_state |= I_NEW;			hlist_add_head(&inode->i_hash, head);			spin_unlock(&inode->i_lock);			spin_unlock(&inode_hash_lock);			return 0;		}		__iget(old);		spin_unlock(&old->i_lock);		spin_unlock(&inode_hash_lock);		wait_on_inode(old);		if (unlikely(!inode_unhashed(old))) {			iput(old);			return -EBUSY;		}		iput(old);	}}EXPORT_SYMBOL(insert_inode_locked4);

转载地址:http://dwhti.baihongyu.com/

你可能感兴趣的文章
Class.forName( )你搞懂了吗?——转
查看>>
jarFile
查看>>
EJB与JAVA BEAN_J2EE的异步消息机制
查看>>
数学等于号是=那三个横杠是什么符
查看>>
HTTP协议详解
查看>>
java多线程中的join方法详解
查看>>
ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源
查看>>
java abstract修饰符
查看>>
数组分为两部分,使得其和相差最小
查看>>
有趣的排序——百度2017春招
查看>>
二叉树的最近公共祖先LCA
查看>>
数组中累加和为定值K的最长子数组长度
查看>>
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
synchronized与Lock
查看>>
数据库索引
查看>>
实现包含min,max,push,pop函数的栈
查看>>
实验2-6 字符型数据的输入输出
查看>>
实验3-5 编程初步
查看>>
实验4-1 逻辑量的编码和关系操作符
查看>>