summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2010-11-08 02:53:16 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-11-08 02:08:37 -0800
commit96d16edec3dda4cd565b9d4106411c36bebe6dd5 (patch)
tree686355f566d770bbd8374c21c023e03d192b4dcc
parentbdfaaf42b643e2e51b85dd9ff5f7da91db3e0710 (diff)
protocol/server: array declarations changed to alloca()
This is to make sure we don't spend CPU cycles in memset(0) on the array, instead do a 'alloca()' on size of the request. Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 875 (Implement a new protocol to provide proper backward/forward compatibility) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=875
-rw-r--r--xlators/protocol/server/src/server3_1-fops.c157
1 files changed, 55 insertions, 102 deletions
diff --git a/xlators/protocol/server/src/server3_1-fops.c b/xlators/protocol/server/src/server3_1-fops.c
index 6ba65ec6c51..fb3010e292e 100644
--- a/xlators/protocol/server/src/server3_1-fops.c
+++ b/xlators/protocol/server/src/server3_1-fops.c
@@ -31,7 +31,6 @@
#include "md5.h"
-#define SERVER_PATH_MAX (16 * 1024)
/* Callback function section */
int
@@ -2607,14 +2606,13 @@ server_stat (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_stat_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return 0;
/* Initialize args first, then decode */
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_stat_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -2654,13 +2652,12 @@ server_setattr (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_setattr_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return 0;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_setattr_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -2748,13 +2745,12 @@ server_readlink (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_readlink_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_readlink_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -2798,15 +2794,13 @@ server_create (rpcsvc_request_t *req)
dict_t *params = NULL;
char *buf = NULL;
gfs3_create_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char bname[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.bname = bname;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
if (!xdr_to_create_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -2896,13 +2890,12 @@ server_open (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_open_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_open_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -3281,13 +3274,12 @@ server_truncate (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_truncate_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_truncate_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -3328,15 +3320,13 @@ server_unlink (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_unlink_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char bname[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.bname = bname;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
if (!xdr_to_unlink_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -3380,8 +3370,6 @@ server_setxattr (rpcsvc_request_t *req)
server_connection_t *conn = NULL;
char *buf = NULL;
gfs3_setxattr_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char dict_val[(16 * 1024)] = {0, };
int32_t ret = -1;
if (!req)
@@ -3389,8 +3377,8 @@ server_setxattr (rpcsvc_request_t *req)
conn = req->trans->xl_private;
- args.path = path;
- args.dict.dict_val = dict_val;
+ args.path = alloca (req->msg[0].iov_len);
+ args.dict.dict_val = alloca (req->msg[0].iov_len);
if (!xdr_to_setxattr_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -3468,9 +3456,8 @@ server_fsetxattr (rpcsvc_request_t *req)
dict_t *dict = NULL;
server_connection_t *conn = NULL;
call_frame_t *frame = NULL;
- char *buf = NULL;
+ char *buf = NULL;
gfs3_fsetxattr_req args = {{0,},};
- char dict_val[(16 *1024)] = {0,};
int32_t ret = -1;
if (!req)
@@ -3478,7 +3465,7 @@ server_fsetxattr (rpcsvc_request_t *req)
conn = req->trans->xl_private;
- args.dict.dict_val = dict_val;
+ args.dict.dict_val = alloca (req->msg[0].iov_len);
if (!xdr_to_fsetxattr_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -3550,7 +3537,6 @@ server_fxattrop (rpcsvc_request_t *req)
call_frame_t *frame = NULL;
char *buf = NULL;
gfs3_fxattrop_req args = {{0,},};
- char dict_val[(16 *1024)] = {0,};
int32_t ret = -1;
if (!req)
@@ -3558,7 +3544,7 @@ server_fxattrop (rpcsvc_request_t *req)
conn = req->trans->xl_private;
- args.dict.dict_val = dict_val;
+ args.dict.dict_val = alloca (req->msg[0].iov_len);
if (!xdr_to_fxattrop_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -3632,16 +3618,15 @@ server_xattrop (rpcsvc_request_t *req)
call_frame_t *frame = NULL;
char *buf = NULL;
gfs3_xattrop_req args = {{0,},};
- char dict_val[(16 *1024)] = {0,};
- char path[SERVER_PATH_MAX] = {0,};
int32_t ret = -1;
if (!req)
return ret;
conn = req->trans->xl_private;
- args.dict.dict_val = dict_val;
- args.path = path;
+
+ args.dict.dict_val = alloca (req->msg[0].iov_len);
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_xattrop_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -3711,15 +3696,13 @@ server_getxattr (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_getxattr_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char name[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.name = name;
+ args.path = alloca (req->msg[0].iov_len);
+ args.name = alloca (4096);
if (!xdr_to_getxattr_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -3765,13 +3748,12 @@ server_fgetxattr (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_fgetxattr_req args = {{0,},};
- char name[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.name = name;
+ args.name = alloca (4096);
if (!xdr_to_fgetxattr_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -3813,15 +3795,14 @@ server_removexattr (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_removexattr_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char name[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.name = name;
+ args.path = alloca (req->msg[0].iov_len);
+ args.name = alloca (4096);
+
if (!xdr_to_removexattr_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -3863,13 +3844,12 @@ server_opendir (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_opendir_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_opendir_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4063,15 +4043,13 @@ server_mknod (rpcsvc_request_t *req)
dict_t *params = NULL;
char *buf = NULL;
gfs3_mknod_req args = {{0,},};
- char bname[SERVER_PATH_MAX] = {0,};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.bname = bname;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
if (!xdr_to_mknod_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4166,15 +4144,13 @@ server_mkdir (rpcsvc_request_t *req)
dict_t *params = NULL;
char *buf = NULL;
gfs3_mkdir_req args = {{0,},};
- char bname[SERVER_PATH_MAX] = {0,};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.bname = bname;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
if (!xdr_to_mkdir_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4264,15 +4240,13 @@ server_rmdir (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_rmdir_req args = {{0,},};
- char bname[SERVER_PATH_MAX] = {0,};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.bname = bname;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
if (!xdr_to_rmdir_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4316,16 +4290,14 @@ server_inodelk (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_inodelk_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char volume[4096] = {0,};
int cmd = 0;
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.volume = volume;
+ args.path = alloca (req->msg[0].iov_len);
+ args.volume = alloca (4096);
if (!xdr_to_inodelk_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4394,13 +4366,12 @@ server_finodelk (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_finodelk_req args = {{0,},};
- char volume[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.volume = volume;
+ args.volume = alloca (4096);
if (!xdr_to_finodelk_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -4468,17 +4439,14 @@ server_entrylk (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_entrylk_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
- char name[4096] = {0,};
- char volume[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.volume = volume;
- args.name = name;
+ args.path = alloca (req->msg[0].iov_len);
+ args.volume = alloca (4096);
+ args.name = alloca (4096);
if (!xdr_to_entrylk_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4524,15 +4492,14 @@ server_fentrylk (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_fentrylk_req args = {{0,},};
- char name[4096] = {0,};
- char volume[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.name = name;
- args.volume = volume;
+ args.name = alloca (4096);
+ args.volume = alloca (4096);
+
if (!xdr_to_fentrylk_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -4575,13 +4542,12 @@ server_access (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_access_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_access_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -4624,17 +4590,14 @@ server_symlink (rpcsvc_request_t *req)
dict_t *params = NULL;
char *buf = NULL;
gfs3_symlink_req args = {{0,},};
- char linkname[4096] = {0,};
- char path[SERVER_PATH_MAX] = {0,};
- char bname[4096] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
- args.bname = bname;
- args.linkname = linkname;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
+ args.linkname = alloca (4096);
if (!xdr_to_symlink_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4724,17 +4687,14 @@ server_link (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_link_req args = {{0,},};
- char oldpath[SERVER_PATH_MAX] = {0,};
- char newpath[SERVER_PATH_MAX] = {0,};
- char newbname[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.oldpath = oldpath;
- args.newpath = newpath;
- args.newbname = newbname;
+ args.oldpath = alloca (req->msg[0].iov_len);
+ args.newpath = alloca (req->msg[0].iov_len);
+ args.newbname = alloca (req->msg[0].iov_len);
if (!xdr_to_link_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -4779,19 +4739,16 @@ server_rename (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_rename_req args = {{0,},};
- char oldpath[SERVER_PATH_MAX] = {0,};
- char oldbname[SERVER_PATH_MAX] = {0,};
- char newpath[SERVER_PATH_MAX] = {0,};
- char newbname[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.oldpath = oldpath;
- args.oldbname = oldbname;
- args.newpath = newpath;
- args.newbname = newbname;
+ args.oldpath = alloca (req->msg[0].iov_len);
+ args.oldbname = alloca (req->msg[0].iov_len);
+ args.newpath = alloca (req->msg[0].iov_len);
+ args.newbname = alloca (req->msg[0].iov_len);
+
if (!xdr_to_rename_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;
@@ -4988,18 +4945,15 @@ server_lookup (rpcsvc_request_t *req)
char *buf = NULL;
gfs3_lookup_req args = {{0,},};
int ret = -1;
- char path[SERVER_PATH_MAX] = {0,};
- char bname[SERVER_PATH_MAX] = {0,};
- char dict_val[(16 * 1024)] = {0,};
if (!req)
return ret;
conn = req->trans->xl_private;
- args.path = path;
- args.bname = bname;
- args.dict.dict_val = dict_val;
+ args.path = alloca (req->msg[0].iov_len);
+ args.bname = alloca (req->msg[0].iov_len);
+ args.dict.dict_val = alloca (req->msg[0].iov_len);
if (!xdr_to_lookup_req (req->msg[0], &args)) {
//failed to decode msg;
@@ -5089,13 +5043,12 @@ server_statfs (rpcsvc_request_t *req)
server_state_t *state = NULL;
call_frame_t *frame = NULL;
gfs3_statfs_req args = {{0,},};
- char path[SERVER_PATH_MAX] = {0,};
int ret = -1;
if (!req)
return ret;
- args.path = path;
+ args.path = alloca (req->msg[0].iov_len);
if (!xdr_to_statfs_req (req->msg[0], &args)) {
//failed to decode msg;
req->rpc_err = GARBAGE_ARGS;