diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2013-10-02 06:13:25 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2013-10-02 06:13:25 -0400 |
commit | 7b9cff467144c8c62268db1b0948df089caa0999 (patch) | |
tree | abe7408d4cf28502bdbfc91983c02869898ccced /fs/gfs2/rgrp.c | |
parent | af5c269799feaef110e59ce55b497cdd08712b0c (diff) |
GFS2: Add allocation parameters structure
This patch adds a structure to contain allocation parameters with
the intention of future expansion of this structure. The idea is
that we should be able to add more information about the allocation
in the future in order to allow the allocator to make a better job
of placing the requests on-disk.
There is no functional difference from applying this patch.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/rgrp.c')
-rw-r--r-- | fs/gfs2/rgrp.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index d4d10fadab79..4f0984a607b3 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
@@ -1422,12 +1422,12 @@ static void rs_insert(struct gfs2_inode *ip) | |||
1422 | * rg_mblk_search - find a group of multiple free blocks to form a reservation | 1422 | * rg_mblk_search - find a group of multiple free blocks to form a reservation |
1423 | * @rgd: the resource group descriptor | 1423 | * @rgd: the resource group descriptor |
1424 | * @ip: pointer to the inode for which we're reserving blocks | 1424 | * @ip: pointer to the inode for which we're reserving blocks |
1425 | * @requested: number of blocks required for this allocation | 1425 | * @ap: the allocation parameters |
1426 | * | 1426 | * |
1427 | */ | 1427 | */ |
1428 | 1428 | ||
1429 | static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, | 1429 | static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, |
1430 | unsigned requested) | 1430 | const struct gfs2_alloc_parms *ap) |
1431 | { | 1431 | { |
1432 | struct gfs2_rbm rbm = { .rgd = rgd, }; | 1432 | struct gfs2_rbm rbm = { .rgd = rgd, }; |
1433 | u64 goal; | 1433 | u64 goal; |
@@ -1440,7 +1440,7 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, | |||
1440 | if (S_ISDIR(inode->i_mode)) | 1440 | if (S_ISDIR(inode->i_mode)) |
1441 | extlen = 1; | 1441 | extlen = 1; |
1442 | else { | 1442 | else { |
1443 | extlen = max_t(u32, atomic_read(&rs->rs_sizehint), requested); | 1443 | extlen = max_t(u32, atomic_read(&rs->rs_sizehint), ap->target); |
1444 | extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks); | 1444 | extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks); |
1445 | } | 1445 | } |
1446 | if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen)) | 1446 | if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen)) |
@@ -1831,12 +1831,12 @@ static bool gfs2_select_rgrp(struct gfs2_rgrpd **pos, const struct gfs2_rgrpd *b | |||
1831 | /** | 1831 | /** |
1832 | * gfs2_inplace_reserve - Reserve space in the filesystem | 1832 | * gfs2_inplace_reserve - Reserve space in the filesystem |
1833 | * @ip: the inode to reserve space for | 1833 | * @ip: the inode to reserve space for |
1834 | * @requested: the number of blocks to be reserved | 1834 | * @ap: the allocation parameters |
1835 | * | 1835 | * |
1836 | * Returns: errno | 1836 | * Returns: errno |
1837 | */ | 1837 | */ |
1838 | 1838 | ||
1839 | int gfs2_inplace_reserve(struct gfs2_inode *ip, u32 requested, u32 aflags) | 1839 | int gfs2_inplace_reserve(struct gfs2_inode *ip, const struct gfs2_alloc_parms *ap) |
1840 | { | 1840 | { |
1841 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); | 1841 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); |
1842 | struct gfs2_rgrpd *begin = NULL; | 1842 | struct gfs2_rgrpd *begin = NULL; |
@@ -1848,7 +1848,7 @@ int gfs2_inplace_reserve(struct gfs2_inode *ip, u32 requested, u32 aflags) | |||
1848 | 1848 | ||
1849 | if (sdp->sd_args.ar_rgrplvb) | 1849 | if (sdp->sd_args.ar_rgrplvb) |
1850 | flags |= GL_SKIP; | 1850 | flags |= GL_SKIP; |
1851 | if (gfs2_assert_warn(sdp, requested)) | 1851 | if (gfs2_assert_warn(sdp, ap->target)) |
1852 | return -EINVAL; | 1852 | return -EINVAL; |
1853 | if (gfs2_rs_active(rs)) { | 1853 | if (gfs2_rs_active(rs)) { |
1854 | begin = rs->rs_rbm.rgd; | 1854 | begin = rs->rs_rbm.rgd; |
@@ -1857,7 +1857,7 @@ int gfs2_inplace_reserve(struct gfs2_inode *ip, u32 requested, u32 aflags) | |||
1857 | } else { | 1857 | } else { |
1858 | rs->rs_rbm.rgd = begin = gfs2_blk2rgrpd(sdp, ip->i_goal, 1); | 1858 | rs->rs_rbm.rgd = begin = gfs2_blk2rgrpd(sdp, ip->i_goal, 1); |
1859 | } | 1859 | } |
1860 | if (S_ISDIR(ip->i_inode.i_mode) && (aflags & GFS2_AF_ORLOV)) | 1860 | if (S_ISDIR(ip->i_inode.i_mode) && (ap->aflags & GFS2_AF_ORLOV)) |
1861 | skip = gfs2_orlov_skip(ip); | 1861 | skip = gfs2_orlov_skip(ip); |
1862 | if (rs->rs_rbm.rgd == NULL) | 1862 | if (rs->rs_rbm.rgd == NULL) |
1863 | return -EBADSLT; | 1863 | return -EBADSLT; |
@@ -1899,14 +1899,14 @@ int gfs2_inplace_reserve(struct gfs2_inode *ip, u32 requested, u32 aflags) | |||
1899 | 1899 | ||
1900 | /* Get a reservation if we don't already have one */ | 1900 | /* Get a reservation if we don't already have one */ |
1901 | if (!gfs2_rs_active(rs)) | 1901 | if (!gfs2_rs_active(rs)) |
1902 | rg_mblk_search(rs->rs_rbm.rgd, ip, requested); | 1902 | rg_mblk_search(rs->rs_rbm.rgd, ip, ap); |
1903 | 1903 | ||
1904 | /* Skip rgrps when we can't get a reservation on first pass */ | 1904 | /* Skip rgrps when we can't get a reservation on first pass */ |
1905 | if (!gfs2_rs_active(rs) && (loops < 1)) | 1905 | if (!gfs2_rs_active(rs) && (loops < 1)) |
1906 | goto check_rgrp; | 1906 | goto check_rgrp; |
1907 | 1907 | ||
1908 | /* If rgrp has enough free space, use it */ | 1908 | /* If rgrp has enough free space, use it */ |
1909 | if (rs->rs_rbm.rgd->rd_free_clone >= requested) { | 1909 | if (rs->rs_rbm.rgd->rd_free_clone >= ap->target) { |
1910 | ip->i_rgd = rs->rs_rbm.rgd; | 1910 | ip->i_rgd = rs->rs_rbm.rgd; |
1911 | return 0; | 1911 | return 0; |
1912 | } | 1912 | } |