On Fri, Jan 31, 2014 at 06:42:58PM +0000, Al Viro wrote: > On Thu, Jan 23, 2014 at 04:27:00PM -0500, J. Bruce Fields wrote: > > From: "J. Bruce Fields" <bfields@xxxxxxxxxx> > > > > d_splice_alias can create duplicate directory aliases (in the !new > > case), or (in the new case) d_move directories without holding > > appropriate locks. > > Details, please. In the new case, we have IS_ROOT() alias found; > what locks would that need? Note that d_materialise_unique() won't > bother with __d_unalias() in such case - it does what d_move() would've > done, without taking any mutex. Of course you're right, and Miklos had pointed this out already and I forgot to update the changelog. Apologies! > In the !new case, we'd need a preexisting dentry alias, complete with > parent. IOW, that's the case when directory already in the tree > has been found during lookup from another parent. In which case > we shouldn't be using d_splice_alias() at all, as it is (and it > certainly can't happen for any local fs). Yes, except: won't a local filesystem will still hit this case on a filesystem that's corrupted to link a directory into multiple parents? Though in that case arguably the right behavior might be, say, WARN and return -EIO. > Now, I agree that merging that with d_materialise_unique() might be > a good idea, but commit message is wrong as it, AFAICS. Agreed, I'll fix and resend. Though now I wonder whether it's worth keeping two different interfaces, one for the case when finding a parent in a different directory is an error and one for the case when it's normal and you'd just like it fixed up. (Then one remaining thing I don't understand is how to make that fixing up reliable. Or is there some reason nobody hits the _EBUSY case of __d_unalias?) --b. -- 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