@@ -131,8 +131,12 @@ static void simplefs_put_super(struct super_block *sb)
131131
132132 sync_blockdev (sb -> s_bdev );
133133 invalidate_bdev (sb -> s_bdev );
134-
135- #if SIMPLEFS_AT_LEAST (6 , 7 , 0 )
134+ #if SIMPLEFS_AT_LEAST (6 , 11 , 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 )
136140 if (sbi -> s_journal_bdev_handle ) {
137141 sync_blockdev (sbi -> s_journal_bdev_handle -> bdev );
138142 invalidate_bdev (sbi -> s_journal_bdev_handle -> bdev );
@@ -258,8 +262,12 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
258262 unsigned long offset ;
259263 journal_t * journal ;
260264 int errno = 0 ;
261-
262- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
265+ #if SIMPLEFS_AT_LEAST (6 , 11 , 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 )
263271 struct bdev_handle * bdev_handle ;
264272 bdev_handle = bdev_open_by_dev (
265273 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,
283291 sb );
284292#endif
285293
286-
287- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
294+ #if SIMPLEFS_AT_LEAST (6 , 11 , 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 , 8 , 0 )
288303 if (IS_ERR (bdev_handle )) {
289304 printk (KERN_ERR
290305 "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,
311326
312327 sb_block = SIMPLEFS_BLOCK_SIZE / blocksize ;
313328 offset = SIMPLEFS_BLOCK_SIZE % blocksize ;
329+
330+ #if SIMPLEFS_AT_LEAST (6 , 11 , 0 )
331+ set_blocksize (bdev_file , blocksize );
332+ #elif SIMPLEFS_AT_LEAST (6 , 8 , 0 )
314333 set_blocksize (bdev , blocksize );
334+ #endif
315335 bh = __bread (bdev , sb_block , blocksize );
316336
317337 if (!bh ) {
@@ -332,7 +352,10 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
332352 start = sb_block ;
333353 brelse (bh );
334354
335- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
355+ #if SIMPLEFS_AT_LEAST (6 , 11 , 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 , 8 , 0 )
336359 journal = jbd2_journal_init_dev (bdev_handle -> bdev , sb -> s_bdev , start , len ,
337360 sb -> s_blocksize );
338361#elif SIMPLEFS_AT_LEAST (5 , 15 , 0 )
@@ -347,18 +370,24 @@ static journal_t *simplefs_get_dev_journal(struct super_block *sb,
347370 errno = PTR_ERR (journal );
348371 goto out_bdev ;
349372 }
350-
351- #if SIMPLEFS_AT_LEAST (6 , 8 , 0 )
373+ #if SIMPLEFS_AT_LEAST (6 , 11 , 0 )
374+ sbi -> s_journal_bdev_file = bdev_file ;
375+ pr_info ("6.11 kernel" );
376+ #elif SIMPLEFS_AT_LEAST (6 , 8 , 0 )
352377 sbi -> s_journal_bdev_handle = bdev_handle ;
378+ pr_info ("6.8 kernel" );
353379#elif SIMPLEFS_AT_LEAST (5 , 15 , 0 )
380+ pr_info ("5.15 kernel" );
354381 sbi -> s_journal_bdev = bdev ;
355382#endif
356383
357384 journal -> j_private = sb ;
358385 return journal ;
359386
360387out_bdev :
361- #if SIMPLEFS_AT_LEAST (6 , 7 , 0 )
388+ #if SIMPLEFS_AT_LEAST (6 , 11 , 0 )
389+ fput (bdev_file );
390+ #elif SIMPLEFS_AT_LEAST (6 , 7 , 0 )
362391 bdev_release (bdev_handle );
363392#elif SIMPLEFS_AT_LEAST (6 , 5 , 0 )
364393 blkdev_put (bdev , sb );
@@ -375,10 +404,10 @@ static int simplefs_load_journal(struct super_block *sb,
375404 struct simplefs_sb_info * sbi = SIMPLEFS_SB (sb );
376405 dev_t journal_dev ;
377406 int err = 0 ;
378- journal_dev = new_decode_dev (journal_devnum );
379407 int really_read_only ;
380408 int journal_dev_ro ;
381409
410+ journal_dev = new_decode_dev (journal_devnum );
382411 journal = simplefs_get_dev_journal (sb , journal_dev );
383412 if (IS_ERR (journal )) {
384413 pr_err ("Failed to get journal from device, error %ld\n" ,
0 commit comments