• David Howells's avatar
    FS-Cache: Exclusive op submission can BUG if there's been an I/O error · 8d76349d
    David Howells authored
    The function to submit an exclusive op (fscache_submit_exclusive_op()) can BUG
    if there's been an I/O error because it may see the parent cache object in an
    unexpected state.  It should only BUG if there hasn't been an I/O error.
    
    In this case the problem was produced by remounting the cache partition to be
    R/O.  The EROFS state was detected and the cache was aborted, but not
    everything handled the aborting correctly.
    
    SysRq : Emergency Remount R/O
    EXT4-fs (sda6): re-mounted. Opts: (null)
    Emergency Remount complete
    CacheFiles: I/O Error: Failed to update xattr with error -30
    FS-Cache: Cache cachefiles stopped due to I/O error
    ------------[ cut here ]------------
    kernel BUG at fs/fscache/operation.c:128!
    invalid opcode: 0000 [#1] SMP 
    CPU 0 
    Modules linked in: cachefiles nfs fscache auth_rpcgss nfs_acl lockd sunrpc
    
    Pid: 6612, comm: kworker/u:2 Not tainted 3.1.0-rc8-fsdevel+ #1093                  /DG965RY
    RIP: 0010:[<ffffffffa00739c0>]  [<ffffffffa00739c0>] fscache_submit_exclusive_op+0x2ad/0x2c2 [fscache]
    RSP: 0018:ffff880000853d40  EFLAGS: 00010206
    RAX: ffff880038ac72a8 RBX: ffff8800181f2260 RCX: ffffffff81f2b2b0
    RDX: 0000000000000001 RSI: ffffffff8179a478 RDI: ffff8800181f2280
    RBP: ffff880000853d60 R08: 0000000000000002 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000001 R12: ffff880038ac7268
    R13: ffff8800181f2280 R14: ffff88003a359190 R15: 000000010122b162
    FS:  0000000000000000(0000) GS:ffff88003bc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 00000034cc4a77f0 CR3: 0000000010e96000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process kworker/u:2 (pid: 6612, threadinfo ffff880000852000, task ffff880014c3c040)
    Stack:
     ffff8800181f2260 ffff8800181f2310 ffff880038ac7268 ffff8800181f2260
     ffff880000853dc0 ffffffffa0072375 ffff880037ecfe00 ffff88003a359198
     ffff880000853dc0 0000000000000246 0000000000000000 ffff88000a91d308
    Call Trace:
     [<ffffffffa0072375>] fscache_object_work_func+0x792/0xe65 [fscache]
     [<ffffffff81047e44>] process_one_work+0x1eb/0x37f
     [<ffffffff81047de6>] ? process_one_work+0x18d/0x37f
     [<ffffffffa0071be3>] ? fscache_enqueue_dependents+0xd8/0xd8 [fscache]
     [<ffffffff810482e4>] worker_thread+0x15a/0x21a
     [<ffffffff8104818a>] ? rescuer_thread+0x188/0x188
     [<ffffffff8104bf96>] kthread+0x7f/0x87
     [<ffffffff813ad6f4>] kernel_thread_helper+0x4/0x10
     [<ffffffff81026b98>] ? finish_task_switch+0x45/0xc0
     [<ffffffff813abd1d>] ? retint_restore_args+0xe/0xe
     [<ffffffff8104bf17>] ? __init_kthread_worker+0x53/0x53
     [<ffffffff813ad6f0>] ? gs_change+0xb/0xb
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    8d76349d
operation.c 14 KB