Skip to content
  • Prasad Joshi's avatar
    logfs: take write mutex lock during fsync and sync · 13ced29c
    Prasad Joshi authored
    
    
    LogFS uses super->s_write_mutex while writing data to disk. Taking the
    same mutex lock in sync and fsync code path solves the following BUG:
    
    ------------[ cut here ]------------
    kernel BUG at /home/prasad/logfs/dev_bdev.c:134!
    
    Pid: 2387, comm: flush-253:16 Not tainted 3.0.0+ #4 Bochs Bochs
    RIP: 0010:[<ffffffffa007deed>]  [<ffffffffa007deed>]
                    bdev_writeseg+0x25d/0x270 [logfs]
    Call Trace:
    [<ffffffffa007c381>] logfs_open_area+0x91/0x150 [logfs]
    [<ffffffff8128dcb2>] ? find_level.clone.9+0x62/0x100
    [<ffffffffa007c49c>] __logfs_segment_write.clone.20+0x5c/0x190 [logfs]
    [<ffffffff810ef005>] ? mempool_kmalloc+0x15/0x20
    [<ffffffff810ef383>] ? mempool_alloc+0x53/0x130
    [<ffffffffa007c7a4>] logfs_segment_write+0x1d4/0x230 [logfs]
    [<ffffffffa0078f8e>] logfs_write_i0+0x12e/0x190 [logfs]
    [<ffffffffa0079300>] __logfs_write_rec+0x140/0x220 [logfs]
    [<ffffffffa0079444>] logfs_write_rec+0x64/0xd0 [logfs]
    [<ffffffffa00795b6>] __logfs_write_buf+0x106/0x110 [logfs]
    [<ffffffffa007a13e>] logfs_write_buf+0x4e/0x80 [logfs]
    [<ffffffffa0073e33>] __logfs_writepage+0x23/0x80 [logfs]
    [<ffffffffa007410c>] logfs_writepage+0xdc/0x110 [logfs]
    [<ffffffff810f5ba7>] __writepage+0x17/0x40
    [<ffffffff810f6208>] write_cache_pages+0x208/0x4f0
    [<ffffffff810f5b90>] ? set_page_dirty+0x70/0x70
    [<ffffffff810f653a>] generic_writepages+0x4a/0x70
    [<ffffffff810f75d1>] do_writepages+0x21/0x40
    [<ffffffff8116b9d1>] writeback_single_inode+0x101/0x250
    [<ffffffff8116bdbd>] writeback_sb_inodes+0xed/0x1c0
    [<ffffffff8116c5fb>] writeback_inodes_wb+0x7b/0x1e0
    [<ffffffff8116cc23>] wb_writeback+0x4c3/0x530
    [<ffffffff814d984d>] ? sub_preempt_count+0x9d/0xd0
    [<ffffffff8116cd6b>] wb_do_writeback+0xdb/0x290
    [<ffffffff814d984d>] ? sub_preempt_count+0x9d/0xd0
    [<ffffffff814d6208>] ? _raw_spin_unlock_irqrestore+0x18/0x40
    [<ffffffff8105aa5a>] ? del_timer+0x8a/0x120
    [<ffffffff8116cfac>] bdi_writeback_thread+0x8c/0x2e0
    [<ffffffff8116cf20>] ? wb_do_writeback+0x290/0x290
    [<ffffffff8106d2e6>] kthread+0x96/0xa0
    [<ffffffff814de514>] kernel_thread_helper+0x4/0x10
    [<ffffffff8106d250>] ? kthread_worker_fn+0x190/0x190
    [<ffffffff814de510>] ? gs_change+0xb/0xb
    RIP  [<ffffffffa007deed>] bdev_writeseg+0x25d/0x270 [logfs]
    ---[ end trace 0211ad60a57657c4 ]---
    
    Reviewed-by: default avatarJoern Engel <joern@logfs.org>
    Signed-off-by: default avatarPrasad Joshi <prasadjoshi.linux@gmail.com>
    13ced29c