Maxim Patlasov <[email protected]> writes:
> Port Dima's patch: > >> ploop must obey write access convention on slow path. >> >> Normally no one shoult freeze private-fs bcause this may result in weird >> glitches. >> But in case of vzfs-layout freezefs is possible for a small about of time. >> https://jira.sw.ru/browse/PSBM-20150 >> >> Signed-off-by: Dmitry Monakhov <[email protected]> > Ack-by: Dmitry Monakhov <[email protected]> > Signed-off-by: Maxim Patlasov <[email protected]> > --- > drivers/block/ploop/io_direct.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/drivers/block/ploop/io_direct.c b/drivers/block/ploop/io_direct.c > index d6f0f21..0c7e0c4 100644 > --- a/drivers/block/ploop/io_direct.c > +++ b/drivers/block/ploop/io_direct.c > @@ -384,6 +384,8 @@ cached_submit(struct ploop_io *io, iblock_t iblk, struct > ploop_request * preq, > end_pos = pos + clu_siz; > used_pos = (io->alloc_head - 1) << (io->plo->cluster_log + 9); > > + file_start_write(io->files.file); > + > #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24) > if (use_prealloc && end_pos > used_pos && may_fallocate) { > if (unlikely(io->prealloced_size < clu_siz)) { > @@ -398,7 +400,7 @@ try_again: > prealloc = clu_siz; > goto try_again; > } else { > - return err; > + goto end_write; > } > } > > @@ -414,14 +416,17 @@ try_again: > sector_t len = 1 << preq->plo->cluster_log; > struct extent_map * em = extent_lookup_create(io, sec, len); > > - if (unlikely(IS_ERR(em))) > - return PTR_ERR(em); > + if (unlikely(IS_ERR(em))) { > + err = PTR_ERR(em); > + goto end_write; > + } > > preq->iblock = iblk; > preq->eng_io = io; > set_bit(PLOOP_REQ_POST_SUBMIT, &preq->state); > dio_submit_pad(io, preq, sbl, size, em); > - return 0; > + err = 0; > + goto end_write; > } > > bio_iter_init(&biter, sbl); > @@ -496,6 +501,8 @@ try_again: > mod_timer(&io->fsync_timer, jiffies + > plo->tune.fsync_delay); > spin_unlock_irq(&plo->lock); > } > +end_write: > + file_end_write(io->files.file); > return err; > } > > @@ -506,9 +513,11 @@ dio_post_submit(struct ploop_io *io, struct > ploop_request * preq) > loff_t clu_siz = 1 << (preq->plo->cluster_log + 9); > int err; > > + file_start_write(io->files.file); > err = io->files.file->f_op->fallocate(io->files.file, > FALLOC_FL_CONVERT_UNWRITTEN, > (loff_t)sec << 9, clu_siz); > + file_end_write(io->files.file); > if (err) { > PLOOP_REQ_SET_ERROR(preq, err); > set_bit(PLOOP_S_ABORT, &preq->plo->state);
signature.asc
Description: PGP signature
_______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
