@@ -65,7 +65,7 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
6565 { "temp2_label" , "test hwmon event2\n" , },
6666 { "temp2_input" , "50000\n" , },
6767 };
68- int dirfd , file ;
68+ int hwmon_dirfd = -1 , test_dirfd = -1 , file ;
6969 struct perf_pmu * hwm = NULL ;
7070 ssize_t len ;
7171
@@ -76,19 +76,24 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
7676 dir [0 ] = '\0' ;
7777 return NULL ;
7878 }
79- dirfd = open (dir , O_DIRECTORY );
80- if (dirfd < 0 ) {
79+ test_dirfd = open (dir , O_PATH | O_DIRECTORY );
80+ if (test_dirfd < 0 ) {
8181 pr_err ("Failed to open test directory \"%s\"\n" , dir );
8282 goto err_out ;
8383 }
8484
8585 /* Create the test hwmon directory and give it a name. */
86- if (mkdirat (dirfd , "hwmon1234" , 0755 ) < 0 ) {
86+ if (mkdirat (test_dirfd , "hwmon1234" , 0755 ) < 0 ) {
8787 pr_err ("Failed to mkdir hwmon directory\n" );
8888 goto err_out ;
8989 }
90- file = openat (dirfd , "hwmon1234/name" , O_WRONLY | O_CREAT , 0600 );
91- if (!file ) {
90+ hwmon_dirfd = openat (test_dirfd , "hwmon1234" , O_DIRECTORY );
91+ if (hwmon_dirfd < 0 ) {
92+ pr_err ("Failed to open test hwmon directory \"%s/hwmon1234\"\n" , dir );
93+ goto err_out ;
94+ }
95+ file = openat (hwmon_dirfd , "name" , O_WRONLY | O_CREAT , 0600 );
96+ if (file < 0 ) {
9297 pr_err ("Failed to open for writing file \"name\"\n" );
9398 goto err_out ;
9499 }
@@ -104,8 +109,8 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
104109 for (size_t i = 0 ; i < ARRAY_SIZE (test_items ); i ++ ) {
105110 const struct test_item * item = & test_items [i ];
106111
107- file = openat (dirfd , item -> name , O_WRONLY | O_CREAT , 0600 );
108- if (! file ) {
112+ file = openat (hwmon_dirfd , item -> name , O_WRONLY | O_CREAT , 0600 );
113+ if (file < 0 ) {
109114 pr_err ("Failed to open for writing file \"%s\"\n" , item -> name );
110115 goto err_out ;
111116 }
@@ -119,16 +124,18 @@ static struct perf_pmu *test_pmu_get(char *dir, size_t sz)
119124 }
120125
121126 /* Make the PMU reading the files created above. */
122- hwm = perf_pmus__add_test_hwmon_pmu (dirfd , "hwmon1234" , test_hwmon_name );
127+ hwm = perf_pmus__add_test_hwmon_pmu (hwmon_dirfd , "hwmon1234" , test_hwmon_name );
123128 if (!hwm )
124129 pr_err ("Test hwmon creation failed\n" );
125130
126131err_out :
127132 if (!hwm ) {
128133 test_pmu_put (dir , hwm );
129- if (dirfd >= 0 )
130- close (dirfd );
134+ if (hwmon_dirfd >= 0 )
135+ close (hwmon_dirfd );
131136 }
137+ if (test_dirfd >= 0 )
138+ close (test_dirfd );
132139 return hwm ;
133140}
134141
0 commit comments