staging/lustre/hsm: HSM requests not delivered
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>
This commit is contained in:
parent
5d0d422e72
commit
e55c447647
|
@ -264,6 +264,8 @@
|
|||
#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. */
|
||||
|
|
|
@ -1804,6 +1804,11 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
/* 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;
|
||||
|
|
Loading…
Reference in New Issue