Messages in this thread | | | Date | Mon, 12 Apr 1999 09:39:11 -0400 (EDT) | From | Alexander Viro <> | Subject | Re: [RFC] change of lookup() method. |
| |
On 12 Apr 1999, Magnus Ahltorp wrote:
> > Folks, right now we have ->lookup() returning 0 in case of success > > (in which case the argument gets hashed and becomes either positive or > > negative) or a negative integer in case of error (too long name, etc.). > > Proposed change: make it return a pointer to struct dentry. > > Semantics: > > NULL - old one would return 0. > > ERR_PTR(-foo) - old one would return foo. > > normal pointer - we got an alias dentry; act as if you've passed > > it to ->lookup() and it returned 0. > > (notice that it is binary compatible with the current variant, i.e. it > > doesn't break existing modules). > > This would be very good for Arla too, since right now, I'm doing some > magic just to make it install the inode into the passed dentry. > > I'm not quite sure what semantics you are proposing, though. If > real_lookup receives a normal pointer from ->lookup, what does it do > with the passed dentry? Just dput() and use the new value?
Relevant piece of new real_lookup():
result = ERR_PTR(-ENOMEM); if (dentry) { result = dir->i_op->lookup(dir, dentry); if (result) dput(dentry); /* covers both aliases and errors */ else result = dentry; }
IOW: if you are returning an alias - leave the argument as is, real_lookup() will take care of it.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |