aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/fs.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h
index c3f46e499dd0..22ae79650b82 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1914,6 +1914,12 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
1914 1914
1915static inline int break_deleg(struct inode *inode, unsigned int mode) 1915static inline int break_deleg(struct inode *inode, unsigned int mode)
1916{ 1916{
1917 /*
1918 * Since this check is lockless, we must ensure that any refcounts
1919 * taken are done before checking inode->i_flock. Otherwise, we could
1920 * end up racing with tasks trying to set a new lease on this file.
1921 */
1922 smp_mb();
1917 if (inode->i_flock) 1923 if (inode->i_flock)
1918 return __break_lease(inode, mode, FL_DELEG); 1924 return __break_lease(inode, mode, FL_DELEG);
1919 return 0; 1925 return 0;