Prechádzať zdrojové kódy

Try without O_DIRECT if run under normal user

Suren A. Chilingaryan 12 rokov pred
rodič
commit
0af5dbbe4e
1 zmenil súbory, kde vykonal 13 pridanie a 1 odobranie
  1. 13 1
      default.c

+ 13 - 1
default.c

@@ -117,7 +117,19 @@ int fastwriter_default_open(fastwriter_t *fw, const char *name, fastwriter_flags
 	open_flags |= O_TRUNC;
 
     ctx->fd = open(name, open_flags, open_mode);
-    if (ctx->fd < 0) return errno;
+#ifdef SYNC_MODE
+    if (ctx->fd < 0) {
+	    // Running as normal user, try to disable direct mode
+	if ((errno == EINVAL)&&(ctx->sync_mode)) {
+	    ctx->sync_mode = 0;
+	    open_flags &= ~O_DIRECT;
+	    ctx->fd = open(name, open_flags, open_mode);
+	}
+#endif /* SYNC_MODE */
+	if (ctx->fd < 0) return errno;
+#ifdef SYNC_MODE
+    }
+#endif /* SYNC_MODE */
 
     if (((open_flags&FASTWRITER_FLAGS_OVERWRITE)==0)&&(strcmp(fs, "raw"))) {
 	ctx->prior_size = lseek(ctx->fd, 0, SEEK_END);