Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6
Pull CIFS fixes from Steve French: "A small set of cifs fixes which includes one for a recent regression in the write path (pointed out by Anton), some fixes for rename problems and as promised for 3.9 removing the obsolete sockopt mount option (and the accompanying deprecation warning)." * 'for-next' of git://git.samba.org/sfrench/cifs-2.6: CIFS: Fix missing of oplock_read value in smb30_values structure cifs: don't try to unlock pagecache page after releasing it cifs: remove the sockopt= mount option cifs: Check server capability before attempting silly rename cifs: Fix bug when checking error condition in cifs_rename_pending_delete()
This commit is contained in:
commit
67a865a40b
|
@ -1909,12 +1909,12 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
|
||||||
} while (rc == -EAGAIN);
|
} while (rc == -EAGAIN);
|
||||||
|
|
||||||
for (i = 0; i < wdata->nr_pages; i++) {
|
for (i = 0; i < wdata->nr_pages; i++) {
|
||||||
|
unlock_page(wdata->pages[i]);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
SetPageError(wdata->pages[i]);
|
SetPageError(wdata->pages[i]);
|
||||||
end_page_writeback(wdata->pages[i]);
|
end_page_writeback(wdata->pages[i]);
|
||||||
page_cache_release(wdata->pages[i]);
|
page_cache_release(wdata->pages[i]);
|
||||||
}
|
}
|
||||||
unlock_page(wdata->pages[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mapping_set_error(inode->i_mapping, rc);
|
mapping_set_error(inode->i_mapping, rc);
|
||||||
|
|
|
@ -97,7 +97,7 @@ enum {
|
||||||
Opt_user, Opt_pass, Opt_ip,
|
Opt_user, Opt_pass, Opt_ip,
|
||||||
Opt_unc, Opt_domain,
|
Opt_unc, Opt_domain,
|
||||||
Opt_srcaddr, Opt_prefixpath,
|
Opt_srcaddr, Opt_prefixpath,
|
||||||
Opt_iocharset, Opt_sockopt,
|
Opt_iocharset,
|
||||||
Opt_netbiosname, Opt_servern,
|
Opt_netbiosname, Opt_servern,
|
||||||
Opt_ver, Opt_vers, Opt_sec, Opt_cache,
|
Opt_ver, Opt_vers, Opt_sec, Opt_cache,
|
||||||
|
|
||||||
|
@ -202,7 +202,6 @@ static const match_table_t cifs_mount_option_tokens = {
|
||||||
{ Opt_srcaddr, "srcaddr=%s" },
|
{ Opt_srcaddr, "srcaddr=%s" },
|
||||||
{ Opt_prefixpath, "prefixpath=%s" },
|
{ Opt_prefixpath, "prefixpath=%s" },
|
||||||
{ Opt_iocharset, "iocharset=%s" },
|
{ Opt_iocharset, "iocharset=%s" },
|
||||||
{ Opt_sockopt, "sockopt=%s" },
|
|
||||||
{ Opt_netbiosname, "netbiosname=%s" },
|
{ Opt_netbiosname, "netbiosname=%s" },
|
||||||
{ Opt_servern, "servern=%s" },
|
{ Opt_servern, "servern=%s" },
|
||||||
{ Opt_ver, "ver=%s" },
|
{ Opt_ver, "ver=%s" },
|
||||||
|
@ -1752,19 +1751,6 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
|
||||||
*/
|
*/
|
||||||
cFYI(1, "iocharset set to %s", string);
|
cFYI(1, "iocharset set to %s", string);
|
||||||
break;
|
break;
|
||||||
case Opt_sockopt:
|
|
||||||
string = match_strdup(args);
|
|
||||||
if (string == NULL)
|
|
||||||
goto out_nomem;
|
|
||||||
|
|
||||||
if (strnicmp(string, "TCP_NODELAY", 11) == 0) {
|
|
||||||
printk(KERN_WARNING "CIFS: the "
|
|
||||||
"sockopt=TCP_NODELAY option has been "
|
|
||||||
"deprecated and will be removed "
|
|
||||||
"in 3.9\n");
|
|
||||||
vol->sockopt_tcp_nodelay = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Opt_netbiosname:
|
case Opt_netbiosname:
|
||||||
string = match_strdup(args);
|
string = match_strdup(args);
|
||||||
if (string == NULL)
|
if (string == NULL)
|
||||||
|
|
|
@ -995,6 +995,15 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
|
||||||
return PTR_ERR(tlink);
|
return PTR_ERR(tlink);
|
||||||
tcon = tlink_tcon(tlink);
|
tcon = tlink_tcon(tlink);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We cannot rename the file if the server doesn't support
|
||||||
|
* CAP_INFOLEVEL_PASSTHRU
|
||||||
|
*/
|
||||||
|
if (!(tcon->ses->capabilities & CAP_INFOLEVEL_PASSTHRU)) {
|
||||||
|
rc = -EBUSY;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
rc = CIFSSMBOpen(xid, tcon, full_path, FILE_OPEN,
|
rc = CIFSSMBOpen(xid, tcon, full_path, FILE_OPEN,
|
||||||
DELETE|FILE_WRITE_ATTRIBUTES, CREATE_NOT_DIR,
|
DELETE|FILE_WRITE_ATTRIBUTES, CREATE_NOT_DIR,
|
||||||
&netfid, &oplock, NULL, cifs_sb->local_nls,
|
&netfid, &oplock, NULL, cifs_sb->local_nls,
|
||||||
|
@ -1023,7 +1032,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
|
||||||
current->tgid);
|
current->tgid);
|
||||||
/* although we would like to mark the file hidden
|
/* although we would like to mark the file hidden
|
||||||
if that fails we will still try to rename it */
|
if that fails we will still try to rename it */
|
||||||
if (rc != 0)
|
if (!rc)
|
||||||
cifsInode->cifsAttrs = dosattr;
|
cifsInode->cifsAttrs = dosattr;
|
||||||
else
|
else
|
||||||
dosattr = origattr; /* since not able to change them */
|
dosattr = origattr; /* since not able to change them */
|
||||||
|
|
|
@ -744,4 +744,5 @@ struct smb_version_values smb30_values = {
|
||||||
.cap_unix = 0,
|
.cap_unix = 0,
|
||||||
.cap_nt_find = SMB2_NT_FIND,
|
.cap_nt_find = SMB2_NT_FIND,
|
||||||
.cap_large_files = SMB2_LARGE_FILES,
|
.cap_large_files = SMB2_LARGE_FILES,
|
||||||
|
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue