Subject: bug#7362: dd strangeness

From: Jim Meyering <[email-masked]>
Date: Wed, 02 Mar 2011 14:36:33 +0100

Pádraig Brady wrote:
> On 01/03/11 21:40, Pádraig Brady wrote:
>> On 01/03/11 17:45, Paul Eggert wrote:
>>> On 03/01/2011 03:27 AM, Pádraig Brady wrote:
>>>
>>>> So the standard way to accumulate short reads to a full write,
>>>> is to specify separate ibs and obs (we'd probably want to prompt about
>>>> setting obs too for efficiency)
>>>
>>> Yes, good point, the diagnostic should suggest ibs=N obs=N
>>> (instead of just ibs=N).
>>>
>>> By the way, the relationship between fullblock and ibs=N obs=N is
>>> a curious one, one that I don't fully understand.  If you have
>>> ibs=N obs=N, why would you need fullblock?  This should probably
>>> be documented (preferably by someone who understands it :-).
>>
>> Well as I understand it, it's to do with 'count'.
>> count refers to the number of input reads,
>> both partial and full.
>>
>> So the advice to use iflag=fullblock is probably safer,
>> especially when a count (or skip) is specified.
>
> Thinking about it more, we should at least split up the patch.
> So for the oflag=direct case the attached just enables fullblock
> (as using C_TWOBUFS would require more mem, CPU, and also messes
> up if the user specified a count).
>
> I'm not sure we should try to be more clever than this,
> and accept that dd is a low level tool that can be
> used in a myriad of ways.
...
> Subject: [PATCH] dd: enable iflag=fullblock for oflag=direct or oflag=cio
>
> * NEWS: Mention the change in behavior.
> * doc/coreutils.texi: Document when iflag=fullblock is implied.
> * src/dd.c (scan_args): Enable O_FULLBLOCK when needed.
...
> +** Changes in behavior
> +
> +  dd now enables iflag=fullblock with oflag=direct or oflag=cio
> +  where short reads can have adverse effects.

Thanks.  This looks fine to me.
It is so targeted and affects dd only when a non-POSIX flag is specified,
that I can't imagine it would cause any trouble.