Beispiel #1
0
static int sysfs_follow_link(struct dentry *dentry, struct nameidata *nd)
{
	int error = -ENOMEM;
	unsigned long page = get_zeroed_page(GFP_KERNEL);
	if (page)
		error = sysfs_getlink(dentry, (char *) page); 
	nd_set_link(nd, error ? ERR_PTR(error) : (char *)page);
	return 0;
}
Beispiel #2
0
static void *sysfs_follow_link(struct dentry *dentry, struct nameidata *nd)
{
	int error = -ENOMEM;
	unsigned long page = get_zeroed_page(GFP_KERNEL);
	if (page) {
		error = sysfs_getlink(dentry, (char *) page); 
		if (error < 0)
			free_page((unsigned long)page);
	}
	nd_set_link(nd, error ? ERR_PTR(error) : (char *)page);
	return NULL;
}
int sysfs_follow_link(struct dentry *dentry, struct nameidata *nd)
{
	int error = 0;
	unsigned long page = get_zeroed_page(GFP_KERNEL);

	if (!page)
		return -ENOMEM;

	error = sysfs_getlink(dentry, (char *) page); 
	if (!error)
	        error = vfs_follow_link(nd, (char *) page);

	free_page(page);

	return error;
}
int sysfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
{
	int error = 0;
	unsigned long page = get_zeroed_page(GFP_KERNEL);

	if (!page)
		return -ENOMEM;

	error = sysfs_getlink(dentry, (char *) page);
	if (!error)
	        error = vfs_readlink(dentry, buffer, buflen, (char *) page);

	free_page(page);

	return error;
}