Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/fuse/fuse_io.c
Show First 20 Lines • Show All 549 Lines • ▼ Show 20 Lines | if (ioflag & IO_APPEND) | ||||
uio_setoffset(uio, filesize); | uio_setoffset(uio, filesize); | ||||
if (vn_rlimit_fsize(vp, uio, uio->uio_td)) | if (vn_rlimit_fsize(vp, uio, uio->uio_td)) | ||||
return (EFBIG); | return (EFBIG); | ||||
fdisp_init(&fdi, 0); | fdisp_init(&fdi, 0); | ||||
while (uio->uio_resid > 0) { | while (uio->uio_resid > 0) { | ||||
size_t sizeof_fwi; | |||||
if (fuse_libabi_geq(data, 7, 9)) { | |||||
emaste: Probably put a blank line after the variable declaration | |||||
sizeof_fwi = sizeof(*fwi); | |||||
} else { | |||||
sizeof_fwi = FUSE_COMPAT_WRITE_IN_SIZE; | |||||
} | |||||
chunksize = MIN(uio->uio_resid, data->max_write); | chunksize = MIN(uio->uio_resid, data->max_write); | ||||
fdi.iosize = sizeof(*fwi) + chunksize; | fdi.iosize = sizeof_fwi + chunksize; | ||||
fdisp_make_vp(&fdi, FUSE_WRITE, vp, uio->uio_td, cred); | fdisp_make_vp(&fdi, FUSE_WRITE, vp, uio->uio_td, cred); | ||||
fwi = fdi.indata; | fwi = fdi.indata; | ||||
fwi->fh = fufh->fh_id; | fwi->fh = fufh->fh_id; | ||||
fwi->offset = uio->uio_offset; | fwi->offset = uio->uio_offset; | ||||
fwi->size = chunksize; | fwi->size = chunksize; | ||||
fwi->write_flags = write_flags; | fwi->write_flags = write_flags; | ||||
if (fuse_libabi_geq(data, 7, 9)) { | if (fuse_libabi_geq(data, 7, 9)) { | ||||
fwi->flags = fufh_type_2_fflags(fufh->fufh_type); | fwi->flags = fufh_type_2_fflags(fufh->fufh_type); | ||||
fwi_data = (char *)fdi.indata + sizeof(*fwi); | |||||
} else { | |||||
fwi_data = (char *)fdi.indata + | |||||
FUSE_COMPAT_WRITE_IN_SIZE; | |||||
} | } | ||||
fwi_data = (char *)fdi.indata + sizeof_fwi; | |||||
if ((err = uiomove(fwi_data, chunksize, uio))) | if ((err = uiomove(fwi_data, chunksize, uio))) | ||||
break; | break; | ||||
retry: | retry: | ||||
err = fdisp_wait_answ(&fdi); | err = fdisp_wait_answ(&fdi); | ||||
if (err == ERESTART || err == EINTR || err == EWOULDBLOCK) { | if (err == ERESTART || err == EINTR || err == EWOULDBLOCK) { | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | if (diff < 0) { | ||||
} | } | ||||
if (ioflag & IO_DIRECT) { | if (ioflag & IO_DIRECT) { | ||||
/* Return early */ | /* Return early */ | ||||
uio->uio_resid += diff; | uio->uio_resid += diff; | ||||
uio->uio_offset -= diff; | uio->uio_offset -= diff; | ||||
break; | break; | ||||
} else { | } else { | ||||
/* Resend the unwritten portion of data */ | /* Resend the unwritten portion of data */ | ||||
fdi.iosize = sizeof(*fwi) + diff; | fdi.iosize = sizeof_fwi + diff; | ||||
/* Refresh fdi without clearing data buffer */ | /* Refresh fdi without clearing data buffer */ | ||||
fdisp_refresh_vp(&fdi, FUSE_WRITE, vp, | fdisp_refresh_vp(&fdi, FUSE_WRITE, vp, | ||||
uio->uio_td, cred); | uio->uio_td, cred); | ||||
fwi = fdi.indata; | fwi = fdi.indata; | ||||
MPASS2(fwi == fdi.indata, "FUSE dispatcher " | MPASS2(fwi == fdi.indata, "FUSE dispatcher " | ||||
"reallocated despite no increase in " | "reallocated despite no increase in " | ||||
"size?"); | "size?"); | ||||
void *src = (char*)fwi_data + fwo->size; | void *src = (char*)fwi_data + fwo->size; | ||||
▲ Show 20 Lines • Show All 522 Lines • Show Last 20 Lines |
Probably put a blank line after the variable declaration