Re: GFS2 and DLM
From: Ingo Molnar
Date: Tue Jun 27 2006 - 04:34:30 EST
* Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote:
> ->follow_link needs exactly the same locking as ->readlink. The whole
> point of using generic_readlink is to avoid having the filesystem
> reimplement almost the same code twice, once copying to a kernel
> buffer and once to a user buffer.
yeah, you are right, i confused it with ->follow_link() and was wrong
about the locking: generic_readlink() is just a wrapper around
->follow_link() and vfs_readlink().
Still, as far as i can see the gfs2 implementation of readlink is faster
(and hence a valid solution), because it knows the length of the symlink
buffer and hence can avoid the strlen() call in vfs_readlink():
int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link)
{
int len;
len = PTR_ERR(link);
if (IS_ERR(link))
goto out;
len = strlen(link); <============= [this one]
while gfs2 can do a straight copy to userspace:
error = gfs2_readlinki(ip, &buf, &len);
if (error)
return error;
if (user_size > len - 1)
user_size = len - 1;
if (copy_to_user(user_buf, buf, user_size))
error = -EFAULT;
else
error = user_size;
btw., ocfs2 does not use generic_readlink() either.
> Please read the code before giving such useless comments.
thank you for the encouragement to participate in VFS review activities,
it's really appreciated! It's always a joy taking part in lkml
discussions.
Ingo
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/