|
@@ -1276,7 +1276,7 @@ int fcntl_getlease(struct file *filp)
|
|
*/
|
|
*/
|
|
static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
|
static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
|
{
|
|
{
|
|
- struct file_lock *fl, **before, **my_before = NULL, *lease = *flp;
|
|
|
|
|
|
+ struct file_lock *fl, **before, **my_before = NULL, *lease;
|
|
struct dentry *dentry = filp->f_dentry;
|
|
struct dentry *dentry = filp->f_dentry;
|
|
struct inode *inode = dentry->d_inode;
|
|
struct inode *inode = dentry->d_inode;
|
|
int error, rdlease_count = 0, wrlease_count = 0;
|
|
int error, rdlease_count = 0, wrlease_count = 0;
|
|
@@ -1287,6 +1287,8 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
|
if (!flp || !(*flp) || !(*flp)->fl_lmops || !(*flp)->fl_lmops->fl_break)
|
|
if (!flp || !(*flp) || !(*flp)->fl_lmops || !(*flp)->fl_lmops->fl_break)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
|
|
+ lease = *flp;
|
|
|
|
+
|
|
error = -EAGAIN;
|
|
error = -EAGAIN;
|
|
if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0))
|
|
if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0))
|
|
goto out;
|
|
goto out;
|