OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [fs/] [nfs/] [callback_proc.c] - Blame information for rev 78

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * linux/fs/nfs/callback_proc.c
3
 *
4
 * Copyright (C) 2004 Trond Myklebust
5
 *
6
 * NFSv4 callback procedures
7
 */
8
#include <linux/nfs4.h>
9
#include <linux/nfs_fs.h>
10
#include "nfs4_fs.h"
11
#include "callback.h"
12
#include "delegation.h"
13
#include "internal.h"
14
 
15
#define NFSDBG_FACILITY NFSDBG_CALLBACK
16
 
17
__be32 nfs4_callback_getattr(struct cb_getattrargs *args, struct cb_getattrres *res)
18
{
19
        struct nfs_client *clp;
20
        struct nfs_delegation *delegation;
21
        struct nfs_inode *nfsi;
22
        struct inode *inode;
23
 
24
        res->bitmap[0] = res->bitmap[1] = 0;
25
        res->status = htonl(NFS4ERR_BADHANDLE);
26
        clp = nfs_find_client(args->addr, 4);
27
        if (clp == NULL)
28
                goto out;
29
        inode = nfs_delegation_find_inode(clp, &args->fh);
30
        if (inode == NULL)
31
                goto out_putclient;
32
        nfsi = NFS_I(inode);
33
        down_read(&nfsi->rwsem);
34
        delegation = nfsi->delegation;
35
        if (delegation == NULL || (delegation->type & FMODE_WRITE) == 0)
36
                goto out_iput;
37
        res->size = i_size_read(inode);
38
        res->change_attr = delegation->change_attr;
39
        if (nfsi->npages != 0)
40
                res->change_attr++;
41
        res->ctime = inode->i_ctime;
42
        res->mtime = inode->i_mtime;
43
        res->bitmap[0] = (FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE) &
44
                args->bitmap[0];
45
        res->bitmap[1] = (FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY) &
46
                args->bitmap[1];
47
        res->status = 0;
48
out_iput:
49
        up_read(&nfsi->rwsem);
50
        iput(inode);
51
out_putclient:
52
        nfs_put_client(clp);
53
out:
54
        dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(res->status));
55
        return res->status;
56
}
57
 
58
__be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy)
59
{
60
        struct nfs_client *clp;
61
        struct inode *inode;
62
        __be32 res;
63
 
64
        res = htonl(NFS4ERR_BADHANDLE);
65
        clp = nfs_find_client(args->addr, 4);
66
        if (clp == NULL)
67
                goto out;
68
        inode = nfs_delegation_find_inode(clp, &args->fh);
69
        if (inode == NULL)
70
                goto out_putclient;
71
        /* Set up a helper thread to actually return the delegation */
72
        switch(nfs_async_inode_return_delegation(inode, &args->stateid)) {
73
                case 0:
74
                        res = 0;
75
                        break;
76
                case -ENOENT:
77
                        res = htonl(NFS4ERR_BAD_STATEID);
78
                        break;
79
                default:
80
                        res = htonl(NFS4ERR_RESOURCE);
81
        }
82
        iput(inode);
83
out_putclient:
84
        nfs_put_client(clp);
85
out:
86
        dprintk("%s: exit with status = %d\n", __FUNCTION__, ntohl(res));
87
        return res;
88
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.