staging/lustre/hsm: HSM requests not delivered
authorJames Nunez <james.a.nunez@intel.com>
Sun, 27 Apr 2014 17:06:42 +0000 (13:06 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 27 Apr 2014 17:23:16 +0000 (10:23 -0700)
The total size of an HSM archive request may exceed the
desired (LNET) message. When this happens, it can hang
the client and not allow the archive request to succeed.

Before we know the total size of the hsm_action_items, we
need to limit the size of the reguest. Doing this limits
the number of items that can be sent in one archive request.
We'e reduced the size allowed for the user archive request
to MDS_MAXREQSIZE/3.

Signed-off-by: James Nunez <james.a.nunez@intel.com>
Reviewed-on: http://review.whamcloud.com/9393
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4639
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/include/lustre_net.h
drivers/staging/lustre/lustre/llite/dir.c

index 745adbb74cfce7eb34a8ba11cd5ce9a8c7ee23ee..7640e179e39db47ca00120b9d75b19fafeddae56 100644 (file)
 #define LDLM_MAXREQSIZE   (5 * 1024)
 #define LDLM_MAXREPSIZE   (1024)
 
+#define MDS_MAXREQSIZE         (5 * 1024)      /* >= 4736 */
+
 #define OST_MAXREQSIZE         (5 * 1024)
 
 /* Macro to hide a typecast. */
index 7fbc18e3e654a19484b8f7c028f9964256eea72c..c391b60394e4183760d77c184fdb5035cc37adbf 100644 (file)
@@ -1804,6 +1804,11 @@ out_rmdir:
                /* Compute the whole struct size */
                totalsize = hur_len(hur);
                OBD_FREE_PTR(hur);
+
+               /* Final size will be more than double totalsize */
+               if (totalsize >= MDS_MAXREQSIZE / 3)
+                       return -E2BIG;
+
                OBD_ALLOC_LARGE(hur, totalsize);
                if (hur == NULL)
                        return -ENOMEM;