]> Zhao Yanbai Git Server - minix.git/commitdiff
PFS: when copy fails, don't change state
authorBen Gras <ben@minix3.org>
Wed, 26 Feb 2014 14:57:08 +0000 (15:57 +0100)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:13 +0000 (17:05 +0200)
. makes it safe to transparently repeate i/o operation on
  EFAULT
. needed for future re-issued i/o operation change in VFS

Change-Id: Iea6b29f3bff19002dcd69b30569671768ac17e21

servers/pfs/read.c

index 157ed67cbc5fa06497e385ca2788a04f37df763b..342d0baf8dcebf9f121cf3d6cf098211e4f9d818 100644 (file)
@@ -74,18 +74,19 @@ int fs_readwrite(message *fs_m_in, message *fs_m_out)
   if (r == OK) {
        position += (signed) nrbytes; /* Update position */
        cum_io += nrbytes;
-  }
 
-  /* On write, update file size and access time. */
-  if (rw_flag == WRITING) {
-       rip->i_size = position;
-  } else {
-       memmove(bp->b_data, bp->b_data+nrbytes, rip->i_size - nrbytes);
-       rip->i_size -= nrbytes;
+       /* On write, update file size and access time. */
+       if (rw_flag == WRITING) {
+               rip->i_size = position;
+       } else {
+               memmove(bp->b_data, bp->b_data+nrbytes, rip->i_size - nrbytes);
+               rip->i_size -= nrbytes;
+       }
+
+       if (rw_flag == READING) rip->i_update |= ATIME;
+       if (rw_flag == WRITING) rip->i_update |= CTIME | MTIME;
   }
 
-  if (rw_flag == READING) rip->i_update |= ATIME;
-  if (rw_flag == WRITING) rip->i_update |= CTIME | MTIME;
   fs_m_out->RES_NBYTES = (size_t) cum_io;
   fs_m_out->RES_SEEK_POS = rip->i_size;