ocfs2: clean up localalloc mount option size parsing
This patch pulls the local alloc sizing code into localalloc.c and provides a callout to it from ocfs2_fill_super(). Behavior is essentially unchanged except that I correctly calculate the maximum local alloc size. The old code in ocfs2_parse_options() calculated the max size as: ocfs2_local_alloc_size(sb) * 8 which is correct, in bits. Unfortunately though the option passed in is in megabytes. Ultimately, this bug made no real difference - the shrink code would catch a too-large size and bring it down to something reasonable. Still, it's less than efficient as-is. Signed-off-by: Mark Fasheh <mfasheh@suse.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
@@ -75,6 +75,34 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
|
||||
static int ocfs2_local_alloc_slide_window(struct ocfs2_super *osb,
|
||||
struct inode *local_alloc_inode);
|
||||
|
||||
void ocfs2_la_set_sizes(struct ocfs2_super *osb, int requested_mb)
|
||||
{
|
||||
struct super_block *sb = osb->sb;
|
||||
unsigned int la_default_mb = OCFS2_DEFAULT_LOCAL_ALLOC_SIZE;
|
||||
unsigned int la_max_mb;
|
||||
|
||||
la_max_mb = ocfs2_clusters_to_megabytes(sb,
|
||||
ocfs2_local_alloc_size(sb) * 8);
|
||||
|
||||
mlog(0, "requested: %dM, max: %uM, default: %uM\n",
|
||||
requested_mb, la_max_mb, la_default_mb);
|
||||
|
||||
if (requested_mb == -1) {
|
||||
/* No user request - use defaults */
|
||||
osb->local_alloc_default_bits =
|
||||
ocfs2_megabytes_to_clusters(sb, la_default_mb);
|
||||
} else if (requested_mb > la_max_mb) {
|
||||
/* Request is too big, we give the maximum available */
|
||||
osb->local_alloc_default_bits =
|
||||
ocfs2_megabytes_to_clusters(sb, la_max_mb);
|
||||
} else {
|
||||
osb->local_alloc_default_bits =
|
||||
ocfs2_megabytes_to_clusters(sb, requested_mb);
|
||||
}
|
||||
|
||||
osb->local_alloc_bits = osb->local_alloc_default_bits;
|
||||
}
|
||||
|
||||
static inline int ocfs2_la_state_enabled(struct ocfs2_super *osb)
|
||||
{
|
||||
return (osb->local_alloc_state == OCFS2_LA_THROTTLED ||
|
||||
|
Reference in New Issue
Block a user