mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	new helper: set_default_d_op()
... to be used instead of manually assigning to ->s_d_op. All in-tree filesystem converted (and field itself is renamed, so any out-of-tree ones in need of conversion will be caught by compiler). Reviewed-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									4bd9f3fd87
								
							
						
					
					
						commit
						05fb0e6664
					
				
					 40 changed files with 69 additions and 53 deletions
				
			
		| 
						 | 
					@ -1249,3 +1249,10 @@ Using try_lookup_noperm() will require linux/namei.h to be included.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Calling conventions for ->d_automount() have changed; we should *not* grab
 | 
					Calling conventions for ->d_automount() have changed; we should *not* grab
 | 
				
			||||||
an extra reference to new mount - it should be returned with refcount 1.
 | 
					an extra reference to new mount - it should be returned with refcount 1.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**mandatory**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If your filesystem sets the default dentry_operations, use set_default_d_op()
 | 
				
			||||||
 | 
					rather than manually setting sb->s_d_op.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,9 +135,9 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
 | 
				
			||||||
		goto release_sb;
 | 
							goto release_sb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (v9ses->cache & (CACHE_META|CACHE_LOOSE))
 | 
						if (v9ses->cache & (CACHE_META|CACHE_LOOSE))
 | 
				
			||||||
		sb->s_d_op = &v9fs_cached_dentry_operations;
 | 
							set_default_d_op(sb, &v9fs_cached_dentry_operations);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		sb->s_d_op = &v9fs_dentry_operations;
 | 
							set_default_d_op(sb, &v9fs_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	inode = v9fs_get_new_inode_from_fid(v9ses, fid, sb);
 | 
						inode = v9fs_get_new_inode_from_fid(v9ses, fid, sb);
 | 
				
			||||||
	if (IS_ERR(inode)) {
 | 
						if (IS_ERR(inode)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -397,7 +397,7 @@ static int adfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	if (asb->s_ftsuffix)
 | 
						if (asb->s_ftsuffix)
 | 
				
			||||||
		asb->s_namelen += 4;
 | 
							asb->s_namelen += 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_d_op = &adfs_dentry_operations;
 | 
						set_default_d_op(sb, &adfs_dentry_operations);
 | 
				
			||||||
	root = adfs_iget(sb, &root_obj);
 | 
						root = adfs_iget(sb, &root_obj);
 | 
				
			||||||
	sb->s_root = d_make_root(root);
 | 
						sb->s_root = d_make_root(root);
 | 
				
			||||||
	if (!sb->s_root) {
 | 
						if (!sb->s_root) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -500,9 +500,9 @@ static int affs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
		return PTR_ERR(root_inode);
 | 
							return PTR_ERR(root_inode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (affs_test_opt(AFFS_SB(sb)->s_flags, SF_INTL))
 | 
						if (affs_test_opt(AFFS_SB(sb)->s_flags, SF_INTL))
 | 
				
			||||||
		sb->s_d_op = &affs_intl_dentry_operations;
 | 
							set_default_d_op(sb, &affs_intl_dentry_operations);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		sb->s_d_op = &affs_dentry_operations;
 | 
							set_default_d_op(sb, &affs_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_root = d_make_root(root_inode);
 | 
						sb->s_root = d_make_root(root_inode);
 | 
				
			||||||
	if (!sb->s_root) {
 | 
						if (!sb->s_root) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -483,9 +483,9 @@ static int afs_fill_super(struct super_block *sb, struct afs_fs_context *ctx)
 | 
				
			||||||
		goto error;
 | 
							goto error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (as->dyn_root) {
 | 
						if (as->dyn_root) {
 | 
				
			||||||
		sb->s_d_op = &afs_dynroot_dentry_operations;
 | 
							set_default_d_op(sb, &afs_dynroot_dentry_operations);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		sb->s_d_op = &afs_fs_dentry_operations;
 | 
							set_default_d_op(sb, &afs_fs_dentry_operations);
 | 
				
			||||||
		rcu_assign_pointer(as->volume->sb, sb);
 | 
							rcu_assign_pointer(as->volume->sb, sb);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -311,7 +311,7 @@ static int autofs_fill_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	s->s_blocksize_bits = 10;
 | 
						s->s_blocksize_bits = 10;
 | 
				
			||||||
	s->s_magic = AUTOFS_SUPER_MAGIC;
 | 
						s->s_magic = AUTOFS_SUPER_MAGIC;
 | 
				
			||||||
	s->s_op = &autofs_sops;
 | 
						s->s_op = &autofs_sops;
 | 
				
			||||||
	s->s_d_op = &autofs_dentry_operations;
 | 
						set_default_d_op(s, &autofs_dentry_operations);
 | 
				
			||||||
	s->s_time_gran = 1;
 | 
						s->s_time_gran = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -950,7 +950,7 @@ static int btrfs_fill_super(struct super_block *sb,
 | 
				
			||||||
	sb->s_maxbytes = MAX_LFS_FILESIZE;
 | 
						sb->s_maxbytes = MAX_LFS_FILESIZE;
 | 
				
			||||||
	sb->s_magic = BTRFS_SUPER_MAGIC;
 | 
						sb->s_magic = BTRFS_SUPER_MAGIC;
 | 
				
			||||||
	sb->s_op = &btrfs_super_ops;
 | 
						sb->s_op = &btrfs_super_ops;
 | 
				
			||||||
	sb->s_d_op = &btrfs_dentry_operations;
 | 
						set_default_d_op(sb, &btrfs_dentry_operations);
 | 
				
			||||||
	sb->s_export_op = &btrfs_export_ops;
 | 
						sb->s_export_op = &btrfs_export_ops;
 | 
				
			||||||
#ifdef CONFIG_FS_VERITY
 | 
					#ifdef CONFIG_FS_VERITY
 | 
				
			||||||
	sb->s_vop = &btrfs_verityops;
 | 
						sb->s_vop = &btrfs_verityops;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1219,7 +1219,7 @@ static int ceph_set_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	fsc->max_file_size = 1ULL << 40; /* temp value until we get mdsmap */
 | 
						fsc->max_file_size = 1ULL << 40; /* temp value until we get mdsmap */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s->s_op = &ceph_super_ops;
 | 
						s->s_op = &ceph_super_ops;
 | 
				
			||||||
	s->s_d_op = &ceph_dentry_ops;
 | 
						set_default_d_op(s, &ceph_dentry_ops);
 | 
				
			||||||
	s->s_export_op = &ceph_export_ops;
 | 
						s->s_export_op = &ceph_export_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s->s_time_gran = 1;
 | 
						s->s_time_gran = 1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -230,7 +230,7 @@ static int coda_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_blocksize_bits = 12;
 | 
						sb->s_blocksize_bits = 12;
 | 
				
			||||||
	sb->s_magic = CODA_SUPER_MAGIC;
 | 
						sb->s_magic = CODA_SUPER_MAGIC;
 | 
				
			||||||
	sb->s_op = &coda_super_operations;
 | 
						sb->s_op = &coda_super_operations;
 | 
				
			||||||
	sb->s_d_op = &coda_dentry_operations;
 | 
						set_default_d_op(sb, &coda_dentry_operations);
 | 
				
			||||||
	sb->s_time_gran = 1;
 | 
						sb->s_time_gran = 1;
 | 
				
			||||||
	sb->s_time_min = S64_MIN;
 | 
						sb->s_time_min = S64_MIN;
 | 
				
			||||||
	sb->s_time_max = S64_MAX;
 | 
						sb->s_time_max = S64_MAX;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ static int configfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	configfs_root_group.cg_item.ci_dentry = root;
 | 
						configfs_root_group.cg_item.ci_dentry = root;
 | 
				
			||||||
	root->d_fsdata = &configfs_root;
 | 
						root->d_fsdata = &configfs_root;
 | 
				
			||||||
	sb->s_root = root;
 | 
						sb->s_root = root;
 | 
				
			||||||
	sb->s_d_op = &configfs_dentry_ops; /* the rest get that */
 | 
						set_default_d_op(sb, &configfs_dentry_ops); /* the rest get that */
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								fs/dcache.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								fs/dcache.c
									
									
									
									
									
								
							| 
						 | 
					@ -1738,7 +1738,7 @@ static struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
 | 
				
			||||||
	INIT_HLIST_HEAD(&dentry->d_children);
 | 
						INIT_HLIST_HEAD(&dentry->d_children);
 | 
				
			||||||
	INIT_HLIST_NODE(&dentry->d_u.d_alias);
 | 
						INIT_HLIST_NODE(&dentry->d_u.d_alias);
 | 
				
			||||||
	INIT_HLIST_NODE(&dentry->d_sib);
 | 
						INIT_HLIST_NODE(&dentry->d_sib);
 | 
				
			||||||
	d_set_d_op(dentry, dentry->d_sb->s_d_op);
 | 
						d_set_d_op(dentry, dentry->d_sb->__s_d_op);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dentry->d_op && dentry->d_op->d_init) {
 | 
						if (dentry->d_op && dentry->d_op->d_init) {
 | 
				
			||||||
		err = dentry->d_op->d_init(dentry);
 | 
							err = dentry->d_op->d_init(dentry);
 | 
				
			||||||
| 
						 | 
					@ -1821,7 +1821,7 @@ struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name)
 | 
				
			||||||
	struct dentry *dentry = __d_alloc(sb, name);
 | 
						struct dentry *dentry = __d_alloc(sb, name);
 | 
				
			||||||
	if (likely(dentry)) {
 | 
						if (likely(dentry)) {
 | 
				
			||||||
		dentry->d_flags |= DCACHE_NORCU;
 | 
							dentry->d_flags |= DCACHE_NORCU;
 | 
				
			||||||
		if (!sb->s_d_op)
 | 
							if (!dentry->d_op)
 | 
				
			||||||
			d_set_d_op(dentry, &anon_ops);
 | 
								d_set_d_op(dentry, &anon_ops);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return dentry;
 | 
						return dentry;
 | 
				
			||||||
| 
						 | 
					@ -1867,6 +1867,12 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(d_set_d_op);
 | 
					EXPORT_SYMBOL(d_set_d_op);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void set_default_d_op(struct super_block *s, const struct dentry_operations *ops)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						s->__s_d_op = ops;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					EXPORT_SYMBOL(set_default_d_op);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned d_flags_for_inode(struct inode *inode)
 | 
					static unsigned d_flags_for_inode(struct inode *inode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned add_flags = DCACHE_REGULAR_TYPE;
 | 
						unsigned add_flags = DCACHE_REGULAR_TYPE;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -273,7 +273,7 @@ static int debugfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_op = &debugfs_super_operations;
 | 
						sb->s_op = &debugfs_super_operations;
 | 
				
			||||||
	sb->s_d_op = &debugfs_dops;
 | 
						set_default_d_op(sb, &debugfs_dops);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	debugfs_apply_options(sb);
 | 
						debugfs_apply_options(sb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -381,7 +381,7 @@ static int devpts_fill_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	s->s_blocksize_bits = 10;
 | 
						s->s_blocksize_bits = 10;
 | 
				
			||||||
	s->s_magic = DEVPTS_SUPER_MAGIC;
 | 
						s->s_magic = DEVPTS_SUPER_MAGIC;
 | 
				
			||||||
	s->s_op = &devpts_sops;
 | 
						s->s_op = &devpts_sops;
 | 
				
			||||||
	s->s_d_op = &simple_dentry_operations;
 | 
						set_default_d_op(s, &simple_dentry_operations);
 | 
				
			||||||
	s->s_time_gran = 1;
 | 
						s->s_time_gran = 1;
 | 
				
			||||||
	fsi->sb = s;
 | 
						fsi->sb = s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -471,7 +471,7 @@ static int ecryptfs_get_tree(struct fs_context *fc)
 | 
				
			||||||
	sbi = NULL;
 | 
						sbi = NULL;
 | 
				
			||||||
	s->s_op = &ecryptfs_sops;
 | 
						s->s_op = &ecryptfs_sops;
 | 
				
			||||||
	s->s_xattr = ecryptfs_xattr_handlers;
 | 
						s->s_xattr = ecryptfs_xattr_handlers;
 | 
				
			||||||
	s->s_d_op = &ecryptfs_dops;
 | 
						set_default_d_op(s, &ecryptfs_dops);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = "Reading sb failed";
 | 
						err = "Reading sb failed";
 | 
				
			||||||
	rc = kern_path(fc->source, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path);
 | 
						rc = kern_path(fc->source, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -350,7 +350,7 @@ static int efivarfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_blocksize_bits    = PAGE_SHIFT;
 | 
						sb->s_blocksize_bits    = PAGE_SHIFT;
 | 
				
			||||||
	sb->s_magic             = EFIVARFS_MAGIC;
 | 
						sb->s_magic             = EFIVARFS_MAGIC;
 | 
				
			||||||
	sb->s_op                = &efivarfs_ops;
 | 
						sb->s_op                = &efivarfs_ops;
 | 
				
			||||||
	sb->s_d_op		= &efivarfs_d_ops;
 | 
						set_default_d_op(sb, &efivarfs_d_ops);
 | 
				
			||||||
	sb->s_time_gran         = 1;
 | 
						sb->s_time_gran         = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!efivar_supports_writes())
 | 
						if (!efivar_supports_writes())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -667,9 +667,9 @@ static int exfat_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sbi->options.utf8)
 | 
						if (sbi->options.utf8)
 | 
				
			||||||
		sb->s_d_op = &exfat_utf8_dentry_ops;
 | 
							set_default_d_op(sb, &exfat_utf8_dentry_ops);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		sb->s_d_op = &exfat_dentry_ops;
 | 
							set_default_d_op(sb, &exfat_dentry_ops);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	root_inode = new_inode(sb);
 | 
						root_inode = new_inode(sb);
 | 
				
			||||||
	if (!root_inode) {
 | 
						if (!root_inode) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -646,7 +646,7 @@ static const struct inode_operations msdos_dir_inode_operations = {
 | 
				
			||||||
static void setup(struct super_block *sb)
 | 
					static void setup(struct super_block *sb)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	MSDOS_SB(sb)->dir_ops = &msdos_dir_inode_operations;
 | 
						MSDOS_SB(sb)->dir_ops = &msdos_dir_inode_operations;
 | 
				
			||||||
	sb->s_d_op = &msdos_dentry_operations;
 | 
						set_default_d_op(sb, &msdos_dentry_operations);
 | 
				
			||||||
	sb->s_flags |= SB_NOATIME;
 | 
						sb->s_flags |= SB_NOATIME;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1187,9 +1187,9 @@ static void setup(struct super_block *sb)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	MSDOS_SB(sb)->dir_ops = &vfat_dir_inode_operations;
 | 
						MSDOS_SB(sb)->dir_ops = &vfat_dir_inode_operations;
 | 
				
			||||||
	if (MSDOS_SB(sb)->options.name_check != 's')
 | 
						if (MSDOS_SB(sb)->options.name_check != 's')
 | 
				
			||||||
		sb->s_d_op = &vfat_ci_dentry_ops;
 | 
							set_default_d_op(sb, &vfat_ci_dentry_ops);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		sb->s_d_op = &vfat_dentry_ops;
 | 
							set_default_d_op(sb, &vfat_dentry_ops);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int vfat_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
					static int vfat_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1715,7 +1715,7 @@ static int fuse_fill_super_submount(struct super_block *sb,
 | 
				
			||||||
	fi = get_fuse_inode(root);
 | 
						fi = get_fuse_inode(root);
 | 
				
			||||||
	fi->nlookup--;
 | 
						fi->nlookup--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_d_op = &fuse_dentry_operations;
 | 
						set_default_d_op(sb, &fuse_dentry_operations);
 | 
				
			||||||
	sb->s_root = d_make_root(root);
 | 
						sb->s_root = d_make_root(root);
 | 
				
			||||||
	if (!sb->s_root)
 | 
						if (!sb->s_root)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
| 
						 | 
					@ -1850,7 +1850,7 @@ int fuse_fill_super_common(struct super_block *sb, struct fuse_fs_context *ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = -ENOMEM;
 | 
						err = -ENOMEM;
 | 
				
			||||||
	root = fuse_get_root_inode(sb, ctx->rootmode);
 | 
						root = fuse_get_root_inode(sb, ctx->rootmode);
 | 
				
			||||||
	sb->s_d_op = &fuse_dentry_operations;
 | 
						set_default_d_op(sb, &fuse_dentry_operations);
 | 
				
			||||||
	root_dentry = d_make_root(root);
 | 
						root_dentry = d_make_root(root);
 | 
				
			||||||
	if (!root_dentry)
 | 
						if (!root_dentry)
 | 
				
			||||||
		goto err_dev_free;
 | 
							goto err_dev_free;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1145,7 +1145,7 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_magic = GFS2_MAGIC;
 | 
						sb->s_magic = GFS2_MAGIC;
 | 
				
			||||||
	sb->s_op = &gfs2_super_ops;
 | 
						sb->s_op = &gfs2_super_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_d_op = &gfs2_dops;
 | 
						set_default_d_op(sb, &gfs2_dops);
 | 
				
			||||||
	sb->s_export_op = &gfs2_export_ops;
 | 
						sb->s_export_op = &gfs2_export_ops;
 | 
				
			||||||
	sb->s_qcop = &gfs2_quotactl_ops;
 | 
						sb->s_qcop = &gfs2_quotactl_ops;
 | 
				
			||||||
	sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP;
 | 
						sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -365,7 +365,7 @@ static int hfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	if (!root_inode)
 | 
						if (!root_inode)
 | 
				
			||||||
		goto bail_no_root;
 | 
							goto bail_no_root;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_d_op = &hfs_dentry_operations;
 | 
						set_default_d_op(sb, &hfs_dentry_operations);
 | 
				
			||||||
	res = -ENOMEM;
 | 
						res = -ENOMEM;
 | 
				
			||||||
	sb->s_root = d_make_root(root_inode);
 | 
						sb->s_root = d_make_root(root_inode);
 | 
				
			||||||
	if (!sb->s_root)
 | 
						if (!sb->s_root)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -508,7 +508,7 @@ static int hfsplus_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
		goto out_put_alloc_file;
 | 
							goto out_put_alloc_file;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_d_op = &hfsplus_dentry_operations;
 | 
						set_default_d_op(sb, &hfsplus_dentry_operations);
 | 
				
			||||||
	sb->s_root = d_make_root(root);
 | 
						sb->s_root = d_make_root(root);
 | 
				
			||||||
	if (!sb->s_root) {
 | 
						if (!sb->s_root) {
 | 
				
			||||||
		err = -ENOMEM;
 | 
							err = -ENOMEM;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -933,7 +933,7 @@ static int hostfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_blocksize_bits = 10;
 | 
						sb->s_blocksize_bits = 10;
 | 
				
			||||||
	sb->s_magic = HOSTFS_SUPER_MAGIC;
 | 
						sb->s_magic = HOSTFS_SUPER_MAGIC;
 | 
				
			||||||
	sb->s_op = &hostfs_sbops;
 | 
						sb->s_op = &hostfs_sbops;
 | 
				
			||||||
	sb->s_d_op = &simple_dentry_operations;
 | 
						set_default_d_op(sb, &simple_dentry_operations);
 | 
				
			||||||
	sb->s_maxbytes = MAX_LFS_FILESIZE;
 | 
						sb->s_maxbytes = MAX_LFS_FILESIZE;
 | 
				
			||||||
	err = super_setup_bdi(sb);
 | 
						err = super_setup_bdi(sb);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -554,7 +554,7 @@ static int hpfs_fill_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	/* Fill superblock stuff */
 | 
						/* Fill superblock stuff */
 | 
				
			||||||
	s->s_magic = HPFS_SUPER_MAGIC;
 | 
						s->s_magic = HPFS_SUPER_MAGIC;
 | 
				
			||||||
	s->s_op = &hpfs_sops;
 | 
						s->s_op = &hpfs_sops;
 | 
				
			||||||
	s->s_d_op = &hpfs_dentry_operations;
 | 
						set_default_d_op(s, &hpfs_dentry_operations);
 | 
				
			||||||
	s->s_time_min =  local_to_gmt(s, 0);
 | 
						s->s_time_min =  local_to_gmt(s, 0);
 | 
				
			||||||
	s->s_time_max =  local_to_gmt(s, U32_MAX);
 | 
						s->s_time_max =  local_to_gmt(s, U32_MAX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -939,7 +939,7 @@ static int isofs_fill_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	sbi->s_check = opt->check;
 | 
						sbi->s_check = opt->check;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (table)
 | 
						if (table)
 | 
				
			||||||
		s->s_d_op = &isofs_dentry_ops[table - 1];
 | 
							set_default_d_op(s, &isofs_dentry_ops[table - 1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* get the root dentry */
 | 
						/* get the root dentry */
 | 
				
			||||||
	s->s_root = d_make_root(inode);
 | 
						s->s_root = d_make_root(inode);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -542,7 +542,7 @@ static int jfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_magic = JFS_SUPER_MAGIC;
 | 
						sb->s_magic = JFS_SUPER_MAGIC;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (sbi->mntflag & JFS_OS2)
 | 
						if (sbi->mntflag & JFS_OS2)
 | 
				
			||||||
		sb->s_d_op = &jfs_ci_dentry_operations;
 | 
							set_default_d_op(sb, &jfs_ci_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	inode = jfs_iget(sb, ROOT_I);
 | 
						inode = jfs_iget(sb, ROOT_I);
 | 
				
			||||||
	if (IS_ERR(inode)) {
 | 
						if (IS_ERR(inode)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -318,7 +318,7 @@ static int kernfs_fill_super(struct super_block *sb, struct kernfs_fs_context *k
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sb->s_root = root;
 | 
						sb->s_root = root;
 | 
				
			||||||
	sb->s_d_op = &kernfs_dops;
 | 
						set_default_d_op(sb, &kernfs_dops);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								fs/libfs.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								fs/libfs.c
									
									
									
									
									
								
							| 
						 | 
					@ -75,7 +75,7 @@ struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (dentry->d_name.len > NAME_MAX)
 | 
						if (dentry->d_name.len > NAME_MAX)
 | 
				
			||||||
		return ERR_PTR(-ENAMETOOLONG);
 | 
							return ERR_PTR(-ENAMETOOLONG);
 | 
				
			||||||
	if (!dentry->d_sb->s_d_op)
 | 
						if (!dentry->d_op)
 | 
				
			||||||
		d_set_d_op(dentry, &simple_dentry_operations);
 | 
							d_set_d_op(dentry, &simple_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (IS_ENABLED(CONFIG_UNICODE) && IS_CASEFOLDED(dir))
 | 
						if (IS_ENABLED(CONFIG_UNICODE) && IS_CASEFOLDED(dir))
 | 
				
			||||||
| 
						 | 
					@ -684,7 +684,7 @@ static int pseudo_fs_fill_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	s->s_root = d_make_root(root);
 | 
						s->s_root = d_make_root(root);
 | 
				
			||||||
	if (!s->s_root)
 | 
						if (!s->s_root)
 | 
				
			||||||
		return -ENOMEM;
 | 
							return -ENOMEM;
 | 
				
			||||||
	s->s_d_op = ctx->dops;
 | 
						set_default_d_op(s, ctx->dops);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1950,22 +1950,22 @@ static const struct dentry_operations generic_encrypted_dentry_ops = {
 | 
				
			||||||
 * @sb: superblock to be configured
 | 
					 * @sb: superblock to be configured
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Filesystems supporting casefolding and/or fscrypt can call this
 | 
					 * Filesystems supporting casefolding and/or fscrypt can call this
 | 
				
			||||||
 * helper at mount-time to configure sb->s_d_op to best set of dentry
 | 
					 * helper at mount-time to configure default dentry_operations to the
 | 
				
			||||||
 * operations required for the enabled features. The helper must be
 | 
					 * best set of dentry operations required for the enabled features.
 | 
				
			||||||
 * called after these have been configured, but before the root dentry
 | 
					 * The helper must be called after these have been configured, but
 | 
				
			||||||
 * is created.
 | 
					 * before the root dentry is created.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void generic_set_sb_d_ops(struct super_block *sb)
 | 
					void generic_set_sb_d_ops(struct super_block *sb)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if IS_ENABLED(CONFIG_UNICODE)
 | 
					#if IS_ENABLED(CONFIG_UNICODE)
 | 
				
			||||||
	if (sb->s_encoding) {
 | 
						if (sb->s_encoding) {
 | 
				
			||||||
		sb->s_d_op = &generic_ci_dentry_ops;
 | 
							set_default_d_op(sb, &generic_ci_dentry_ops);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef CONFIG_FS_ENCRYPTION
 | 
					#ifdef CONFIG_FS_ENCRYPTION
 | 
				
			||||||
	if (sb->s_cop) {
 | 
						if (sb->s_cop) {
 | 
				
			||||||
		sb->s_d_op = &generic_encrypted_dentry_ops;
 | 
							set_default_d_op(sb, &generic_encrypted_dentry_ops);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1183,7 +1183,7 @@ static int nfs_set_super(struct super_block *s, struct fs_context *fc)
 | 
				
			||||||
	struct nfs_server *server = fc->s_fs_info;
 | 
						struct nfs_server *server = fc->s_fs_info;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s->s_d_op = server->nfs_client->rpc_ops->dentry_ops;
 | 
						set_default_d_op(s, server->nfs_client->rpc_ops->dentry_ops);
 | 
				
			||||||
	ret = set_anon_super(s, server);
 | 
						ret = set_anon_super(s, server);
 | 
				
			||||||
	if (ret == 0)
 | 
						if (ret == 0)
 | 
				
			||||||
		server->s_dev = s->s_dev;
 | 
							server->s_dev = s->s_dev;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1223,7 +1223,8 @@ static int ntfs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_export_op = &ntfs_export_ops;
 | 
						sb->s_export_op = &ntfs_export_ops;
 | 
				
			||||||
	sb->s_time_gran = NTFS_TIME_GRAN; // 100 nsec
 | 
						sb->s_time_gran = NTFS_TIME_GRAN; // 100 nsec
 | 
				
			||||||
	sb->s_xattr = ntfs_xattr_handlers;
 | 
						sb->s_xattr = ntfs_xattr_handlers;
 | 
				
			||||||
	sb->s_d_op = options->nocase ? &ntfs_dentry_ops : NULL;
 | 
						if (options->nocase)
 | 
				
			||||||
 | 
							set_default_d_op(sb, &ntfs_dentry_ops);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	options->nls = ntfs_load_nls(options->nls_name);
 | 
						options->nls = ntfs_load_nls(options->nls_name);
 | 
				
			||||||
	if (IS_ERR(options->nls)) {
 | 
						if (IS_ERR(options->nls)) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1962,7 +1962,7 @@ static int ocfs2_initialize_super(struct super_block *sb,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_fs_info = osb;
 | 
						sb->s_fs_info = osb;
 | 
				
			||||||
	sb->s_op = &ocfs2_sops;
 | 
						sb->s_op = &ocfs2_sops;
 | 
				
			||||||
	sb->s_d_op = &ocfs2_dentry_ops;
 | 
						set_default_d_op(sb, &ocfs2_dentry_ops);
 | 
				
			||||||
	sb->s_export_op = &ocfs2_export_ops;
 | 
						sb->s_export_op = &ocfs2_export_ops;
 | 
				
			||||||
	sb->s_qcop = &dquot_quotactl_sysfile_ops;
 | 
						sb->s_qcop = &dquot_quotactl_sysfile_ops;
 | 
				
			||||||
	sb->dq_op = &ocfs2_quota_operations;
 | 
						sb->dq_op = &ocfs2_quota_operations;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -416,7 +416,7 @@ static int orangefs_fill_sb(struct super_block *sb,
 | 
				
			||||||
	sb->s_xattr = orangefs_xattr_handlers;
 | 
						sb->s_xattr = orangefs_xattr_handlers;
 | 
				
			||||||
	sb->s_magic = ORANGEFS_SUPER_MAGIC;
 | 
						sb->s_magic = ORANGEFS_SUPER_MAGIC;
 | 
				
			||||||
	sb->s_op = &orangefs_s_ops;
 | 
						sb->s_op = &orangefs_s_ops;
 | 
				
			||||||
	sb->s_d_op = &orangefs_dentry_operations;
 | 
						set_default_d_op(sb, &orangefs_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_blocksize = PAGE_SIZE;
 | 
						sb->s_blocksize = PAGE_SIZE;
 | 
				
			||||||
	sb->s_blocksize_bits = PAGE_SHIFT;
 | 
						sb->s_blocksize_bits = PAGE_SHIFT;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1322,7 +1322,7 @@ int ovl_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	if (WARN_ON(fc->user_ns != current_user_ns()))
 | 
						if (WARN_ON(fc->user_ns != current_user_ns()))
 | 
				
			||||||
		goto out_err;
 | 
							goto out_err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_d_op = &ovl_dentry_operations;
 | 
						set_default_d_op(sb, &ovl_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = -ENOMEM;
 | 
						err = -ENOMEM;
 | 
				
			||||||
	if (!ofs->creator_cred)
 | 
						if (!ofs->creator_cred)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -260,9 +260,9 @@ cifs_read_super(struct super_block *sb)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (tcon->nocase)
 | 
						if (tcon->nocase)
 | 
				
			||||||
		sb->s_d_op = &cifs_ci_dentry_ops;
 | 
							set_default_d_op(sb, &cifs_ci_dentry_ops);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		sb->s_d_op = &cifs_dentry_ops;
 | 
							set_default_d_op(sb, &cifs_dentry_ops);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_root = d_make_root(inode);
 | 
						sb->s_root = d_make_root(inode);
 | 
				
			||||||
	if (!sb->s_root) {
 | 
						if (!sb->s_root) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -480,7 +480,7 @@ static int tracefs_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
		return err;
 | 
							return err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sb->s_op = &tracefs_super_operations;
 | 
						sb->s_op = &tracefs_super_operations;
 | 
				
			||||||
	sb->s_d_op = &tracefs_dentry_operations;
 | 
						set_default_d_op(sb, &tracefs_dentry_operations);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -189,7 +189,7 @@ static int vboxsf_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_blocksize = 1024;
 | 
						sb->s_blocksize = 1024;
 | 
				
			||||||
	sb->s_maxbytes = MAX_LFS_FILESIZE;
 | 
						sb->s_maxbytes = MAX_LFS_FILESIZE;
 | 
				
			||||||
	sb->s_op = &vboxsf_super_ops;
 | 
						sb->s_op = &vboxsf_super_ops;
 | 
				
			||||||
	sb->s_d_op = &vboxsf_dentry_ops;
 | 
						set_default_d_op(sb, &vboxsf_dentry_ops);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	iroot = iget_locked(sb, 0);
 | 
						iroot = iget_locked(sb, 0);
 | 
				
			||||||
	if (!iroot) {
 | 
						if (!iroot) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -607,4 +607,6 @@ static inline struct dentry *d_next_sibling(const struct dentry *dentry)
 | 
				
			||||||
	return hlist_entry_safe(dentry->d_sib.next, struct dentry, d_sib);
 | 
						return hlist_entry_safe(dentry->d_sib.next, struct dentry, d_sib);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void set_default_d_op(struct super_block *, const struct dentry_operations *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif	/* __LINUX_DCACHE_H */
 | 
					#endif	/* __LINUX_DCACHE_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1413,7 +1413,7 @@ struct super_block {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	const char *s_subtype;
 | 
						const char *s_subtype;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const struct dentry_operations *s_d_op; /* default d_op for dentries */
 | 
						const struct dentry_operations *__s_d_op; /* default d_op for dentries */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct shrinker *s_shrink;	/* per-sb shrinker handle */
 | 
						struct shrinker *s_shrink;	/* per-sb shrinker handle */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5028,7 +5028,7 @@ static int shmem_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ctx->encoding) {
 | 
						if (ctx->encoding) {
 | 
				
			||||||
		sb->s_encoding = ctx->encoding;
 | 
							sb->s_encoding = ctx->encoding;
 | 
				
			||||||
		sb->s_d_op = &shmem_ci_dentry_ops;
 | 
							set_default_d_op(sb, &shmem_ci_dentry_ops);
 | 
				
			||||||
		if (ctx->strict_encoding)
 | 
							if (ctx->strict_encoding)
 | 
				
			||||||
			sb->s_encoding_flags = SB_ENC_STRICT_MODE_FL;
 | 
								sb->s_encoding_flags = SB_ENC_STRICT_MODE_FL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1363,7 +1363,7 @@ rpc_fill_super(struct super_block *sb, struct fs_context *fc)
 | 
				
			||||||
	sb->s_blocksize_bits = PAGE_SHIFT;
 | 
						sb->s_blocksize_bits = PAGE_SHIFT;
 | 
				
			||||||
	sb->s_magic = RPCAUTH_GSSMAGIC;
 | 
						sb->s_magic = RPCAUTH_GSSMAGIC;
 | 
				
			||||||
	sb->s_op = &s_ops;
 | 
						sb->s_op = &s_ops;
 | 
				
			||||||
	sb->s_d_op = &simple_dentry_operations;
 | 
						set_default_d_op(sb, &simple_dentry_operations);
 | 
				
			||||||
	sb->s_time_gran = 1;
 | 
						sb->s_time_gran = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	inode = rpc_get_inode(sb, S_IFDIR | 0555);
 | 
						inode = rpc_get_inode(sb, S_IFDIR | 0555);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue