"Myklebust, Trond" <Trond.Myklebust@xxxxxxxxxx> writes: > On Wed, 2012-03-07 at 22:22 +0100, Miklos Szeredi wrote: >> + >> + if ((nd->flags & LOOKUP_OPEN) && dir_inode->i_op->atomic_open) { >> + struct file *filp; >> + >> + filp = atomic_open(nd, dentry, op, want_write, &create_error); >> + if (filp) { >> + dput(dentry); >> + return filp; >> + } >> + /* fall back to plain lookup */ >> + } > > Would it be possible to allow the filesystem to return a new dentry even > if it can't complete the actual open? That way we can return the actual > symlink that caused the open to fail instead of looking it up separately > (which may be subject to races). This should be possible, but I'm reluctant to add more arguments to ->atomic_open. Other possibilites that come to mind: return -ELOOKEDUP - caller should retry d_lookup and proceed with the result call opendata_set_dentry(od, dentry) and return NULL - caller checks opendata for non-NULL dentry and proceeds with that Thanks, Miklos -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html