static int nfs_negotiate_security(const struct dentry *parent, const struct dentry *dentry, rpc_authflavor_t *flavor) { struct page *page; struct nfs4_secinfo_flavors *flavors; int (*secinfo)(struct inode *, const struct qstr *, struct nfs4_secinfo_flavors *); int ret = -EPERM; secinfo = NFS_PROTO(parent->d_inode)->secinfo; if (secinfo != NULL) { page = alloc_page(GFP_KERNEL); if (!page) { ret = -ENOMEM; goto out; } flavors = page_address(page); ret = secinfo(parent->d_inode, &dentry->d_name, flavors); *flavor = nfs_find_best_sec(flavors); put_page(page); } out: return ret; }
static rpc_authflavor_t nfs4_negotiate_security(struct inode *inode, struct qstr *name) { struct page *page; struct nfs4_secinfo_flavors *flavors; rpc_authflavor_t flavor; int err; page = alloc_page(GFP_KERNEL); if (!page) return -ENOMEM; flavors = page_address(page); err = nfs4_proc_secinfo(inode, name, flavors); if (err < 0) { flavor = err; goto out; } flavor = nfs_find_best_sec(flavors); out: put_page(page); return flavor; }