Al Viro <viro@xxxxxxxxxxxxxxxxxx> writes: > On Thu, Jul 11, 2013 at 02:42:54PM -0700, Linus Torvalds wrote: >> But with an *old* kernel, O_TMPFILE will just silently be ignored as >> an unrecognized flag, and things won't work. If you do >> >> fd = open("dirname", O_CREAT | O_TMPFILE | O_RDWR, 0666); >> >> it may be that it ends up acting as a "create file at specified >> directory path" instead of what the user *meant* for it to do, which >> was "create unnamed temporary file in the specified directory". >> > > It's slightly less painful than that - if dirname exists, the old kernels > will fail; O_CREAT for existing directory means an error. But isn't the problem the case where dirname does not exist? I.e., the application has to make sure that "/some/where" exists and is a directory before open("/some/where", O_CREAT | O_TMPFILE | O_RDWR, 0666) can be relied upon to fail on kernels not recognizing O_TMPFILE, instead of just creating "where" in "/some". Just thinking out loud, and please tell me to shut up if it doesn't make sense: The documentation for O_DIRECTORY seems to imply that one could require O_DIRECTORY to be given when using O_TMPFILE. The "If pathname is not a directory, cause the open to fail" certainly seems to make sense when O_TMPFILE is used, and older kernels should complain when seeing the O_CREAT|O_DIRECTORY combination. It is a hack, though. Rasmus -- 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