From: Andreas Gruenbacher <agruen@suse.de>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Neil Brown <neilb@cse.unsw.edu.au>, Olaf Kirch <okir@suse.de>,
"Andries E. Brouwer" <Andries.Brouwer@cwi.nl>,
Buck Huppmann <buchk@pobox.com>, Andrew Morton <akpm@osdl.org>
Subject: Re: [patch 11/13] Client side of nfsacl
Date: Tue, 22 Feb 2005 14:41:28 +0100 [thread overview]
Message-ID: <1109079688.6102.264.camel@winden.suse.de> (raw)
In-Reply-To: <1108489757.10073.46.camel@lade.trondhjem.org>
[-- Attachment #1: Type: text/plain, Size: 404 bytes --]
On Tue, 2005-02-15 at 18:49, Trond Myklebust wrote:
> I suggest you rather do the same thing we're doing for the NFSv4 acls,
> and provide an nfsv3-specific struct inode_operations that points to
> nfsv3-specific {get,set,list}xattr functions.
Okay, that requires iops for file, dir, and others. How about the
attached patch?
Cheers,
--
Andreas Gruenbacher <agruen@suse.de>
SUSE Labs, SUSE LINUX GMBH
[-- Attachment #2: nfsacl-client-side-of-nfsacl-fix3.patch --]
[-- Type: text/x-patch, Size: 8071 bytes --]
Index: linux-2.6.11-rc3/fs/nfs/nfs3proc.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/nfs3proc.c
+++ linux-2.6.11-rc3/fs/nfs/nfs3proc.c
@@ -1045,7 +1045,9 @@ nfs3_proc_lock(struct file *filp, int cm
struct nfs_rpc_ops nfs_v3_clientops = {
.version = 3, /* protocol version */
.dentry_ops = &nfs_dentry_operations,
- .dir_inode_ops = &nfs_dir_inode_operations,
+ .file_inode_ops = &nfs3_file_inode_operations,
+ .dir_inode_ops = &nfs3_dir_inode_operations,
+ .special_inode_ops = &nfs3_special_inode_operations,
.getroot = nfs3_proc_get_root,
.getattr = nfs3_proc_getattr,
.setattr = nfs3_proc_setattr,
Index: linux-2.6.11-rc3/fs/nfs/inode.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/inode.c
+++ linux-2.6.11-rc3/fs/nfs/inode.c
@@ -674,7 +674,7 @@ nfs_init_locked(struct inode *inode, voi
#define NFS_LIMIT_READDIRPLUS (8*PAGE_SIZE)
#ifdef CONFIG_NFS_ACL
-static struct inode_operations nfs_special_inode_operations = {
+struct inode_operations nfs3_special_inode_operations = {
.permission = nfs_permission,
.getattr = nfs_getattr,
.setattr = nfs_setattr,
@@ -725,7 +725,7 @@ nfs_fhget(struct super_block *sb, struct
/* Why so? Because we want revalidate for devices/FIFOs, and
* that's precisely what we have in nfs_file_inode_operations.
*/
- inode->i_op = &nfs_file_inode_operations;
+ inode->i_op = NFS_SB(sb)->rpc_ops->file_inode_ops;
if (S_ISREG(inode->i_mode)) {
inode->i_fop = &nfs_file_operations;
inode->i_data.a_ops = &nfs_file_aops;
@@ -739,9 +739,9 @@ nfs_fhget(struct super_block *sb, struct
} else if (S_ISLNK(inode->i_mode))
inode->i_op = &nfs_symlink_inode_operations;
else {
-#ifdef CONFIG_NFS_ACL
- inode->i_op = &nfs_special_inode_operations;
-#endif
+ if (NFS_SB(sb)->rpc_ops->special_inode_ops)
+ inode->i_op = NFS_SB(sb)->rpc_ops->
+ special_inode_ops;
init_special_inode(inode, inode->i_mode, fattr->rdev);
}
Index: linux-2.6.11-rc3/fs/nfs/nfs4proc.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/nfs4proc.c
+++ linux-2.6.11-rc3/fs/nfs/nfs4proc.c
@@ -2596,6 +2596,7 @@ nfs4_proc_lock(struct file *filp, int cm
struct nfs_rpc_ops nfs_v4_clientops = {
.version = 4, /* protocol version */
.dentry_ops = &nfs4_dentry_operations,
+ .file_inode_ops = &nfs_file_inode_operations,
.dir_inode_ops = &nfs4_dir_inode_operations,
.getroot = nfs4_proc_get_root,
.getattr = nfs4_proc_getattr,
Index: linux-2.6.11-rc3/fs/nfs/proc.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/proc.c
+++ linux-2.6.11-rc3/fs/nfs/proc.c
@@ -619,6 +619,7 @@ nfs_proc_lock(struct file *filp, int cmd
struct nfs_rpc_ops nfs_v2_clientops = {
.version = 2, /* protocol version */
.dentry_ops = &nfs_dentry_operations,
+ .file_inode_ops = &nfs_file_inode_operations,
.dir_inode_ops = &nfs_dir_inode_operations,
.getroot = nfs_proc_get_root,
.getattr = nfs_proc_getattr,
Index: linux-2.6.11-rc3/fs/nfs/dir.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/dir.c
+++ linux-2.6.11-rc3/fs/nfs/dir.c
@@ -72,11 +72,28 @@ struct inode_operations nfs_dir_inode_op
.permission = nfs_permission,
.getattr = nfs_getattr,
.setattr = nfs_setattr,
+};
+
+#ifdef CONFIG_NFS_V3
+struct inode_operations nfs3_dir_inode_operations = {
+ .create = nfs_create,
+ .lookup = nfs_lookup,
+ .link = nfs_link,
+ .unlink = nfs_unlink,
+ .symlink = nfs_symlink,
+ .mkdir = nfs_mkdir,
+ .rmdir = nfs_rmdir,
+ .mknod = nfs_mknod,
+ .rename = nfs_rename,
+ .permission = nfs_permission,
+ .getattr = nfs_getattr,
+ .setattr = nfs_setattr,
.listxattr = nfs_listxattr,
.getxattr = nfs_getxattr,
.setxattr = nfs_setxattr,
.removexattr = nfs_removexattr,
};
+#endif /* CONFIG_NFS_V3 */
#ifdef CONFIG_NFS_V4
Index: linux-2.6.11-rc3/include/linux/nfs_xdr.h
===================================================================
--- linux-2.6.11-rc3.orig/include/linux/nfs_xdr.h
+++ linux-2.6.11-rc3/include/linux/nfs_xdr.h
@@ -689,7 +689,9 @@ struct nfs_access_entry;
struct nfs_rpc_ops {
int version; /* Protocol version */
struct dentry_operations *dentry_ops;
+ struct inode_operations *file_inode_ops;
struct inode_operations *dir_inode_ops;
+ struct inode_operations *special_inode_ops;
int (*getroot) (struct nfs_server *, struct nfs_fh *,
struct nfs_fsinfo *);
Index: linux-2.6.11-rc3/fs/nfs/xattr.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/xattr.c
+++ linux-2.6.11-rc3/fs/nfs/xattr.c
@@ -11,9 +11,6 @@ nfs_listxattr(struct dentry *dentry, cha
struct posix_acl *acl;
int pos=0, len=0;
- if (NFS_PROTO(inode)->version != 3 || !NFS_PROTO(inode)->getacl)
- return -EOPNOTSUPP;
-
# define output(s) do { \
if (pos + sizeof(s) <= size) { \
memcpy(buffer + pos, s, sizeof(s)); \
@@ -61,9 +58,7 @@ nfs_getxattr(struct dentry *dentry, cons
else
return -EOPNOTSUPP;
- acl = ERR_PTR(-EOPNOTSUPP);
- if (NFS_PROTO(inode)->version == 3 && NFS_PROTO(inode)->getacl)
- acl = NFS_PROTO(inode)->getacl(inode, type);
+ acl = NFS_PROTO(inode)->getacl(inode, type);
if (IS_ERR(acl))
return PTR_ERR(acl);
else if (acl) {
@@ -92,8 +87,6 @@ nfs_setxattr(struct dentry *dentry, cons
type = ACL_TYPE_DEFAULT;
else
return -EOPNOTSUPP;
- if (NFS_PROTO(inode)->version != 3 || !NFS_PROTO(inode)->setacl)
- return -EOPNOTSUPP;
acl = posix_acl_from_xattr(value, size);
if (IS_ERR(acl))
@@ -108,7 +101,7 @@ int
nfs_removexattr(struct dentry *dentry, const char *name)
{
struct inode *inode = dentry->d_inode;
- int error, type;
+ int type;
if (strcmp(name, XATTR_NAME_ACL_ACCESS) == 0)
type = ACL_TYPE_ACCESS;
@@ -117,9 +110,5 @@ nfs_removexattr(struct dentry *dentry, c
else
return -EOPNOTSUPP;
- error = -EOPNOTSUPP;
- if (NFS_PROTO(inode)->version == 3 && NFS_PROTO(inode)->setacl)
- error = NFS_PROTO(inode)->setacl(inode, type, NULL);
-
- return error;
+ return NFS_PROTO(inode)->setacl(inode, type, NULL);
}
Index: linux-2.6.11-rc3/fs/nfs/file.c
===================================================================
--- linux-2.6.11-rc3.orig/fs/nfs/file.c
+++ linux-2.6.11-rc3/fs/nfs/file.c
@@ -68,11 +68,19 @@ struct inode_operations nfs_file_inode_o
.permission = nfs_permission,
.getattr = nfs_getattr,
.setattr = nfs_setattr,
+};
+
+#ifdef CONFIG_NFS_V3
+struct inode_operations nfs3_file_inode_operations = {
+ .permission = nfs_permission,
+ .getattr = nfs_getattr,
+ .setattr = nfs_setattr,
.listxattr = nfs_listxattr,
.getxattr = nfs_getxattr,
.setxattr = nfs_setxattr,
.removexattr = nfs_removexattr,
};
+#endif /* CONFIG_NFS_v3 */
/* Hack for future NFS swap support */
#ifndef IS_SWAPFILE
Index: linux-2.6.11-rc3/include/linux/nfs_fs.h
===================================================================
--- linux-2.6.11-rc3.orig/include/linux/nfs_fs.h
+++ linux-2.6.11-rc3/include/linux/nfs_fs.h
@@ -281,6 +281,8 @@ static inline int nfs_verify_change_attr
/*
* linux/fs/nfs/inode.c
*/
+extern struct inode_operations nfs3_special_inode_operations;
+
extern void nfs_zap_caches(struct inode *);
extern struct inode *nfs_fhget(struct super_block *, struct nfs_fh *,
struct nfs_fattr *);
@@ -314,6 +316,7 @@ extern u32 root_nfs_parse_addr(char *nam
* linux/fs/nfs/file.c
*/
extern struct inode_operations nfs_file_inode_operations;
+extern struct inode_operations nfs3_file_inode_operations;
extern struct file_operations nfs_file_operations;
extern struct address_space_operations nfs_file_aops;
@@ -358,6 +361,7 @@ extern ssize_t nfs_file_direct_write(str
* linux/fs/nfs/dir.c
*/
extern struct inode_operations nfs_dir_inode_operations;
+extern struct inode_operations nfs3_dir_inode_operations;
extern struct file_operations nfs_dir_operations;
extern struct dentry_operations nfs_dentry_operations;
next prev parent reply other threads:[~2005-02-22 13:41 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-01-22 20:34 [patch 0/13] NFSACL protocol extension for NFSv3 Andreas Gruenbacher
2005-01-22 20:34 ` [patch 1/13] Qsort Andreas Gruenbacher
2005-01-22 21:00 ` vlobanov
2005-01-23 2:03 ` Felipe Alfaro Solana
2005-01-23 2:39 ` Andi Kleen
2005-01-23 3:02 ` Jesper Juhl
2005-01-23 4:46 ` Andi Kleen
2005-01-23 5:05 ` Jesper Juhl
2005-01-23 10:37 ` Rafael J. Wysocki
2005-01-24 4:29 ` Horst von Brand
2005-01-24 15:45 ` Alan Cox
2005-01-24 17:10 ` H. Peter Anvin
2005-01-25 0:43 ` Horst von Brand
2005-01-25 4:06 ` Eric St-Laurent
2005-01-24 22:04 ` Mike Waychison
2005-01-25 6:51 ` Andi Kleen
2005-01-25 10:12 ` Andreas Gruenbacher
2005-01-25 12:00 ` Andi Kleen
2005-01-25 12:05 ` Olaf Kirch
2005-01-25 16:52 ` Trond Myklebust
2005-01-25 16:53 ` Andreas Gruenbacher
2005-01-25 17:03 ` Trond Myklebust
2005-01-25 17:16 ` Andreas Gruenbacher
2005-01-25 17:37 ` Trond Myklebust
2005-01-25 18:12 ` Andreas Gruenbacher
2005-01-25 19:33 ` Trond Myklebust
2005-01-25 19:49 ` Andreas Gruenbacher
2005-01-23 4:29 ` Matt Mackall
2005-01-24 0:21 ` Nathan Scott
2005-01-24 2:57 ` Matt Mackall
2005-01-24 4:02 ` Horst von Brand
2005-01-24 21:57 ` Matt Mackall
2005-01-23 4:58 ` Felipe Alfaro Solana
2005-01-24 21:20 ` Matt Mackall
2005-01-24 21:50 ` vlobanov
2005-01-23 4:22 ` Matt Mackall
2005-01-23 5:44 ` Willy Tarreau
2005-01-23 21:24 ` Richard Henderson
[not found] ` <1106431568.4153.154.camel@laptopd505.fenrus.org>
2005-01-22 22:10 ` Andreas Gruenbacher
2005-01-22 23:28 ` Matt Mackall
2005-01-23 0:21 ` Matt Mackall
2005-01-23 5:08 ` Andreas Gruenbacher
2005-01-23 5:32 ` Matt Mackall
2005-01-23 12:22 ` Andreas Gruenbacher
2005-01-23 16:49 ` Matt Mackall
2005-01-24 3:48 ` Horst von Brand
2005-01-24 20:15 ` [PATCH] lib/qsort Matt Mackall
2005-01-24 23:09 ` Andrew Morton
2005-01-24 23:30 ` Matt Mackall
2005-01-25 4:11 ` Matt Mackall
2005-01-22 20:34 ` [patch 2/13] Return -ENOSYS for RPC programs that are unavailable Andreas Gruenbacher
2005-02-15 17:04 ` Trond Myklebust
2005-02-16 15:32 ` Andreas Gruenbacher
2005-01-22 20:34 ` [patch 3/13] Add missing -EOPNOTSUPP => NFS3ERR_NOTSUPP mapping in nfsd Andreas Gruenbacher
2005-01-22 20:34 ` [patch 4/13] Allow multiple programs to listen on the same port Andreas Gruenbacher
2005-01-22 20:34 ` [patch 5/13] Allow multiple programs to share the same transport Andreas Gruenbacher
2005-01-22 20:34 ` [patch 6/13] Lazy RPC receive buffer allocation Andreas Gruenbacher
2005-01-22 20:34 ` [patch 7/13] Encode and decode arbitrary XDR arrays Andreas Gruenbacher
2005-02-15 19:17 ` Trond Myklebust
2005-02-16 16:08 ` Andreas Gruenbacher
2005-02-17 14:12 ` Adrian Bunk
2005-01-22 20:34 ` [patch 8/13] Add noacl nfs mount option Andreas Gruenbacher
2005-02-15 17:24 ` Trond Myklebust
2005-02-16 16:10 ` Andreas Gruenbacher
2005-01-22 20:34 ` [patch 9/13] Infrastructure and server side of nfsacl Andreas Gruenbacher
2005-01-22 20:34 ` [patch 10/13] Solaris nfsacl workaround Andreas Gruenbacher
2005-02-15 17:29 ` Trond Myklebust
2005-02-15 20:35 ` Olivier Galibert
2005-02-15 22:43 ` Trond Myklebust
2005-02-15 23:02 ` Olivier Galibert
2005-02-15 23:37 ` Trond Myklebust
2005-02-15 23:43 ` Olivier Galibert
2005-02-16 16:17 ` Andreas Gruenbacher
2005-02-16 17:05 ` Trond Myklebust
2005-02-16 17:39 ` Andreas Gruenbacher
2005-01-22 20:34 ` [patch 11/13] Client side of nfsacl Andreas Gruenbacher
2005-02-15 17:49 ` Trond Myklebust
2005-02-22 13:41 ` Andreas Gruenbacher [this message]
2005-02-22 14:13 ` Trond Myklebust
2005-01-22 20:34 ` [patch 12/13] ACL umask handling workaround in nfs client Andreas Gruenbacher
2005-01-25 1:20 ` Andreas Gruenbacher
2005-02-15 18:04 ` Trond Myklebust
2005-02-22 16:47 ` Andreas Gruenbacher
2005-02-22 17:43 ` Trond Myklebust
2005-01-22 20:34 ` [patch 13/13] Cache acls on the nfs client side Andreas Gruenbacher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1109079688.6102.264.camel@winden.suse.de \
--to=agruen@suse.de \
--cc=Andries.Brouwer@cwi.nl \
--cc=akpm@osdl.org \
--cc=buchk@pobox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=neilb@cse.unsw.edu.au \
--cc=okir@suse.de \
--cc=trond.myklebust@fys.uio.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox