Commit 311f08acde635e4e5ccea9b9d8c856cc2e0ced95

Authored by Alex Elder
Committed by Ben Myers
1 parent a21cd50367

xfs: memory barrier before wake_up_bit()

In xfs_ifunlock() there is a call to wake_up_bit() after clearing
the flush lock on the xfs inode.  This is not guaranteed to be safe,
as noted in the comments above wake_up_bit() beginning with:

    In order for this to function properly, as it uses
    waitqueue_active() internally, some kind of memory
    barrier must be done prior to calling this.


Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Ben Myers <bpm@sgi.com>

Showing 1 changed file with 1 additions and 0 deletions Side-by-side Diff

... ... @@ -419,6 +419,7 @@
419 419 static inline void xfs_ifunlock(struct xfs_inode *ip)
420 420 {
421 421 xfs_iflags_clear(ip, XFS_IFLOCK);
  422 + smp_mb();
422 423 wake_up_bit(&ip->i_flags, __XFS_IFLOCK_BIT);
423 424 }
424 425