[SCSI] libiscsi_tcp: fix max_r2t manipulation
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / libiscsi_tcp.c
index 5715a3d0a3d3e7db2b8a1b4c4de6ac983c4f6f48..c4996b081999d057bed771a73c0139528bd482b1 100644 (file)
@@ -1170,6 +1170,24 @@ void iscsi_tcp_r2tpool_free(struct iscsi_session *session)
 }
 EXPORT_SYMBOL_GPL(iscsi_tcp_r2tpool_free);
 
+int iscsi_tcp_set_max_r2t(struct iscsi_conn *conn, char *buf)
+{
+       struct iscsi_session *session = conn->session;
+       unsigned short r2ts = 0;
+
+       sscanf(buf, "%hu", &r2ts);
+       if (session->max_r2t == r2ts)
+               return 0;
+
+       if (!r2ts || !is_power_of_2(r2ts))
+               return -EINVAL;
+
+       session->max_r2t = r2ts;
+       iscsi_tcp_r2tpool_free(session);
+       return iscsi_tcp_r2tpool_alloc(session);
+}
+EXPORT_SYMBOL_GPL(iscsi_tcp_set_max_r2t);
+
 void iscsi_tcp_conn_get_stats(struct iscsi_cls_conn *cls_conn,
                              struct iscsi_stats *stats)
 {