Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 962bd40b authored by Jeff Layton's avatar Jeff Layton
Browse files

locks: add missing memory barrier in break_deleg



break_deleg is subject to the same potential race as break_lease. Add
a memory barrier to prevent it.

Signed-off-by: default avatarJeff Layton <jlayton@primarydata.com>
parent 64b2d1fb
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -1914,6 +1914,12 @@ static inline int break_lease(struct inode *inode, unsigned int mode)


static inline int break_deleg(struct inode *inode, unsigned int mode)
static inline int break_deleg(struct inode *inode, unsigned int mode)
{
{
	/*
	 * Since this check is lockless, we must ensure that any refcounts
	 * taken are done before checking inode->i_flock. Otherwise, we could
	 * end up racing with tasks trying to set a new lease on this file.
	 */
	smp_mb();
	if (inode->i_flock)
	if (inode->i_flock)
		return __break_lease(inode, mode, FL_DELEG);
		return __break_lease(inode, mode, FL_DELEG);
	return 0;
	return 0;