[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 4/6] kernel2: pwrite braucht nicht immer ein RMW



! kernel2: Wenn das Alignment vom Request schon passt, dann gibt es
  keinen Grund, die Daten erst einmal einzulesen. Besonders wenn die
  Ressource write-only ist (z.B. vterm:/.../out) ist das hilfreich,
  sonst geht das Schreiben immer schief. Für alle anderen tut es
  vermutlich nur der Performance gut.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/kernel2/src/lostio/client.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/kernel2/src/lostio/client.c b/src/kernel2/src/lostio/client.c
index 46f2456..b2922eb 100644
--- a/src/kernel2/src/lostio/client.c
+++ b/src/kernel2/src/lostio/client.c
@@ -418,10 +418,13 @@ ssize_t lio_pwrite(struct lio_stream* s, uint64_t offset, size_t bytes,
     uint64_t curoffset = offset_aligned;
     int old_flags;
 
-    old_flags = s->flags;
-    s->flags |= LIO_READ;
-    ret = lio_pread(s, offset_aligned, bytes_aligned, bounce);
-    s->flags = old_flags;
+    if (offset != offset_aligned || bytes != bytes_aligned) {
+        old_flags = s->flags;
+        // FIXME Wenn das mal nicht racy ist...
+        s->flags |= LIO_READ;
+        ret = lio_pread(s, offset_aligned, bytes_aligned, bounce);
+        s->flags = old_flags;
+    }
 
     if (ret < 0) {
         goto out;
-- 
2.1.2