Linux CIFS filesystem development
 help / color / mirror / Atom feed
From: Suresh Jayaraman <sjayaraman-l3A5Bk7waGM@public.gmane.org>
To: David Howells <dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-cachefs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org,
	steved-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH] FS-Cache: Add a helper to bulk uncache pages on an inode
Date: Wed, 15 Jun 2011 14:57:24 +0530	[thread overview]
Message-ID: <4DF87AFC.5090107@suse.de> (raw)
In-Reply-To: <4DF87231.6000405-l3A5Bk7waGM@public.gmane.org>

On 06/15/2011 02:19 PM, Suresh Jayaraman wrote:
> On 06/14/2011 10:31 PM, David Howells wrote:
>> Add an FS-Cache helper to bulk uncache pages on an inode.  This will only work
>> for the circumstance where the pages in the cache correspond 1:1 with the pages
>> attached to an inode's page cache.
>>
>> This is required for CIFS and NFS: When disabling inode cookie, we were
>> returning the cookie and setting cifsi->fscache to NULL but failed to
>> invalidate any previously mapped pages.  This resulted in "Bad page state"
>> errors and manifested in other kind of errors when running fsstress.  Fix it by
>> uncaching mapped pages when we disable the inode cookie.
>>
>> This patch should fix the following oops and "Bad page state" errors seen
>> during fsstress testing.
>>
>> [  417.302635] ------------[ cut here ]------------
>> [  417.304903] kernel BUG at fs/cachefiles/namei.c:201!
>> [  417.307613] invalid opcode: 0000 [#1] SMP
>> [  417.309860] last sysfs file: /sys/devices/system/cpu/cpu1/cache/index2/shared_cpu_map
>> [  417.313868] CPU 1
>> [  417.314855] Modules linked in: fuse nls_utf8 cifs sunrpc cachefiles fscache ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter ip6_tables joydev microcode i2c_piix4 virtio_balloon i2c_core virtio_net ipv6 virtio_blk [last unloaded: mperf]
>> [  417.328983]
>> [  417.329923] Pid: 5, comm: kworker/u:0 Not tainted 2.6.38.7-30.fc15.x86_64 #1 Bochs Bochs
>> [  417.333928] RIP: 0010:[<ffffffffa00bebe4>]  [<ffffffffa00bebe4>] cachefiles_walk_to_object+0x436/0x745 [cachefiles]
>> [  417.338967] RSP: 0018:ffff88002ce6dd00  EFLAGS: 00010282
>> [  417.341761] RAX: ffff88002ef165f0 RBX: ffff88001811f500 RCX: 0000000000000000
>> [  417.344943] RDX: 0000000000000000 RSI: 0000000000000100 RDI: 0000000000000282
>> [  417.348639] RBP: ffff88002ce6dda0 R08: 0000000000000100 R09: ffffffff81b3a300
>> [  417.351813] R10: 0000ffff00066c0a R11: 0000000000000003 R12: ffff88002ae54840
>> [  417.355522] R13: ffff88002ae54840 R14: ffff880029c29c00 R15: ffff88001811f4b0
>> [  417.358879] FS:  00007f394dd32720(0000) GS:ffff88002ef00000(0000) knlGS:0000000000000000
>> [  417.362780] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>> [  417.365651] CR2: 00007fffcb62ddf8 CR3: 000000001825f000 CR4: 00000000000006e0
>> [  417.368830] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>> [  417.372688] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
>> [  417.375876] Process kworker/u:0 (pid: 5, threadinfo ffff88002ce6c000, task ffff88002ce55cc0)
>> [  417.379863] Stack:
>> [  417.380891]  0000000000000246 ffff88002ce55cc0 ffff88002ce6dd58 ffff88001815dc00
>> [  417.384864]  ffff8800185246c0 ffff88001811f618 ffff880029c29d18 ffff88001811f380
>> [  417.388935]  ffff88002ce6dd50 ffffffff814757e4 ffff88002ce6dda0 ffffffff8106ac56
>> [  417.392907] Call Trace:
>> [  417.394580]  [<ffffffff814757e4>] ? _raw_spin_unlock_irqrestore+0x17/0x19
>> [  417.397739]  [<ffffffff8106ac56>] ? __queue_work+0x256/0x265
>> [  417.400607]  [<ffffffffa00bd91f>] cachefiles_lookup_object+0x78/0xd4 [cachefiles]
>> [  417.403898]  [<ffffffffa00a9977>] ? fscache_object_work_func+0x0/0x669 [fscache]
>> [  417.407659]  [<ffffffffa00a95da>] fscache_lookup_object+0x131/0x16d [fscache]
>> [  417.410832]  [<ffffffffa00a9b33>] fscache_object_work_func+0x1bc/0x669 [fscache]
>> [  417.414598]  [<ffffffffa00a9977>] ? fscache_object_work_func+0x0/0x669 [fscache]
>> [  417.417956]  [<ffffffff8106afb6>] process_one_work+0x186/0x298
>> [  417.420876]  [<ffffffff8106b343>] worker_thread+0xda/0x15d
>> [  417.423693]  [<ffffffff8106b269>] ? worker_thread+0x0/0x15d
>> [  417.426546]  [<ffffffff8106b269>] ? worker_thread+0x0/0x15d
>> [  417.428877]  [<ffffffff8106ebaf>] kthread+0x84/0x8c
>> [  417.431712]  [<ffffffff8100a9e4>] kernel_thread_helper+0x4/0x10
>> [  417.434615]  [<ffffffff8106eb2b>] ? kthread+0x0/0x8c
>> [  417.436809]  [<ffffffff8100a9e0>] ? kernel_thread_helper+0x0/0x10
>> [  417.439746] Code: 05 77 2a 48 c7 c7 ce 1c 0c a0 31 c0 e8 c6 db 3a e1 48 c7 c7 77 1f 0c a0 31 c0 e8 b8 db 3a e1 48 8b 75 98 48 89 df e8 ae 23 00 00 <0f> 0b 48 8b 55 98 f0 ff 82 20 01 00 00 48 8b 7d 90 e8 86 f5 ff
>> [  417.453802] RIP  [<ffffffffa00bebe4>] cachefiles_walk_to_object+0x436/0x745 [cachefiles]
>> [  417.457781]  RSP <ffff88002ce6dd00>
>> [  417.459638] ---[ end trace 1d481c9af1804caa ]---
>>
>>
>> I tested the uncaching by the following means:
>>
>>  (1) Create a big file on my NFS server (104857600 bytes).
>>
>>  (2) Read the file into the cache with md5sum on the NFS client.  Look in
>>      /proc/fs/fscache/stats:
>>
>> 	Pages  : mrk=25601 unc=0
>>
>>  (3) Open the file for read/write ("bash 5<>/warthog/bigfile").  Look in proc
>>      again:
>>
>> 	Pages  : mrk=25601 unc=25601
>>
>> Reported-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>> Signed-off-by: David Howells <dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>> cc: Suresh Jayaraman <sjayaraman-l3A5Bk7waGM@public.gmane.org>
>> ---
>>
>>  Documentation/filesystems/caching/netfs-api.txt |   16 ++++++++
>>  fs/cifs/fscache.c                               |    1 +
>>  fs/fscache/page.c                               |   44 +++++++++++++++++++++++
>>  fs/nfs/fscache.c                                |    8 ++--
>>  include/linux/fscache.h                         |   21 +++++++++++
>>  5 files changed, 85 insertions(+), 5 deletions(-)
> 
> Indeed handling this at fscache seems a better and cleaner approach. The
> patch looks good to me and I ran fsstress on a CIFS mount for about an
> hour and didn't see any Oops or "Bad page errors".
> 
> Reviewed-and-Tested-by: Suresh Jayaraman <sjayaraman-l3A5Bk7waGM@public.gmane.org>

And, I think this should go to -stable as well (atleast w.r.t CIFS as
NFS even without this patch invalidates mapped pages).


-- 
Suresh Jayaraman

  parent reply	other threads:[~2011-06-15  9:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-14 17:01 [PATCH] FS-Cache: Add a helper to bulk uncache pages on an inode David Howells
     [not found] ` <20110614170137.22015.81812.stgit-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2011-06-15  8:49   ` Suresh Jayaraman
     [not found]     ` <4DF87231.6000405-l3A5Bk7waGM@public.gmane.org>
2011-06-15  9:27       ` Suresh Jayaraman [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-06-15 15:00 David Howells
2011-06-15 15:01 David Howells
2011-07-07 11:19 David Howells

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=4DF87AFC.5090107@suse.de \
    --to=sjayaraman-l3a5bk7wagm@public.gmane.org \
    --cc=Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org \
    --cc=dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=linux-cachefs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=steved-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    /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