WRITE_LIFE_EXTREME      = RWH_WRITE_LIFE_EXTREME,
 };
 
-#define IOCB_EVENTFD           (1 << 0)
-#define IOCB_APPEND            (1 << 1)
-#define IOCB_DIRECT            (1 << 2)
-#define IOCB_HIPRI             (1 << 3)
-#define IOCB_DSYNC             (1 << 4)
-#define IOCB_SYNC              (1 << 5)
-#define IOCB_WRITE             (1 << 6)
-#define IOCB_NOWAIT            (1 << 7)
+/* Match RWF_* bits to IOCB bits */
+#define IOCB_HIPRI             (__force int) RWF_HIPRI
+#define IOCB_DSYNC             (__force int) RWF_DSYNC
+#define IOCB_SYNC              (__force int) RWF_SYNC
+#define IOCB_NOWAIT            (__force int) RWF_NOWAIT
+#define IOCB_APPEND            (__force int) RWF_APPEND
+
+/* non-RWF related bits - start at 16 */
+#define IOCB_EVENTFD           (1 << 16)
+#define IOCB_DIRECT            (1 << 17)
+#define IOCB_WRITE             (1 << 18)
 /* iocb->ki_waitq is valid */
-#define IOCB_WAITQ             (1 << 8)
-#define IOCB_NOIO              (1 << 9)
+#define IOCB_WAITQ             (1 << 19)
+#define IOCB_NOIO              (1 << 20)
 
 struct kiocb {
        struct file             *ki_filp;
 {
        int kiocb_flags = 0;
 
+       /* make sure there's no overlap between RWF and private IOCB flags */
+       BUILD_BUG_ON((__force int) RWF_SUPPORTED & IOCB_EVENTFD);
+
        if (!flags)
                return 0;
        if (unlikely(flags & ~RWF_SUPPORTED))
        if (flags & RWF_NOWAIT) {
                if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
                        return -EOPNOTSUPP;
-               kiocb_flags |= IOCB_NOWAIT | IOCB_NOIO;
+               kiocb_flags |= IOCB_NOIO;
        }
-       if (flags & RWF_HIPRI)
-               kiocb_flags |= IOCB_HIPRI;
-       if (flags & RWF_DSYNC)
-               kiocb_flags |= IOCB_DSYNC;
+       kiocb_flags |= (__force int) (flags & RWF_SUPPORTED);
        if (flags & RWF_SYNC)
-               kiocb_flags |= (IOCB_DSYNC | IOCB_SYNC);
-       if (flags & RWF_APPEND)
-               kiocb_flags |= IOCB_APPEND;
+               kiocb_flags |= IOCB_DSYNC;
 
        ki->ki_flags |= kiocb_flags;
        return 0;