LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Halil Pasic <pasic@linux.ibm.com> To: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org Cc: cohuck@redhat.com, borntraeger@de.ibm.com, bjsdjshi@linux.ibm.com, pmorel@linux.ibm.com, Halil Pasic <pasic@linux.vnet.ibm.com> Subject: Re: [PATCH v2 1/5] vfio: ccw: fix cleanup if cp_prefetch fails Date: Mon, 23 Apr 2018 13:38:54 +0200 [thread overview] Message-ID: <3c983bb3-5c2a-5dcf-ed77-32eb60ff2837@linux.ibm.com> (raw) In-Reply-To: <20180423110113.59385-2-bjsdjshi@linux.vnet.ibm.com> On 04/23/2018 01:01 PM, Dong Jia Shi wrote: > From: Halil Pasic <pasic@linux.vnet.ibm.com> > > If the translation of a channel program fails, we may end up attempting > to clean up (free, unpin) stuff that never got translated (and allocated, > pinned) in the first place. > > By adjusting the lengths of the chains accordingly (so the element that > failed, and all subsequent elements are excluded) cleanup activities > based on false assumptions can be avoided. > > Let's make sure cp_free works properly after cp_prefetch returns with an > error by setting ch_len of a ccw chain to the number of the translated > CCWs on that chain. > > Acked-by: Pierre Morel <pmorel@linux.vnet.ibm.com> > Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> > Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com> > Signed-off-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> AFAIR we came to the conclusion that this one is stable material. [https://www.spinics.net/lists/kvm/msg166629.html] > --- > drivers/s390/cio/vfio_ccw_cp.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/s390/cio/vfio_ccw_cp.c b/drivers/s390/cio/vfio_ccw_cp.c > index 2c7550797ec2..62d66e195304 100644 > --- a/drivers/s390/cio/vfio_ccw_cp.c > +++ b/drivers/s390/cio/vfio_ccw_cp.c > @@ -715,6 +715,10 @@ void cp_free(struct channel_program *cp) > * and stores the result to ccwchain list. @cp must have been > * initialized by a previous call with cp_init(). Otherwise, undefined > * behavior occurs. > + * For each chain composing the channel program: > + * - On entry ch_len holds the count of CCW to be translated. > + * - On exit ch_len is adjusted to the count of successfully translated CCW. > + * This allows cp_free to find in ch_len the count of CCW to free in a chain. > * > * The S/390 CCW Translation APIS (prefixed by 'cp_') are introduced > * as helpers to do ccw chain translation inside the kernel. Basically > @@ -749,11 +753,18 @@ int cp_prefetch(struct channel_program *cp) > for (idx = 0; idx < len; idx++) { > ret = ccwchain_fetch_one(chain, idx, cp); > if (ret) > - return ret; > + goto out_err; > } > } > > return 0; > +out_err: > + /* Only cleanup the chain elements that were actually translated. */ > + chain->ch_len = idx; > + list_for_each_entry_continue(chain, &cp->ccwchain_list, next) { > + chain->ch_len = 0; > + } > + return ret; > } > > /** >
next prev parent reply other threads:[~2018-04-23 11:39 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-04-23 11:01 [PATCH v2 0/5] vfio: ccw: error handling fixes and improvements Dong Jia Shi 2018-04-23 11:01 ` [PATCH v2 1/5] vfio: ccw: fix cleanup if cp_prefetch fails Dong Jia Shi 2018-04-23 11:38 ` Halil Pasic [this message] 2018-04-23 11:40 ` Cornelia Huck 2018-04-23 12:00 ` Halil Pasic 2018-04-24 9:31 ` Cornelia Huck [not found] ` <20180425024341.GY12194@bjsdjshi@linux.vnet.ibm.com> 2018-04-25 11:19 ` Halil Pasic 2018-04-23 11:01 ` [PATCH v2 2/5] vfio: ccw: shorten kernel doc description for pfn_array_pin() Dong Jia Shi 2018-04-23 11:44 ` Cornelia Huck 2018-04-23 11:01 ` [PATCH v2 3/5] vfio: ccw: refactor and improve pfn_array_alloc_pin() Dong Jia Shi 2018-04-23 11:01 ` [PATCH v2 4/5] vfio: ccw: set ccw->cda to NULL defensively Dong Jia Shi 2018-04-23 11:01 ` [PATCH v2 5/5] vfio: ccw: add traceponits for interesting error paths Dong Jia Shi 2018-04-27 10:13 ` Cornelia Huck [not found] ` <20180428055023.GS5428@bjsdjshi@linux.vnet.ibm.com> 2018-04-30 11:51 ` Cornelia Huck 2018-04-30 14:14 ` Halil Pasic 2018-04-30 15:03 ` Cornelia Huck 2018-04-30 16:51 ` Halil Pasic [not found] ` <20180502022330.GT5428@bjsdjshi@linux.vnet.ibm.com> [not found] ` <20180516065355.GB6363@bjsdjshi@linux.ibm.com> 2018-05-22 12:55 ` Cornelia Huck 2018-04-23 11:32 ` [PATCH v2 0/5] vfio: ccw: error handling fixes and improvements Cornelia Huck
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=3c983bb3-5c2a-5dcf-ed77-32eb60ff2837@linux.ibm.com \ --to=pasic@linux.ibm.com \ --cc=bjsdjshi@linux.ibm.com \ --cc=bjsdjshi@linux.vnet.ibm.com \ --cc=borntraeger@de.ibm.com \ --cc=cohuck@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-s390@vger.kernel.org \ --cc=pasic@linux.vnet.ibm.com \ --cc=pmorel@linux.ibm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).