fs/ntfs3: fix deadlock in mark_as_free_ex
Reported-by: syzbot+e94d98936a0ed08bde43@syzkaller.appspotmail.com Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
@ -2454,10 +2454,12 @@ void mark_as_free_ex(struct ntfs_sb_info *sbi, CLST lcn, CLST len, bool trim)
|
|||||||
{
|
{
|
||||||
CLST end, i, zone_len, zlen;
|
CLST end, i, zone_len, zlen;
|
||||||
struct wnd_bitmap *wnd = &sbi->used.bitmap;
|
struct wnd_bitmap *wnd = &sbi->used.bitmap;
|
||||||
|
bool dirty = false;
|
||||||
|
|
||||||
down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_CLUSTERS);
|
down_write_nested(&wnd->rw_lock, BITMAP_MUTEX_CLUSTERS);
|
||||||
if (!wnd_is_used(wnd, lcn, len)) {
|
if (!wnd_is_used(wnd, lcn, len)) {
|
||||||
ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
|
/* mark volume as dirty out of wnd->rw_lock */
|
||||||
|
dirty = true;
|
||||||
|
|
||||||
end = lcn + len;
|
end = lcn + len;
|
||||||
len = 0;
|
len = 0;
|
||||||
@ -2511,6 +2513,8 @@ void mark_as_free_ex(struct ntfs_sb_info *sbi, CLST lcn, CLST len, bool trim)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
up_write(&wnd->rw_lock);
|
up_write(&wnd->rw_lock);
|
||||||
|
if (dirty)
|
||||||
|
ntfs_set_state(sbi, NTFS_DIRTY_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user