mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
[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: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
9bf67e516f
commit
d54ff73259
@ -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 = {
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user