@@ -1584,9 +1584,13 @@ SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd)
!(filp->f_mode & (FMODE_READ|FMODE_WRITE)))
goto out_putf;
+ error = -EIO;
+ if (!file_hotplug_read_trylock(filp))
+ goto out_putf;
+
error = flock_make_lock(filp, &lock, cmd);
if (error)
- goto out_putf;
+ goto out_unlock;
if (can_sleep)
lock->fl_flags |= FL_SLEEP;
@@ -1604,6 +1608,8 @@ SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd)
out_free:
locks_free_lock(lock);
+ out_unlock:
+ file_hotplug_read_unlock(filp);
out_putf:
fput(filp);
out: