• David Howells's avatar
    FS-Cache: One of the write operation paths doesn't set the object state · 7ef001e9
    David Howells authored
    In fscache_write_op(), if the object is determined to have become inactive or
    to have lost its cookie, we don't move the operation state from in-progress,
    and so an assertion in fscache_put_operation() fails with an assertion (see
    below).
    
    Instrumenting fscache_op_work_func() indicates that it called
    fscache_write_op() before calling fscache_put_operation() - where the assertion
    failed.  The assertion at line 433 indicates that the operation state is
    IN_PROGRESS rather than being COMPLETE or CANCELLED.
    
    Instrumenting fscache_write_op() showed that it was being called on an object
    that had had its cookie removed and that this was due to relinquishment of the
    cookie by the netfs.  At this point fscache no longer has access to the pages
    of netfs data that were requested to be written, and so simply cancelling the
    operation is the thing to do.
    
    FS-Cache: Assertion failed
    3 == 5 is false
    ------------[ cut here ]------------
    kernel BUG at fs/fscache/operation.c:433!
    invalid opcode: 0000 [#1] SMP
    Modules linked in: cachefiles(F) nfsv4(F) nfsv3(F) nfsv2(F) nfs(F) fscache(F) auth_rpcgss(F) nfs_acl(F) lockd(F) sunrpc(F)
    CPU 0
    Pid: 1035, comm: kworker/u:3 Tainted: GF            3.7.0-rc8-fsdevel+ #411                  /DG965RY
    RIP: 0010:[<ffffffffa007db22>]  [<ffffffffa007db22>] fscache_put_operation+0x11a/0x2ed [fscache]
    RSP: 0018:ffff88003e32bcf8  EFLAGS: 00010296
    RAX: 000000000000000f RBX: ffff88001818eb78 RCX: ffffffff6c102000
    RDX: ffffffff8102d1ad RSI: ffffffff6c102000 RDI: ffffffff8102d1d6
    RBP: ffff88003e32bd18 R08: 0000000000000002 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: ffffffffa00811da
    R13: 0000000000000001 R14: 0000000100625d26 R15: 0000000000000000
    FS:  0000000000000000(0000) GS:ffff88003bc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 00007fff7dd31c68 CR3: 000000003d730000 CR4: 00000000000007f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process kworker/u:3 (pid: 1035, threadinfo ffff88003e32a000, task ffff88003bb38080)
    Stack:
     ffffffff8102d1ad ffff88001818eb78 ffffffffa00811da 0000000000000001
     ffff88003e32bd48 ffffffffa007f0ad ffff88001818eb78 ffffffff819583c0
     ffff88003df24e00 ffff88003882c3e0 ffff88003e32bde8 ffffffff81042de0
    Call Trace:
     [<ffffffff8102d1ad>] ? vprintk_emit+0x3c6/0x41a
     [<ffffffffa00811da>] ? __fscache_read_or_alloc_pages+0x4bc/0x4bc [fscache]
     [<ffffffffa007f0ad>] fscache_op_work_func+0xec/0x123 [fscache]
     [<ffffffff81042de0>] process_one_work+0x21c/0x3b0
     [<ffffffff81042d82>] ? process_one_work+0x1be/0x3b0
     [<ffffffffa007efc1>] ? fscache_operation_gc+0x23e/0x23e [fscache]
     [<ffffffff8104332e>] worker_thread+0x202/0x2df
     [<ffffffff8104312c>] ? rescuer_thread+0x18e/0x18e
     [<ffffffff81047c1c>] kthread+0xd0/0xd8
     [<ffffffff81421bfa>] ? _raw_spin_unlock_irq+0x29/0x3e
     [<ffffffff81047b4c>] ? __init_kthread_worker+0x55/0x55
     [<ffffffff814227ec>] ret_from_fork+0x7c/0xb0
     [<ffffffff81047b4c>] ? __init_kthread_worker+0x55/0x55
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    7ef001e9
page.c 28.6 KB