Whamcloud - gitweb
LU-5379 ptlprc: return 0 if buf in struct seq_file is overflow 54/11154/4
authorWu Libin <lwu@ddn.com>
Mon, 21 Jul 2014 10:04:19 +0000 (18:04 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 25 Jul 2014 17:13:32 +0000 (17:13 +0000)
Former version would get error if the length of content in
nrs_tbf_rul is larger than one page. This patch fix this
problem, now nrs policy tbf could make rules as many as
possible.

Ptlrpc_nrs_policy_control return -ENOSPC means the buf in
parameter struct seq_file is overflow, we return 0 in this
situation to make upper layer function seq_read to alloc a more
larger memory area and do this process again.

Signed-off-by: Wu Libin <lwu@ddn.com>
Change-Id: I436a6b5b58e33e46fb896b6f4d56f64a8ff5a732
Reviewed-on: http://review.whamcloud.com/11154
Tested-by: Jenkins
Reviewed-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Li Xi <pkuelelixi@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ptlrpc/nrs_tbf.c

index 50ddbf4..63c7b38 100644 (file)
@@ -1579,6 +1579,14 @@ ptlrpc_lprocfs_nrs_tbf_rule_seq_show(struct seq_file *m, void *data)
                                       false, m);
        if (rc == 0) {
                /**
+                * -ENOSPC means buf in the parameter m is overflow, return 0
+                * here to let upper layer function seq_read alloc a larger
+                * memory area and do this process again.
+                */
+       } else if (rc == -ENOSPC) {
+               return 0;
+
+               /**
                 * Ignore -ENODEV as the regular NRS head's policy may be in the
                 * ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPED state.
                 */
@@ -1596,11 +1604,12 @@ ptlrpc_lprocfs_nrs_tbf_rule_seq_show(struct seq_file *m, void *data)
                                       false, m);
        if (rc == 0) {
                /**
-                * Ignore -ENODEV as the high priority NRS head's policy may be
-                * in the ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPED state.
+                * -ENOSPC means buf in the parameter m is overflow, return 0
+                * here to let upper layer function seq_read alloc a larger
+                * memory area and do this process again.
                 */
-       } else if (rc != -ENODEV) {
-               return rc;
+       } else if (rc == -ENOSPC) {
+               return 0;
        }
 
 no_hp: