Beispiel #1
0
int sysfs_add_file(struct dentry * dir, const struct attribute * attr)
{
	struct dentry * dentry;
	int error;

	down(&dir->d_inode->i_sem);
	dentry = sysfs_get_dentry(dir,attr->name);
	if (!IS_ERR(dentry)) {
		error = sysfs_create(dentry,
				     (attr->mode & S_IALLUGO) | S_IFREG,
				     init_file);
		if (!error)
			dentry->d_fsdata = (void *)attr;
		dput(dentry);
	} else
		error = PTR_ERR(dentry);
	up(&dir->d_inode->i_sem);
	return error;
}
Beispiel #2
0
static int create_dir(struct kobject * k, struct dentry * p,
		      const char * n, struct dentry ** d)
{
	int error;

	down(&p->d_inode->i_sem);
	*d = sysfs_get_dentry(p,n);
	if (!IS_ERR(*d)) {
		error = sysfs_create(*d,
					 S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO,
					 init_dir);
		if (!error) {
			(*d)->d_fsdata = k;
			p->d_inode->i_nlink++;
		}
		dput(*d);
	} else
		error = PTR_ERR(*d);
	up(&p->d_inode->i_sem);
	return error;
}
/**
 *	sysfs_create_link - create symlink between two objects.
 *	@kobj:	object whose directory we're creating the link in.
 *	@target:	object we're pointing to.
 *	@name:		name of the symlink.
 */
int sysfs_create_link(struct kobject * kobj, struct kobject * target, char * name)
{
	struct dentry * dentry = kobj->dentry;
	struct dentry * d;
	int error = 0;

	down(&dentry->d_inode->i_sem);
	d = sysfs_get_dentry(dentry,name);
	if (!IS_ERR(d)) {
		error = sysfs_create(d, S_IFLNK|S_IRWXUGO, init_symlink);
		if (!error)
			/* 
			 * associate the link dentry with the target kobject 
			 */
			d->d_fsdata = kobject_get(target);
		dput(d);
	} else 
		error = PTR_ERR(d);
	up(&dentry->d_inode->i_sem);
	return error;
}
Beispiel #4
0
int sysfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
{
	return sysfs_create(dentry, mode, NULL);
}