Message ID | 20240130014208.565554-1-hannes@cmpxchg.org |
---|---|
Headers |
Return-Path: <linux-kernel+bounces-43739-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp941904dyb; Mon, 29 Jan 2024 17:42:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IGIvG7UF4Oh1QAhYUt02bg/HZNnucO+IQTtOgwVZGcNnou/7MWmx/nNPA2Vaq5MzpaN6/Bf X-Received: by 2002:a05:6a00:1ac7:b0:6dd:e2b9:d4a with SMTP id f7-20020a056a001ac700b006dde2b90d4amr321130pfv.26.1706578975446; Mon, 29 Jan 2024 17:42:55 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706578975; cv=pass; d=google.com; s=arc-20160816; b=g4KDOPTypRuE046MRXhrlUUa0TcoUjANZCJWD2u/9J4SZG/5AGxJFDKy72XvvZUAYa dHNrcheLXJz/BpB+BbS3vm8fXibpFAtFe6U2dINycWzxqfSIsBbO186s4xOvv1IgB9Ea qCu6PVpNgP/rPifB8CysieeF6GIyuGjDQOLkOajYre4sdqL1GWR9s1GdAYbQRjOVWJ8z ad0051FQTT8LgBCChxDsfEUzsOkLacL1bx0dFH8zKSmpAJEGRX9I2MWvp6vsclmnljcT NgB4S39QzpK/QEVZnNJLQyNpeI1twzUTxesvOeLDHhU7vDunVi1IAI8NcLWwbuvGt1/5 7dLQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=irGILLtZ+B4v/jX46BOE8oPtbTKGTNQJoE3QMc3gHIs=; fh=pEdtrChUTDmvuLILGSavwskaPZjBcM3e1cB9O4e7o4U=; b=udiqCtimNAWa1ULSMVafupN8eLzXAgALKJrxQV2MlXGqEsU27+aZh6IbSaqCim0T8K JfglLkVfIiC9kX7PpV+84tOawQn/sAQa3FCsqwRGwttNxPogPllD9BzNr6XI23R9vv4o smcS/gMiKzMldcfxFL8c1OjyGehMi/K4x96/XQvFACWRZwsz377RTAC5QKDo5Ei3chcp g+lfhStNQLPHo+E3sit6KDIwjZMOA07EbgaBAhvuaRV387/QXWFiiU5+pp893ltV94nH AU6SaCjZwDatZhjN2x5yMpIyUCxT/rLt+pGer3crvCf+AF/3dRP6yiM1I1Dvx2ef1LuW pUJA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=nDVlW2aU; arc=pass (i=1 spf=pass spfdomain=cmpxchg.org dkim=pass dkdomain=cmpxchg-org.20230601.gappssmtp.com dmarc=pass fromdomain=cmpxchg.org); spf=pass (google.com: domain of linux-kernel+bounces-43739-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-43739-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id p8-20020a056a000b4800b006d9d2ba854esi6770643pfo.177.2024.01.29.17.42.55 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jan 2024 17:42:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-43739-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=nDVlW2aU; arc=pass (i=1 spf=pass spfdomain=cmpxchg.org dkim=pass dkdomain=cmpxchg-org.20230601.gappssmtp.com dmarc=pass fromdomain=cmpxchg.org); spf=pass (google.com: domain of linux-kernel+bounces-43739-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-43739-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 335BB2847F0 for <ouuuleilei@gmail.com>; Tue, 30 Jan 2024 01:42:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 251B536B08; Tue, 30 Jan 2024 01:42:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=cmpxchg-org.20230601.gappssmtp.com header.i=@cmpxchg-org.20230601.gappssmtp.com header.b="nDVlW2aU" Received: from mail-qk1-f169.google.com (mail-qk1-f169.google.com [209.85.222.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D0EF36114 for <linux-kernel@vger.kernel.org>; Tue, 30 Jan 2024 01:42:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706578938; cv=none; b=LNvd6ert1XJ1EeOj053SHPui5eZlB3urxpYSAehwrQmA1HQx4Oz3VuZjgkGf3bGWQvtzQGZ5RutRieiYhLYtav8paUfQG6nfTpoCxYda8AkAv3KctfLG5NBKYBLZPErYQSpgNNQM7l6LNpEWoGuoJFnF2kldFg4iL7tFy2H2IrM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706578938; c=relaxed/simple; bh=irGILLtZ+B4v/jX46BOE8oPtbTKGTNQJoE3QMc3gHIs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=eR5d5nZUK9w5qU0a3iZPTkwRTvtEe0oMHLTSJMe4urjNvwVvGmMYsFbNJNO8+boxL15zK/0/Q8CchZRw7MJNzztPTHWArcb8OnWG2Pe0HY+iT548hYwSFqJD+kDjWhXYD4MDg3M89FVW2tysDoNm3LQmBWXAjb0Jkq7b2sEhJzE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=cmpxchg.org; spf=pass smtp.mailfrom=cmpxchg.org; dkim=pass (2048-bit key) header.d=cmpxchg-org.20230601.gappssmtp.com header.i=@cmpxchg-org.20230601.gappssmtp.com header.b=nDVlW2aU; arc=none smtp.client-ip=209.85.222.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=cmpxchg.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cmpxchg.org Received: by mail-qk1-f169.google.com with SMTP id af79cd13be357-783e22a16d4so159868185a.0 for <linux-kernel@vger.kernel.org>; Mon, 29 Jan 2024 17:42:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20230601.gappssmtp.com; s=20230601; t=1706578934; x=1707183734; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=irGILLtZ+B4v/jX46BOE8oPtbTKGTNQJoE3QMc3gHIs=; b=nDVlW2aU8IsgJfnxkmTL+FjojkVIVcMr6WXI1i5jAFmAe6XYLVXiQFkmUeg+2iq1FV pIzER7FDxDNoxzzJVnwBa6eFE0bxdmlWf0V7e5PsMnXSHYjIyDPU0EGV1vXkSS9FXByv kPcfkF9tcd1btft2hSpI/2+8FVIKDwdQ+WWzVlMZ7lCxXyRUFFo/6lQxMor9POEJbCiC /UAx7veeHEA63xO4MnvvvZeVorP2tQmgao461YarVZZ4/xyvL6B/8BwISZTpMEdf9Mgi 8e/JUC3YiKpfg6p4zIi21M3j0jRGDXGS0b4m731IWqaK+iNXdNg35KKPL4BIiBPVW/d5 Nz2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706578934; x=1707183734; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=irGILLtZ+B4v/jX46BOE8oPtbTKGTNQJoE3QMc3gHIs=; b=PLLcN6PWkfz4iftU/2JvdiyVDB5bKRvkOpcJdEbwCeWi93DwH8jtzCzLBYO/AprfuJ oxntEWB/I/N3lf9honzonnXqQ+e4lJL51RS3gwuC5014TJ//5OXkxon6RAmTGw4c9HWS a4ZHRZ1f1vjDqreapulp2dlxcnQiVj5ZZG+BjS9bfekpFaValejFo+S4E5wjBKMDhWsx HF2j86nI6MVuyvAoRJR+KesVj2ab3j8An6gmVaLayD5zeG008UrbiZsEEBcfojtPPlyu dfpyKqC0jkauOlQClmmW1c5zSyIRHiiVUIkQm9HjMHWBiYgr33R+i41V50vLb0jr6seR t8Ng== X-Gm-Message-State: AOJu0YxCp/ZA6KgOhwIOvDveZETrAIfDBs65sTHO3Tj73/e/7s0YKjg0 qLoJEVAhSbA4xBGa5VtBzzQjD0Sg7JfvOtoIvmw89eLl/GreXEmwbFx0W7s71mU= X-Received: by 2002:a05:6214:2aae:b0:681:97f5:7e9a with SMTP id js14-20020a0562142aae00b0068197f57e9amr276487qvb.47.1706578934096; Mon, 29 Jan 2024 17:42:14 -0800 (PST) Received: from localhost (2603-7000-0c01-2716-da5e-d3ff-fee7-26e7.res6.spectrum.com. [2603:7000:c01:2716:da5e:d3ff:fee7:26e7]) by smtp.gmail.com with ESMTPSA id c25-20020a056214071900b006869dae6ef2sm2407584qvz.106.2024.01.29.17.42.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jan 2024 17:42:13 -0800 (PST) From: Johannes Weiner <hannes@cmpxchg.org> To: Andrew Morton <akpm@linux-foundation.org> Cc: Nhat Pham <nphamcs@gmail.com>, Yosry Ahmed <yosryahmed@google.com>, Chengming Zhou <zhouchengming@bytedance.com>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH 00/20] mm: zswap: cleanups Date: Mon, 29 Jan 2024 20:36:36 -0500 Message-ID: <20240130014208.565554-1-hannes@cmpxchg.org> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789477755663644017 X-GMAIL-MSGID: 1789477755663644017 |
Series |
mm: zswap: cleanups
|
|
Message
Johannes Weiner
Jan. 30, 2024, 1:36 a.m. UTC
Cleanups and maintenance items that accumulated while reviewing zswap patches. Based on akpm/mm-unstable + the UAF fix I sent just now. mm/zswap.c | 1961 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 971 insertions(+), 990 deletions(-)
Comments
On 2024/1/30 09:36, Johannes Weiner wrote: > Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Chengming Zhou <zhouchengming@bytedance.com> > --- > mm/zswap.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index 7a7e8da2b4f8..bdc9f82fe4b9 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -1316,7 +1316,7 @@ static int zswap_enabled_param_set(const char *val, > return ret; > } > > -static void __zswap_load(struct zswap_entry *entry, struct page *page) > +static void zswap_decompress(struct zswap_entry *entry, struct page *page) > { > struct zpool *zpool = zswap_find_zpool(entry); > struct scatterlist input, output; > @@ -1411,7 +1411,7 @@ static int zswap_writeback_entry(struct zswap_entry *entry, > zswap_entry_get(entry); > spin_unlock(&tree->lock); > > - __zswap_load(entry, &folio->page); > + zswap_decompress(entry, &folio->page); > > count_vm_event(ZSWPWB); > if (entry->objcg) > @@ -1702,7 +1702,7 @@ bool zswap_load(struct folio *folio) > spin_unlock(&tree->lock); > > if (entry->length) > - __zswap_load(entry, page); > + zswap_decompress(entry, page); > else { > dst = kmap_local_page(page); > zswap_fill_page(dst, entry->value);
Hey Johannes, On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > Cleanups and maintenance items that accumulated while reviewing zswap > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. Patches 1 to 9 LGTM, thanks for the great cleanups! I am less excited about patches 10 to 20 though. Don't get me wrong, I am all of logically ordering the code. However, it feels like in this case, we will introduce unnecessary layers in the git history in a lot of places where I find myself checking the history regularly. Personally, I tend to jump around the file using vim search or using a cscope extension to find references/definitions, so I don't feel a need for such reordering. I am not objecting to it, but I just find it less appealing that the rest of the series. > > mm/zswap.c | 1961 +++++++++++++++++++++++++++++----------------------------- > 1 file changed, 971 insertions(+), 990 deletions(-) >
On (24/01/30 08:16), Yosry Ahmed wrote: > Hey Johannes, > > On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > > Cleanups and maintenance items that accumulated while reviewing zswap > > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. > > Patches 1 to 9 LGTM, thanks for the great cleanups! > > I am less excited about patches 10 to 20 though. Don't get me wrong, I > am all of logically ordering the code. However, it feels like in this > case, we will introduce unnecessary layers in the git history in a lot This also can complicate cherry-picking of patches to stable, prod, .etc
On Tue, Jan 30, 2024 at 08:16:27AM +0000, Yosry Ahmed wrote: > Hey Johannes, > > On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > > Cleanups and maintenance items that accumulated while reviewing zswap > > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. > > Patches 1 to 9 LGTM, thanks for the great cleanups! > > I am less excited about patches 10 to 20 though. Don't get me wrong, I > am all of logically ordering the code. However, it feels like in this > case, we will introduce unnecessary layers in the git history in a lot > of places where I find myself checking the history regularly. > Personally, I tend to jump around the file using vim search or using a > cscope extension to find references/definitions, so I don't feel a need > for such reordering. I agree that sweeping non-functional changes can be somewhat painful. However, moves are among the easiest of those because the code itself doesn't change. git log is not really affected, git blame <ref-just-before-move> mm/zswap.c works as well. Backports are easy to adjust and verify - mostly, patch will just warn about line offsets. What motivated this was figuring out the writeback/swapoff race. I also use search and multiple buffers in my editor, but keeping track of the dependencies between shrink_memcg_cb, zswap_writeback_entry and third places like load and invalidate became quite unwieldy. There is also the search in the logical direction not finding things, or mostly unrelated stuff. It's just less error prone to read existing code and write new code if related layers are grouped together and the order is logical, despite having those tools. The problem will also only get worse if there are no natural anchor points for new code, and the layering isn't clear. The new shrinker code is a case in point. We missed the opportunity in the memcg codebase, and I've regretted it for years. It just resulted in more fragile, less readable and debuggable code. The zswap code has been stagnant in the last few years, and there are relatively few commits behind us (git log --pretty=format:"%as %h %s" mm/zswap.c). I figure now is a good chance, before the more major changes we have planned. > I am not objecting to it, but I just find it less appealing that the > rest of the series. Understood.
On Tue, Jan 30, 2024 at 09:21:31PM +0900, Sergey Senozhatsky wrote: > On (24/01/30 08:16), Yosry Ahmed wrote: > > Hey Johannes, > > > > On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > > > Cleanups and maintenance items that accumulated while reviewing zswap > > > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. > > > > Patches 1 to 9 LGTM, thanks for the great cleanups! > > > > I am less excited about patches 10 to 20 though. Don't get me wrong, I > > am all of logically ordering the code. However, it feels like in this > > case, we will introduce unnecessary layers in the git history in a lot > > This also can complicate cherry-picking of patches to stable, prod, .etc I'm sensitive to that argument, because we run our own kernel at Meta as well. But moves are pretty easy. The code doesn't actually change, just the line offsets. So patch will mostly work with offset warnings. And if not, it's easy to fix up and verify. Refactoring and API restructuring (folios e.g.) make it much harder when it comes to this.
On Tue, Jan 30, 2024 at 10:46:32AM -0500, Johannes Weiner wrote: > On Tue, Jan 30, 2024 at 08:16:27AM +0000, Yosry Ahmed wrote: > > Hey Johannes, > > > > On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > > > Cleanups and maintenance items that accumulated while reviewing zswap > > > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. > > > > Patches 1 to 9 LGTM, thanks for the great cleanups! > > > > I am less excited about patches 10 to 20 though. Don't get me wrong, I > > am all of logically ordering the code. However, it feels like in this > > case, we will introduce unnecessary layers in the git history in a lot > > of places where I find myself checking the history regularly. > > Personally, I tend to jump around the file using vim search or using a > > cscope extension to find references/definitions, so I don't feel a need > > for such reordering. > > I agree that sweeping non-functional changes can be somewhat > painful. However, moves are among the easiest of those because the > code itself doesn't change. git log is not really affected, git blame > <ref-just-before-move> mm/zswap.c works as well. IIUC with git blame -L <lines> <ref-just-before-move> won't really work because the lines will have changed significantly. In the future, going through several layers of git blame will be less convenient because the function moving will invalidate the lines. > Backports are easy to > adjust and verify - mostly, patch will just warn about line offsets. I usually use git cherry-pick, and it sometimes gets confused if things are moved far enough IIRC. > > What motivated this was figuring out the writeback/swapoff race. I > also use search and multiple buffers in my editor, but keeping track > of the dependencies between shrink_memcg_cb, zswap_writeback_entry and > third places like load and invalidate became quite unwieldy. There is > also the search in the logical direction not finding things, or mostly > unrelated stuff. It's just less error prone to read existing code and > write new code if related layers are grouped together and the order is > logical, despite having those tools. > > The problem will also only get worse if there are no natural anchor > points for new code, and the layering isn't clear. The new shrinker > code is a case in point. We missed the opportunity in the memcg > codebase, and I've regretted it for years. It just resulted in more > fragile, less readable and debuggable code. The zswap code has been > stagnant in the last few years, and there are relatively few commits > behind us (git log --pretty=format:"%as %h %s" mm/zswap.c). I figure > now is a good chance, before the more major changes we have planned. I agree that if we want to do it, it's much better now than later, just presenting a differet perspective. No strong feelings.
On Tue, Jan 30, 2024 at 12:16 AM Yosry Ahmed <yosryahmed@google.com> wrote: > > Hey Johannes, > > On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > > Cleanups and maintenance items that accumulated while reviewing zswap > > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. > > Patches 1 to 9 LGTM, thanks for the great cleanups! > > I am less excited about patches 10 to 20 though. Don't get me wrong, I > am all of logically ordering the code. However, it feels like in this > case, we will introduce unnecessary layers in the git history in a lot > of places where I find myself checking the history regularly. > Personally, I tend to jump around the file using vim search or using a > cscope extension to find references/definitions, so I don't feel a need > for such reordering. > > I am not objecting to it, but I just find it less appealing that the > rest of the series. As a frequent user of git blame, I kinda agree with it. That said, zswap functions ordering hurts my brain a lot. So I vote for the reordering, and for paying the price sooner rather than later. The alternative is reordering sometimes in the future (which is just delaying the pain), or never re-order at all (which sucks). > > > > > mm/zswap.c | 1961 +++++++++++++++++++++++++++++----------------------------- > > 1 file changed, 971 insertions(+), 990 deletions(-) > >
On (24/01/30 10:52), Johannes Weiner wrote: > On Tue, Jan 30, 2024 at 09:21:31PM +0900, Sergey Senozhatsky wrote: > > On (24/01/30 08:16), Yosry Ahmed wrote: > > > Hey Johannes, > > > > > > On Mon, Jan 29, 2024 at 08:36:36PM -0500, Johannes Weiner wrote: > > > > Cleanups and maintenance items that accumulated while reviewing zswap > > > > patches. Based on akpm/mm-unstable + the UAF fix I sent just now. > > > > > > Patches 1 to 9 LGTM, thanks for the great cleanups! > > > > > > I am less excited about patches 10 to 20 though. Don't get me wrong, I > > > am all of logically ordering the code. However, it feels like in this > > > case, we will introduce unnecessary layers in the git history in a lot > > > > This also can complicate cherry-picking of patches to stable, prod, .etc > > I'm sensitive to that argument, because we run our own kernel at Meta > as well. Well, it was less of an argument and more of a "let's consider that too". > But moves are pretty easy. The code doesn't actually change, just the > line offsets. So patch will mostly work with offset warnings. And if > not, it's easy to fix up and verify. Refactoring and API restructuring > (folios e.g.) make it much harder when it comes to this. If pros of doing it are more significant that cons, then OK. Either way I'm not against the patches.