mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
![Trond Myklebust](/assets/img/avatar_default.png)
Prior to David Howell's mount changes in 2.6.18, users who mounted different directories which happened to be from the same filesystem on the server would get different super blocks, and hence could choose different mount options. As long as there were no hard linked files that crossed from one subtree to another, this was quite safe. Post the changes, if the two directories are on the same filesystem (have the same 'fsid'), they will share the same super block, and hence the same mount options. Add a flag to allow users to elect not to share the NFS super block with another mount point, even if the fsids are the same. This will allow users to set different mount options for the two different super blocks, as was previously possible. It is still up to the user to ensure that there are no cache coherency issues when doing this, however the default behaviour will be to share super blocks whenever two paths result in the same fsid. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
#ifndef _LINUX_NFS4_MOUNT_H
|
|
#define _LINUX_NFS4_MOUNT_H
|
|
|
|
/*
|
|
* linux/include/linux/nfs4_mount.h
|
|
*
|
|
* Copyright (C) 2002 Trond Myklebust
|
|
*
|
|
* structure passed from user-space to kernel-space during an nfsv4 mount
|
|
*/
|
|
|
|
/*
|
|
* WARNING! Do not delete or change the order of these fields. If
|
|
* a new field is required then add it to the end. The version field
|
|
* tracks which fields are present. This will ensure some measure of
|
|
* mount-to-kernel version compatibility. Some of these aren't used yet
|
|
* but here they are anyway.
|
|
*/
|
|
#define NFS4_MOUNT_VERSION 1
|
|
|
|
struct nfs_string {
|
|
unsigned int len;
|
|
const char __user * data;
|
|
};
|
|
|
|
struct nfs4_mount_data {
|
|
int version; /* 1 */
|
|
int flags; /* 1 */
|
|
int rsize; /* 1 */
|
|
int wsize; /* 1 */
|
|
int timeo; /* 1 */
|
|
int retrans; /* 1 */
|
|
int acregmin; /* 1 */
|
|
int acregmax; /* 1 */
|
|
int acdirmin; /* 1 */
|
|
int acdirmax; /* 1 */
|
|
|
|
/* see the definition of 'struct clientaddr4' in RFC3010 */
|
|
struct nfs_string client_addr; /* 1 */
|
|
|
|
/* Mount path */
|
|
struct nfs_string mnt_path; /* 1 */
|
|
|
|
/* Server details */
|
|
struct nfs_string hostname; /* 1 */
|
|
/* Server IP address */
|
|
unsigned int host_addrlen; /* 1 */
|
|
struct sockaddr __user * host_addr; /* 1 */
|
|
|
|
/* Transport protocol to use */
|
|
int proto; /* 1 */
|
|
|
|
/* Pseudo-flavours to use for authentication. See RFC2623 */
|
|
int auth_flavourlen; /* 1 */
|
|
int __user *auth_flavours; /* 1 */
|
|
};
|
|
|
|
/* bits in the flags field */
|
|
/* Note: the fields that correspond to existing NFSv2/v3 mount options
|
|
* should mirror the values from include/linux/nfs_mount.h
|
|
*/
|
|
|
|
#define NFS4_MOUNT_SOFT 0x0001 /* 1 */
|
|
#define NFS4_MOUNT_INTR 0x0002 /* 1 */
|
|
#define NFS4_MOUNT_NOCTO 0x0010 /* 1 */
|
|
#define NFS4_MOUNT_NOAC 0x0020 /* 1 */
|
|
#define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */
|
|
#define NFS4_MOUNT_UNSHARED 0x8000 /* 1 */
|
|
#define NFS4_MOUNT_FLAGMASK 0x9033
|
|
|
|
#endif
|