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

Commit d54ff732 authored by Steve French's avatar Steve French
Browse files

[CIFS] Fix lease break for writes



On lease break we were breaking to readonly leases always
even if write requested.  Also removed experimental
ifdef around setlease code

Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 9bf67e51
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -645,7 +645,6 @@ static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
	return generic_file_llseek_unlocked(file, offset, origin);
}

#ifdef CONFIG_CIFS_EXPERIMENTAL
static int cifs_setlease(struct file *file, long arg, struct file_lock **lease)
{
	/* note that this is called by vfs setlease with the BKL held
@@ -674,7 +673,6 @@ static int cifs_setlease(struct file *file, long arg, struct file_lock **lease)
	else
		return -EAGAIN;
}
#endif

struct file_system_type cifs_fs_type = {
	.owner = THIS_MODULE,
@@ -751,10 +749,7 @@ const struct file_operations cifs_file_ops = {
#ifdef CONFIG_CIFS_POSIX
	.unlocked_ioctl	= cifs_ioctl,
#endif /* CONFIG_CIFS_POSIX */

#ifdef CONFIG_CIFS_EXPERIMENTAL
	.setlease = cifs_setlease,
#endif /* CONFIG_CIFS_EXPERIMENTAL */
};

const struct file_operations cifs_file_direct_ops = {
@@ -773,9 +768,7 @@ const struct file_operations cifs_file_direct_ops = {
	.unlocked_ioctl  = cifs_ioctl,
#endif /* CONFIG_CIFS_POSIX */
	.llseek = cifs_llseek,
#ifdef CONFIG_CIFS_EXPERIMENTAL
	.setlease = cifs_setlease,
#endif /* CONFIG_CIFS_EXPERIMENTAL */
};
const struct file_operations cifs_file_nobrl_ops = {
	.read = do_sync_read,
@@ -792,10 +785,7 @@ const struct file_operations cifs_file_nobrl_ops = {
#ifdef CONFIG_CIFS_POSIX
	.unlocked_ioctl	= cifs_ioctl,
#endif /* CONFIG_CIFS_POSIX */

#ifdef CONFIG_CIFS_EXPERIMENTAL
	.setlease = cifs_setlease,
#endif /* CONFIG_CIFS_EXPERIMENTAL */
};

const struct file_operations cifs_file_direct_nobrl_ops = {
@@ -813,9 +803,7 @@ const struct file_operations cifs_file_direct_nobrl_ops = {
	.unlocked_ioctl  = cifs_ioctl,
#endif /* CONFIG_CIFS_POSIX */
	.llseek = cifs_llseek,
#ifdef CONFIG_CIFS_EXPERIMENTAL
	.setlease = cifs_setlease,
#endif /* CONFIG_CIFS_EXPERIMENTAL */
};

const struct file_operations cifs_dir_ops = {
+1 −1
Original line number Diff line number Diff line
@@ -114,5 +114,5 @@ extern long cifs_ioctl(struct file *filep, unsigned int cmd, unsigned long arg);
extern const struct export_operations cifs_export_ops;
#endif /* EXPERIMENTAL */

#define CIFS_VERSION   "1.63"
#define CIFS_VERSION   "1.64"
#endif				/* _CIFSFS_H */
+2 −4
Original line number Diff line number Diff line
@@ -2306,12 +2306,10 @@ cifs_oplock_break(struct slow_work *work)
	int rc, waitrc = 0;

	if (inode && S_ISREG(inode->i_mode)) {
#ifdef CONFIG_CIFS_EXPERIMENTAL
		if (cinode->clientCanCacheAll == 0)
		if (cinode->clientCanCacheRead)
			break_lease(inode, O_RDONLY);
		else if (cinode->clientCanCacheRead == 0)
		else
			break_lease(inode, O_WRONLY);
#endif
		rc = filemap_fdatawrite(inode->i_mapping);
		if (cinode->clientCanCacheRead == 0) {
			waitrc = filemap_fdatawait(inode->i_mapping);