#define O_SYNC (__O_SYNC|O_DSYNC)
#define O_PATH 040000000
-#define O_TMPFILE 0100000000
+#define __O_TMPFILE 0100000000
#define F_GETLK 7
#define F_SETLK 8
#define O_INVISIBLE 004000000 /* invisible I/O, for DMAPI/XDSM */
#define O_PATH 020000000
-#define O_TMPFILE 040000000
+#define __O_TMPFILE 040000000
#define F_GETLK64 8
#define F_SETLK64 9
#define O_SYNC (__O_SYNC|O_DSYNC)
#define O_PATH 0x1000000
-#define O_TMPFILE 0x2000000
+#define __O_TMPFILE 0x2000000
#define F_GETOWN 5 /* for sockets. */
#define F_SETOWN 6 /* for sockets. */
file->f_flags = op->open_flag;
- if (unlikely(file->f_flags & O_TMPFILE)) {
+ if (unlikely(file->f_flags & __O_TMPFILE)) {
error = do_tmpfile(dfd, pathname, nd, flags, op, file, &opened);
goto out;
}
if (flags & __O_SYNC)
flags |= O_DSYNC;
- if (flags & O_TMPFILE) {
- if (!(flags & O_CREAT))
+ if (flags & __O_TMPFILE) {
+ if ((flags & O_TMPFILE_MASK) != O_TMPFILE)
return -EINVAL;
acc_mode = MAY_OPEN | ACC_MODE(flags);
} else if (flags & O_PATH) {
#define O_PATH 010000000
#endif
-#ifndef O_TMPFILE
-#define O_TMPFILE 020000000
+#ifndef __O_TMPFILE
+#define __O_TMPFILE 020000000
#endif
+/* a horrid kludge trying to make sure that this will fail on old kernels */
+#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY | O_RDWR)
+#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT | O_ACCMODE)
+
#ifndef O_NDELAY
#define O_NDELAY O_NONBLOCK
#endif