[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