Thanks Ben and Ryan for the review. All 4 patches applied.

On Thu, May 22, 2014 at 11:16 AM, Ryan Wilson 76511 <wr...@vmware.com> wrote:
> This is a much cleaner improvement, thanks!
>
> Acked-by: Ryan Wilson <wr...@nicira.com>
>
> On 5/22/14 11:04 AM, "Andy Zhou" <az...@nicira.com> wrote:
>
>>ofproto_group_write_lookup() slightly different from
>>ofproto_group_lookup() in handling reference counting.
>>Currently, it has only one caller: modify_group().
>>It seems the abstraction is not adding value here.
>>
>>Remove the function, along with some refactoring, makes modify_group()
>>easier to understand.
>>
>>Signed-off-by: Andy Zhou <az...@nicira.com>
>>---
>> ofproto/ofproto.c | 45 ++++++++++++++++++++++-----------------------
>> 1 file changed, 22 insertions(+), 23 deletions(-)
>>
>>diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
>>index 7952984..7086960 100644
>>--- a/ofproto/ofproto.c
>>+++ b/ofproto/ofproto.c
>>@@ -5352,40 +5352,38 @@ handle_meter_request(struct ofconn *ofconn, const
>>struct ofp_header *request,
>>     return 0;
>> }
>>
>>-/* If the group exists, this function increments the groups's reference
>>count.
>>- *
>>- * Make sure to call ofproto_group_unref() after no longer needing to
>>maintain
>>- * a reference to the group. */
>>-bool
>>-ofproto_group_lookup(const struct ofproto *ofproto, uint32_t group_id,
>>-                     struct ofgroup **group)
>>+static bool
>>+ofproto_group_lookup__(const struct ofproto *ofproto, uint32_t group_id,
>>+                       struct ofgroup **group)
>>+    OVS_REQ_RDLOCK(ofproto->groups_rwlock)
>> {
>>-    ovs_rwlock_rdlock(&ofproto->groups_rwlock);
>>     HMAP_FOR_EACH_IN_BUCKET (*group, hmap_node,
>>                              hash_int(group_id, 0), &ofproto->groups) {
>>         if ((*group)->group_id == group_id) {
>>-            ofproto_group_ref(*group);
>>-            ovs_rwlock_unlock(&ofproto->groups_rwlock);
>>             return true;
>>         }
>>     }
>>-    ovs_rwlock_unlock(&ofproto->groups_rwlock);
>>+
>>     return false;
>> }
>>
>>-static bool
>>-ofproto_group_write_lookup(const struct ofproto *ofproto, uint32_t
>>group_id,
>>-                           struct ofgroup **group)
>>-    OVS_ACQUIRES(ofproto->groups_rwlock)
>>+/* If the group exists, this function increments the groups's reference
>>count.
>>+ *
>>+ * Make sure to call ofproto_group_unref() after no longer needing to
>>maintain
>>+ * a reference to the group. */
>>+bool
>>+ofproto_group_lookup(const struct ofproto *ofproto, uint32_t group_id,
>>+                     struct ofgroup **group)
>> {
>>-    ovs_rwlock_wrlock(&ofproto->groups_rwlock);
>>-    HMAP_FOR_EACH_IN_BUCKET (*group, hmap_node,
>>-                             hash_int(group_id, 0), &ofproto->groups) {
>>-        if ((*group)->group_id == group_id) {
>>-            return true;
>>-        }
>>+    bool found;
>>+
>>+    ovs_rwlock_rdlock(&ofproto->groups_rwlock);
>>+    found = ofproto_group_lookup__(ofproto, group_id, group);
>>+    if (found) {
>>+        ofproto_group_ref(*group);
>>     }
>>-    return false;
>>+    ovs_rwlock_unlock(&ofproto->groups_rwlock);
>>+    return found;
>> }
>>
>> static bool
>>@@ -5712,7 +5710,8 @@ modify_group(struct ofproto *ofproto, struct
>>ofputil_group_mod *gm)
>>
>>     retiring = new_ofgroup;
>>
>>-    if (!ofproto_group_write_lookup(ofproto, gm->group_id, &ofgroup)) {
>>+    ovs_rwlock_wrlock(&ofproto->groups_rwlock);
>>+    if (!ofproto_group_lookup__(ofproto, gm->group_id, &ofgroup)) {
>>         error = OFPERR_OFPGMFC_UNKNOWN_GROUP;
>>         goto out;
>>     }
>>--
>>1.9.1
>>
>>_______________________________________________
>>dev mailing list
>>dev@openvswitch.org
>>https://urldefense.proofpoint.com/v1/url?u=http://openvswitch.org/mailman/
>>listinfo/dev&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=TfBS78Vw3dzttvXidhbffg%
>>3D%3D%0A&m=zh8wMPw9xcbpj4PL38Ny0FxIVZca52l1YMLz2Bd8XTg%3D%0A&s=5cbf10fbd63
>>99c57836e3dcdba2ac6c567f16aaba5a2658c52298cc2ecc21e89
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to