Skip to content

Commit

Permalink
drbd: use clear_bit_unlock() where appropriate
Browse files Browse the repository at this point in the history
Some open-coded clear_bit(); smp_mb__after_clear_bit();
should in fact have been smp_mb__before_clear_bit(); clear_bit();

Instead, use clear_bit_unlock() to annotate the intention,
and have it do the right thing.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
  • Loading branch information
Lars Ellenberg authored and Philipp Reisner committed Oct 14, 2011
1 parent 6161042 commit 4738fa1
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 12 deletions.
3 changes: 1 addition & 2 deletions drivers/block/drbd/drbd_bitmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,7 @@ static void bm_page_unlock_io(struct drbd_conf *mdev, int page_nr)
{
struct drbd_bitmap *b = mdev->bitmap;
void *addr = &page_private(b->bm_pages[page_nr]);
clear_bit(BM_PAGE_IO_LOCK, addr);
smp_mb__after_clear_bit();
clear_bit_unlock(BM_PAGE_IO_LOCK, addr);
wake_up(&mdev->bitmap->bm_io_wait);
}

Expand Down
3 changes: 1 addition & 2 deletions drivers/block/drbd/drbd_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2818,8 +2818,7 @@ static int w_bitmap_io(struct drbd_work *w, int unused)
put_ldev(mdev);
}

clear_bit(BITMAP_IO, &mdev->flags);
smp_mb__after_clear_bit();
clear_bit_unlock(BITMAP_IO, &mdev->flags);
wake_up(&mdev->misc_wait);

if (work->done)
Expand Down
3 changes: 1 addition & 2 deletions include/linux/lru_cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,7 @@ static inline int lc_try_lock(struct lru_cache *lc)
*/
static inline void lc_unlock(struct lru_cache *lc)
{
clear_bit(__LC_DIRTY, &lc->flags);
smp_mb__after_clear_bit();
clear_bit_unlock(__LC_DIRTY, &lc->flags);
}

static inline int lc_is_used(struct lru_cache *lc, unsigned int enr)
Expand Down
10 changes: 4 additions & 6 deletions lib/lru_cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ MODULE_LICENSE("GPL");
} while (0)

#define RETURN(x...) do { \
clear_bit(__LC_PARANOIA, &lc->flags); \
smp_mb__after_clear_bit(); return x ; } while (0)
clear_bit_unlock(__LC_PARANOIA, &lc->flags); \
return x ; } while (0)

/* BUG() if e is not one of the elements tracked by lc */
#define PARANOIA_LC_ELEMENT(lc, e) do { \
Expand Down Expand Up @@ -438,8 +438,7 @@ void lc_changed(struct lru_cache *lc, struct lc_element *e)
hlist_add_head(&e->colision, lc_hash_slot(lc, lc->new_number));
lc->changing_element = NULL;
lc->new_number = LC_FREE;
clear_bit(__LC_DIRTY, &lc->flags);
smp_mb__after_clear_bit();
clear_bit_unlock(__LC_DIRTY, &lc->flags);
RETURN();
}

Expand All @@ -463,8 +462,7 @@ unsigned int lc_put(struct lru_cache *lc, struct lc_element *e)
/* move it to the front of LRU. */
list_move(&e->list, &lc->lru);
lc->used--;
clear_bit(__LC_STARVING, &lc->flags);
smp_mb__after_clear_bit();
clear_bit_unlock(__LC_STARVING, &lc->flags);
}
RETURN(e->refcnt);
}
Expand Down

0 comments on commit 4738fa1

Please sign in to comment.