NFS: Remove the nfs4_label from the nfs4_getattr_res
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Родитель
76baa2b29c
Коммит
2ef61e0eaa
|
@ -1048,7 +1048,7 @@ struct nfs_server *nfs_create_server(struct fs_context *fc)
|
||||||
|
|
||||||
if (!(fattr->valid & NFS_ATTR_FATTR)) {
|
if (!(fattr->valid & NFS_ATTR_FATTR)) {
|
||||||
error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh,
|
error = ctx->nfs_mod->rpc_ops->getattr(server, ctx->mntfh,
|
||||||
fattr, NULL, NULL);
|
fattr, NULL);
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
dprintk("nfs_create_server: getattr error = %d\n", -error);
|
dprintk("nfs_create_server: getattr error = %d\n", -error);
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -2056,7 +2056,7 @@ nfs_add_or_obtain(struct dentry *dentry, struct nfs_fh *fhandle,
|
||||||
if (!(fattr->valid & NFS_ATTR_FATTR)) {
|
if (!(fattr->valid & NFS_ATTR_FATTR)) {
|
||||||
struct nfs_server *server = NFS_SB(dentry->d_sb);
|
struct nfs_server *server = NFS_SB(dentry->d_sb);
|
||||||
error = server->nfs_client->rpc_ops->getattr(server, fhandle,
|
error = server->nfs_client->rpc_ops->getattr(server, fhandle,
|
||||||
fattr, NULL, NULL);
|
fattr, NULL);
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
goto out_error;
|
goto out_error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,6 @@ static struct dentry *
|
||||||
nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
|
nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
|
||||||
int fh_len, int fh_type)
|
int fh_len, int fh_type)
|
||||||
{
|
{
|
||||||
struct nfs4_label *label = NULL;
|
|
||||||
struct nfs_fattr *fattr = NULL;
|
struct nfs_fattr *fattr = NULL;
|
||||||
struct nfs_fh *server_fh = nfs_exp_embedfh(fid->raw);
|
struct nfs_fh *server_fh = nfs_exp_embedfh(fid->raw);
|
||||||
size_t fh_size = offsetof(struct nfs_fh, data) + server_fh->size;
|
size_t fh_size = offsetof(struct nfs_fh, data) + server_fh->size;
|
||||||
|
@ -79,7 +78,7 @@ nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
|
||||||
if (fh_len < len || fh_type != len)
|
if (fh_len < len || fh_type != len)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
fattr = nfs_alloc_fattr();
|
fattr = nfs_alloc_fattr_with_label(NFS_SB(sb));
|
||||||
if (fattr == NULL) {
|
if (fattr == NULL) {
|
||||||
dentry = ERR_PTR(-ENOMEM);
|
dentry = ERR_PTR(-ENOMEM);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -95,28 +94,19 @@ nfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
|
||||||
if (inode)
|
if (inode)
|
||||||
goto out_found;
|
goto out_found;
|
||||||
|
|
||||||
label = nfs4_label_alloc(NFS_SB(sb), GFP_KERNEL);
|
|
||||||
if (IS_ERR(label)) {
|
|
||||||
dentry = ERR_CAST(label);
|
|
||||||
goto out_free_fattr;
|
|
||||||
}
|
|
||||||
|
|
||||||
rpc_ops = NFS_SB(sb)->nfs_client->rpc_ops;
|
rpc_ops = NFS_SB(sb)->nfs_client->rpc_ops;
|
||||||
ret = rpc_ops->getattr(NFS_SB(sb), server_fh, fattr, label, NULL);
|
ret = rpc_ops->getattr(NFS_SB(sb), server_fh, fattr, NULL);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dprintk("%s: getattr failed %d\n", __func__, ret);
|
dprintk("%s: getattr failed %d\n", __func__, ret);
|
||||||
trace_nfs_fh_to_dentry(sb, server_fh, fattr->fileid, ret);
|
trace_nfs_fh_to_dentry(sb, server_fh, fattr->fileid, ret);
|
||||||
dentry = ERR_PTR(ret);
|
dentry = ERR_PTR(ret);
|
||||||
goto out_free_label;
|
goto out_free_fattr;
|
||||||
}
|
}
|
||||||
|
|
||||||
inode = nfs_fhget(sb, server_fh, fattr, label);
|
inode = nfs_fhget(sb, server_fh, fattr, fattr->label);
|
||||||
|
|
||||||
out_found:
|
out_found:
|
||||||
dentry = d_obtain_alias(inode);
|
dentry = d_obtain_alias(inode);
|
||||||
|
|
||||||
out_free_label:
|
|
||||||
nfs4_label_free(label);
|
|
||||||
out_free_fattr:
|
out_free_fattr:
|
||||||
nfs_free_fattr(fattr);
|
nfs_free_fattr(fattr);
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -1194,7 +1194,6 @@ int
|
||||||
__nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
__nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
||||||
{
|
{
|
||||||
int status = -ESTALE;
|
int status = -ESTALE;
|
||||||
struct nfs4_label *label = NULL;
|
|
||||||
struct nfs_fattr *fattr = NULL;
|
struct nfs_fattr *fattr = NULL;
|
||||||
struct nfs_inode *nfsi = NFS_I(inode);
|
struct nfs_inode *nfsi = NFS_I(inode);
|
||||||
|
|
||||||
|
@ -1216,20 +1215,13 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
||||||
}
|
}
|
||||||
|
|
||||||
status = -ENOMEM;
|
status = -ENOMEM;
|
||||||
fattr = nfs_alloc_fattr();
|
fattr = nfs_alloc_fattr_with_label(NFS_SERVER(inode));
|
||||||
if (fattr == NULL)
|
if (fattr == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
|
nfs_inc_stats(inode, NFSIOS_INODEREVALIDATE);
|
||||||
|
|
||||||
label = nfs4_label_alloc(NFS_SERVER(inode), GFP_KERNEL);
|
status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr, inode);
|
||||||
if (IS_ERR(label)) {
|
|
||||||
status = PTR_ERR(label);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = NFS_PROTO(inode)->getattr(server, NFS_FH(inode), fattr,
|
|
||||||
label, inode);
|
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) getattr failed, error=%d\n",
|
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) getattr failed, error=%d\n",
|
||||||
inode->i_sb->s_id,
|
inode->i_sb->s_id,
|
||||||
|
@ -1246,7 +1238,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
||||||
else
|
else
|
||||||
nfs_zap_caches(inode);
|
nfs_zap_caches(inode);
|
||||||
}
|
}
|
||||||
goto err_out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = nfs_refresh_inode(inode, fattr);
|
status = nfs_refresh_inode(inode, fattr);
|
||||||
|
@ -1254,20 +1246,18 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
|
||||||
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) refresh failed, error=%d\n",
|
dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Lu) refresh failed, error=%d\n",
|
||||||
inode->i_sb->s_id,
|
inode->i_sb->s_id,
|
||||||
(unsigned long long)NFS_FILEID(inode), status);
|
(unsigned long long)NFS_FILEID(inode), status);
|
||||||
goto err_out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
|
if (nfsi->cache_validity & NFS_INO_INVALID_ACL)
|
||||||
nfs_zap_acl_cache(inode);
|
nfs_zap_acl_cache(inode);
|
||||||
|
|
||||||
nfs_setsecurity(inode, fattr, label);
|
nfs_setsecurity(inode, fattr, fattr->label);
|
||||||
|
|
||||||
dfprintk(PAGECACHE, "NFS: (%s/%Lu) revalidation complete\n",
|
dfprintk(PAGECACHE, "NFS: (%s/%Lu) revalidation complete\n",
|
||||||
inode->i_sb->s_id,
|
inode->i_sb->s_id,
|
||||||
(unsigned long long)NFS_FILEID(inode));
|
(unsigned long long)NFS_FILEID(inode));
|
||||||
|
|
||||||
err_out:
|
|
||||||
nfs4_label_free(label);
|
|
||||||
out:
|
out:
|
||||||
nfs_free_fattr(fattr);
|
nfs_free_fattr(fattr);
|
||||||
trace_nfs_revalidate_inode_exit(inode, status);
|
trace_nfs_revalidate_inode_exit(inode, status);
|
||||||
|
|
|
@ -100,8 +100,7 @@ nfs3_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
nfs3_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
nfs3_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
struct nfs_fattr *fattr, struct nfs4_label *label,
|
struct nfs_fattr *fattr, struct inode *inode)
|
||||||
struct inode *inode)
|
|
||||||
{
|
{
|
||||||
struct rpc_message msg = {
|
struct rpc_message msg = {
|
||||||
.rpc_proc = &nfs3_procedures[NFS3PROC_GETATTR],
|
.rpc_proc = &nfs3_procedures[NFS3PROC_GETATTR],
|
||||||
|
|
|
@ -316,8 +316,7 @@ extern int nfs4_set_rw_stateid(nfs4_stateid *stateid,
|
||||||
const struct nfs_lock_context *l_ctx,
|
const struct nfs_lock_context *l_ctx,
|
||||||
fmode_t fmode);
|
fmode_t fmode);
|
||||||
extern int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
extern int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
struct nfs_fattr *fattr, struct nfs4_label *label,
|
struct nfs_fattr *fattr, struct inode *inode);
|
||||||
struct inode *inode);
|
|
||||||
extern int update_open_stateid(struct nfs4_state *state,
|
extern int update_open_stateid(struct nfs4_state *state,
|
||||||
const nfs4_stateid *open_stateid,
|
const nfs4_stateid *open_stateid,
|
||||||
const nfs4_stateid *deleg_stateid,
|
const nfs4_stateid *deleg_stateid,
|
||||||
|
|
|
@ -331,7 +331,7 @@ static struct file *__nfs42_ssc_open(struct vfsmount *ss_mnt,
|
||||||
if (!fattr)
|
if (!fattr)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
status = nfs4_proc_getattr(server, src_fh, fattr, NULL, NULL);
|
status = nfs4_proc_getattr(server, src_fh, fattr, NULL);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
res = ERR_PTR(status);
|
res = ERR_PTR(status);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -93,7 +93,8 @@ struct nfs4_opendata;
|
||||||
static int _nfs4_recover_proc_open(struct nfs4_opendata *data);
|
static int _nfs4_recover_proc_open(struct nfs4_opendata *data);
|
||||||
static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
|
static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
|
||||||
static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr);
|
static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr);
|
||||||
static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fattr *fattr, struct nfs4_label *label, struct inode *inode);
|
static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
|
struct nfs_fattr *fattr, struct inode *inode);
|
||||||
static int nfs4_do_setattr(struct inode *inode, const struct cred *cred,
|
static int nfs4_do_setattr(struct inode *inode, const struct cred *cred,
|
||||||
struct nfs_fattr *fattr, struct iattr *sattr,
|
struct nfs_fattr *fattr, struct iattr *sattr,
|
||||||
struct nfs_open_context *ctx, struct nfs4_label *ilabel,
|
struct nfs_open_context *ctx, struct nfs4_label *ilabel,
|
||||||
|
@ -2707,8 +2708,7 @@ static int _nfs4_proc_open(struct nfs4_opendata *data,
|
||||||
}
|
}
|
||||||
if (!(o_res->f_attr->valid & NFS_ATTR_FATTR)) {
|
if (!(o_res->f_attr->valid & NFS_ATTR_FATTR)) {
|
||||||
nfs4_sequence_free_slot(&o_res->seq_res);
|
nfs4_sequence_free_slot(&o_res->seq_res);
|
||||||
nfs4_proc_getattr(server, &o_res->fh, o_res->f_attr,
|
nfs4_proc_getattr(server, &o_res->fh, o_res->f_attr, NULL);
|
||||||
o_res->f_attr->label, NULL);
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4090,7 +4090,6 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *mntfh,
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
struct nfs_fattr *fattr = info->fattr;
|
struct nfs_fattr *fattr = info->fattr;
|
||||||
struct nfs4_label *label = fattr->label;
|
|
||||||
|
|
||||||
error = nfs4_server_capabilities(server, mntfh);
|
error = nfs4_server_capabilities(server, mntfh);
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
|
@ -4098,7 +4097,7 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *mntfh,
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = nfs4_proc_getattr(server, mntfh, fattr, label, NULL);
|
error = nfs4_proc_getattr(server, mntfh, fattr, NULL);
|
||||||
if (error < 0) {
|
if (error < 0) {
|
||||||
dprintk("nfs4_get_root: getattr error = %d\n", -error);
|
dprintk("nfs4_get_root: getattr error = %d\n", -error);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -4161,8 +4160,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
struct nfs_fattr *fattr, struct nfs4_label *label,
|
struct nfs_fattr *fattr, struct inode *inode)
|
||||||
struct inode *inode)
|
|
||||||
{
|
{
|
||||||
__u32 bitmask[NFS4_BITMASK_SZ];
|
__u32 bitmask[NFS4_BITMASK_SZ];
|
||||||
struct nfs4_getattr_arg args = {
|
struct nfs4_getattr_arg args = {
|
||||||
|
@ -4171,7 +4169,6 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
};
|
};
|
||||||
struct nfs4_getattr_res res = {
|
struct nfs4_getattr_res res = {
|
||||||
.fattr = fattr,
|
.fattr = fattr,
|
||||||
.label = label,
|
|
||||||
.server = server,
|
.server = server,
|
||||||
};
|
};
|
||||||
struct rpc_message msg = {
|
struct rpc_message msg = {
|
||||||
|
@ -4188,7 +4185,7 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
if (inode && (server->flags & NFS_MOUNT_SOFTREVAL))
|
if (inode && (server->flags & NFS_MOUNT_SOFTREVAL))
|
||||||
task_flags |= RPC_TASK_TIMEOUT;
|
task_flags |= RPC_TASK_TIMEOUT;
|
||||||
|
|
||||||
nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, label), inode, 0);
|
nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, fattr->label), inode, 0);
|
||||||
nfs_fattr_init(fattr);
|
nfs_fattr_init(fattr);
|
||||||
nfs4_init_sequence(&args.seq_args, &res.seq_res, 0, 0);
|
nfs4_init_sequence(&args.seq_args, &res.seq_res, 0, 0);
|
||||||
return nfs4_do_call_sync(server->client, server, &msg,
|
return nfs4_do_call_sync(server->client, server, &msg,
|
||||||
|
@ -4196,15 +4193,14 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
}
|
}
|
||||||
|
|
||||||
int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
struct nfs_fattr *fattr, struct nfs4_label *label,
|
struct nfs_fattr *fattr, struct inode *inode)
|
||||||
struct inode *inode)
|
|
||||||
{
|
{
|
||||||
struct nfs4_exception exception = {
|
struct nfs4_exception exception = {
|
||||||
.interruptible = true,
|
.interruptible = true,
|
||||||
};
|
};
|
||||||
int err;
|
int err;
|
||||||
do {
|
do {
|
||||||
err = _nfs4_proc_getattr(server, fhandle, fattr, label, inode);
|
err = _nfs4_proc_getattr(server, fhandle, fattr, inode);
|
||||||
trace_nfs4_getattr(server, fhandle, fattr, err);
|
trace_nfs4_getattr(server, fhandle, fattr, err);
|
||||||
err = nfs4_handle_exception(server, err,
|
err = nfs4_handle_exception(server, err,
|
||||||
&exception);
|
&exception);
|
||||||
|
@ -5972,17 +5968,18 @@ static int _nfs4_get_security_label(struct inode *inode, void *buf,
|
||||||
size_t buflen)
|
size_t buflen)
|
||||||
{
|
{
|
||||||
struct nfs_server *server = NFS_SERVER(inode);
|
struct nfs_server *server = NFS_SERVER(inode);
|
||||||
struct nfs_fattr fattr;
|
|
||||||
struct nfs4_label label = {0, 0, buflen, buf};
|
struct nfs4_label label = {0, 0, buflen, buf};
|
||||||
|
|
||||||
u32 bitmask[3] = { 0, 0, FATTR4_WORD2_SECURITY_LABEL };
|
u32 bitmask[3] = { 0, 0, FATTR4_WORD2_SECURITY_LABEL };
|
||||||
|
struct nfs_fattr fattr = {
|
||||||
|
.label = &label,
|
||||||
|
};
|
||||||
struct nfs4_getattr_arg arg = {
|
struct nfs4_getattr_arg arg = {
|
||||||
.fh = NFS_FH(inode),
|
.fh = NFS_FH(inode),
|
||||||
.bitmask = bitmask,
|
.bitmask = bitmask,
|
||||||
};
|
};
|
||||||
struct nfs4_getattr_res res = {
|
struct nfs4_getattr_res res = {
|
||||||
.fattr = &fattr,
|
.fattr = &fattr,
|
||||||
.label = &label,
|
|
||||||
.server = server,
|
.server = server,
|
||||||
};
|
};
|
||||||
struct rpc_message msg = {
|
struct rpc_message msg = {
|
||||||
|
|
|
@ -6386,7 +6386,7 @@ static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
||||||
status = decode_putfh(xdr);
|
status = decode_putfh(xdr);
|
||||||
if (status)
|
if (status)
|
||||||
goto out;
|
goto out;
|
||||||
status = decode_getfattr_label(xdr, res->fattr, res->label, res->server);
|
status = decode_getfattr_label(xdr, res->fattr, res->fattr->label, res->server);
|
||||||
out:
|
out:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,7 @@ nfs_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
nfs_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
nfs_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
struct nfs_fattr *fattr, struct nfs4_label *label,
|
struct nfs_fattr *fattr, struct inode *inode)
|
||||||
struct inode *inode)
|
|
||||||
{
|
{
|
||||||
struct rpc_message msg = {
|
struct rpc_message msg = {
|
||||||
.rpc_proc = &nfs_procedures[NFSPROC_GETATTR],
|
.rpc_proc = &nfs_procedures[NFSPROC_GETATTR],
|
||||||
|
|
|
@ -1063,7 +1063,6 @@ struct nfs4_getattr_res {
|
||||||
struct nfs4_sequence_res seq_res;
|
struct nfs4_sequence_res seq_res;
|
||||||
const struct nfs_server * server;
|
const struct nfs_server * server;
|
||||||
struct nfs_fattr * fattr;
|
struct nfs_fattr * fattr;
|
||||||
struct nfs4_label *label;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct nfs4_link_arg {
|
struct nfs4_link_arg {
|
||||||
|
@ -1732,8 +1731,7 @@ struct nfs_rpc_ops {
|
||||||
int (*submount) (struct fs_context *, struct nfs_server *);
|
int (*submount) (struct fs_context *, struct nfs_server *);
|
||||||
int (*try_get_tree) (struct fs_context *);
|
int (*try_get_tree) (struct fs_context *);
|
||||||
int (*getattr) (struct nfs_server *, struct nfs_fh *,
|
int (*getattr) (struct nfs_server *, struct nfs_fh *,
|
||||||
struct nfs_fattr *, struct nfs4_label *,
|
struct nfs_fattr *, struct inode *);
|
||||||
struct inode *);
|
|
||||||
int (*setattr) (struct dentry *, struct nfs_fattr *,
|
int (*setattr) (struct dentry *, struct nfs_fattr *,
|
||||||
struct iattr *);
|
struct iattr *);
|
||||||
int (*lookup) (struct inode *, struct dentry *,
|
int (*lookup) (struct inode *, struct dentry *,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче