diff options
Diffstat (limited to 'xlators/nfs')
| -rw-r--r-- | xlators/nfs/server/src/mount3.c | 24 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nfs.c | 51 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nfs3.c | 44 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nlm4.c | 48 | 
4 files changed, 106 insertions, 61 deletions
diff --git a/xlators/nfs/server/src/mount3.c b/xlators/nfs/server/src/mount3.c index f2b977eea1f..983cbff027d 100644 --- a/xlators/nfs/server/src/mount3.c +++ b/xlators/nfs/server/src/mount3.c @@ -1843,12 +1843,12 @@ out:  }  rpcsvc_actor_t  mnt3svc_actors[MOUNT3_PROC_COUNT] = { -        {"NULL", MOUNT3_NULL, mnt3svc_null, NULL, 0}, -        {"MNT", MOUNT3_MNT, mnt3svc_mnt, NULL, 0}, -        {"DUMP", MOUNT3_DUMP, mnt3svc_dump, NULL, 0}, -        {"UMNT", MOUNT3_UMNT, mnt3svc_umnt, NULL, 0}, -        {"UMNTALL", MOUNT3_UMNTALL, mnt3svc_umntall, NULL, 0}, -        {"EXPORT", MOUNT3_EXPORT, mnt3svc_export, NULL, 0} +        {"NULL",    MOUNT3_NULL,    mnt3svc_null,    NULL, 0, DRC_NA}, +        {"MNT",     MOUNT3_MNT,     mnt3svc_mnt,     NULL, 0, DRC_NA}, +        {"DUMP",    MOUNT3_DUMP,    mnt3svc_dump,    NULL, 0, DRC_NA}, +        {"UMNT",    MOUNT3_UMNT,    mnt3svc_umnt,    NULL, 0, DRC_NA}, +        {"UMNTALL", MOUNT3_UMNTALL, mnt3svc_umntall, NULL, 0, DRC_NA}, +        {"EXPORT",  MOUNT3_EXPORT,  mnt3svc_export,  NULL, 0, DRC_NA}  }; @@ -1939,12 +1939,12 @@ err:  rpcsvc_actor_t  mnt1svc_actors[MOUNT1_PROC_COUNT] = { -        {"NULL", MOUNT1_NULL, mnt3svc_null, NULL, 0}, -        {{0, 0}, }, -        {"DUMP", MOUNT1_DUMP, mnt3svc_dump, NULL, 0}, -        {"UMNT", MOUNT1_UMNT, mnt3svc_umnt, NULL, 0}, -        {{0, 0}, }, -        {"EXPORT", MOUNT1_EXPORT, mnt3svc_export, NULL, 0} +        {"NULL",    MOUNT1_NULL,    mnt3svc_null,   NULL, 0, DRC_NA}, +        {"MNT",     MOUNT1_MNT,     NULL,           NULL, 0, DRC_NA }, +        {"DUMP",    MOUNT1_DUMP,    mnt3svc_dump,   NULL, 0, DRC_NA}, +        {"UMNT",    MOUNT1_UMNT,    mnt3svc_umnt,   NULL, 0, DRC_NA}, +        {"UMNTALL", MOUNT1_UMNTALL, NULL,           NULL, 0, DRC_NA}, +        {"EXPORT",  MOUNT1_EXPORT,  mnt3svc_export, NULL, 0, DRC_NA}  };  rpcsvc_program_t        mnt1prog = { diff --git a/xlators/nfs/server/src/nfs.c b/xlators/nfs/server/src/nfs.c index 7b36d59e82a..6cd0594e691 100644 --- a/xlators/nfs/server/src/nfs.c +++ b/xlators/nfs/server/src/nfs.c @@ -43,6 +43,7 @@  #include "nlm4.h"  #include "options.h"  #include "acl3.h" +#include "rpc-drc.h"  #define STRINGIFY(val) #val  #define TOSTRING(val) STRINGIFY(val) @@ -798,6 +799,21 @@ free_rpcsvc:          return nfs;  } +int +nfs_drc_init (xlator_t *this) +{ +        int       ret     = -1; +        rpcsvc_t *svc     = NULL; + +        svc = ((struct nfs_state *)(this->private))->rpcsvc; +        if (!svc) +                goto out; + +        ret = rpcsvc_drc_init (svc, this->options); + + out: +        return ret; +}  int  init (xlator_t *this) { @@ -853,7 +869,9 @@ init (xlator_t *this) {                  goto err;          } -        gf_log (GF_NFS, GF_LOG_INFO, "NFS service started"); +        ret = nfs_drc_init (this); +        if (ret == 0) +                gf_log (GF_NFS, GF_LOG_INFO, "NFS service started");  err:          return ret; @@ -1008,7 +1026,22 @@ nlm_priv (xlator_t *this);  int32_t  nfs_priv (xlator_t *this)  { -        return nlm_priv (this); +        int32_t ret = -1; + +        /* DRC needs the global drc structure, xl is of no use to it. */ +        ret = rpcsvc_drc_priv (((struct nfs_state *)(this->private))->rpcsvc->drc); +        if (ret) { +                gf_log (this->name, GF_LOG_DEBUG, "Statedump of DRC failed"); +                goto out; +        } + +        ret = nlm_priv (this); +        if (ret) { +                gf_log (this->name, GF_LOG_DEBUG, "Statedump of NLM failed"); +                goto out; +        } + out: +        return ret;  } @@ -1314,6 +1347,18 @@ struct volume_options options[] = {            .default_value = "on",            .description = "This option is used to control ACL support for NFS."          }, +        { .key  = {"nfs.drc"}, +          .type = GF_OPTION_TYPE_STR, +          .default_value = "off", +          .description = "Enable Duplicate Request Cache in gNfs server to " +                         "improve correctness of non-idempotent operations like " +                         "write, delete, link, et al" +        }, +        { .key  = {"nfs.drc-size"}, +          .type = GF_OPTION_TYPE_INT, +          .default_value = "0x20000", +          .description = "Sets the number of non-idempotent " +                         "requests to cache in drc" +        },          { .key  = {NULL} },  }; - diff --git a/xlators/nfs/server/src/nfs3.c b/xlators/nfs/server/src/nfs3.c index 308b28924c7..4e641228724 100644 --- a/xlators/nfs/server/src/nfs3.c +++ b/xlators/nfs/server/src/nfs3.c @@ -5108,28 +5108,28 @@ rpcerr:  rpcsvc_actor_t          nfs3svc_actors[NFS3_PROC_COUNT] = { -        {"NULL",        NFS3_NULL,      nfs3svc_null,   NULL,   0}, -        {"GETATTR",     NFS3_GETATTR,   nfs3svc_getattr,NULL,   0}, -        {"SETATTR",     NFS3_SETATTR,   nfs3svc_setattr,NULL,   0}, -        {"LOOKUP",      NFS3_LOOKUP,    nfs3svc_lookup, NULL,   0}, -        {"ACCESS",      NFS3_ACCESS,    nfs3svc_access, NULL,   0}, -        {"READLINK",    NFS3_READLINK,  nfs3svc_readlink,NULL,  0}, -        {"READ",        NFS3_READ,      nfs3svc_read,   NULL,   0}, -        {"WRITE",       NFS3_WRITE,     nfs3svc_write, nfs3svc_write_vecsizer, 0}, -        {"CREATE",      NFS3_CREATE,    nfs3svc_create, NULL,   0}, -        {"MKDIR",       NFS3_MKDIR,     nfs3svc_mkdir,  NULL,   0}, -        {"SYMLINK",     NFS3_SYMLINK,   nfs3svc_symlink,NULL,   0}, -        {"MKNOD",       NFS3_MKNOD,     nfs3svc_mknod,  NULL,   0}, -        {"REMOVE",      NFS3_REMOVE,    nfs3svc_remove, NULL,   0}, -        {"RMDIR",       NFS3_RMDIR,     nfs3svc_rmdir,  NULL,   0}, -        {"RENAME",      NFS3_RENAME,    nfs3svc_rename, NULL,   0}, -        {"LINK",        NFS3_LINK,      nfs3svc_link,   NULL,   0}, -        {"READDIR",     NFS3_READDIR,   nfs3svc_readdir,NULL,   0}, -        {"READDIRPLUS", NFS3_READDIRP,  nfs3svc_readdirp,NULL,  0}, -        {"FSSTAT",      NFS3_FSSTAT,    nfs3svc_fsstat, NULL,   0}, -        {"FSINFO",      NFS3_FSINFO,    nfs3svc_fsinfo, NULL,   0}, -        {"PATHCONF",    NFS3_PATHCONF,  nfs3svc_pathconf,NULL,  0}, -        {"COMMIT",      NFS3_COMMIT,    nfs3svc_commit, NULL,   0} +        {"NULL",        NFS3_NULL,      nfs3svc_null,      NULL,   0, DRC_IDEMPOTENT}, +        {"GETATTR",     NFS3_GETATTR,   nfs3svc_getattr,   NULL,   0, DRC_IDEMPOTENT}, +        {"SETATTR",     NFS3_SETATTR,   nfs3svc_setattr,   NULL,   0, DRC_NON_IDEMPOTENT}, +        {"LOOKUP",      NFS3_LOOKUP,    nfs3svc_lookup,    NULL,   0, DRC_IDEMPOTENT}, +        {"ACCESS",      NFS3_ACCESS,    nfs3svc_access,    NULL,   0, DRC_IDEMPOTENT}, +        {"READLINK",    NFS3_READLINK,  nfs3svc_readlink,  NULL,   0, DRC_IDEMPOTENT}, +        {"READ",        NFS3_READ,      nfs3svc_read,      NULL,   0, DRC_IDEMPOTENT}, +        {"WRITE",       NFS3_WRITE,     nfs3svc_write,     nfs3svc_write_vecsizer, 0, DRC_NON_IDEMPOTENT}, +        {"CREATE",      NFS3_CREATE,    nfs3svc_create,    NULL,   0, DRC_NON_IDEMPOTENT}, +        {"MKDIR",       NFS3_MKDIR,     nfs3svc_mkdir,     NULL,   0, DRC_NON_IDEMPOTENT}, +        {"SYMLINK",     NFS3_SYMLINK,   nfs3svc_symlink,   NULL,   0, DRC_NON_IDEMPOTENT}, +        {"MKNOD",       NFS3_MKNOD,     nfs3svc_mknod,     NULL,   0, DRC_NON_IDEMPOTENT}, +        {"REMOVE",      NFS3_REMOVE,    nfs3svc_remove,    NULL,   0, DRC_NON_IDEMPOTENT}, +        {"RMDIR",       NFS3_RMDIR,     nfs3svc_rmdir,     NULL,   0, DRC_NON_IDEMPOTENT}, +        {"RENAME",      NFS3_RENAME,    nfs3svc_rename,    NULL,   0, DRC_NON_IDEMPOTENT}, +        {"LINK",        NFS3_LINK,      nfs3svc_link,      NULL,   0, DRC_NON_IDEMPOTENT}, +        {"READDIR",     NFS3_READDIR,   nfs3svc_readdir,   NULL,   0, DRC_IDEMPOTENT}, +        {"READDIRPLUS", NFS3_READDIRP,  nfs3svc_readdirp,  NULL,   0, DRC_IDEMPOTENT}, +        {"FSSTAT",      NFS3_FSSTAT,    nfs3svc_fsstat,    NULL,   0, DRC_IDEMPOTENT}, +        {"FSINFO",      NFS3_FSINFO,    nfs3svc_fsinfo,    NULL,   0, DRC_IDEMPOTENT}, +        {"PATHCONF",    NFS3_PATHCONF,  nfs3svc_pathconf,  NULL,   0, DRC_IDEMPOTENT}, +        {"COMMIT",      NFS3_COMMIT,    nfs3svc_commit,    NULL,   0, DRC_IDEMPOTENT}  }; diff --git a/xlators/nfs/server/src/nlm4.c b/xlators/nfs/server/src/nlm4.c index 595738b2c17..041e4317acc 100644 --- a/xlators/nfs/server/src/nlm4.c +++ b/xlators/nfs/server/src/nlm4.c @@ -2286,34 +2286,34 @@ nlm4svc_sm_notify (struct nlm_sm_status *status)  rpcsvc_actor_t  nlm4svc_actors[NLM4_PROC_COUNT] = {          /* 0 */ -        {"NULL",       NLM4_NULL,         nlm4svc_null,      NULL}, -        {"TEST",       NLM4_TEST,         nlm4svc_test,      NULL}, -        {"LOCK",       NLM4_LOCK,         nlm4svc_lock,      NULL}, -        {"CANCEL",     NLM4_CANCEL,       nlm4svc_cancel,    NULL}, -        {"UNLOCK",     NLM4_UNLOCK,       nlm4svc_unlock,    NULL}, +        {"NULL",       NLM4_NULL,         nlm4svc_null,      NULL, 0, DRC_IDEMPOTENT}, +        {"TEST",       NLM4_TEST,         nlm4svc_test,      NULL, 0, DRC_IDEMPOTENT}, +        {"LOCK",       NLM4_LOCK,         nlm4svc_lock,      NULL, 0, DRC_NON_IDEMPOTENT}, +        {"CANCEL",     NLM4_CANCEL,       nlm4svc_cancel,    NULL, 0, DRC_NON_IDEMPOTENT}, +        {"UNLOCK",     NLM4_UNLOCK,       nlm4svc_unlock,    NULL, 0, DRC_NON_IDEMPOTENT},          /* 5 */ -        {"GRANTED",    NLM4_GRANTED,      NULL,              NULL}, -        {"TEST",       NLM4_TEST_MSG,     NULL,              NULL}, -        {"LOCK",       NLM4_LOCK_MSG,     NULL,              NULL}, -        {"CANCEL",     NLM4_CANCEL_MSG,   NULL,              NULL}, -        {"UNLOCK",     NLM4_UNLOCK_MSG,   NULL,              NULL}, +        {"GRANTED",    NLM4_GRANTED,      NULL,              NULL, 0, DRC_NA}, +        {"TEST",       NLM4_TEST_MSG,     NULL,              NULL, 0, DRC_NA}, +        {"LOCK",       NLM4_LOCK_MSG,     NULL,              NULL, 0, DRC_NA}, +        {"CANCEL",     NLM4_CANCEL_MSG,   NULL,              NULL, 0, DRC_NA}, +        {"UNLOCK",     NLM4_UNLOCK_MSG,   NULL,              NULL, 0, DRC_NA},          /* 10 */ -        {"GRANTED",    NLM4_GRANTED_MSG,  NULL,              NULL}, -        {"TEST",       NLM4_TEST_RES,     NULL,              NULL}, -        {"LOCK",       NLM4_LOCK_RES,     NULL,              NULL}, -        {"CANCEL",     NLM4_CANCEL_RES,   NULL,              NULL}, -        {"UNLOCK",     NLM4_UNLOCK_RES,   NULL,              NULL}, +        {"GRANTED",    NLM4_GRANTED_MSG,  NULL,              NULL, 0, DRC_NA}, +        {"TEST",       NLM4_TEST_RES,     NULL,              NULL, 0, DRC_NA}, +        {"LOCK",       NLM4_LOCK_RES,     NULL,              NULL, 0, DRC_NA}, +        {"CANCEL",     NLM4_CANCEL_RES,   NULL,              NULL, 0, DRC_NA}, +        {"UNLOCK",     NLM4_UNLOCK_RES,   NULL,              NULL, 0, DRC_NA},          /* 15 ; procedures 17,18,19 are not defined by nlm */ -        {"GRANTED",    NLM4_GRANTED_RES,  NULL,              NULL}, -        {"SM_NOTIFY",  NLM4_SM_NOTIFY,    NULL,              NULL}, -        {"SEVENTEEN",  NLM4_SEVENTEEN,    NULL,              NULL}, -        {"EIGHTEEN",   NLM4_EIGHTEEN,     NULL,              NULL}, -        {"NINETEEN",   NLM4_NINETEEN,     NULL,              NULL}, +        {"GRANTED",    NLM4_GRANTED_RES,  NULL,              NULL, 0, DRC_NA}, +        {"SM_NOTIFY",  NLM4_SM_NOTIFY,    NULL,              NULL, 0, DRC_NA}, +        {"SEVENTEEN",  NLM4_SEVENTEEN,    NULL,              NULL, 0, DRC_NA}, +        {"EIGHTEEN",   NLM4_EIGHTEEN,     NULL,              NULL, 0, DRC_NA}, +        {"NINETEEN",   NLM4_NINETEEN,     NULL,              NULL, 0, DRC_NA},          /* 20 */ -        {"SHARE",      NLM4_SHARE,        nlm4svc_share,     NULL}, -        {"UNSHARE",    NLM4_UNSHARE,      nlm4svc_unshare,   NULL}, -        {"NM_LOCK",    NLM4_NM_LOCK,      nlm4svc_nm_lock,   NULL}, -        {"FREE_ALL",   NLM4_FREE_ALL,     nlm4svc_free_all,  NULL}, +        {"SHARE",      NLM4_SHARE,        nlm4svc_share,     NULL, 0, DRC_NON_IDEMPOTENT}, +        {"UNSHARE",    NLM4_UNSHARE,      nlm4svc_unshare,   NULL, 0, DRC_NON_IDEMPOTENT}, +        {"NM_LOCK",    NLM4_NM_LOCK,      nlm4svc_nm_lock,   NULL, 0, DRC_NON_IDEMPOTENT}, +        {"FREE_ALL",   NLM4_FREE_ALL,     nlm4svc_free_all,  NULL, 0, DRC_IDEMPOTENT},  };  rpcsvc_program_t        nlm4prog = {  | 
