From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932585AbbCQQDp (ORCPT ); Tue, 17 Mar 2015 12:03:45 -0400 Received: from senator.holtmann.net ([87.106.208.187]:58536 "EHLO mail.holtmann.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754134AbbCQQDo convert rfc822-to-8bit (ORCPT ); Tue, 17 Mar 2015 12:03:44 -0400 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2070.6\)) Subject: Re: efivarfs and writev() support From: Marcel Holtmann In-Reply-To: <20150317154630.GA25605@codeblueprint.co.uk> Date: Tue, 17 Mar 2015 09:03:38 -0700 Cc: Al Viro , Linux Kernel Mailing List , linux-efi@vger.kernel.org, Matthew Garrett , Jeremy Kerr , Matt Fleming Content-Transfer-Encoding: 8BIT Message-Id: <48E5761B-8142-4CDE-9AAD-BCD70C34BC13@holtmann.org> References: <33E85F72-FCA0-4DF7-B9E1-46D36244FCA3@holtmann.org> <20150311134226.GB24174@codeblueprint.co.uk> <7F5112DD-6998-47D3-B6B9-5618E14E022A@holtmann.org> <20150312063437.GK29656@ZenIV.linux.org.uk> <20150312170344.GN29656@ZenIV.linux.org.uk> <20150317154630.GA25605@codeblueprint.co.uk> To: Matt Fleming X-Mailer: Apple Mail (2.2070.6) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Matt, >> I say we should support writev() on efivarfs. Not supporting it seems >> odd especially since that is not documented anywhere. So yes, I am for >> adding .write_iter() support and be done with that. > > Well, as Al has explained it's not that writev() isn't supported, it's > that having an iovec vector containing only the 4-byte variable > attribute isn't currently supported. > > Since writev() calls are intended to be atomic, and even though efivarfs > gets fed the variable data in chunks we can process it in one go, I > think allowing the scenario you describe is fine. meaning only writev() with a single vector is supported. >> Also please note that even write(,4) and write(,n) does not work >> either. You can not write partial entries as it seems. Maybe you are >> able to append, but it seems the initial creation of the variable has >> to be done with a single write() call. Anything else ends up in a file >> with 0 length. > > Yes, that's by design. I guess it's to prohibit people from creating > bogus EFI variables or accidentally deleting variables (a SetVariable() > call with length 0 is a delete). I have no problems with these semantics, but it means you need to add support for .write_iter since otherwise multiple vectors will not work. And really think that is better than forcing userspace to work around this limitation. As I mentioned earlier, for me it was really obvious to use a vectored write for EFI variables. That just made sense to me. So seeing it not working caused confusion. Regards Marcel