@@ -94,38 +94,41 @@ typedef struct dio_request {
94
94
struct bio * dr_bio [0 ]; /* Attached bio's */
95
95
} dio_request_t ;
96
96
97
+ /*
98
+ * Convert SPA mode flags into bdev open mode flags.
99
+ */
97
100
#ifdef HAVE_BLK_MODE_T
98
- static blk_mode_t
101
+ typedef blk_mode_t vdev_bdev_mode_t ;
102
+ #define VDEV_BDEV_MODE_READ BLK_OPEN_READ
103
+ #define VDEV_BDEV_MODE_WRITE BLK_OPEN_WRITE
104
+ #define VDEV_BDEV_MODE_EXCL BLK_OPEN_EXCL
105
+ #define VDEV_BDEV_MODE_MASK (BLK_OPEN_READ|BLK_OPEN_WRITE|BLK_OPEN_EXCL)
99
106
#else
100
- static fmode_t
107
+ typedef fmode_t vdev_bdev_mode_t ;
108
+ #define VDEV_BDEV_MODE_READ FMODE_READ
109
+ #define VDEV_BDEV_MODE_WRITE FMODE_WRITE
110
+ #define VDEV_BDEV_MODE_EXCL FMODE_EXCL
111
+ #define VDEV_BDEV_MODE_MASK (FMODE_READ|FMODE_WRITE|FMODE_EXCL)
101
112
#endif
102
- vdev_bdev_mode (spa_mode_t spa_mode , boolean_t exclusive )
103
- {
104
- #ifdef HAVE_BLK_MODE_T
105
- blk_mode_t mode = 0 ;
106
-
107
- if (spa_mode & SPA_MODE_READ )
108
- mode |= BLK_OPEN_READ ;
109
113
110
- if (spa_mode & SPA_MODE_WRITE )
111
- mode |= BLK_OPEN_WRITE ;
114
+ static vdev_bdev_mode_t
115
+ vdev_bdev_mode (spa_mode_t smode )
116
+ {
117
+ ASSERT3U (smode , != , SPA_MODE_UNINIT );
118
+ ASSERT0 (smode & ~(SPA_MODE_READ |SPA_MODE_WRITE ));
112
119
113
- if (exclusive )
114
- mode |= BLK_OPEN_EXCL ;
115
- #else
116
- fmode_t mode = 0 ;
120
+ vdev_bdev_mode_t bmode = VDEV_BDEV_MODE_EXCL ;
117
121
118
- if (spa_mode & SPA_MODE_READ )
119
- mode |= FMODE_READ ;
122
+ if (smode & SPA_MODE_READ )
123
+ bmode |= VDEV_BDEV_MODE_READ ;
120
124
121
- if (spa_mode & SPA_MODE_WRITE )
122
- mode |= FMODE_WRITE ;
125
+ if (smode & SPA_MODE_WRITE )
126
+ bmode |= VDEV_BDEV_MODE_WRITE ;
123
127
124
- if (exclusive )
125
- mode |= FMODE_EXCL ;
126
- #endif
128
+ ASSERT (bmode & VDEV_BDEV_MODE_MASK );
129
+ ASSERT0 (bmode & ~VDEV_BDEV_MODE_MASK );
127
130
128
- return (mode );
131
+ return (bmode );
129
132
}
130
133
131
134
/*
@@ -232,30 +235,28 @@ vdev_disk_kobj_evt_post(vdev_t *v)
232
235
}
233
236
234
237
static zfs_bdev_handle_t *
235
- vdev_blkdev_get_by_path (const char * path , spa_mode_t mode , void * holder )
238
+ vdev_blkdev_get_by_path (const char * path , spa_mode_t smode , void * holder )
236
239
{
240
+ vdev_bdev_mode_t bmode = vdev_bdev_mode (smode );
241
+
237
242
#if defined(HAVE_BDEV_OPEN_BY_PATH )
238
- return (bdev_open_by_path (path ,
239
- vdev_bdev_mode (mode , B_TRUE ), holder , NULL ));
243
+ return (bdev_open_by_path (path , bmode , holder , NULL ));
240
244
#elif defined(HAVE_BLKDEV_GET_BY_PATH_4ARG )
241
- return (blkdev_get_by_path (path ,
242
- vdev_bdev_mode (mode , B_TRUE ), holder , NULL ));
245
+ return (blkdev_get_by_path (path , bmode , holder , NULL ));
243
246
#else
244
- return (blkdev_get_by_path (path ,
245
- vdev_bdev_mode (mode , B_TRUE ), holder ));
247
+ return (blkdev_get_by_path (path , bmode , holder ));
246
248
#endif
247
249
}
248
250
249
251
static void
250
- vdev_blkdev_put (zfs_bdev_handle_t * bdh , spa_mode_t mode , void * holder )
252
+ vdev_blkdev_put (zfs_bdev_handle_t * bdh , spa_mode_t smode , void * holder )
251
253
{
252
254
#if defined(HAVE_BDEV_RELEASE )
253
255
return (bdev_release (bdh ));
254
256
#elif defined(HAVE_BLKDEV_PUT_HOLDER )
255
257
return (blkdev_put (BDH_BDEV (bdh ), holder ));
256
258
#else
257
- return (blkdev_put (BDH_BDEV (bdh ),
258
- vdev_bdev_mode (mode , B_TRUE )));
259
+ return (blkdev_put (BDH_BDEV (bdh ), vdev_bdev_mode (smode )));
259
260
#endif
260
261
}
261
262
@@ -264,11 +265,7 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize,
264
265
uint64_t * logical_ashift , uint64_t * physical_ashift )
265
266
{
266
267
zfs_bdev_handle_t * bdh ;
267
- #ifdef HAVE_BLK_MODE_T
268
- blk_mode_t mode = vdev_bdev_mode (spa_mode (v -> vdev_spa ), B_FALSE );
269
- #else
270
- fmode_t mode = vdev_bdev_mode (spa_mode (v -> vdev_spa ), B_FALSE );
271
- #endif
268
+ spa_mode_t smode = spa_mode (v -> vdev_spa );
272
269
hrtime_t timeout = MSEC2NSEC (zfs_vdev_open_timeout_ms );
273
270
vdev_disk_t * vd ;
274
271
@@ -319,16 +316,16 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize,
319
316
reread_part = B_TRUE ;
320
317
}
321
318
322
- vdev_blkdev_put (bdh , mode , zfs_vdev_holder );
319
+ vdev_blkdev_put (bdh , smode , zfs_vdev_holder );
323
320
}
324
321
325
322
if (reread_part ) {
326
- bdh = vdev_blkdev_get_by_path (disk_name , mode ,
323
+ bdh = vdev_blkdev_get_by_path (disk_name , smode ,
327
324
zfs_vdev_holder );
328
325
if (!BDH_IS_ERR (bdh )) {
329
326
int error =
330
327
vdev_bdev_reread_part (BDH_BDEV (bdh ));
331
- vdev_blkdev_put (bdh , mode , zfs_vdev_holder );
328
+ vdev_blkdev_put (bdh , smode , zfs_vdev_holder );
332
329
if (error == 0 ) {
333
330
timeout = MSEC2NSEC (
334
331
zfs_vdev_open_timeout_ms * 2 );
@@ -373,7 +370,7 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize,
373
370
hrtime_t start = gethrtime ();
374
371
bdh = BDH_ERR_PTR (- ENXIO );
375
372
while (BDH_IS_ERR (bdh ) && ((gethrtime () - start ) < timeout )) {
376
- bdh = vdev_blkdev_get_by_path (v -> vdev_path , mode ,
373
+ bdh = vdev_blkdev_get_by_path (v -> vdev_path , smode ,
377
374
zfs_vdev_holder );
378
375
if (unlikely (BDH_PTR_ERR (bdh ) == - ENOENT )) {
379
376
/*
0 commit comments