[CIFS] Add compat with SFU (part 1)
This should help the case of creating fifos and other special files to servers which do not support the Unix extensions. Signed-off-by: Steve French (sfrench@us.ibm.com) Thanks to Martin Koeppe for his suggestions and good analysis
This commit is contained in:
parent
4887c61811
commit
d7245c2ccf
|
@ -25,6 +25,7 @@
|
|||
#define CIFS_MOUNT_NO_XATTR 0x10 /* if set - disable xattr support */
|
||||
#define CIFS_MOUNT_MAP_SPECIAL_CHR 0x20 /* remap illegal chars in filenames */
|
||||
#define CIFS_MOUNT_POSIX_PATHS 0x40 /* Negotiate posix pathnames if possible. */
|
||||
#define CIFS_MOUNT_UNX_EMUL 0x80 /* Network compat with SFUnix emulation */
|
||||
|
||||
struct cifs_sb_info {
|
||||
struct cifsTconInfo *tcon; /* primary mount */
|
||||
|
|
|
@ -75,6 +75,7 @@ struct smb_vol {
|
|||
unsigned direct_io:1;
|
||||
unsigned remap:1; /* set to remap seven reserved chars in filenames */
|
||||
unsigned posix_paths:1; /* unset to not ask for posix pathnames. */
|
||||
unsigned sfu_emul:1;
|
||||
unsigned int rsize;
|
||||
unsigned int wsize;
|
||||
unsigned int sockopt;
|
||||
|
@ -1027,6 +1028,10 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
|
|||
vol->remap = 1;
|
||||
} else if (strnicmp(data, "nomapchars", 10) == 0) {
|
||||
vol->remap = 0;
|
||||
} else if (strnicmp(data, "sfu", 3) == 0) {
|
||||
vol->sfu_emul = 1;
|
||||
} else if (strnicmp(data, "nosfu", 5) == 0) {
|
||||
vol->sfu_emul = 0;
|
||||
} else if (strnicmp(data, "posixpaths", 10) == 0) {
|
||||
vol->posix_paths = 1;
|
||||
} else if (strnicmp(data, "noposixpaths", 12) == 0) {
|
||||
|
@ -1687,6 +1692,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
|
|||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SPECIAL_CHR;
|
||||
if(volume_info.no_xattr)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
|
||||
if(volume_info.sfu_emul)
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
|
||||
|
||||
if(volume_info.direct_io) {
|
||||
cERROR(1,("mounting share using direct i/o"));
|
||||
|
|
|
@ -209,7 +209,7 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
|
|||
CIFS_MOUNT_MAP_SPECIAL_CHR);
|
||||
}
|
||||
else {
|
||||
/* BB implement via Windows security descriptors */
|
||||
/* BB implement mode setting via Windows security descriptors */
|
||||
/* eg CIFSSMBWinSetPerms(xid,pTcon,full_path,mode,-1,-1,local_nls);*/
|
||||
/* could set r/o dos attribute if mode & 0222 == 0 */
|
||||
}
|
||||
|
@ -326,6 +326,16 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode, dev_t dev
|
|||
if(rc == 0)
|
||||
d_instantiate(direntry, newinode);
|
||||
}
|
||||
} else {
|
||||
if((cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) &&
|
||||
(special_file(mode))) {
|
||||
|
||||
cFYI(1,("sfu compat create special file"));
|
||||
/* Attributes = cpu_to_le32(ATTR_SYSTEM);
|
||||
rc = CIFSSMBOpen(xid, pTcon, full_path, disposition, ...); */
|
||||
|
||||
/* add code here to set EAs */
|
||||
}
|
||||
}
|
||||
|
||||
kfree(full_path);
|
||||
|
|
Loading…
Reference in a new issue