14
14
#include <linux/kernel.h>
15
15
#include <linux/module.h>
16
16
#include <linux/configfs.h>
17
+ #include <linux/in.h>
18
+ #include <linux/in6.h>
19
+ #include <net/ipv6.h>
17
20
#include <net/sock.h>
18
21
19
22
#include "config.h"
@@ -377,24 +380,24 @@ static struct config_item_type node_type = {
377
380
.ct_owner = THIS_MODULE ,
378
381
};
379
382
380
- static struct dlm_cluster * to_cluster (struct config_item * i )
383
+ static struct dlm_cluster * config_item_to_cluster (struct config_item * i )
381
384
{
382
385
return i ? container_of (to_config_group (i ), struct dlm_cluster , group ) :
383
386
NULL ;
384
387
}
385
388
386
- static struct dlm_space * to_space (struct config_item * i )
389
+ static struct dlm_space * config_item_to_space (struct config_item * i )
387
390
{
388
391
return i ? container_of (to_config_group (i ), struct dlm_space , group ) :
389
392
NULL ;
390
393
}
391
394
392
- static struct dlm_comm * to_comm (struct config_item * i )
395
+ static struct dlm_comm * config_item_to_comm (struct config_item * i )
393
396
{
394
397
return i ? container_of (i , struct dlm_comm , item ) : NULL ;
395
398
}
396
399
397
- static struct dlm_node * to_node (struct config_item * i )
400
+ static struct dlm_node * config_item_to_node (struct config_item * i )
398
401
{
399
402
return i ? container_of (i , struct dlm_node , item ) : NULL ;
400
403
}
@@ -450,7 +453,7 @@ static struct config_group *make_cluster(struct config_group *g,
450
453
451
454
static void drop_cluster (struct config_group * g , struct config_item * i )
452
455
{
453
- struct dlm_cluster * cl = to_cluster (i );
456
+ struct dlm_cluster * cl = config_item_to_cluster (i );
454
457
struct config_item * tmp ;
455
458
int j ;
456
459
@@ -468,7 +471,7 @@ static void drop_cluster(struct config_group *g, struct config_item *i)
468
471
469
472
static void release_cluster (struct config_item * i )
470
473
{
471
- struct dlm_cluster * cl = to_cluster (i );
474
+ struct dlm_cluster * cl = config_item_to_cluster (i );
472
475
kfree (cl -> group .default_groups );
473
476
kfree (cl );
474
477
}
@@ -507,7 +510,7 @@ static struct config_group *make_space(struct config_group *g, const char *name)
507
510
508
511
static void drop_space (struct config_group * g , struct config_item * i )
509
512
{
510
- struct dlm_space * sp = to_space (i );
513
+ struct dlm_space * sp = config_item_to_space (i );
511
514
struct config_item * tmp ;
512
515
int j ;
513
516
@@ -524,7 +527,7 @@ static void drop_space(struct config_group *g, struct config_item *i)
524
527
525
528
static void release_space (struct config_item * i )
526
529
{
527
- struct dlm_space * sp = to_space (i );
530
+ struct dlm_space * sp = config_item_to_space (i );
528
531
kfree (sp -> group .default_groups );
529
532
kfree (sp );
530
533
}
@@ -546,7 +549,7 @@ static struct config_item *make_comm(struct config_group *g, const char *name)
546
549
547
550
static void drop_comm (struct config_group * g , struct config_item * i )
548
551
{
549
- struct dlm_comm * cm = to_comm (i );
552
+ struct dlm_comm * cm = config_item_to_comm (i );
550
553
if (local_comm == cm )
551
554
local_comm = NULL ;
552
555
dlm_lowcomms_close (cm -> nodeid );
@@ -557,13 +560,13 @@ static void drop_comm(struct config_group *g, struct config_item *i)
557
560
558
561
static void release_comm (struct config_item * i )
559
562
{
560
- struct dlm_comm * cm = to_comm (i );
563
+ struct dlm_comm * cm = config_item_to_comm (i );
561
564
kfree (cm );
562
565
}
563
566
564
567
static struct config_item * make_node (struct config_group * g , const char * name )
565
568
{
566
- struct dlm_space * sp = to_space (g -> cg_item .ci_parent );
569
+ struct dlm_space * sp = config_item_to_space (g -> cg_item .ci_parent );
567
570
struct dlm_node * nd ;
568
571
569
572
nd = kzalloc (sizeof (struct dlm_node ), GFP_KERNEL );
@@ -585,8 +588,8 @@ static struct config_item *make_node(struct config_group *g, const char *name)
585
588
586
589
static void drop_node (struct config_group * g , struct config_item * i )
587
590
{
588
- struct dlm_space * sp = to_space (g -> cg_item .ci_parent );
589
- struct dlm_node * nd = to_node (i );
591
+ struct dlm_space * sp = config_item_to_space (g -> cg_item .ci_parent );
592
+ struct dlm_node * nd = config_item_to_node (i );
590
593
591
594
mutex_lock (& sp -> members_lock );
592
595
list_del (& nd -> list );
@@ -598,7 +601,7 @@ static void drop_node(struct config_group *g, struct config_item *i)
598
601
599
602
static void release_node (struct config_item * i )
600
603
{
601
- struct dlm_node * nd = to_node (i );
604
+ struct dlm_node * nd = config_item_to_node (i );
602
605
kfree (nd );
603
606
}
604
607
@@ -632,7 +635,7 @@ void dlm_config_exit(void)
632
635
static ssize_t show_cluster (struct config_item * i , struct configfs_attribute * a ,
633
636
char * buf )
634
637
{
635
- struct dlm_cluster * cl = to_cluster (i );
638
+ struct dlm_cluster * cl = config_item_to_cluster (i );
636
639
struct cluster_attribute * cla =
637
640
container_of (a , struct cluster_attribute , attr );
638
641
return cla -> show ? cla -> show (cl , buf ) : 0 ;
@@ -642,7 +645,7 @@ static ssize_t store_cluster(struct config_item *i,
642
645
struct configfs_attribute * a ,
643
646
const char * buf , size_t len )
644
647
{
645
- struct dlm_cluster * cl = to_cluster (i );
648
+ struct dlm_cluster * cl = config_item_to_cluster (i );
646
649
struct cluster_attribute * cla =
647
650
container_of (a , struct cluster_attribute , attr );
648
651
return cla -> store ? cla -> store (cl , buf , len ) : - EINVAL ;
@@ -651,7 +654,7 @@ static ssize_t store_cluster(struct config_item *i,
651
654
static ssize_t show_comm (struct config_item * i , struct configfs_attribute * a ,
652
655
char * buf )
653
656
{
654
- struct dlm_comm * cm = to_comm (i );
657
+ struct dlm_comm * cm = config_item_to_comm (i );
655
658
struct comm_attribute * cma =
656
659
container_of (a , struct comm_attribute , attr );
657
660
return cma -> show ? cma -> show (cm , buf ) : 0 ;
@@ -660,7 +663,7 @@ static ssize_t show_comm(struct config_item *i, struct configfs_attribute *a,
660
663
static ssize_t store_comm (struct config_item * i , struct configfs_attribute * a ,
661
664
const char * buf , size_t len )
662
665
{
663
- struct dlm_comm * cm = to_comm (i );
666
+ struct dlm_comm * cm = config_item_to_comm (i );
664
667
struct comm_attribute * cma =
665
668
container_of (a , struct comm_attribute , attr );
666
669
return cma -> store ? cma -> store (cm , buf , len ) : - EINVAL ;
@@ -714,7 +717,7 @@ static ssize_t comm_addr_write(struct dlm_comm *cm, const char *buf, size_t len)
714
717
static ssize_t show_node (struct config_item * i , struct configfs_attribute * a ,
715
718
char * buf )
716
719
{
717
- struct dlm_node * nd = to_node (i );
720
+ struct dlm_node * nd = config_item_to_node (i );
718
721
struct node_attribute * nda =
719
722
container_of (a , struct node_attribute , attr );
720
723
return nda -> show ? nda -> show (nd , buf ) : 0 ;
@@ -723,7 +726,7 @@ static ssize_t show_node(struct config_item *i, struct configfs_attribute *a,
723
726
static ssize_t store_node (struct config_item * i , struct configfs_attribute * a ,
724
727
const char * buf , size_t len )
725
728
{
726
- struct dlm_node * nd = to_node (i );
729
+ struct dlm_node * nd = config_item_to_node (i );
727
730
struct node_attribute * nda =
728
731
container_of (a , struct node_attribute , attr );
729
732
return nda -> store ? nda -> store (nd , buf , len ) : - EINVAL ;
@@ -768,14 +771,41 @@ static struct dlm_space *get_space(char *name)
768
771
i = config_group_find_item (space_list , name );
769
772
mutex_unlock (& space_list -> cg_subsys -> su_mutex );
770
773
771
- return to_space (i );
774
+ return config_item_to_space (i );
772
775
}
773
776
774
777
static void put_space (struct dlm_space * sp )
775
778
{
776
779
config_item_put (& sp -> group .cg_item );
777
780
}
778
781
782
+ static int addr_compare (struct sockaddr_storage * x , struct sockaddr_storage * y )
783
+ {
784
+ switch (x -> ss_family ) {
785
+ case AF_INET : {
786
+ struct sockaddr_in * sinx = (struct sockaddr_in * )x ;
787
+ struct sockaddr_in * siny = (struct sockaddr_in * )y ;
788
+ if (sinx -> sin_addr .s_addr != siny -> sin_addr .s_addr )
789
+ return 0 ;
790
+ if (sinx -> sin_port != siny -> sin_port )
791
+ return 0 ;
792
+ break ;
793
+ }
794
+ case AF_INET6 : {
795
+ struct sockaddr_in6 * sinx = (struct sockaddr_in6 * )x ;
796
+ struct sockaddr_in6 * siny = (struct sockaddr_in6 * )y ;
797
+ if (!ipv6_addr_equal (& sinx -> sin6_addr , & siny -> sin6_addr ))
798
+ return 0 ;
799
+ if (sinx -> sin6_port != siny -> sin6_port )
800
+ return 0 ;
801
+ break ;
802
+ }
803
+ default :
804
+ return 0 ;
805
+ }
806
+ return 1 ;
807
+ }
808
+
779
809
static struct dlm_comm * get_comm (int nodeid , struct sockaddr_storage * addr )
780
810
{
781
811
struct config_item * i ;
@@ -788,7 +818,7 @@ static struct dlm_comm *get_comm(int nodeid, struct sockaddr_storage *addr)
788
818
mutex_lock (& clusters_root .subsys .su_mutex );
789
819
790
820
list_for_each_entry (i , & comm_list -> cg_children , ci_entry ) {
791
- cm = to_comm (i );
821
+ cm = config_item_to_comm (i );
792
822
793
823
if (nodeid ) {
794
824
if (cm -> nodeid != nodeid )
@@ -797,8 +827,7 @@ static struct dlm_comm *get_comm(int nodeid, struct sockaddr_storage *addr)
797
827
config_item_get (i );
798
828
break ;
799
829
} else {
800
- if (!cm -> addr_count ||
801
- memcmp (cm -> addr [0 ], addr , sizeof (* addr )))
830
+ if (!cm -> addr_count || !addr_compare (cm -> addr [0 ], addr ))
802
831
continue ;
803
832
found = 1 ;
804
833
config_item_get (i );
0 commit comments