Merge tag 'Smack-for-5.14' of git://github.com/cschaufler/smack-next
[linux-2.6-microblaze.git] / include / linux / memcontrol.h
index c193be7..6d66037 100644 (file)
@@ -192,7 +192,7 @@ enum memcg_kmem_state {
 struct memcg_padding {
        char x[0];
 } ____cacheline_internodealigned_in_smp;
-#define MEMCG_PADDING(name)      struct memcg_padding name;
+#define MEMCG_PADDING(name)      struct memcg_padding name
 #else
 #define MEMCG_PADDING(name)
 #endif
@@ -349,8 +349,7 @@ struct mem_cgroup {
        struct deferred_split deferred_split_queue;
 #endif
 
-       struct mem_cgroup_per_node *nodeinfo[0];
-       /* WARNING: nodeinfo must be the last member here */
+       struct mem_cgroup_per_node *nodeinfo[];
 };
 
 /*
@@ -743,35 +742,18 @@ out:
 /**
  * mem_cgroup_page_lruvec - return lruvec for isolating/putting an LRU page
  * @page: the page
- * @pgdat: pgdat of the page
  *
  * This function relies on page->mem_cgroup being stable.
  */
-static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
-                                               struct pglist_data *pgdat)
+static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page)
 {
+       pg_data_t *pgdat = page_pgdat(page);
        struct mem_cgroup *memcg = page_memcg(page);
 
        VM_WARN_ON_ONCE_PAGE(!memcg && !mem_cgroup_disabled(), page);
        return mem_cgroup_lruvec(memcg, pgdat);
 }
 
-static inline bool lruvec_holds_page_lru_lock(struct page *page,
-                                             struct lruvec *lruvec)
-{
-       pg_data_t *pgdat = page_pgdat(page);
-       const struct mem_cgroup *memcg;
-       struct mem_cgroup_per_node *mz;
-
-       if (mem_cgroup_disabled())
-               return lruvec == &pgdat->__lruvec;
-
-       mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
-       memcg = page_memcg(page) ? : root_mem_cgroup;
-
-       return lruvec->pgdat == pgdat && mz->memcg == memcg;
-}
-
 struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
 
 struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);
@@ -1221,18 +1203,11 @@ static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
        return &pgdat->__lruvec;
 }
 
-static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
-                                                   struct pglist_data *pgdat)
-{
-       return &pgdat->__lruvec;
-}
-
-static inline bool lruvec_holds_page_lru_lock(struct page *page,
-                                             struct lruvec *lruvec)
+static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page)
 {
        pg_data_t *pgdat = page_pgdat(page);
 
-       return lruvec == &pgdat->__lruvec;
+       return &pgdat->__lruvec;
 }
 
 static inline void lruvec_memcg_debug(struct lruvec *lruvec, struct page *page)
@@ -1255,6 +1230,12 @@ static inline struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)
        return NULL;
 }
 
+static inline
+struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css)
+{
+       return NULL;
+}
+
 static inline void mem_cgroup_put(struct mem_cgroup *memcg)
 {
 }
@@ -1516,12 +1497,19 @@ static inline void unlock_page_lruvec_irqrestore(struct lruvec *lruvec,
        spin_unlock_irqrestore(&lruvec->lru_lock, flags);
 }
 
+/* Test requires a stable page->memcg binding, see page_memcg() */
+static inline bool page_matches_lruvec(struct page *page, struct lruvec *lruvec)
+{
+       return lruvec_pgdat(lruvec) == page_pgdat(page) &&
+              lruvec_memcg(lruvec) == page_memcg(page);
+}
+
 /* Don't lock again iff page's lruvec locked */
 static inline struct lruvec *relock_page_lruvec_irq(struct page *page,
                struct lruvec *locked_lruvec)
 {
        if (locked_lruvec) {
-               if (lruvec_holds_page_lru_lock(page, locked_lruvec))
+               if (page_matches_lruvec(page, locked_lruvec))
                        return locked_lruvec;
 
                unlock_page_lruvec_irq(locked_lruvec);
@@ -1535,7 +1523,7 @@ static inline struct lruvec *relock_page_lruvec_irqsave(struct page *page,
                struct lruvec *locked_lruvec, unsigned long *flags)
 {
        if (locked_lruvec) {
-               if (lruvec_holds_page_lru_lock(page, locked_lruvec))
+               if (page_matches_lruvec(page, locked_lruvec))
                        return locked_lruvec;
 
                unlock_page_lruvec_irqrestore(locked_lruvec, *flags);