Re: [PATCH] cifs: bugfix for unreclaimed writeback pages in cifs_writev_requeue()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Patch merged but had to hand merge it since the original was not sent
as plain text email.

On Thu, Feb 7, 2013 at 5:39 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> On Wed, 6 Feb 2013 12:00:08 -0600
> Steve French <smfrench@xxxxxxxxx> wrote:
>
>> Forwarding to the current cifs development mailing list
>>
>>
>> ---------- Forwarded message ----------
>> From:  <jiang.biao2@xxxxxxxxxx>
>> Date: Wed, Feb 6, 2013 at 12:26 AM
>> Subject: [PATCH] cifs: bugfix for unreclaimed writeback pages in
>> cifs_writev_requeue()
>> To: Steve French <sfrench@xxxxxxxxx>, linux-cifs-client@xxxxxxxxxxxxxxx
>>
>>
>>
>>     This patch applies to the kernel version of linux-3.8-rc6.
>>
>>     Pages get the PG_writeback flag set before cifs sends its request
>> to SMB server
>>     in cifs_writepages(), if the SMB service goes down, cifs may try
>> to recommit the
>>     writing requests in cifs_writev_requeue(). However, it does not
>> clean its PG_writeback
>>     flag and relaimed the pages even if it fails again in
>> cifs_writev_requeue(), which
>>     may lead to the hanging of the processes accessing the cifs
>> directory. This patch
>>     just cleans the PG_writeback flags and reclaims the pages under
>> that circumstances.
>>
>>     Steps to reproduce the bug(trying serveral times may trigger the issue):
>>     1.Write from cifs client continuously.(e.g dd if=/dev/zero of=<cifs file>)
>>     2.Stop SMB service from server.(e.g service smb stop)
>>     3.Wait for two minutes, and then start SMB service from
>> server.(e.g service smb start)
>>     4.The processes which are accessing cifs directory may hang up.
>>
>>     Signed-off-by: Ouyang Maochun <ouyang.maochun@xxxxxxxxxx>
>>     Signed-off-by: Jiang Yong <jian.yong5@xxxxxxxxxx>
>>     Tested-by: Zhang Xianwei <zhang.xianwei8@xxxxxxxxxx>
>>     Reviewed-by: Wang Liang <wang.liang82@xxxxxxxxxx>
>>     Reviewed-by: Cai Qu <cai.qu@xxxxxxxxxx>
>>     Reviewed-by: Jiang Biao <jiang.biao2@xxxxxxxxxx>
>>
>> diff -uprN linux-3.8-rc6/fs/cifs/cifssmb.c linux-3.8-rc6_new/fs/cifs/cifssmb.c
>> --- linux-3.8-rc6/fs/cifs/cifssmb.c        2013-02-01 09:08:14.000000000 +0800
>> +++ linux-3.8-rc6_new/fs/cifs/cifssmb.c        2013-02-04
>> 15:44:09.869254397 +0800
>> @@ -1909,8 +1909,11 @@ cifs_writev_requeue(struct cifs_writedat
>>          } while (rc == -EAGAIN);
>>
>>          for (i = 0; i < wdata->nr_pages; i++) {
>> -                if (rc != 0)
>> +                if (rc != 0){
>>                          SetPageError(wdata->pages[i]);
>> +                         end_page_writeback(wdata->pages[i]);
>> +                         page_cache_release(wdata->pages[i]);
>> +                 }
>>                  unlock_page(wdata->pages[i]);
>>          }
>>
>>
>
> Patch looks correct to me. Nice catch.
>
> Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>



-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux