diff mbox series

[08/13] 9p: darwin: Ignore O_{NOATIME, DIRECT}

Message ID a648afd776c8eb50398524c6c8d53629f5141211.1527310210.git.keno@alumni.harvard.edu
State New
Headers show
Series 9p: Add support for Darwin | expand

Commit Message

Keno Fischer May 26, 2018, 5:23 a.m. UTC
From: Keno Fischer <keno@alumni.harvard.edu>

Signed-off-by: Keno Fischer <keno@juliacomputing.com>
---
 hw/9pfs/9p.c | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

Comments

Greg Kurz May 29, 2018, 9:32 p.m. UTC | #1
On Sat, 26 May 2018 01:23:10 -0400
keno@juliacomputing.com wrote:

> From: Keno Fischer <keno@alumni.harvard.edu>
> 
> Signed-off-by: Keno Fischer <keno@juliacomputing.com>
> ---
>  hw/9pfs/9p.c | 37 +++++++++++++++++++++++--------------
>  1 file changed, 23 insertions(+), 14 deletions(-)
> 
> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> index 49654ae..f5f00aa 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -115,20 +115,27 @@ static int dotl_to_open_flags(int flags)
>      int oflags = flags & O_ACCMODE;
>  
>      DotlOpenflagMap dotl_oflag_map[] = {
> -        { P9_DOTL_CREATE, O_CREAT },
> -        { P9_DOTL_EXCL, O_EXCL },
> -        { P9_DOTL_NOCTTY , O_NOCTTY },
> -        { P9_DOTL_TRUNC, O_TRUNC },
> -        { P9_DOTL_APPEND, O_APPEND },
> -        { P9_DOTL_NONBLOCK, O_NONBLOCK } ,
> -        { P9_DOTL_DSYNC, O_DSYNC },
> -        { P9_DOTL_FASYNC, FASYNC },
> -        { P9_DOTL_DIRECT, O_DIRECT },
> -        { P9_DOTL_LARGEFILE, O_LARGEFILE },
> -        { P9_DOTL_DIRECTORY, O_DIRECTORY },
> -        { P9_DOTL_NOFOLLOW, O_NOFOLLOW },
> -        { P9_DOTL_NOATIME, O_NOATIME },
> -        { P9_DOTL_SYNC, O_SYNC },
> +        {P9_DOTL_CREATE, O_CREAT},
> +        {P9_DOTL_EXCL, O_EXCL},
> +        {P9_DOTL_NOCTTY, O_NOCTTY},
> +        {P9_DOTL_TRUNC, O_TRUNC},
> +        {P9_DOTL_APPEND, O_APPEND},
> +        {P9_DOTL_NONBLOCK, O_NONBLOCK},
> +        {P9_DOTL_DSYNC, O_DSYNC},
> +        {P9_DOTL_FASYNC, FASYNC},

Please don't kill the spaces.

> +#ifndef CONFIG_DARWIN
> +        {P9_DOTL_NOATIME, O_NOATIME},
> +        /* On Darwin, we could map to F_NOCACHE, which is
> +           similar, but doesn't quite have the same
> +           semantics. However, we don't support O_DIRECT

But are these semantics worse than dumping the flag ?

> +           even on linux at the moment, so we just ignore
> +           it here. */

Yeah, and I doubt we'll ever support it on linux either. But,
anyway, why filter these out ? Do they cause a build break ?

> +        {P9_DOTL_DIRECT, O_DIRECT},
> +#endif
> +        {P9_DOTL_LARGEFILE, O_LARGEFILE},
> +        {P9_DOTL_DIRECTORY, O_DIRECTORY},
> +        {P9_DOTL_NOFOLLOW, O_NOFOLLOW},
> +        {P9_DOTL_SYNC, O_SYNC},
>      };
>  
>      for (i = 0; i < ARRAY_SIZE(dotl_oflag_map); i++) {
> @@ -156,10 +163,12 @@ static int get_dotl_openflags(V9fsState *s, int oflags)
>       */
>      flags = dotl_to_open_flags(oflags);
>      flags &= ~(O_NOCTTY | O_ASYNC | O_CREAT);
> +#ifndef CONFIG_DARWIN
>      /*
>       * Ignore direct disk access hint until the server supports it.
>       */
>      flags &= ~O_DIRECT;
> +#endif
>      return flags;
>  }
>
Keno Fischer May 31, 2018, 4:35 p.m. UTC | #2
>
> Please don't kill the spaces.
>

Sorry, will undo. My editor has strong opinions about styling.

>> +#ifndef CONFIG_DARWIN
>> +        {P9_DOTL_NOATIME, O_NOATIME},
>> +        /* On Darwin, we could map to F_NOCACHE, which is
>> +           similar, but doesn't quite have the same
>> +           semantics. However, we don't support O_DIRECT
>
> But are these semantics worse than dumping the flag ?
>

I don't know. I looked around a bit and most OS abstraction
layers tend to not do this translation automatically:

https://github.com/libuv/libuv/issues/1600

>> +           even on linux at the moment, so we just ignore
>> +           it here. */
>
> Yeah, and I doubt we'll ever support it on linux either. But,
> anyway, why filter these out ? Do they cause a build break ?
>

Yes, neither O_DIRECT nor O_NOATIME are defined on Darwin,
so trying to use them causes errors.
diff mbox series

Patch

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 49654ae..f5f00aa 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -115,20 +115,27 @@  static int dotl_to_open_flags(int flags)
     int oflags = flags & O_ACCMODE;
 
     DotlOpenflagMap dotl_oflag_map[] = {
-        { P9_DOTL_CREATE, O_CREAT },
-        { P9_DOTL_EXCL, O_EXCL },
-        { P9_DOTL_NOCTTY , O_NOCTTY },
-        { P9_DOTL_TRUNC, O_TRUNC },
-        { P9_DOTL_APPEND, O_APPEND },
-        { P9_DOTL_NONBLOCK, O_NONBLOCK } ,
-        { P9_DOTL_DSYNC, O_DSYNC },
-        { P9_DOTL_FASYNC, FASYNC },
-        { P9_DOTL_DIRECT, O_DIRECT },
-        { P9_DOTL_LARGEFILE, O_LARGEFILE },
-        { P9_DOTL_DIRECTORY, O_DIRECTORY },
-        { P9_DOTL_NOFOLLOW, O_NOFOLLOW },
-        { P9_DOTL_NOATIME, O_NOATIME },
-        { P9_DOTL_SYNC, O_SYNC },
+        {P9_DOTL_CREATE, O_CREAT},
+        {P9_DOTL_EXCL, O_EXCL},
+        {P9_DOTL_NOCTTY, O_NOCTTY},
+        {P9_DOTL_TRUNC, O_TRUNC},
+        {P9_DOTL_APPEND, O_APPEND},
+        {P9_DOTL_NONBLOCK, O_NONBLOCK},
+        {P9_DOTL_DSYNC, O_DSYNC},
+        {P9_DOTL_FASYNC, FASYNC},
+#ifndef CONFIG_DARWIN
+        {P9_DOTL_NOATIME, O_NOATIME},
+        /* On Darwin, we could map to F_NOCACHE, which is
+           similar, but doesn't quite have the same
+           semantics. However, we don't support O_DIRECT
+           even on linux at the moment, so we just ignore
+           it here. */
+        {P9_DOTL_DIRECT, O_DIRECT},
+#endif
+        {P9_DOTL_LARGEFILE, O_LARGEFILE},
+        {P9_DOTL_DIRECTORY, O_DIRECTORY},
+        {P9_DOTL_NOFOLLOW, O_NOFOLLOW},
+        {P9_DOTL_SYNC, O_SYNC},
     };
 
     for (i = 0; i < ARRAY_SIZE(dotl_oflag_map); i++) {
@@ -156,10 +163,12 @@  static int get_dotl_openflags(V9fsState *s, int oflags)
      */
     flags = dotl_to_open_flags(oflags);
     flags &= ~(O_NOCTTY | O_ASYNC | O_CREAT);
+#ifndef CONFIG_DARWIN
     /*
      * Ignore direct disk access hint until the server supports it.
      */
     flags &= ~O_DIRECT;
+#endif
     return flags;
 }