Whamcloud - gitweb
LU-16741 ptlrpc: rename ptlrpc_req_finished for component ptlrpc
[fs/lustre-release.git] / lustre / kernel_patches / patches / add-and-use-a-per-mapping-stable-writes-flag-rhel9.patch
1 Index: linux-5.14.0-162.23.1.el9_1/block/bdev.c
2 ===================================================================
3 --- linux-5.14.0-162.23.1.el9_1.orig/block/bdev.c
4 +++ linux-5.14.0-162.23.1.el9_1/block/bdev.c
5 @@ -506,6 +506,8 @@ struct block_device *bdev_alloc(struct g
6  
7  void bdev_add(struct block_device *bdev, dev_t dev)
8  {
9 +       if (bdev_stable_writes(bdev))
10 +               mapping_set_stable_writes(bdev->bd_inode->i_mapping);
11         bdev->bd_dev = dev;
12         bdev->bd_inode->i_rdev = dev;
13         bdev->bd_inode->i_ino = dev;
14 Index: linux-5.14.0-162.23.1.el9_1/fs/inode.c
15 ===================================================================
16 --- linux-5.14.0-162.23.1.el9_1.orig/fs/inode.c
17 +++ linux-5.14.0-162.23.1.el9_1/fs/inode.c
18 @@ -192,6 +192,8 @@ int inode_init_always(struct super_block
19         lockdep_set_class_and_name(&mapping->invalidate_lock,
20                                    &sb->s_type->invalidate_lock_key,
21                                    "mapping.invalidate_lock");
22 +       if (sb->s_iflags & SB_I_STABLE_WRITES)
23 +               mapping_set_stable_writes(mapping);
24         inode->i_private = NULL;
25         inode->i_mapping = mapping;
26         INIT_HLIST_HEAD(&inode->i_dentry);      /* buggered by rcu freeing */
27 Index: linux-5.14.0-162.23.1.el9_1/include/linux/pagemap.h
28 ===================================================================
29 --- linux-5.14.0-162.23.1.el9_1.orig/include/linux/pagemap.h
30 +++ linux-5.14.0-162.23.1.el9_1/include/linux/pagemap.h
31 @@ -147,6 +147,8 @@ enum mapping_flags {
32         /* writeback related tags are not used */
33         AS_NO_WRITEBACK_TAGS = 5,
34         AS_LARGE_FOLIO_SUPPORT = 6,
35 +       AS_STABLE_WRITES,       /* must wait for writeback before modifying
36 +                                  folio contents */
37  };
38  
39  /**
40 @@ -217,6 +219,21 @@ static inline int mapping_use_writeback_
41         return !test_bit(AS_NO_WRITEBACK_TAGS, &mapping->flags);
42  }
43  
44 +static inline bool mapping_stable_writes(const struct address_space *mapping)
45 +{
46 +       return test_bit(AS_STABLE_WRITES, &mapping->flags);
47 +}
48 +
49 +static inline void mapping_set_stable_writes(struct address_space *mapping)
50 +{
51 +       set_bit(AS_STABLE_WRITES, &mapping->flags);
52 +}
53 +
54 +static inline void mapping_clear_stable_writes(struct address_space *mapping)
55 +{
56 +       clear_bit(AS_STABLE_WRITES, &mapping->flags);
57 +}
58 +
59  static inline gfp_t mapping_gfp_mask(struct address_space * mapping)
60  {
61         return mapping->gfp_mask;
62 Index: linux-5.14.0-162.23.1.el9_1/mm/page-writeback.c
63 ===================================================================
64 --- linux-5.14.0-162.23.1.el9_1.orig/mm/page-writeback.c
65 +++ linux-5.14.0-162.23.1.el9_1/mm/page-writeback.c
66 @@ -2965,7 +2965,7 @@ EXPORT_SYMBOL_GPL(folio_wait_writeback_k
67   */
68  void folio_wait_stable(struct folio *folio)
69  {
70 -       if (folio_inode(folio)->i_sb->s_iflags & SB_I_STABLE_WRITES)
71 +       if (mapping_stable_writes(folio_mapping(folio)))
72                 folio_wait_writeback(folio);
73  }
74  EXPORT_SYMBOL_GPL(folio_wait_stable);