[GFS2] Reduce inode size by moving i_alloc out of line
It is possible to reduce the size of GFS2 inodes by taking the i_alloc structure out of the gfs2_inode. This patch allocates the i_alloc structure whenever its needed, and frees it afterward. This decreases the amount of low memory we use at the expense of requiring a memory allocation for each page or partial page that we write. A quick test with postmark shows that the overhead is not measurable and I also note that OCFS2 use the same approach. In the future I'd like to solve the problem by shrinking down the size of the members of the i_alloc structure, but for now, this reduces the immediate problem of using too much low-memory on x86 and doesn't add too much overhead. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
此提交包含在:
@@ -453,7 +453,7 @@ static void qdsb_put(struct gfs2_quota_data *qd)
|
||||
int gfs2_quota_hold(struct gfs2_inode *ip, u32 uid, u32 gid)
|
||||
{
|
||||
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
||||
struct gfs2_alloc *al = &ip->i_alloc;
|
||||
struct gfs2_alloc *al = ip->i_alloc;
|
||||
struct gfs2_quota_data **qd = al->al_qd;
|
||||
int error;
|
||||
|
||||
@@ -501,7 +501,7 @@ out:
|
||||
void gfs2_quota_unhold(struct gfs2_inode *ip)
|
||||
{
|
||||
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
||||
struct gfs2_alloc *al = &ip->i_alloc;
|
||||
struct gfs2_alloc *al = ip->i_alloc;
|
||||
unsigned int x;
|
||||
|
||||
gfs2_assert_warn(sdp, !test_bit(GIF_QD_LOCKED, &ip->i_flags));
|
||||
@@ -853,7 +853,7 @@ fail:
|
||||
int gfs2_quota_lock(struct gfs2_inode *ip, u32 uid, u32 gid)
|
||||
{
|
||||
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
||||
struct gfs2_alloc *al = &ip->i_alloc;
|
||||
struct gfs2_alloc *al = ip->i_alloc;
|
||||
unsigned int x;
|
||||
int error = 0;
|
||||
|
||||
@@ -921,7 +921,7 @@ static int need_sync(struct gfs2_quota_data *qd)
|
||||
|
||||
void gfs2_quota_unlock(struct gfs2_inode *ip)
|
||||
{
|
||||
struct gfs2_alloc *al = &ip->i_alloc;
|
||||
struct gfs2_alloc *al = ip->i_alloc;
|
||||
struct gfs2_quota_data *qda[4];
|
||||
unsigned int count = 0;
|
||||
unsigned int x;
|
||||
@@ -969,7 +969,7 @@ static int print_message(struct gfs2_quota_data *qd, char *type)
|
||||
int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid)
|
||||
{
|
||||
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
||||
struct gfs2_alloc *al = &ip->i_alloc;
|
||||
struct gfs2_alloc *al = ip->i_alloc;
|
||||
struct gfs2_quota_data *qd;
|
||||
s64 value;
|
||||
unsigned int x;
|
||||
@@ -1013,7 +1013,7 @@ int gfs2_quota_check(struct gfs2_inode *ip, u32 uid, u32 gid)
|
||||
void gfs2_quota_change(struct gfs2_inode *ip, s64 change,
|
||||
u32 uid, u32 gid)
|
||||
{
|
||||
struct gfs2_alloc *al = &ip->i_alloc;
|
||||
struct gfs2_alloc *al = ip->i_alloc;
|
||||
struct gfs2_quota_data *qd;
|
||||
unsigned int x;
|
||||
|
||||
|
新增問題並參考
封鎖使用者