本文整理汇总了C++中d_make_root函数的典型用法代码示例。如果您正苦于以下问题:C++ d_make_root函数的具体用法?C++ d_make_root怎么用?C++ d_make_root使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了d_make_root函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: oprofilefs_fill_super
static int oprofilefs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *root_inode;
struct dentry *root_dentry;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = OPROFILEFS_MAGIC;
sb->s_op = &s_ops;
sb->s_time_gran = 1;
root_inode = oprofilefs_get_inode(sb, S_IFDIR | 0755);
if (!root_inode)
return -ENOMEM;
root_inode->i_op = &simple_dir_inode_operations;
root_inode->i_fop = &simple_dir_operations;
root_dentry = d_make_root(root_inode);
if (!root_dentry)
return -ENOMEM;
sb->s_root = root_dentry;
oprofile_create_files(sb, root_dentry);
// FIXME: verify kill_litter_super removes our dentries
return 0;
}
开发者ID:Astinj,项目名称:linux_samsung_ics_real,代码行数:27,代码来源:oprofilefs.c
示例2: kernfs_fill_super
static int kernfs_fill_super(struct super_block *sb)
{
struct kernfs_super_info *info = kernfs_info(sb);
struct inode *inode;
struct dentry *root;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = SYSFS_MAGIC;
sb->s_op = &kernfs_sops;
sb->s_time_gran = 1;
/* get root inode, initialize and unlock it */
mutex_lock(&kernfs_mutex);
inode = kernfs_get_inode(sb, info->root->kn);
mutex_unlock(&kernfs_mutex);
if (!inode) {
pr_debug("kernfs: could not get root inode\n");
return -ENOMEM;
}
/* instantiate and link root dentry */
root = d_make_root(inode);
if (!root) {
pr_debug("%s: could not get root dentry!\n", __func__);
return -ENOMEM;
}
kernfs_get(info->root->kn);
root->d_fsdata = info->root->kn;
sb->s_root = root;
sb->s_d_op = &kernfs_dops;
return 0;
}
开发者ID:7799,项目名称:linux,代码行数:33,代码来源:mount.c
示例3: orangefs_fill_sb
static int orangefs_fill_sb(struct super_block *sb,
struct orangefs_fs_mount_response *fs_mount,
void *data, int silent)
{
int ret = -EINVAL;
struct inode *root = NULL;
struct dentry *root_dentry = NULL;
struct orangefs_object_kref root_object;
/* alloc and init our private orangefs sb info */
sb->s_fs_info = kzalloc(sizeof(struct orangefs_sb_info_s), GFP_KERNEL);
if (!ORANGEFS_SB(sb))
return -ENOMEM;
ORANGEFS_SB(sb)->sb = sb;
ORANGEFS_SB(sb)->root_khandle = fs_mount->root_khandle;
ORANGEFS_SB(sb)->fs_id = fs_mount->fs_id;
ORANGEFS_SB(sb)->id = fs_mount->id;
if (data) {
ret = parse_mount_options(sb, data, silent);
if (ret)
return ret;
}
/* Hang the xattr handlers off the superblock */
sb->s_xattr = orangefs_xattr_handlers;
sb->s_magic = ORANGEFS_SUPER_MAGIC;
sb->s_op = &orangefs_s_ops;
sb->s_d_op = &orangefs_dentry_operations;
sb->s_blocksize = orangefs_bufmap_size_query();
sb->s_blocksize_bits = orangefs_bufmap_shift_query();
sb->s_maxbytes = MAX_LFS_FILESIZE;
root_object.khandle = ORANGEFS_SB(sb)->root_khandle;
root_object.fs_id = ORANGEFS_SB(sb)->fs_id;
gossip_debug(GOSSIP_SUPER_DEBUG,
"get inode %pU, fsid %d\n",
&root_object.khandle,
root_object.fs_id);
root = orangefs_iget(sb, &root_object);
if (IS_ERR(root))
return PTR_ERR(root);
gossip_debug(GOSSIP_SUPER_DEBUG,
"Allocated root inode [%p] with mode %x\n",
root,
root->i_mode);
/* allocates and places root dentry in dcache */
root_dentry = d_make_root(root);
if (!root_dentry)
return -ENOMEM;
sb->s_export_op = &orangefs_export_ops;
sb->s_root = root_dentry;
return 0;
}
开发者ID:ReneNyffenegger,项目名称:linux,代码行数:60,代码来源:super.c
示例4: sjfs_fill_super
int sjfs_fill_super(struct super_block *sb, void *data, int silent) {
struct inode *inode;
struct dentry *root;
printk("sjfs_fill_super\n");
sb->s_maxbytes = MAX_LFS_FILESIZE;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = SJFS_MAGIC;
sb->s_op = &sjfs_sops;
sb->s_time_gran = 1;
save_mount_options(sb, data); // for generic_show_options
inode = ramfs2_get_inode(sb, NULL, S_IFDIR | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH, 0);
if (!inode)
return -ENOMEM;
root = d_make_root(inode);
if (!root)
return -ENOMEM;
sb->s_root = root;
return 0;
}
开发者ID:LaikaN57,项目名称:cmpe142_fs,代码行数:26,代码来源:sjfs_ram.c
示例5: dumpfs_read_sb
static int
dumpfs_read_sb(struct super_block *sb, void *data, int silent)
{
int err = 0;
struct inode *inode;
struct buffer_head *bh;
struct dumpfs_sb_info *sbi;
dumpfs_super_block_t *ds;
char *dev_name = (char *)data;
if (!dev_name) {
err = -EINVAL;
goto out;
}
/*
* dev_name is device_name or file that needs to be mounted
* mount -t dumpfs /mnt/filename /mnt/dumpfs, dev_name points
* to /mnt/filename.
*/
/* connect dumpfs superblock later */
sbi = kzalloc(sizeof(struct dumpfs_sb_info), GFP_KERNEL);
if (!sbi) {
err = -ENOMEM;
goto out;
}
sb->s_fs_info = sbi;
/* read the superblock from the disk */
if (!(bh = sb_bread(sb, 0))) {
goto free;
}
ds = (dumpfs_super_block_t *)bh->b_data;
sb->s_magic = ds->s_magic;
sb->s_time_gran = 1;
sb->s_op = &dumpfs_sops;
sbi->s_buf = ds;
printk(KERN_INFO "sbi->s_buf %p\n", sb->s_fs_info);
inode = dumpfs_iget(sb, DUMPFS_ROOT_INUM);
if (IS_ERR(inode)) {
printk(KERN_INFO "%d \n", __LINE__);
err = PTR_ERR(inode);
goto out;
}
printk(KERN_INFO "inode %p magic %x\n", inode, ds->s_magic);
sb->s_root = d_make_root(inode);
if (!sb->s_root) {
err = -ENOMEM;
goto free;
}
d_rehash(sb->s_root);
d_set_d_op(sb->s_root, &dumpfs_dops);
goto out;
free:
printk(KERN_INFO "Failed free superblock");
kfree(sb->s_fs_info);
out:
return (err);
}
开发者ID:mohankri,项目名称:chuckfs,代码行数:60,代码来源:dumpfs_main.c
示例6: aufs_fill_sb
static int aufs_fill_sb(struct super_block *sb, void *data, int silent)
{
struct aufs_super_block *asb = aufs_super_block_read(sb);
struct inode *root;
if (!asb)
return -EINVAL;
sb->s_magic = asb->asb_magic;
sb->s_fs_info = asb;
sb->s_op = &aufs_super_ops;
if (sb_set_blocksize(sb, asb->asb_block_size) == 0) {
pr_err("device does not support block size %lu\n",
(unsigned long)asb->asb_block_size);
return -EINVAL;
}
root = aufs_inode_get(sb, asb->asb_root_inode);
if (IS_ERR(root))
return PTR_ERR(root);
sb->s_root = d_make_root(root);
if (!sb->s_root) {
pr_err("aufs cannot create root\n");
return -ENOMEM;
}
return 0;
}
开发者ID:Icefroge,项目名称:aufs,代码行数:30,代码来源:super.c
示例7: aufs_fill_sb
static int aufs_fill_sb(struct super_block *sb, void *data, int silent)
{
struct inode *root = NULL;
sb->s_magic = AUFS_MAGIC_NUMBER;
sb->s_op = &aufs_super_ops;
root = new_inode(sb);
if (!root) {
pr_err("inode allocation failed\n");
return -ENOMEM;
}
root->i_ino = 0;
root->i_sb = sb;
root->i_atime = root->i_mtime = root->i_ctime = CURRENT_TIME;
inode_init_owner(root, NULL, S_IFDIR);
sb->s_root = d_make_root(root);
if (!sb->s_root) {
pr_err("root creation failed\n");
return -ENOMEM;
}
return 0;
}
开发者ID:YogaPan,项目名称:linux-basic,代码行数:26,代码来源:super.c
示例8: sjfs_fill_super
int sjfs_fill_super(struct super_block *sb, void *data, int silent) {
struct inode *inode;
struct dentry *root;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = SJFS_MAGIC;
sb->s_op = &sjfs_sops;
sb->s_time_gran = 1;
save_mount_options(sb, data); // for generic_show_options
inode = new_inode(sb);
if (!inode)
return -ENOMEM;
inode->i_ino = 1;
inode->i_mode = S_IFDIR | 0755;
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_op = &sjfs_iops; // simple_dir_inode_operations
inode->i_fop = &sjfs_fops; // simple_dir_operations
set_nlink(inode, 2);
root = d_make_root(inode);
if (!root)
return -ENOMEM;
sb->s_root = root;
return 0;
}
开发者ID:Yomz,项目名称:cmpe142_fs,代码行数:31,代码来源:sjfs.c
示例9: ext4_read_super
static int ext4_read_super(struct super_block *sb, void *data, int flags)
{
int ret;
struct inode *in;
struct dentry *root;
ret = ext4_fill_super(sb);
if (ret < 0) {
// ...
return ret;
}
GEN_DBG("\n");
in = ext4_iget(sb, 2);
if (!in) {
// ...
return -EINVAL;
}
root = d_make_root(in);
if (!root)
return EINVAL;
sb->s_root = root;
return 0;
}
开发者ID:JansZeng,项目名称:g-bios,代码行数:28,代码来源:ext4.c
示例10: proxyfs_fs_fill_super
/** \<\<private\>\> Fill proxyfs superblock
*
* @param sb - pointer to superblock
* @param data - mount options etc...
* @param silent -
*
* @return Zero on success
*/
static int proxyfs_fs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *rootinode;
sb->s_blocksize = 1024;
sb->s_blocksize_bits = 10;
sb->s_magic = 0x28021985;
sb->s_op = &proxyfs_sops; // super block operations
sb->s_type = &proxyfs; // file_system_type
sb->s_fs_info = data; // proxyfs_client task
rootinode = iget_locked(sb, 0xFFFFFFFF); // allocate an inode
rootinode->i_op = &rootinode_iops; // set the inode ops
//rootinode->i_fop = &rootinode_fops;
rootinode->i_mode = S_IFDIR | S_IRUSR | S_IXUSR;
rootinode->i_mtime = rootinode->i_atime = rootinode->i_ctime = CURRENT_TIME;
//Fix change call function from d_alloc_root to d_make_root for kernel 3.x.x by Jiri Rakosnik
if( !(sb->s_root = d_make_root(rootinode)) ){
iput(rootinode);
return -ENOMEM;
}
unlock_new_inode(rootinode);
return 0;
}
开发者ID:FIT-CVUT,项目名称:clondike,代码行数:35,代码来源:proxyfs_fs.c
示例11: ramfs_fill_super
int ramfs_fill_super(struct super_block *sb, void *data, int silent)
{
struct ramfs_fs_info *fsi;
struct inode *inode;
int err;
save_mount_options(sb, data);
fsi = kzalloc(sizeof(struct ramfs_fs_info), GFP_KERNEL);
sb->s_fs_info = fsi;
if (!fsi)
return -ENOMEM;
err = ramfs_parse_options(data, &fsi->mount_opts);
if (err)
return err;
sb->s_maxbytes = MAX_LFS_FILESIZE;
sb->s_blocksize = PAGE_SIZE;
sb->s_blocksize_bits = PAGE_SHIFT;
sb->s_magic = RAMFS_MAGIC;
sb->s_op = &ramfs_ops;
sb->s_time_gran = 1;
inode = ramfs_get_inode(sb, NULL, S_IFDIR | fsi->mount_opts.mode, 0);
sb->s_root = d_make_root(inode);
if (!sb->s_root)
return -ENOMEM;
return 0;
}
开发者ID:AshishNamdev,项目名称:linux,代码行数:31,代码来源:inode.c
示例12: sysfs_fill_super
static int sysfs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *inode;
struct dentry *root;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = SYSFS_MAGIC;
sb->s_op = &sysfs_ops;
sb->s_time_gran = 1;
/* get root inode, initialize and unlock it */
mutex_lock(&sysfs_mutex);
inode = sysfs_get_inode(sb, &sysfs_root);
mutex_unlock(&sysfs_mutex);
if (!inode) {
pr_debug("sysfs: could not get root inode\n");
return -ENOMEM;
}
/* instantiate and link root dentry */
root = d_make_root(inode);
if (!root) {
pr_debug("%s: could not get root dentry!\n",__func__);
return -ENOMEM;
}
root->d_fsdata = &sysfs_root;
sb->s_root = root;
return 0;
}
开发者ID:Astinj,项目名称:linux_samsung_ics_real,代码行数:30,代码来源:mount.c
示例13: configfs_fill_super
static int configfs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *inode;
struct dentry *root;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = CONFIGFS_MAGIC;
sb->s_op = &configfs_ops;
sb->s_time_gran = 1;
inode = configfs_new_inode(S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO,
&configfs_root, sb);
if (inode) {
inode->i_op = &configfs_root_inode_operations;
inode->i_fop = &configfs_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */
inc_nlink(inode);
} else {
pr_debug("could not get root inode\n");
return -ENOMEM;
}
root = d_make_root(inode);
if (!root) {
pr_debug("%s: could not get root dentry!\n",__func__);
return -ENOMEM;
}
config_group_init(&configfs_root_group);
configfs_root_group.cg_item.ci_dentry = root;
root->d_fsdata = &configfs_root;
sb->s_root = root;
sb->s_d_op = &configfs_dentry_ops; /* the rest get that */
return 0;
}
开发者ID:Chong-Li,项目名称:cse522,代码行数:35,代码来源:mount.c
示例14: gatorfs_fill_super
static int gatorfs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *root_inode;
struct dentry *root_dentry;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = gatorfs_MAGIC;
sb->s_op = &s_ops;
sb->s_time_gran = 1;
root_inode = gatorfs_get_inode(sb, S_IFDIR | 0755);
if (!root_inode)
return -ENOMEM;
root_inode->i_op = &simple_dir_inode_operations;
root_inode->i_fop = &simple_dir_operations;
root_dentry = d_make_root(root_inode);
if (!root_dentry) {
return -ENOMEM;
}
sb->s_root = root_dentry;
gator_op_create_files(sb, root_dentry);
return 0;
}
开发者ID:alexhe,项目名称:gator,代码行数:29,代码来源:gator_fs.c
示例15: efivarfs_fill_super
static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *inode = NULL;
struct dentry *root;
int err;
efivarfs_sb = sb;
sb->s_maxbytes = MAX_LFS_FILESIZE;
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = EFIVARFS_MAGIC;
sb->s_op = &efivarfs_ops;
sb->s_d_op = &efivarfs_d_ops;
sb->s_time_gran = 1;
inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0, true);
if (!inode)
return -ENOMEM;
inode->i_op = &efivarfs_dir_inode_operations;
root = d_make_root(inode);
sb->s_root = root;
if (!root)
return -ENOMEM;
INIT_LIST_HEAD(&efivarfs_list);
err = efivar_init(efivarfs_callback, (void *)sb, false,
true, &efivarfs_list);
if (err)
__efivar_entry_iter(efivarfs_destroy, &efivarfs_list, NULL, NULL);
return err;
}
开发者ID:AICP,项目名称:kernel_moto_shamu,代码行数:35,代码来源:super.c
示例16: cifs_read_super
static int
cifs_read_super(struct super_block *sb)
{
struct inode *inode;
struct cifs_sb_info *cifs_sb;
struct cifs_tcon *tcon;
int rc = 0;
cifs_sb = CIFS_SB(sb);
tcon = cifs_sb_master_tcon(cifs_sb);
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
sb->s_flags |= MS_POSIXACL;
if (tcon->ses->capabilities & tcon->ses->server->vals->cap_large_files)
sb->s_maxbytes = MAX_LFS_FILESIZE;
else
sb->s_maxbytes = MAX_NON_LFS;
/* BB FIXME fix time_gran to be larger for LANMAN sessions */
sb->s_time_gran = 100;
sb->s_magic = CIFS_MAGIC_NUMBER;
sb->s_op = &cifs_super_ops;
sb->s_xattr = cifs_xattr_handlers;
sb->s_bdi = &cifs_sb->bdi;
sb->s_blocksize = CIFS_MAX_MSGSIZE;
sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */
inode = cifs_root_iget(sb);
if (IS_ERR(inode)) {
rc = PTR_ERR(inode);
goto out_no_root;
}
if (tcon->nocase)
sb->s_d_op = &cifs_ci_dentry_ops;
else
sb->s_d_op = &cifs_dentry_ops;
sb->s_root = d_make_root(inode);
if (!sb->s_root) {
rc = -ENOMEM;
goto out_no_root;
}
#ifdef CONFIG_CIFS_NFSD_EXPORT
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
cifs_dbg(FYI, "export ops supported\n");
sb->s_export_op = &cifs_export_ops;
}
#endif /* CONFIG_CIFS_NFSD_EXPORT */
return 0;
out_no_root:
cifs_dbg(VFS, "%s: get root inode failed\n", __func__);
return rc;
}
开发者ID:Felixneu,项目名称:10G-TCPCubic-Variation,代码行数:59,代码来源:cifsfs.c
示例17: cifs_read_super
static int
cifs_read_super(struct super_block *sb)
{
struct inode *inode;
struct cifs_sb_info *cifs_sb;
int rc = 0;
cifs_sb = CIFS_SB(sb);
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIXACL)
sb->s_flags |= MS_POSIXACL;
if (cifs_sb_master_tcon(cifs_sb)->ses->capabilities & CAP_LARGE_FILES)
sb->s_maxbytes = MAX_LFS_FILESIZE;
else
sb->s_maxbytes = MAX_NON_LFS;
/* BB FIXME fix time_gran to be larger for LANMAN sessions */
sb->s_time_gran = 100;
sb->s_magic = CIFS_MAGIC_NUMBER;
sb->s_op = &cifs_super_ops;
sb->s_bdi = &cifs_sb->bdi;
sb->s_blocksize = CIFS_MAX_MSGSIZE;
sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */
inode = cifs_root_iget(sb);
if (IS_ERR(inode)) {
rc = PTR_ERR(inode);
goto out_no_root;
}
sb->s_root = d_make_root(inode);
if (!sb->s_root) {
rc = -ENOMEM;
goto out_no_root;
}
/* do that *after* d_alloc_root() - we want NULL ->d_op for root here */
if (cifs_sb_master_tcon(cifs_sb)->nocase)
sb->s_d_op = &cifs_ci_dentry_ops;
else
sb->s_d_op = &cifs_dentry_ops;
#ifdef CONFIG_CIFS_NFSD_EXPORT
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
cFYI(1, "export ops supported");
sb->s_export_op = &cifs_export_ops;
}
#endif /* CONFIG_CIFS_NFSD_EXPORT */
return 0;
out_no_root:
cERROR(1, "cifs_read_super: get root inode failed");
return rc;
}
开发者ID:Emineminero,项目名称:DORIMANX_LG_STOCK_LP_KERNEL,代码行数:57,代码来源:cifsfs.c
示例18: sfs_fill_super
static int sfs_fill_super(struct super_block *sb, void *data, int silent)
{
sfs_info_t *info;
printk(KERN_INFO "sfs: sfs_fill_super\n");
if (!(info = (sfs_info_t *)(kzalloc(sizeof(sfs_info_t), GFP_KERNEL))))
return -ENOMEM;
info->vfs_sb = sb;
if (init_browsing(info) < 0)
{
kfree(info);
return -EIO;
}
/* Updating the VFS super_block */
sb->s_magic = info->sb.type;
sb->s_blocksize = info->sb.block_size;
sb->s_blocksize_bits = get_bit_pos(info->sb.block_size);
sb->s_type = &sfs; // file_system_type
sb->s_op = &sfs_sops; // super block operations
sfs_root_inode = iget_locked(sb, ROOT_INODE_NUM); // obtain an inode from VFS
if (!sfs_root_inode)
{
shut_browsing(info);
kfree(info);
return -EACCES;
}
if (sfs_root_inode->i_state & I_NEW) // allocated fresh now
{
printk(KERN_INFO "sfs: Got new root inode, let's fill in\n");
sfs_root_inode->i_op = &sfs_iops; // inode operations
sfs_root_inode->i_mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
sfs_root_inode->i_fop = &sfs_fops; // file operations
sfs_root_inode->i_mapping->a_ops = &sfs_aops; // address operations
unlock_new_inode(sfs_root_inode);
}
else
{
printk(KERN_INFO "sfs: Got root inode from inode cache\n");
}
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
sb->s_root = d_alloc_root(sfs_root_inode);
#else
sb->s_root = d_make_root(sfs_root_inode);
#endif
if (!sb->s_root)
{
iget_failed(sfs_root_inode);
shut_browsing(info);
kfree(info);
return -ENOMEM;
}
return 0;
}
开发者ID:gokul-github,项目名称:linuxpedia,代码行数:56,代码来源:real_sfs_minimal.c
示例19: my_init
static int __init
my_init(void)
{
// Call target function
struct inode* i = NULL;
struct dentry* d = d_make_root(i);
dput(d);
return 0;
}
开发者ID:srikanth007m,项目名称:spruce,代码行数:10,代码来源:d_make_root.c
示例20: simplefs_fill_super
/* This function, as the name implies, Makes the super_block valid and
* fills filesystem specific information in the super block */
int simplefs_fill_super(struct super_block *sb, void *data, int silent)
{
struct inode *root_inode;
struct buffer_head *bh;
struct simplefs_super_block *sb_disk;
bh = (struct buffer_head *)sb_bread(sb,
SIMPLEFS_SUPERBLOCK_BLOCK_NUMBER);
sb_disk = (struct simplefs_super_block *)bh->b_data;
/* FIXME: bh->b_data is probably leaking */
printk(KERN_INFO "The magic number obtained in disk is: [%llu]\n",
sb_disk->magic);
if (unlikely(sb_disk->magic != SIMPLEFS_MAGIC)) {
printk(KERN_ERR
"The filesystem that you try to mount is not of type simplefs. Magicnumber mismatch.");
return -EPERM;
}
if (unlikely(sb_disk->block_size != SIMPLEFS_DEFAULT_BLOCK_SIZE)) {
printk(KERN_ERR
"simplefs seem to be formatted using a non-standard block size.");
return -EPERM;
}
printk(KERN_INFO
"simplefs filesystem of version [%llu] formatted with a block size of [%llu] detected in the device.\n",
sb_disk->version, sb_disk->block_size);
/* A magic number that uniquely identifies our filesystem type */
sb->s_magic = SIMPLEFS_MAGIC;
/* For all practical purposes, we will be using this s_fs_info as the super block */
sb->s_fs_info = sb_disk;
root_inode = new_inode(sb);
root_inode->i_ino = SIMPLEFS_ROOTDIR_INODE_NUMBER;
inode_init_owner(root_inode, NULL, S_IFDIR);
root_inode->i_sb = sb;
root_inode->i_op = &simplefs_inode_ops;
root_inode->i_fop = &simplefs_dir_operations;
root_inode->i_atime = root_inode->i_mtime = root_inode->i_ctime =
CURRENT_TIME;
root_inode->i_private =
simplefs_get_inode(sb, SIMPLEFS_ROOTDIR_INODE_NUMBER);
sb->s_root = d_make_root(root_inode);
if (!sb->s_root)
return -ENOMEM;
return 0;
}
开发者ID:Lakshmipathi,项目名称:simplefs,代码行数:57,代码来源:simple.c
注:本文中的d_make_root函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论