Messages in this thread | | | Subject | Bug introduced in 3b93f911d5 | From | Anton Altaparmakov <> | Date | Fri, 8 Aug 2014 00:11:39 +0100 |
| |
Hi Al,
Was just looking at __generic_file_write_iter() and found a bug in the code that you added in 3b93f911d5.
Consider the case where generic_file_direct_write() returns a partial write, i.e. written > 0 && written < count.
Also consider that the following generic_perform_write() fails with an error, i.e. status < 0.
This code then does something very bogus:
if (unlikely(status < 0) && !written) { err = status; goto out; } iocb->ki_pos = pos + status; ... endbyte = pos + status - 1;
The if condition is false as written is > 0 yet status is negative thus iocb->ki_pos is set to pos + status where status is negative thus ki_pos is actually set to "pos - random value".
And similar for "endbyte" being set to "pos - random value - 1", etc.
Doesn't seem like that is what you intended?
Best regards,
Anton -- Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @) University of Cambridge Information Services, Roger Needham Building 7 JJ Thomson Avenue, Cambridge, CB3 0RB, UK
| |