@@ -131,8 +131,12 @@ static void simplefs_put_super(struct super_block *sb)
131
131
132
132
sync_blockdev (sb -> s_bdev );
133
133
invalidate_bdev (sb -> s_bdev );
134
-
135
- #if SIMPLEFS_AT_LEAST (6 , 7 , 0 )
134
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
135
+ if (sbi -> s_journal_bdev_file ) {
136
+ sync_blockdev (file_bdev (sbi -> s_journal_bdev_file ));
137
+ invalidate_bdev (file_bdev (sbi -> s_journal_bdev_file ));
138
+ }
139
+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
136
140
if (sbi -> s_journal_bdev_handle ) {
137
141
sync_blockdev (sbi -> s_journal_bdev_handle -> bdev );
138
142
invalidate_bdev (sbi -> s_journal_bdev_handle -> bdev );
@@ -258,8 +262,12 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
258
262
unsigned long offset ;
259
263
journal_t * journal ;
260
264
int errno = 0 ;
261
-
262
- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
265
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
266
+ struct file * bdev_file ;
267
+ bdev_file = bdev_file_open_by_dev (
268
+ journal_dev , BLK_OPEN_READ | BLK_OPEN_WRITE | BLK_OPEN_RESTRICT_WRITES ,
269
+ sb , & fs_holder_ops );
270
+ #elif SIMPLEFS_AT_LEAST (6 , 8 , 0 )
263
271
struct bdev_handle * bdev_handle ;
264
272
bdev_handle = bdev_open_by_dev (
265
273
journal_dev , BLK_OPEN_READ | BLK_OPEN_WRITE | BLK_OPEN_RESTRICT_WRITES ,
@@ -283,8 +291,15 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
283
291
sb );
284
292
#endif
285
293
286
-
287
- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
294
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
295
+ if (IS_ERR (bdev_file )) {
296
+ printk (KERN_ERR
297
+ "failed to open journal device unknown-block(%u,%u) %ld\n" ,
298
+ MAJOR (journal_dev ), MINOR (journal_dev ), PTR_ERR (bdev_file ));
299
+ return ERR_CAST (bdev_file );
300
+ }
301
+ bdev = file_bdev (bdev_file );
302
+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
288
303
if (IS_ERR (bdev_handle )) {
289
304
printk (KERN_ERR
290
305
"failed to open journal device unknown-block(%u,%u) %ld\n" ,
@@ -311,7 +326,12 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
311
326
312
327
sb_block = SIMPLEFS_BLOCK_SIZE / blocksize ;
313
328
offset = SIMPLEFS_BLOCK_SIZE % blocksize ;
329
+
330
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
331
+ set_blocksize (bdev_file , blocksize );
332
+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
314
333
set_blocksize (bdev , blocksize );
334
+ #endif
315
335
bh = __bread (bdev , sb_block , blocksize );
316
336
317
337
if (!bh ) {
@@ -332,7 +352,10 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
332
352
start = sb_block ;
333
353
brelse (bh );
334
354
335
- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
355
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
356
+ journal = jbd2_journal_init_dev (file_bdev (bdev_file ), sb -> s_bdev , start ,
357
+ len , sb -> s_blocksize );
358
+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
336
359
journal = jbd2_journal_init_dev (bdev_handle -> bdev , sb -> s_bdev , start , len ,
337
360
sb -> s_blocksize );
338
361
#elif SIMPLEFS_AT_LEAST (5 , 15 , 0 )
@@ -347,18 +370,24 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
347
370
errno = PTR_ERR (journal );
348
371
goto out_bdev ;
349
372
}
350
-
351
- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
373
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
374
+ sbi -> s_journal_bdev_file = bdev_file ;
375
+ pr_info ("6.11 kernel" );
376
+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
352
377
sbi -> s_journal_bdev_handle = bdev_handle ;
378
+ pr_info ("6.8 kernel" );
353
379
#elif SIMPLEFS_AT_LEAST (5 , 15 , 0 )
380
+ pr_info ("5.15 kernel" );
354
381
sbi -> s_journal_bdev = bdev ;
355
382
#endif
356
383
357
384
journal -> j_private = sb ;
358
385
return journal ;
359
386
360
387
out_bdev :
361
- #if SIMPLEFS_AT_LEAST (6 , 7 , 0 )
388
+ #if SIMPLEFS_AT_LEAST (6 , 9 , 0 )
389
+ fput (bdev_file );
390
+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
362
391
bdev_release (bdev_handle );
363
392
#elif SIMPLEFS_AT_LEAST (6 , 5 , 0 )
364
393
blkdev_put (bdev , sb );
@@ -375,10 +404,10 @@ static int simplefs_load_journal(struct super_block *sb,
375
404
struct simplefs_sb_info * sbi = SIMPLEFS_SB (sb );
376
405
dev_t journal_dev ;
377
406
int err = 0 ;
378
- journal_dev = new_decode_dev (journal_devnum );
379
407
int really_read_only ;
380
408
int journal_dev_ro ;
381
409
410
+ journal_dev = new_decode_dev (journal_devnum );
382
411
journal = simplefs_get_dev_journal (sb , journal_dev );
383
412
if (IS_ERR (journal )) {
384
413
pr_err ("Failed to get journal from device, error %ld\n" ,
0 commit comments