Commit cc73dc04 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6

Pull CIFS fixes from Steve French:
 "Four cifs fixes (including for kernel bug #53221 and samba bug #9519)"

* 'for-next' of git://git.samba.org/sfrench/cifs-2.6:
  cifs: bugfix for unreclaimed writeback pages in cifs_writev_requeue()
  cifs: set MAY_SIGN when sec=krb5
  POSIX extensions disabled on client due to illegal O_EXCL flag sent to Samba
  cifs: ensure that cifs_get_root() only traverses directories
parents 5140a8ce c51bb0ea
...@@ -564,6 +564,11 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb) ...@@ -564,6 +564,11 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
dentry = ERR_PTR(-ENOENT); dentry = ERR_PTR(-ENOENT);
break; break;
} }
if (!S_ISDIR(dir->i_mode)) {
dput(dentry);
dentry = ERR_PTR(-ENOTDIR);
break;
}
/* skip separators */ /* skip separators */
while (*s == sep) while (*s == sep)
......
...@@ -1909,8 +1909,11 @@ cifs_writev_requeue(struct cifs_writedata *wdata) ...@@ -1909,8 +1909,11 @@ 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++) {
if (rc != 0) if (rc != 0) {
SetPageError(wdata->pages[i]); SetPageError(wdata->pages[i]);
end_page_writeback(wdata->pages[i]);
page_cache_release(wdata->pages[i]);
}
unlock_page(wdata->pages[i]); unlock_page(wdata->pages[i]);
} }
......
...@@ -1031,7 +1031,7 @@ static int cifs_parse_security_flavors(char *value, ...@@ -1031,7 +1031,7 @@ static int cifs_parse_security_flavors(char *value,
switch (match_token(value, cifs_secflavor_tokens, args)) { switch (match_token(value, cifs_secflavor_tokens, args)) {
case Opt_sec_krb5: case Opt_sec_krb5:
vol->secFlg |= CIFSSEC_MAY_KRB5; vol->secFlg |= CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_SIGN;
break; break;
case Opt_sec_krb5i: case Opt_sec_krb5i:
vol->secFlg |= CIFSSEC_MAY_KRB5 | CIFSSEC_MUST_SIGN; vol->secFlg |= CIFSSEC_MAY_KRB5 | CIFSSEC_MUST_SIGN;
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include "cifs_fs_sb.h" #include "cifs_fs_sb.h"
#include "fscache.h" #include "fscache.h"
static inline int cifs_convert_flags(unsigned int flags) static inline int cifs_convert_flags(unsigned int flags)
{ {
if ((flags & O_ACCMODE) == O_RDONLY) if ((flags & O_ACCMODE) == O_RDONLY)
...@@ -72,10 +73,15 @@ static u32 cifs_posix_convert_flags(unsigned int flags) ...@@ -72,10 +73,15 @@ static u32 cifs_posix_convert_flags(unsigned int flags)
else if ((flags & O_ACCMODE) == O_RDWR) else if ((flags & O_ACCMODE) == O_RDWR)
posix_flags = SMB_O_RDWR; posix_flags = SMB_O_RDWR;
if (flags & O_CREAT) if (flags & O_CREAT) {
posix_flags |= SMB_O_CREAT; posix_flags |= SMB_O_CREAT;
if (flags & O_EXCL) if (flags & O_EXCL)
posix_flags |= SMB_O_EXCL; posix_flags |= SMB_O_EXCL;
} else if (flags & O_EXCL)
cFYI(1, "Application %s pid %d has incorrectly set O_EXCL flag"
"but not O_CREAT on file open. Ignoring O_EXCL",
current->comm, current->tgid);
if (flags & O_TRUNC) if (flags & O_TRUNC)
posix_flags |= SMB_O_TRUNC; posix_flags |= SMB_O_TRUNC;
/* be safe and imply O_SYNC for O_DSYNC */ /* be safe and imply O_SYNC for O_DSYNC */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment