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
This commit is contained in:
commit
cc73dc04c7
4 changed files with 19 additions and 5 deletions
|
@ -564,6 +564,11 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
|
|||
dentry = ERR_PTR(-ENOENT);
|
||||
break;
|
||||
}
|
||||
if (!S_ISDIR(dir->i_mode)) {
|
||||
dput(dentry);
|
||||
dentry = ERR_PTR(-ENOTDIR);
|
||||
break;
|
||||
}
|
||||
|
||||
/* skip separators */
|
||||
while (*s == sep)
|
||||
|
|
|
@ -1909,8 +1909,11 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
|
|||
} while (rc == -EAGAIN);
|
||||
|
||||
for (i = 0; i < wdata->nr_pages; i++) {
|
||||
if (rc != 0)
|
||||
if (rc != 0) {
|
||||
SetPageError(wdata->pages[i]);
|
||||
end_page_writeback(wdata->pages[i]);
|
||||
page_cache_release(wdata->pages[i]);
|
||||
}
|
||||
unlock_page(wdata->pages[i]);
|
||||
}
|
||||
|
||||
|
|
|
@ -1031,7 +1031,7 @@ static int cifs_parse_security_flavors(char *value,
|
|||
|
||||
switch (match_token(value, cifs_secflavor_tokens, args)) {
|
||||
case Opt_sec_krb5:
|
||||
vol->secFlg |= CIFSSEC_MAY_KRB5;
|
||||
vol->secFlg |= CIFSSEC_MAY_KRB5 | CIFSSEC_MAY_SIGN;
|
||||
break;
|
||||
case Opt_sec_krb5i:
|
||||
vol->secFlg |= CIFSSEC_MAY_KRB5 | CIFSSEC_MUST_SIGN;
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include "cifs_fs_sb.h"
|
||||
#include "fscache.h"
|
||||
|
||||
|
||||
static inline int cifs_convert_flags(unsigned int flags)
|
||||
{
|
||||
if ((flags & O_ACCMODE) == O_RDONLY)
|
||||
|
@ -72,10 +73,15 @@ static u32 cifs_posix_convert_flags(unsigned int flags)
|
|||
else if ((flags & O_ACCMODE) == O_RDWR)
|
||||
posix_flags = SMB_O_RDWR;
|
||||
|
||||
if (flags & O_CREAT)
|
||||
if (flags & O_CREAT) {
|
||||
posix_flags |= SMB_O_CREAT;
|
||||
if (flags & O_EXCL)
|
||||
posix_flags |= SMB_O_EXCL;
|
||||
if (flags & 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)
|
||||
posix_flags |= SMB_O_TRUNC;
|
||||
/* be safe and imply O_SYNC for O_DSYNC */
|
||||
|
|
Loading…
Reference in a new issue