|
@@ -169,7 +169,8 @@ cifs_put_super(struct super_block *sb)
|
|
static int
|
|
static int
|
|
cifs_statfs(struct super_block *sb, struct kstatfs *buf)
|
|
cifs_statfs(struct super_block *sb, struct kstatfs *buf)
|
|
{
|
|
{
|
|
- int xid, rc = -EOPNOTSUPP;
|
|
|
|
|
|
+ int xid;
|
|
|
|
+ int rc = -EOPNOTSUPP;
|
|
struct cifs_sb_info *cifs_sb;
|
|
struct cifs_sb_info *cifs_sb;
|
|
struct cifsTconInfo *pTcon;
|
|
struct cifsTconInfo *pTcon;
|
|
|
|
|
|
@@ -181,17 +182,18 @@ cifs_statfs(struct super_block *sb, struct kstatfs *buf)
|
|
buf->f_type = CIFS_MAGIC_NUMBER;
|
|
buf->f_type = CIFS_MAGIC_NUMBER;
|
|
|
|
|
|
/* instead could get the real value via SMB_QUERY_FS_ATTRIBUTE_INFO */
|
|
/* instead could get the real value via SMB_QUERY_FS_ATTRIBUTE_INFO */
|
|
- buf->f_namelen = PATH_MAX; /* PATH_MAX may be too long - it would presumably
|
|
|
|
- be length of total path, note that some servers may be
|
|
|
|
- able to support more than this, but best to be safe
|
|
|
|
- since Win2k and others can not handle very long filenames */
|
|
|
|
|
|
+ buf->f_namelen = PATH_MAX; /* PATH_MAX may be too long - it would
|
|
|
|
+ presumably be total path, but note
|
|
|
|
+ that some servers (includinng Samba 3)
|
|
|
|
+ have a shorter maximum path */
|
|
buf->f_files = 0; /* undefined */
|
|
buf->f_files = 0; /* undefined */
|
|
buf->f_ffree = 0; /* unlimited */
|
|
buf->f_ffree = 0; /* unlimited */
|
|
|
|
|
|
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
|
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
|
/* BB we could add a second check for a QFS Unix capability bit */
|
|
/* BB we could add a second check for a QFS Unix capability bit */
|
|
/* BB FIXME check CIFS_POSIX_EXTENSIONS Unix cap first FIXME BB */
|
|
/* BB FIXME check CIFS_POSIX_EXTENSIONS Unix cap first FIXME BB */
|
|
- if (pTcon->ses->capabilities & CAP_UNIX)
|
|
|
|
|
|
+ if ((pTcon->ses->capabilities & CAP_UNIX) && (CIFS_POSIX_EXTENSIONS &
|
|
|
|
+ le64_to_cpu(pTcon->fsUnixInfo.Capability)))
|
|
rc = CIFSSMBQFSPosixInfo(xid, pTcon, buf);
|
|
rc = CIFSSMBQFSPosixInfo(xid, pTcon, buf);
|
|
|
|
|
|
/* Only need to call the old QFSInfo if failed
|
|
/* Only need to call the old QFSInfo if failed
|
|
@@ -204,9 +206,10 @@ cifs_statfs(struct super_block *sb, struct kstatfs *buf)
|
|
int f_type;
|
|
int f_type;
|
|
__fsid_t f_fsid;
|
|
__fsid_t f_fsid;
|
|
int f_namelen; */
|
|
int f_namelen; */
|
|
- /* BB get from info put in tcon struct at mount time with call to QFSAttrInfo */
|
|
|
|
|
|
+ /* BB get from info in tcon struct at mount time call to QFSAttrInfo */
|
|
FreeXid(xid);
|
|
FreeXid(xid);
|
|
- return 0; /* always return success? what if volume is no longer available? */
|
|
|
|
|
|
+ return 0; /* always return success? what if volume is no
|
|
|
|
+ longer available? */
|
|
}
|
|
}
|
|
|
|
|
|
static int cifs_permission(struct inode * inode, int mask, struct nameidata *nd)
|
|
static int cifs_permission(struct inode * inode, int mask, struct nameidata *nd)
|
|
@@ -600,9 +603,7 @@ struct file_operations cifs_dir_ops = {
|
|
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
|
#ifdef CONFIG_CIFS_EXPERIMENTAL
|
|
.dir_notify = cifs_dir_notify,
|
|
.dir_notify = cifs_dir_notify,
|
|
#endif /* CONFIG_CIFS_EXPERIMENTAL */
|
|
#endif /* CONFIG_CIFS_EXPERIMENTAL */
|
|
-#ifdef CONFIG_CIFS_POSIX
|
|
|
|
.ioctl = cifs_ioctl,
|
|
.ioctl = cifs_ioctl,
|
|
-#endif /* CONFIG_CIFS_POSIX */
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static void
|
|
static void
|