Page MenuHomeFreeBSD

D26620.id78035.diff
No OneTemporary

D26620.id78035.diff

Index: head/sys/kern/vfs_vnops.c
===================================================================
--- head/sys/kern/vfs_vnops.c
+++ head/sys/kern/vfs_vnops.c
@@ -3017,7 +3017,7 @@
struct uio io;
off_t startoff, endoff, xfer, xfer2;
u_long blksize;
- int error;
+ int error, interrupted;
bool cantseek, readzeros, eof, lastblock;
ssize_t aresid;
size_t copylen, len, rem, savlen;
@@ -3027,6 +3027,7 @@
holein = holeout = 0;
savlen = len = *lenp;
error = 0;
+ interrupted = 0;
dat = NULL;
error = vn_lock(invp, LK_SHARED);
@@ -3116,7 +3117,7 @@
* support holes on the server, but do not support FIOSEEKHOLE.
*/
eof = false;
- while (len > 0 && error == 0 && !eof) {
+ while (len > 0 && error == 0 && !eof && interrupted == 0) {
endoff = 0; /* To shut up compilers. */
cantseek = true;
startoff = *inoffp;
@@ -3177,6 +3178,8 @@
*inoffp += xfer;
*outoffp += xfer;
len -= xfer;
+ if (len < savlen)
+ interrupted = sig_intr();
}
}
copylen = MIN(len, endoff - startoff);
@@ -3198,7 +3201,7 @@
xfer -= (*inoffp % blksize);
}
/* Loop copying the data block. */
- while (copylen > 0 && error == 0 && !eof) {
+ while (copylen > 0 && error == 0 && !eof && interrupted == 0) {
if (copylen < xfer)
xfer = copylen;
error = vn_lock(invp, LK_SHARED);
@@ -3239,6 +3242,8 @@
*outoffp += xfer;
copylen -= xfer;
len -= xfer;
+ if (len < savlen)
+ interrupted = sig_intr();
}
}
xfer = blksize;

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 21, 2:05 PM (16 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25768495
Default Alt Text
D26620.id78035.diff (1 KB)

Event Timeline