quota.c (55f841ce9395a72c6285fbcc4c403c0c786e1c74) quota.c (1ab6c4997e04a00c50c6d786c2f046adc0d1f5de)
1/*
2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
4 *
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
7 * of the GNU General Public License version 2.
8 */

--- 61 unchanged lines hidden (view full) ---

70 u32 qc_flags; /* GFS2_QCF_... */
71 struct kqid qc_id;
72};
73
74static LIST_HEAD(qd_lru_list);
75static atomic_t qd_lru_count = ATOMIC_INIT(0);
76static DEFINE_SPINLOCK(qd_lru_lock);
77
1/*
2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
4 *
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
7 * of the GNU General Public License version 2.
8 */

--- 61 unchanged lines hidden (view full) ---

70 u32 qc_flags; /* GFS2_QCF_... */
71 struct kqid qc_id;
72};
73
74static LIST_HEAD(qd_lru_list);
75static atomic_t qd_lru_count = ATOMIC_INIT(0);
76static DEFINE_SPINLOCK(qd_lru_lock);
77
78int gfs2_shrink_qd_memory(struct shrinker *shrink, struct shrink_control *sc)
78unsigned long gfs2_qd_shrink_scan(struct shrinker *shrink,
79 struct shrink_control *sc)
79{
80 struct gfs2_quota_data *qd;
81 struct gfs2_sbd *sdp;
82 int nr_to_scan = sc->nr_to_scan;
80{
81 struct gfs2_quota_data *qd;
82 struct gfs2_sbd *sdp;
83 int nr_to_scan = sc->nr_to_scan;
84 long freed = 0;
83
85
84 if (nr_to_scan == 0)
85 goto out;
86
87 if (!(sc->gfp_mask & __GFP_FS))
86 if (!(sc->gfp_mask & __GFP_FS))
88 return -1;
87 return SHRINK_STOP;
89
90 spin_lock(&qd_lru_lock);
91 while (nr_to_scan && !list_empty(&qd_lru_list)) {
92 qd = list_entry(qd_lru_list.next,
93 struct gfs2_quota_data, qd_reclaim);
94 sdp = qd->qd_gl->gl_sbd;
95
96 /* Free from the filesystem-specific list */

--- 8 unchanged lines hidden (view full) ---

105
106 /* Delete it from the common reclaim list */
107 list_del_init(&qd->qd_reclaim);
108 atomic_dec(&qd_lru_count);
109 spin_unlock(&qd_lru_lock);
110 kmem_cache_free(gfs2_quotad_cachep, qd);
111 spin_lock(&qd_lru_lock);
112 nr_to_scan--;
88
89 spin_lock(&qd_lru_lock);
90 while (nr_to_scan && !list_empty(&qd_lru_list)) {
91 qd = list_entry(qd_lru_list.next,
92 struct gfs2_quota_data, qd_reclaim);
93 sdp = qd->qd_gl->gl_sbd;
94
95 /* Free from the filesystem-specific list */

--- 8 unchanged lines hidden (view full) ---

104
105 /* Delete it from the common reclaim list */
106 list_del_init(&qd->qd_reclaim);
107 atomic_dec(&qd_lru_count);
108 spin_unlock(&qd_lru_lock);
109 kmem_cache_free(gfs2_quotad_cachep, qd);
110 spin_lock(&qd_lru_lock);
111 nr_to_scan--;
112 freed++;
113 }
114 spin_unlock(&qd_lru_lock);
113 }
114 spin_unlock(&qd_lru_lock);
115 return freed;
116}
115
117
116out:
118unsigned long gfs2_qd_shrink_count(struct shrinker *shrink,
119 struct shrink_control *sc)
120{
117 return vfs_pressure_ratio(atomic_read(&qd_lru_count));
118}
119
120static u64 qd2index(struct gfs2_quota_data *qd)
121{
122 struct kqid qid = qd->qd_id;
123 return (2 * (u64)from_kqid(&init_user_ns, qid)) +
124 ((qid.type == USRQUOTA) ? 0 : 1);

--- 1486 unchanged lines hidden ---
121 return vfs_pressure_ratio(atomic_read(&qd_lru_count));
122}
123
124static u64 qd2index(struct gfs2_quota_data *qd)
125{
126 struct kqid qid = qd->qd_id;
127 return (2 * (u64)from_kqid(&init_user_ns, qid)) +
128 ((qid.type == USRQUOTA) ? 0 : 1);

--- 1486 unchanged lines hidden ---