|
@@ -1456,8 +1456,18 @@ EXPORT_SYMBOL(__break_lease);
|
|
*/
|
|
*/
|
|
void lease_get_mtime(struct inode *inode, struct timespec *time)
|
|
void lease_get_mtime(struct inode *inode, struct timespec *time)
|
|
{
|
|
{
|
|
- struct file_lock *flock = inode->i_flock;
|
|
|
|
- if (flock && IS_LEASE(flock) && (flock->fl_type == F_WRLCK))
|
|
|
|
|
|
+ bool has_lease = false;
|
|
|
|
+ struct file_lock *flock;
|
|
|
|
+
|
|
|
|
+ if (inode->i_flock) {
|
|
|
|
+ spin_lock(&inode->i_lock);
|
|
|
|
+ flock = inode->i_flock;
|
|
|
|
+ if (flock && IS_LEASE(flock) && (flock->fl_type == F_WRLCK))
|
|
|
|
+ has_lease = true;
|
|
|
|
+ spin_unlock(&inode->i_lock);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (has_lease)
|
|
*time = current_fs_time(inode->i_sb);
|
|
*time = current_fs_time(inode->i_sb);
|
|
else
|
|
else
|
|
*time = inode->i_mtime;
|
|
*time = inode->i_mtime;
|