[linux-cifs-client] Re: Fwd: fsx-linux failing with latest cifs-2.6
git tree
Steve French
smfrench at gmail.com
Fri Nov 21 21:02:56 GMT 2008
thx ... the only other thing I noticed was that the original patch removed
2067 if ((offset >= i_size) ||
2068 ((from == 0) && (offset + to) >= i_size)) {
2069 /*
2070 * We don't need to read data beyond the end of the file.
2071 * zero it, and set the page uptodate
2072 */
2073 simple_prepare_write(file, page, from, to);
2074 SetPageUptodate(page);
which means we do a lot of extra reads (which return no bytes) when we
write near or at end of file
On Fri, Nov 21, 2008 at 2:41 PM, Dave Kleikamp
<shaggy at linux.vnet.ibm.com> wrote:
> On Fri, 2008-11-21 at 14:38 -0600, Steve French wrote:
>> Fix attached.
>>
>> Shaggy/Jeff/Nick etc. do you want to review/ack it since it is late in the rc?
>
> Acked-by: Dave Kleikamp <shaggy at linux.vnet.ibm.com>
>
>>
>> On Fri, Nov 21, 2008 at 2:18 PM, Steve French <smfrench at gmail.com> wrote:
>> > Looks like the following change to cifs_write_begin does fix it ...
>> > thanks Shaggy ...
>> >
>> > @@ -2062,8 +2074,10 @@ static int cifs_write_begin(struct file *file,
>> > struct address_space *mapping,
>> > {
>> > pgoff_t index = pos >> PAGE_CACHE_SHIFT;
>> > loff_t offset = pos & (PAGE_CACHE_SIZE - 1);
>> > + loff_t page_start = pos & PAGE_MASK;
>> >
>> > cFYI(1, ("write_begin from %lld len %d", (long long)pos, len));
>> > @@ -2081,13 +2095,14 @@ static int cifs_write_begin(struct file *file,
>> > struct address_space *mapping,
>> > int rc;
>> >
>> > /* might as well read a page, it is fast enough */
>> > - rc = cifs_readpage_worker(file, *pagep, &offset);
>> > + rc = cifs_readpage_worker(file, *pagep, &page_start);
>> >
>> > /* we do not need to pass errors back
>> > e.g. if we do not have read access to the file
>> > because cifs_write_end will attempt synchronous writes
>> > -- shaggy */
>> >
>> >
>
> --
> David Kleikamp
> IBM Linux Technology Center
>
>
--
Thanks,
Steve
More information about the linux-cifs-client
mailing list