Merge tag 'vfs-6.7.fsid' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[linux-block.git] / fs / ext4 / super.c
index 77e2b694c7d5d14a1451795ad2ae5677884b7323..c5fcf377ab1faad832c9165fd2ed299d9c3e94f6 100644 (file)
@@ -244,18 +244,25 @@ static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb,
 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block,
                                   blk_opf_t op_flags)
 {
-       return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE);
+       gfp_t gfp = mapping_gfp_constraint(sb->s_bdev->bd_inode->i_mapping,
+                       ~__GFP_FS) | __GFP_MOVABLE;
+
+       return __ext4_sb_bread_gfp(sb, block, op_flags, gfp);
 }
 
 struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb,
                                            sector_t block)
 {
-       return __ext4_sb_bread_gfp(sb, block, 0, 0);
+       gfp_t gfp = mapping_gfp_constraint(sb->s_bdev->bd_inode->i_mapping,
+                       ~__GFP_FS);
+
+       return __ext4_sb_bread_gfp(sb, block, 0, gfp);
 }
 
 void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block)
 {
-       struct buffer_head *bh = sb_getblk_gfp(sb, block, 0);
+       struct buffer_head *bh = bdev_getblk(sb->s_bdev, block,
+                       sb->s_blocksize, GFP_NOWAIT | __GFP_NOWARN);
 
        if (likely(bh)) {
                if (trylock_buffer(bh))
@@ -1647,6 +1654,7 @@ static const struct super_operations ext4_sops = {
 };
 
 static const struct export_operations ext4_export_ops = {
+       .encode_fh = generic_encode_ino32_fh,
        .fh_to_dentry = ext4_fh_to_dentry,
        .fh_to_parent = ext4_fh_to_parent,
        .get_parent = ext4_get_parent,