mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 13:53:24 +00:00
cifs: move update of flags into a separate function
This function will set/clear flags that can be changed during mount or remount Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
51acd208bd
commit
2d39f50c2b
@ -2727,61 +2727,10 @@ int cifs_setup_cifs_sb(struct cifs_sb_info *cifs_sb)
|
||||
}
|
||||
ctx->local_nls = cifs_sb->local_nls;
|
||||
|
||||
if (ctx->nodfs)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_DFS;
|
||||
if (ctx->noperm)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_PERM;
|
||||
if (ctx->setuids)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SET_UID;
|
||||
if (ctx->setuidfromacl)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UID_FROM_ACL;
|
||||
if (ctx->server_ino)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SERVER_INUM;
|
||||
if (ctx->remap)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SFM_CHR;
|
||||
if (ctx->sfu_remap)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SPECIAL_CHR;
|
||||
if (ctx->no_xattr)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
|
||||
if (ctx->sfu_emul)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
|
||||
if (ctx->nobrl)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL;
|
||||
if (ctx->nohandlecache)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_HANDLE_CACHE;
|
||||
if (ctx->nostrictsync)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOSSYNC;
|
||||
if (ctx->mand_lock)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOPOSIXBRL;
|
||||
if (ctx->rwpidforward)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RWPIDFORWARD;
|
||||
if (ctx->mode_ace)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MODE_FROM_SID;
|
||||
if (ctx->cifs_acl)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_ACL;
|
||||
if (ctx->backupuid_specified) {
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPUID;
|
||||
}
|
||||
if (ctx->backupgid_specified) {
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPGID;
|
||||
}
|
||||
if (ctx->override_uid)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_UID;
|
||||
if (ctx->override_gid)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID;
|
||||
if (ctx->dynperm)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM;
|
||||
if (ctx->fsc)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_FSCACHE;
|
||||
if (ctx->multiuser)
|
||||
cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_MULTIUSER |
|
||||
CIFS_MOUNT_NO_PERM);
|
||||
if (ctx->strict_io)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_STRICT_IO;
|
||||
if (ctx->direct_io) {
|
||||
smb3_update_mnt_flags(cifs_sb);
|
||||
|
||||
if (ctx->direct_io)
|
||||
cifs_dbg(FYI, "mounting share using direct i/o\n");
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;
|
||||
}
|
||||
if (ctx->cache_ro) {
|
||||
cifs_dbg(VFS, "mounting share with read only caching. Ensure that the share will not be modified while in use.\n");
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RO_CACHE;
|
||||
@ -2790,23 +2739,6 @@ int cifs_setup_cifs_sb(struct cifs_sb_info *cifs_sb)
|
||||
cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_RO_CACHE |
|
||||
CIFS_MOUNT_RW_CACHE);
|
||||
}
|
||||
if (ctx->mfsymlinks) {
|
||||
if (ctx->sfu_emul) {
|
||||
/*
|
||||
* Our SFU ("Services for Unix" emulation does not allow
|
||||
* creating symlinks but does allow reading existing SFU
|
||||
* symlinks (it does allow both creating and reading SFU
|
||||
* style mknod and FIFOs though). When "mfsymlinks" and
|
||||
* "sfu" are both enabled at the same time, it allows
|
||||
* reading both types of symlinks, but will only create
|
||||
* them with mfsymlinks format. This allows better
|
||||
* Apple compatibility (probably better for Samba too)
|
||||
* while still recognizing old Windows style symlinks.
|
||||
*/
|
||||
cifs_dbg(VFS, "mount options mfsymlinks and sfu both enabled\n");
|
||||
}
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MF_SYMLINKS;
|
||||
}
|
||||
|
||||
if ((ctx->cifs_acl) && (ctx->dynperm))
|
||||
cifs_dbg(VFS, "mount option dynperm ignored if cifsacl mount option supported\n");
|
||||
|
@ -1363,3 +1363,158 @@ smb3_cleanup_fs_context(struct smb3_fs_context *ctx)
|
||||
smb3_cleanup_fs_context_contents(ctx);
|
||||
kfree(ctx);
|
||||
}
|
||||
|
||||
void smb3_update_mnt_flags(struct cifs_sb_info *cifs_sb)
|
||||
{
|
||||
struct smb3_fs_context *ctx = cifs_sb->ctx;
|
||||
|
||||
if (ctx->nodfs)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_DFS;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NO_DFS;
|
||||
|
||||
if (ctx->noperm)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_PERM;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NO_PERM;
|
||||
|
||||
if (ctx->setuids)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SET_UID;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SET_UID;
|
||||
|
||||
if (ctx->setuidfromacl)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UID_FROM_ACL;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_UID_FROM_ACL;
|
||||
|
||||
if (ctx->server_ino)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SERVER_INUM;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SERVER_INUM;
|
||||
|
||||
if (ctx->remap)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SFM_CHR;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_MAP_SFM_CHR;
|
||||
|
||||
if (ctx->sfu_remap)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SPECIAL_CHR;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_MAP_SPECIAL_CHR;
|
||||
|
||||
if (ctx->no_xattr)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NO_XATTR;
|
||||
|
||||
if (ctx->sfu_emul)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_UNX_EMUL;
|
||||
|
||||
if (ctx->nobrl)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NO_BRL;
|
||||
|
||||
if (ctx->nohandlecache)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_HANDLE_CACHE;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NO_HANDLE_CACHE;
|
||||
|
||||
if (ctx->nostrictsync)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOSSYNC;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NOSSYNC;
|
||||
|
||||
if (ctx->mand_lock)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOPOSIXBRL;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_NOPOSIXBRL;
|
||||
|
||||
if (ctx->rwpidforward)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RWPIDFORWARD;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_RWPIDFORWARD;
|
||||
|
||||
if (ctx->mode_ace)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MODE_FROM_SID;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_MODE_FROM_SID;
|
||||
|
||||
if (ctx->cifs_acl)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_ACL;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_CIFS_ACL;
|
||||
|
||||
if (ctx->backupuid_specified)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPUID;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_CIFS_BACKUPUID;
|
||||
|
||||
if (ctx->backupgid_specified)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPGID;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_CIFS_BACKUPGID;
|
||||
|
||||
if (ctx->override_uid)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_UID;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_OVERR_UID;
|
||||
|
||||
if (ctx->override_gid)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_OVERR_GID;
|
||||
|
||||
if (ctx->dynperm)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_DYNPERM;
|
||||
|
||||
if (ctx->fsc)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_FSCACHE;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_FSCACHE;
|
||||
|
||||
if (ctx->multiuser)
|
||||
cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_MULTIUSER |
|
||||
CIFS_MOUNT_NO_PERM);
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~(CIFS_MOUNT_MULTIUSER |
|
||||
CIFS_MOUNT_NO_PERM);
|
||||
|
||||
if (ctx->strict_io)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_STRICT_IO;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_STRICT_IO;
|
||||
|
||||
if (ctx->direct_io)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_DIRECT_IO;
|
||||
|
||||
if (ctx->mfsymlinks)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MF_SYMLINKS;
|
||||
else
|
||||
cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_MF_SYMLINKS;
|
||||
if (ctx->mfsymlinks) {
|
||||
if (ctx->sfu_emul) {
|
||||
/*
|
||||
* Our SFU ("Services for Unix" emulation does not allow
|
||||
* creating symlinks but does allow reading existing SFU
|
||||
* symlinks (it does allow both creating and reading SFU
|
||||
* style mknod and FIFOs though). When "mfsymlinks" and
|
||||
* "sfu" are both enabled at the same time, it allows
|
||||
* reading both types of symlinks, but will only create
|
||||
* them with mfsymlinks format. This allows better
|
||||
* Apple compatibility (probably better for Samba too)
|
||||
* while still recognizing old Windows style symlinks.
|
||||
*/
|
||||
cifs_dbg(VFS, "mount options mfsymlinks and sfu both enabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -266,5 +266,6 @@ static inline struct smb3_fs_context *smb3_fc2context(const struct fs_context *f
|
||||
}
|
||||
|
||||
extern int smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx);
|
||||
extern void smb3_update_mnt_flags(struct cifs_sb_info *cifs_sb);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user