Lines Matching defs:map

76  * We maintain a global counter that is incremented each time a congestion map
95 * - on map changes to inform conns of a new map to send
109 struct rds_cong_map *map;
115 map = rb_entry(parent, struct rds_cong_map, m_rb_node);
117 diff = rds_addr_cmp(addr, &map->m_addr);
123 return map;
140 struct rds_cong_map *map;
146 map = kzalloc(sizeof(struct rds_cong_map), GFP_KERNEL);
147 if (!map)
150 map->m_addr = *addr;
151 init_waitqueue_head(&map->m_waitq);
152 INIT_LIST_HEAD(&map->m_conn_list);
158 map->m_page_addrs[i] = zp;
162 ret = rds_cong_tree_walk(addr, map);
166 ret = map;
167 map = NULL;
171 if (map) {
172 for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++)
173 free_page(map->m_page_addrs[i]);
174 kfree(map);
177 rdsdebug("map %p for addr %pI6c\n", ret, addr);
183 * Put the conn on its local map's list. This is called when the conn is
190 rdsdebug("conn %p now on map %p\n", conn, conn->c_lcong);
200 rdsdebug("removing conn %p from map %p\n", conn, conn->c_lcong);
217 void rds_cong_queue_updates(struct rds_cong_map *map)
224 list_for_each_entry(conn, &map->m_conn_list, c_map_item) {
253 void rds_cong_map_updated(struct rds_cong_map *map, uint64_t portmask)
255 rdsdebug("waking map %p for %pI4\n",
256 map, &map->m_addr);
259 if (waitqueue_active(&map->m_waitq))
260 wake_up(&map->m_waitq);
297 * the same per-address map.
299 void rds_cong_set_bit(struct rds_cong_map *map, __be16 port)
304 rdsdebug("setting congestion for %pI4:%u in map %p\n",
305 &map->m_addr, ntohs(port), map);
310 set_bit_le(off, (void *)map->m_page_addrs[i]);
313 void rds_cong_clear_bit(struct rds_cong_map *map, __be16 port)
318 rdsdebug("clearing congestion for %pI4:%u in map %p\n",
319 &map->m_addr, ntohs(port), map);
324 clear_bit_le(off, (void *)map->m_page_addrs[i]);
327 static int rds_cong_test_bit(struct rds_cong_map *map, __be16 port)
335 return test_bit_le(off, (void *)map->m_page_addrs[i]);
351 struct rds_cong_map *map;
357 /* update congestion map for now-closed port */
359 map = rds_cong_tree_walk(&rs->rs_bound_addr, NULL);
362 if (map && rds_cong_test_bit(map, rs->rs_bound_port)) {
363 rds_cong_clear_bit(map, rs->rs_bound_port);
364 rds_cong_queue_updates(map);
368 int rds_cong_wait(struct rds_cong_map *map, __be16 port, int nonblock,
371 if (!rds_cong_test_bit(map, port))
385 if (!rds_cong_test_bit(map, port))
393 rdsdebug("waiting on map %p for port %u\n", map, be16_to_cpu(port));
395 return wait_event_interruptible(map->m_waitq,
396 !rds_cong_test_bit(map, port));
402 struct rds_cong_map *map;
406 map = rb_entry(node, struct rds_cong_map, m_rb_node);
407 rdsdebug("freeing map %p\n", map);
408 rb_erase(&map->m_rb_node, &rds_cong_tree);
409 for (i = 0; i < RDS_CONG_MAP_PAGES && map->m_page_addrs[i]; i++)
410 free_page(map->m_page_addrs[i]);
411 kfree(map);
420 struct rds_cong_map *map = conn->c_lcong;
423 rm = rds_message_map_pages(map->m_page_addrs, RDS_CONG_MAP_BYTES);