博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
super block分配
阅读量:4153 次
发布时间:2019-05-25

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

/**
 *	alloc_super	-	create new superblock *	@type:	filesystem type superblock should belong to *	@flags: the mount flags *	@user_ns: User namespace for the super_block * *	Allocates and initializes a new &struct super_block.  alloc_super() *	returns a pointer new superblock or %NULL if allocation had failed. */static struct super_block *alloc_super(struct file_system_type *type, int flags,				       struct user_namespace *user_ns){	struct super_block *s = kzalloc(sizeof(struct super_block),  GFP_USER);	static const struct super_operations default_op;	int i;	if (!s)		return NULL;	INIT_LIST_HEAD(&s->s_mounts);	s->s_user_ns = get_user_ns(user_ns);	if (security_sb_alloc(s))		goto fail;	for (i = 0; i < SB_FREEZE_LEVELS; i++) {		if (__percpu_init_rwsem(&s->s_writers.rw_sem[i],					sb_writers_name[i],					&type->s_writers_key[i]))			goto fail;	}	init_waitqueue_head(&s->s_writers.wait_unfrozen);	s->s_bdi = &noop_backing_dev_info;	s->s_flags = flags;	if (s->s_user_ns != &init_user_ns)		s->s_iflags |= SB_I_NODEV;	INIT_HLIST_NODE(&s->s_instances);	INIT_HLIST_BL_HEAD(&s->s_anon);	mutex_init(&s->s_sync_lock);	INIT_LIST_HEAD(&s->s_inodes);	spin_lock_init(&s->s_inode_list_lock);	INIT_LIST_HEAD(&s->s_inodes_wb);	spin_lock_init(&s->s_inode_wblist_lock);	if (list_lru_init_memcg(&s->s_dentry_lru))		goto fail;	if (list_lru_init_memcg(&s->s_inode_lru))		goto fail;	init_rwsem(&s->s_umount);	lockdep_set_class(&s->s_umount, &type->s_umount_key);	/*	 * sget() can have s_umount recursion.	 *	 * When it cannot find a suitable sb, it allocates a new	 * one (this one), and tries again to find a suitable old	 * one.	 *	 * In case that succeeds, it will acquire the s_umount	 * lock of the old one. Since these are clearly distrinct	 * locks, and this object isn't exposed yet, there's no	 * risk of deadlocks.	 *	 * Annotate this by putting this lock in a different	 * subclass.	 */	down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING);	s->s_count = 1;	atomic_set(&s->s_active, 1);	mutex_init(&s->s_vfs_rename_mutex);	lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key);	mutex_init(&s->s_dquot.dqio_mutex);	mutex_init(&s->s_dquot.dqonoff_mutex);	s->s_maxbytes = MAX_NON_LFS;	s->s_op = &default_op;	s->s_time_gran = 1000000000;	s->cleancache_poolid = CLEANCACHE_NO_POOL;	s->s_shrink.seeks = DEFAULT_SEEKS;	s->s_shrink.scan_objects = super_cache_scan;	s->s_shrink.count_objects = super_cache_count;	s->s_shrink.batch = 1024;	s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE;	return s;fail:	destroy_super(s);	return NULL;}
 

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

你可能感兴趣的文章
HTTPS那些事 用java实现HTTPS工作原理
查看>>
oracle函数trunc的使用
查看>>
MySQL 存储过程或者函数中传参数实现where id in(1,2,3,...)IN条件拼接
查看>>
java反编译
查看>>
Class.forName( )你搞懂了吗?——转
查看>>
jarFile
查看>>
EJB与JAVA BEAN_J2EE的异步消息机制
查看>>
数学等于号是=那三个横杠是什么符
查看>>
HTTP协议详解
查看>>
java多线程中的join方法详解
查看>>
ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源
查看>>
java abstract修饰符
查看>>
数组分为两部分,使得其和相差最小
查看>>
有趣的排序——百度2017春招
查看>>
二叉树的最近公共祖先LCA
查看>>
数组中累加和为定值K的最长子数组长度
查看>>
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
synchronized与Lock
查看>>
数据库索引
查看>>