[linux-cifs-client] How to best return errors on follow_link
Steve French
smfrench at gmail.com
Mon May 18 17:30:10 GMT 2009
Jeff noticed a problem with the error handling in cifs_follow_link
that brought up a question about how follow_link is supposed to be
handling errors. His change has a sideeffect of now returning NULL
instead of an ENOMEM on memory allocation errors in cifs_follow_link.
The caller of follow_link in the VFS (__do_follow_link) seems to
expect errors to be returned (see below piece of fs/namei.c) not a
NULL ptr:
cookie = dentry->d_inode->i_op->follow_link(dentry, nd);
error = PTR_ERR(cookie);
if (!IS_ERR(cookie)) {
char *s = nd_get_link(nd);
error = 0;
if (s)
error = __vfs_follow_link(nd, s);
if (dentry->d_inode->i_op->put_link)
dentry->d_inode->i_op->put_link(dentry, nd, cookie);
}
path_put(path);
return error;
Some file systems rather than returning an error to the caller will
call nd_set_link while will set: nd->saved_names[nd->depth] =
to the error;
Is it ok to return errors on follow_link - seems strange to return
them indicectly via set_link?
--
Thanks,
Steve
More information about the linux-cifs-client
mailing list