Index: base/services/nfsd/readwrite.c
===================================================================
--- base/services/nfsd/readwrite.c	(révision 75436)
+++ base/services/nfsd/readwrite.c	(copie de travail)
@@ -142,27 +142,39 @@
     ULONG pnfs_bytes_read = 0;
     int status = NO_ERROR;
 
-    nfs41_open_stateid_arg(upcall->state_ref, &stateid);
+    do
+    {
+        nfs41_open_stateid_arg(upcall->state_ref, &stateid);
 
 #ifdef PNFS_ENABLE_READ
-    status = read_from_pnfs(upcall, &stateid);
+        status = read_from_pnfs(upcall, &stateid);
 
-    if (status == NO_ERROR || status == ERROR_HANDLE_EOF)
-        goto out;
+        if (status == NO_ERROR || status == ERROR_HANDLE_EOF)
+            goto out;
 
-    if (args->out_len) {
-        pnfs_bytes_read = args->out_len;
-        args->out_len = 0;
+        if (args->out_len) {
+            pnfs_bytes_read = args->out_len;
+            args->out_len = 0;
 
-        args->offset += pnfs_bytes_read;
-        args->buffer += pnfs_bytes_read;
-        args->len -= pnfs_bytes_read;
-    }
+            args->offset += pnfs_bytes_read;
+            args->buffer += pnfs_bytes_read;
+            args->len -= pnfs_bytes_read;
+        }
 #endif
 
-    status = read_from_mds(upcall, &stateid);
+        status = read_from_mds(upcall, &stateid);
+        if (status == 1006)
+        {
+            nfs41_session_renew(upcall->state_ref->session);
+            DbgPrint("Session renewed!\n");
+            continue;
+        }
 
-    args->out_len += pnfs_bytes_read;
+        args->out_len += pnfs_bytes_read;
+
+        break;
+    }
+    while (TRUE);
 out:
     return status;
 }
