diff options
author | Bob Peterson <rpeterso@redhat.com> | 2015-07-16 08:28:04 -0500 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2015-12-14 12:16:38 -0600 |
commit | a097dc7e24cba7980bc5e2df461a4ef228e97e59 (patch) | |
tree | bfe9075d7d759fe136d540cea595dfbc4c81f361 /fs/gfs2/file.c | |
parent | b54e9a0b92d44843f6719ae22b0f6daf5b9b23b4 (diff) | |
download | op-kernel-dev-a097dc7e24cba7980bc5e2df461a4ef228e97e59.zip op-kernel-dev-a097dc7e24cba7980bc5e2df461a4ef228e97e59.tar.gz |
GFS2: Make rgrp reservations part of the gfs2_inode structure
Before this patch, multi-block reservation structures were allocated
from a special slab. This patch folds the structure into the gfs2_inode
structure. The disadvantage is that the gfs2_inode needs more memory,
even when a file is opened read-only. The advantages are: (a) we don't
need the special slab and the extra time it takes to allocate and
deallocate from it. (b) we no longer need to worry that the structure
exists for things like quota management. (c) This also allows us to
remove the calls to get_write_access and put_write_access since we
know the structure will exist.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Diffstat (limited to 'fs/gfs2/file.c')
-rw-r--r-- | fs/gfs2/file.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index de001eb..3ead27d 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -336,8 +336,8 @@ static void gfs2_size_hint(struct file *filep, loff_t offset, size_t size) size_t blks = (size + sdp->sd_sb.sb_bsize - 1) >> sdp->sd_sb.sb_bsize_shift; int hint = min_t(size_t, INT_MAX, blks); - if (hint > atomic_read(&ip->i_res->rs_sizehint)) - atomic_set(&ip->i_res->rs_sizehint, hint); + if (hint > atomic_read(&ip->i_res.rs_sizehint)) + atomic_set(&ip->i_res.rs_sizehint, hint); } /** @@ -397,13 +397,9 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) /* Update file times before taking page lock */ file_update_time(vma->vm_file); - ret = get_write_access(inode); - if (ret) - goto out; - ret = gfs2_rsqa_alloc(ip); if (ret) - goto out_write_access; + goto out; gfs2_size_hint(vma->vm_file, pos, PAGE_CACHE_SIZE); @@ -486,8 +482,6 @@ out_uninit: set_page_dirty(page); wait_for_stable_page(page); } -out_write_access: - put_write_access(inode); out: sb_end_pagefault(inode->i_sb); return block_page_mkwrite_return(ret); @@ -944,7 +938,8 @@ static long gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t le ret = __gfs2_fallocate(file, mode, offset, len); if (ret) - gfs2_rs_deltree(ip->i_res); + gfs2_rs_deltree(&ip->i_res); + out_putw: put_write_access(inode); out_unlock: |