您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ vfs_getattr函数代码示例

51自学网 2021-06-03 09:38:38
  C++
这篇教程C++ vfs_getattr函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中vfs_getattr函数的典型用法代码示例。如果您正苦于以下问题:C++ vfs_getattr函数的具体用法?C++ vfs_getattr怎么用?C++ vfs_getattr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了vfs_getattr函数的26个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: stat_file

static int stat_file(struct kstat *stbuf){	struct file *fd;	int rc;	fd = filp_open(fname, O_RDONLY, 0);	if (IS_ERR(fd)) {		pr_err(PREFIX " can't open file %s/n", run_id, fname);		return -EIO;	}#ifdef HAVE_INODEOPS_ENHANCED_GETATTR	rc = vfs_getattr(&fd->f_path, stbuf, STATX_INO, AT_STATX_SYNC_AS_STAT);#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)	rc = vfs_getattr(&fd->f_path, stbuf);#else	rc = vfs_getattr(fd->f_path.mnt, fd->f_path.dentry, stbuf);#endif	if (rc != 0) {		pr_err(PREFIX " vfs_getattr failed: %d/n", run_id, rc);		goto out;	}	pr_err(PREFIX " inode is %llu/n", run_id, stbuf->ino);	rc = 0;out:	filp_close(fd, NULL);	return rc;}
开发者ID:Xyratex,项目名称:lustre-stable,代码行数:31,


示例2: vfs_fstatat

int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat,		int flag){	struct path path;	int error = -EINVAL;	int lookup_flags = 0;	if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |		      AT_EMPTY_PATH)) != 0)		goto out;	if (!(flag & AT_SYMLINK_NOFOLLOW))		lookup_flags |= LOOKUP_FOLLOW;	if (flag & AT_EMPTY_PATH)		lookup_flags |= LOOKUP_EMPTY;	error = user_path_at(dfd, filename, lookup_flags, &path);	if (error)		goto out;	error = vfs_getattr(path.mnt, path.dentry, stat);	if (!error)		zpath_realsize(path.dentry, &stat->size);	path_put(&path);out:	return error;}
开发者ID:LiquidSmokeX64,项目名称:URKernel,代码行数:27,


示例3: dbg_gen

/** * ubi_open_volume_path - open UBI volume by its character device node path. * @pathname: volume character device node path * @mode: open mode * * This function is similar to 'ubi_open_volume()', but opens a volume the path * to its character device node. */struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode){	int error, ubi_num, vol_id;	struct path path;	struct kstat stat;	dbg_gen("open volume %s, mode %d", pathname, mode);	if (!pathname || !*pathname)		return ERR_PTR(-EINVAL);	error = kern_path(pathname, LOOKUP_FOLLOW, &path);	if (error)		return ERR_PTR(error);	error = vfs_getattr(&path, &stat, STATX_TYPE, AT_STATX_SYNC_AS_STAT);	path_put(&path);	if (error)		return ERR_PTR(error);	if (!S_ISCHR(stat.mode))		return ERR_PTR(-EINVAL);	ubi_num = ubi_major2num(MAJOR(stat.rdev));	vol_id = MINOR(stat.rdev) - 1;	if (vol_id >= 0 && ubi_num >= 0)		return ubi_open_volume(ubi_num, vol_id, mode);	return ERR_PTR(-ENODEV);}
开发者ID:Lyude,项目名称:linux,代码行数:38,


示例4: vfs_fstatat

int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat,		int flag){	struct path path;	int error = -EINVAL;	unsigned int lookup_flags = 0;	if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |		      AT_EMPTY_PATH)) != 0)		goto out;	if (!(flag & AT_SYMLINK_NOFOLLOW))		lookup_flags |= LOOKUP_FOLLOW;	if (flag & AT_EMPTY_PATH)		lookup_flags |= LOOKUP_EMPTY;retry:	error = user_path_at(dfd, filename, lookup_flags, &path);	if (error)		goto out;	error = vfs_getattr(&path, stat);	path_put(&path);	if (retry_estale(error, lookup_flags)) {		lookup_flags |= LOOKUP_REVAL;		goto retry;	}out:	return error;}
开发者ID:19Dan01,项目名称:linux,代码行数:29,


示例5: ccfs_getattr

static int ccfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat){	int rc = 0;	struct dentry *lower_dentry;		struct ccfs_inode* inode = ccfs_inode_to_private(dentry->d_inode);	struct vfsmount *lower_mnt = ccfs_dentry_to_nested_mnt(dentry);	lower_dentry = ccfs_get_nested_dentry(dentry);	if ( inode->stat ) {		*stat = *inode->stat;		return 0;	}	mutex_lock(&lower_dentry->d_inode->i_mutex);	rc = vfs_getattr(lower_mnt, lower_dentry, stat);	mutex_unlock(&lower_dentry->d_inode->i_mutex);	if ( !rc && inode->cacheable) {		inode->stat = kmalloc(sizeof(struct kstat), GFP_KERNEL);		if ( inode->stat ) {			*(inode->stat) = *stat;		}	}	mdbg(INFO3, "Get stat returned res: %d uid %d gid %d", rc, stat->uid, stat->gid);	return rc;}
开发者ID:FIT-CVUT,项目名称:clondike,代码行数:29,


示例6: ovl_copy_up_last

static int ovl_copy_up_last(struct dentry *dentry, struct iattr *attr,			    bool no_data){	int err;	struct dentry *parent;	struct kstat stat;	struct path lowerpath;	parent = dget_parent(dentry);	err = ovl_copy_up(parent);	if (err)		goto out_dput_parent;	ovl_path_lower(dentry, &lowerpath);	err = vfs_getattr(&lowerpath, &stat);	if (err)		goto out_dput_parent;	if (no_data)		stat.size = 0;	err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat, attr);out_dput_parent:	dput(parent);	return err;}
开发者ID:AdityaChaudhary,项目名称:linux,代码行数:27,


示例7: ovl_dir_getattr

static int ovl_dir_getattr(struct vfsmount *mnt, struct dentry *dentry,			 struct kstat *stat){	int err;	enum ovl_path_type type;	struct path realpath;	type = ovl_path_real(dentry, &realpath);	err = vfs_getattr(&realpath, stat);	if (err)		return err;	stat->dev = dentry->d_sb->s_dev;	stat->ino = dentry->d_inode->i_ino;	/*	 * It's probably not worth it to count subdirs to get the	 * correct link count.  nlink=1 seems to pacify 'find' and	 * other utilities.	 */	if (OVL_TYPE_MERGE(type))		stat->nlink = 1;	return 0;}
开发者ID:andy-shev,项目名称:linux,代码行数:25,


示例8: fn_open

static void fn_open(l4fdx_srv_obj srv_obj, struct internal_request *r){    struct file *f;    struct l4fdx_result_t ret;    struct l4fdx_client *c = srv_obj->client;    int err, fid = -1;    char const *path = r->open.path;    if (c->basepath) {        unsigned l = strlen(path);        char *s = kmalloc(c->basepath_len + l + 1, GFP_KERNEL);        if (!s) {            err = -ENOMEM;            goto out;        }        strncpy(s, c->basepath, c->basepath_len);        strncpy(s + c->basepath_len, path, l);        s[c->basepath_len + l] = 0;        if (!validate_path(s, c->basepath_len + l)) {            kfree(s);            err = -EINVAL;            goto out;        }        path = s;    }    call_fdx_event(c, "pre-open", path, UMH_WAIT_PROC);    f = filp_open(path, r->open.flags & c->openflags_mask, r->open.mode);    if (IS_ERR(f)) {        err = PTR_ERR(f);    } else {        fid = set_free_fdxslot(c, f);        if (fid == -1) {            filp_close(f, NULL);            err = -ENOMEM;        } else            err = 0;    }    if (c->flag_nogrow && err == 0) {        struct kstat stat;        int r = vfs_getattr(&f->f_path, &stat);        c->max_file_size = r ? 0 : stat.size;    }    call_fdx_event(c, "post-open", path, UMH_WAIT_EXEC);    if (c->basepath)        kfree(path);out:    ret.payload.fid = fid;    ret.payload.ret = err;    res_event(srv_obj, &ret, r->client_req_id);    kfree(r);}
开发者ID:michas2,项目名称:l4re-snapshot,代码行数:60,


示例9: vnode_shadow_iop_getattr

extern intvnode_shadow_iop_getattr(    struct vfsmount *mnt,    DENT_T *dentry,    struct kstat *kstat){    DENT_T *rdentry;    VNODE_T *cvp;    int err;    rdentry = REALDENTRY_LOCKED(dentry, &cvp);    if (rdentry == NULL) {        err = -EOPNOTSUPP;             /* XXX */    } else {        VNODE_DGET(rdentry);                 /* protect inode */        if (rdentry != NULL && rdentry->d_inode != NULL) {            err = vfs_getattr(CVN_TO_VFSMNT(cvp), rdentry, kstat);            if (err == 0) {                SHADOW_CP_INODAT(dentry->d_inode, rdentry->d_inode);            }        } else            err = -EOPNOTSUPP;              /* XXX */        VNODE_DPUT(rdentry);        REALDENTRY_UNLOCK(dentry, cvp);    }    return(err);}
开发者ID:dagwieers,项目名称:mvfs71,代码行数:28,


示例10: ovl_getattr

static int ovl_getattr(struct vfsmount *mnt, struct dentry *dentry,			 struct kstat *stat){	struct path realpath;	ovl_path_real(dentry, &realpath);	return vfs_getattr(&realpath, stat);}
开发者ID:AdityaChaudhary,项目名称:linux,代码行数:8,


示例11: fuse_getattr

static int fuse_getattr(const char *path, stat *stbuf){    int res;    res = vfs_getattr(path, stbuf);    if (res == -1)        return -errno;    return 0;}
开发者ID:syuu1228,项目名称:fat32fs,代码行数:10,


示例12: fw_file_size

/* Don't inline this: 'struct kstat' is biggish */static noinline_for_stack long fw_file_size(struct file *file){	struct kstat st;	if (vfs_getattr(&file->f_path, &st))		return -1;	if (!S_ISREG(st.mode))		return -1;	if (st.size != (long)st.size)		return -1;	return st.size;}
开发者ID:03199618,项目名称:linux,代码行数:12,


示例13: vfs_fstat

int vfs_fstat(unsigned int fd, struct kstat *stat){	struct file *f = fget(fd);	int error = -EBADF;	if (f) {		error = vfs_getattr(f->f_path.mnt, f->f_path.dentry, stat);		fput(f);	}	return error;}
开发者ID:ANFS,项目名称:ANFS-kernel,代码行数:11,


示例14: vfs_fstat

int vfs_fstat(unsigned int fd, struct kstat *stat){	struct fd f = fdget_raw(fd);	int error = -EBADF;	if (f.file) {		error = vfs_getattr(&f.file->f_path, stat);		fdput(f);	}	return error;}
开发者ID:19Dan01,项目名称:linux,代码行数:11,


示例15: vfs_lstat_fd

int vfs_lstat_fd(int dfd, char __user *name, struct kstat *stat){	struct nameidata nd;	int error;	error = __user_walk_fd(dfd, name, 0, &nd);	if (!error) {		error = vfs_getattr(nd.mnt, nd.dentry, stat);		path_release(&nd);	}	return error;}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:12,


示例16: vfs_lstat_fd

int vfs_lstat_fd(int dfd, char __user *name, struct kstat *stat){	struct path path;	int error;	error = user_path_at(dfd, name, 0, &path);	if (!error) {		error = vfs_getattr(path.mnt, path.dentry, stat);		path_put(&path);	}	return error;}
开发者ID:458941968,项目名称:mini2440-kernel-2.6.29,代码行数:12,


示例17: vfs_fstat

int vfs_fstat(unsigned int fd, struct kstat *stat){	int fput_needed;	struct file *f = fget_light(fd, &fput_needed);	int error = -EBADF;	if (f) {		error = vfs_getattr(f->f_path.mnt, f->f_path.dentry, stat);		fput_light(f, fput_needed);	}	return error;}
开发者ID:LiquidSmokeX64,项目名称:URKernel,代码行数:12,


示例18: devtmpfs_delete_node

int devtmpfs_delete_node(struct device *dev){	const char *tmp = NULL;	const char *nodename;	const struct cred *curr_cred;	struct nameidata nd;	struct dentry *dentry;	struct kstat stat;	int deleted = 1;	int err;	if (!dev_mnt)		return 0;	nodename = device_get_devnode(dev, NULL, &tmp);	if (!nodename)		return -ENOMEM;	curr_cred = override_creds(&init_cred);	err = vfs_path_lookup(dev_mnt->mnt_root, dev_mnt,			      nodename, LOOKUP_PARENT, &nd);	if (err)		goto out;	mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);	dentry = lookup_one_len(nd.last.name, nd.path.dentry, nd.last.len);	if (!IS_ERR(dentry)) {		if (dentry->d_inode) {			err = vfs_getattr(nd.path.mnt, dentry, &stat);			if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {				err = vfs_unlink(nd.path.dentry->d_inode,						 dentry);				if (!err || err == -ENOENT)					deleted = 1;			}		} else {			err = -ENOENT;		}		dput(dentry);	} else {		err = PTR_ERR(dentry);	}	mutex_unlock(&nd.path.dentry->d_inode->i_mutex);	path_put(&nd.path);	if (deleted && strchr(nodename, '/'))		delete_path(nodename);out:	kfree(tmp);	revert_creds(curr_cred);	return err;}
开发者ID:Blue-Design,项目名称:ev3sources,代码行数:52,


示例19: file_size

unsigned long long file_size(struct file * file_ptr) {    struct kstat s;    int ret;    ret = vfs_getattr(file_ptr->f_path.mnt, file_ptr->f_path.dentry, &s);    if (ret != 0) {        printk(KERN_ERR "Failed to fstat file/n");        return -1;    }    return s.size;}
开发者ID:iph,项目名称:memory-allocator,代码行数:13,


示例20: handle_remove

static int handle_remove(const char *nodename, struct device *dev){	struct nameidata nd;	struct dentry *dentry;	struct kstat stat;	int deleted = 1;	int err;	err = kern_path_parent(nodename, &nd);	if (err)		return err;	mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);	dentry = lookup_one_len(nd.last.name, nd.path.dentry, nd.last.len);	if (!IS_ERR(dentry)) {		if (dentry->d_inode) {			err = vfs_getattr(nd.path.mnt, dentry, &stat);			if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {				struct iattr newattrs;				/*				 * before unlinking this node, reset permissions				 * of possible references like hardlinks				 */				newattrs.ia_uid = 0;				newattrs.ia_gid = 0;				newattrs.ia_mode = stat.mode & ~0777;				newattrs.ia_valid =					ATTR_UID|ATTR_GID|ATTR_MODE;				mutex_lock(&dentry->d_inode->i_mutex);				notify_change(dentry, &newattrs);				mutex_unlock(&dentry->d_inode->i_mutex);				err = vfs_unlink(nd.path.dentry->d_inode,						 dentry);				if (!err || err == -ENOENT)					deleted = 1;			}		} else {			err = -ENOENT;		}		dput(dentry);	} else {		err = PTR_ERR(dentry);	}	mutex_unlock(&nd.path.dentry->d_inode->i_mutex);	path_put(&nd.path);	if (deleted && strchr(nodename, '/'))		delete_path(nodename);	return err;}
开发者ID:nos1609,项目名称:Chrono_Kernel-1,代码行数:50,


示例21: diaryfs_getattr

static int diaryfs_getattr(struct vfsmount *mnt, struct dentry * dentry, struct kstat *stat) {	int err;	struct kstat lower_stat;	struct path lower_path;	diaryfs_get_lower_path(dentry, &lower_path); 	err = vfs_getattr(&lower_path, &lower_stat);	if (err) 		goto out;	fsstack_copy_attr_all(dentry->d_inode, lower_path.dentry->d_inode);	generic_fillattr(dentry->d_inode, stat);	stat->blocks = lower_stat.blocks;out:	diaryfs_put_lower_path(dentry, &lower_path);	return err;}
开发者ID:jameswhang,项目名称:DiaryFS,代码行数:16,


示例22: nullfs_vfs_getlowerattr

static intnullfs_vfs_getlowerattr(mount_t mp, struct vfs_attr * vfap, vfs_context_t ctx){	memset(vfap, 0, sizeof(*vfap));	VFSATTR_INIT(vfap);	VFSATTR_WANTED(vfap, f_bsize);	VFSATTR_WANTED(vfap, f_iosize);	VFSATTR_WANTED(vfap, f_blocks);	VFSATTR_WANTED(vfap, f_bfree);	VFSATTR_WANTED(vfap, f_bavail);	VFSATTR_WANTED(vfap, f_bused);	VFSATTR_WANTED(vfap, f_files);	VFSATTR_WANTED(vfap, f_ffree);	VFSATTR_WANTED(vfap, f_capabilities);	return vfs_getattr(mp, vfap, ctx);}
开发者ID:aglab2,项目名称:darwin-xnu,代码行数:17,


示例23: handle_remove

/*! 2017. 8.12 study -ing */static int handle_remove(const char *nodename, struct device *dev){	struct path parent;	struct dentry *dentry;	int deleted = 0;	int err;	dentry = kern_path_locked(nodename, &parent);	if (IS_ERR(dentry))		return PTR_ERR(dentry);	if (dentry->d_inode) {		struct kstat stat;		struct path p = {.mnt = parent.mnt, .dentry = dentry};		err = vfs_getattr(&p, &stat);		if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {			struct iattr newattrs;			/*			 * before unlinking this node, reset permissions			 * of possible references like hardlinks			 */			newattrs.ia_uid = GLOBAL_ROOT_UID;			newattrs.ia_gid = GLOBAL_ROOT_GID;			newattrs.ia_mode = stat.mode & ~0777;			newattrs.ia_valid =				ATTR_UID|ATTR_GID|ATTR_MODE;			mutex_lock(&dentry->d_inode->i_mutex);			notify_change(dentry, &newattrs, NULL);			mutex_unlock(&dentry->d_inode->i_mutex);			err = vfs_unlink(parent.dentry->d_inode, dentry, NULL);			if (!err || err == -ENOENT)				deleted = 1;		}	} else {		err = -ENOENT;	}	dput(dentry);	mutex_unlock(&parent.dentry->d_inode->i_mutex);	path_put(&parent);	if (deleted && strchr(nodename, '/'))		delete_path(nodename);	return err;}
开发者ID:iamroot11B,项目名称:linux_stable_3_14_4,代码行数:45,


示例24: vfsub_update_h_iattr

int vfsub_update_h_iattr(struct path *h_path, int *did){	int err;	struct kstat st;	struct super_block *h_sb;	/* for remote fs, leave work for its getattr or d_revalidate */	/* for bad i_attr fs, handle them in aufs_getattr() */	/* still some fs may acquire i_mutex. we need to skip them */	err = 0;	if (!did)		did = &err;	h_sb = h_path->dentry->d_sb;	*did = (!au_test_fs_remote(h_sb) && au_test_fs_refresh_iattr(h_sb));	if (*did)		err = vfs_getattr(h_path->mnt, h_path->dentry, &st);	return err;}
开发者ID:aywq2008,项目名称:omniplay,代码行数:19,


示例25: cr_fstat

/* Wrapper for vfs_getattr() to ensure we have the most * up-to-date inode info if working on a network filesystem. */int cr_fstat(cr_objectmap_t map, struct file *filp){    struct dentry *dentry = filp->f_dentry;    struct inode *inode = dentry->d_inode;    char *map_key = 1 + (char *)dentry;    int retval = 0;    if (!inode->i_op->getattr) {	/* Not a special fs, so trivially nothing to do */    } else if (map && cr_find_object(map, map_key, NULL)) {	/* Attrs up-to-date, so nothing to do */    } else {	struct kstat stat;	retval = vfs_getattr(filp->f_vfsmnt, dentry, &stat);	if (map && !retval) {	    cr_insert_object(map, map_key, (void *)1UL, GFP_KERNEL);	}    }    return retval;}
开发者ID:AvengerMoJo,项目名称:apc-8750,代码行数:24,


示例26: ovl_workdir

static struct dentry *ovl_clear_empty(struct dentry *dentry,				      struct list_head *list){	struct dentry *workdir = ovl_workdir(dentry);	struct inode *wdir = workdir->d_inode;	struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);	struct inode *udir = upperdir->d_inode;	struct path upperpath;	struct dentry *upper;	struct dentry *opaquedir;	struct kstat stat;	int err;	if (WARN_ON(!workdir))		return ERR_PTR(-EROFS);	err = ovl_lock_rename_workdir(workdir, upperdir);	if (err)		goto out;	ovl_path_upper(dentry, &upperpath);	err = vfs_getattr(&upperpath, &stat);	if (err)		goto out_unlock;	err = -ESTALE;	if (!S_ISDIR(stat.mode))		goto out_unlock;	upper = upperpath.dentry;	if (upper->d_parent->d_inode != udir)		goto out_unlock;	opaquedir = ovl_lookup_temp(workdir, dentry);	err = PTR_ERR(opaquedir);	if (IS_ERR(opaquedir))		goto out_unlock;	err = ovl_create_real(wdir, opaquedir,			      &(struct cattr){.mode = stat.mode}, NULL, true);
开发者ID:AshishNamdev,项目名称:linux,代码行数:39,



注:本文中的vfs_getattr函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ vfs_link函数代码示例
C++ vfs_fsync_range函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。