public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Michał Nazarewicz" <m.nazarewicz@samsung.com>
To: linux-kernel@vger.kernel.org,
	Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Andy Shevchenko <ext-andriy.shevchenko@nokia.com>,
	Denis Karpov <ext-denis.2.karpov@nokia.com>,
	Adrian Hunter <adrian.hunter@nokia.com>,
	Alan Stern <stern@rowland.harvard.edu>,
	David Brownell <dbrownell@users.sourceforge.net>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	linux-usb@vger.kernel.org
Subject: Re: [PATCHv2] usb: gadget: storage: optional SCSI WRITE FUA bit
Date: Wed, 14 Jul 2010 14:38:20 +0200	[thread overview]
Message-ID: <op.vft2p6do7p4s8u@pikus> (raw)
In-Reply-To: <1279098331-7872-1-git-send-email-ext-andriy.shevchenko@nokia.com>

On Wed, 14 Jul 2010 11:05:31 +0200, Andy Shevchenko <andy.shevchenko@gmail.com> wrote:
> MS Windows mounts removable storage in "Removal optimized mode" by
> default. All the writes to the media are synchronous which is achieved
> by setting FUA (Force Unit Access) bit in SCSI WRITE(10,12) commands.
> This prevents I/O requests aggregation in block layer dramatically
> decreasing performance.

> diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
> index b49d86e..45f58d9 100644
> --- a/drivers/usb/gadget/file_storage.c
> +++ b/drivers/usb/gadget/file_storage.c
> @@ -93,6 +93,8 @@
>   *	removable		Default false, boolean for removable media
>   *	luns=N			Default N = number of filenames, number of
>   *					LUNs to support
> + *	fua=b[,b...]		Default false, booleans for ignore FUA flag
> + *					in SCSI WRITE(6,10,12) commands

I wonder if it makes sense to make it per-LUN.  I would imagine that it's great
to ignore FUA if the device has its own power supply in which case after disconnect
the data won't be lost.  This is a per-device property not really per-LUN.  As such
I'd make this option global for the gadget.

> @@ -743,6 +752,24 @@ static ssize_t fsg_store_ro(struct device *dev, struct device_attribute *attr,
>  	return rc;
>  }
>+static ssize_t fsg_store_fua(struct device *dev, struct device_attribute *attr,
> +			     const char *buf, size_t count)
> +{
> +	ssize_t		rc = count;

Not really needed here.

> +	struct fsg_lun	*curlun = fsg_lun_from_dev(dev);
> +	int		i;
> +
> +	if (sscanf(buf, "%d", &i) != 1)
> +		return -EINVAL;

Why not simple_strtol() directly?

> +
> +	if (curlun->fua)
> +		fsg_lun_fsync_sub(curlun);

Shouldn't that read something like:

+	if (!curlun->fua && i)
+		fsg_lun_fsync_sub(curlun);

ie. there is no sense in syncing if FUA was active (in which case all
writes were synced already, right?) or if the new value is false (since
then user does not won't syncing).

> +
> +	curlun->fua = !!i;
> +
> +	return rc;

Just plain:

+	return count;

> +}
> +
>  static ssize_t fsg_store_file(struct device *dev, struct device_attribute *attr,
>  			      const char *buf, size_t count)
>  {


-- 
Best regards,                                        _     _
| Humble Liege of Serenely Enlightened Majesty of  o' \,=./ `o
| Computer Science,  Michał "mina86" Nazarewicz       (o o)
+----[mina86*mina86.com]---[mina86*jabber.org]----ooO--(_)--Ooo--

  reply	other threads:[~2010-07-14 12:37 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-13  8:36 [PATCH] usb: gadget: storage: optional SCSI WRITE FUA bit Andy Shevchenko
2010-07-13 14:09 ` Alan Stern
2010-07-14  9:05   ` [PATCHv2] " Andy Shevchenko
2010-07-14 12:38     ` Michał Nazarewicz [this message]
2010-07-14 13:44       ` Andy Shevchenko
2010-07-14 13:55         ` Roger Quadros
2010-07-16  7:54           ` Felipe Balbi
2010-07-16  8:38             ` Roger Quadros
2010-07-14 14:24         ` Michał Nazarewicz
2010-07-14 15:05           ` Andy Shevchenko
2010-07-14 17:12             ` Michał Nazarewicz
2010-07-15  9:07           ` [PATCHv3 1/2] usb: gadget: storage: strict coversion of 'ro' parameter Andy Shevchenko
2010-07-15  9:07             ` [PATCHv3 2/2] usb: gadget: storage: optional SCSI WRITE FUA bit Andy Shevchenko
2010-07-21 19:17               ` Greg KH
2010-07-22  8:58                 ` [PATCHv4 1/2] usb: gadget: storage: strict coversion of 'ro' parameter Andy Shevchenko
2010-07-22  8:58                   ` [PATCHv4 2/2] usb: gadget: storage: optional SCSI WRITE FUA bit Andy Shevchenko
2010-07-22 14:13                     ` Alan Stern
2010-07-22 14:27                       ` Andy Shevchenko
2010-07-22 14:53                       ` [PATCHv5] " Andy Shevchenko
2010-07-22 14:07                   ` [PATCHv4 1/2] usb: gadget: storage: strict coversion of 'ro' parameter Alan Stern
2010-07-22 14:17                     ` Michał Nazarewicz
2010-07-21 19:17             ` [PATCHv3 " Greg KH

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=op.vft2p6do7p4s8u@pikus \
    --to=m.nazarewicz@samsung.com \
    --cc=adrian.hunter@nokia.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=dbrownell@users.sourceforge.net \
    --cc=ext-andriy.shevchenko@nokia.com \
    --cc=ext-denis.2.karpov@nokia.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=stern@rowland.harvard.edu \
    /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: link
Be 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