Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in
  • L linux-dm
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
    • Locked files
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
    • Requirements
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
    • Test cases
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • linux-arm
  • linux-dm
  • Repository
  • linux-dm
  • fs
  • btrfs
  • locking.c
Find file BlameHistoryPermalink
  • Nikolay Borisov's avatar
    btrfs: Fix deadlock caused by missing memory barrier · 6e7ca09b
    Nikolay Borisov authored Jul 25, 2019
    Commit 06297d8c ("btrfs: switch extent_buffer blocking_writers from
    atomic to int") changed the type of blocking_writers but forgot to
    adjust relevant code in btrfs_tree_unlock by converting the
    smp_mb__after_atomic to smp_mb.  This opened up the possibility of a
    deadlock due to re-ordering of setting blocking_writers and
    checking/waking up the waiter. This particular lockup is explained in a
    comment above waitqueue_active() function.
    
    Fix it by converting the memory barrier to a full smp_mb, accounting
    for the fact that blocking_writers is a simple integer.
    
    Fixes: 06297d8c
    
     ("btrfs: switch extent_buffer blocking_writers from atomic to int")
    Tested-by: default avatarJohannes Thumshirn <jthumshirn@suse.com>
    Signed-off-by: default avatarNikolay Borisov <nborisov@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    6e7ca09b