Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: ocfs2: Check heartbeat mode for kernel stacks only Ocfs2/refcounttree: Fix a bug for refcounttree to writeback clusters in a right number. ocfs2: Fix estimate of necessary credits for mkdir
This commit is contained in:
commit
158a5d61f7
@ -405,9 +405,9 @@ static inline int ocfs2_remove_extent_credits(struct super_block *sb)
|
|||||||
ocfs2_quota_trans_credits(sb);
|
ocfs2_quota_trans_credits(sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* data block for new dir/symlink, 2 for bitmap updates (bitmap fe +
|
/* data block for new dir/symlink, allocation of directory block, dx_root
|
||||||
* bitmap block for the new bit) dx_root update for free list */
|
* update for free list */
|
||||||
#define OCFS2_DIR_LINK_ADDITIONAL_CREDITS (1 + 2 + 1)
|
#define OCFS2_DIR_LINK_ADDITIONAL_CREDITS (1 + OCFS2_SUBALLOC_ALLOC + 1)
|
||||||
|
|
||||||
static inline int ocfs2_add_dir_index_credits(struct super_block *sb)
|
static inline int ocfs2_add_dir_index_credits(struct super_block *sb)
|
||||||
{
|
{
|
||||||
|
@ -3228,7 +3228,7 @@ static int ocfs2_make_clusters_writable(struct super_block *sb,
|
|||||||
u32 num_clusters, unsigned int e_flags)
|
u32 num_clusters, unsigned int e_flags)
|
||||||
{
|
{
|
||||||
int ret, delete, index, credits = 0;
|
int ret, delete, index, credits = 0;
|
||||||
u32 new_bit, new_len;
|
u32 new_bit, new_len, orig_num_clusters;
|
||||||
unsigned int set_len;
|
unsigned int set_len;
|
||||||
struct ocfs2_super *osb = OCFS2_SB(sb);
|
struct ocfs2_super *osb = OCFS2_SB(sb);
|
||||||
handle_t *handle;
|
handle_t *handle;
|
||||||
@ -3261,6 +3261,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
orig_num_clusters = num_clusters;
|
||||||
|
|
||||||
while (num_clusters) {
|
while (num_clusters) {
|
||||||
ret = ocfs2_get_refcount_rec(ref_ci, context->ref_root_bh,
|
ret = ocfs2_get_refcount_rec(ref_ci, context->ref_root_bh,
|
||||||
p_cluster, num_clusters,
|
p_cluster, num_clusters,
|
||||||
@ -3348,7 +3350,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb,
|
|||||||
* in write-back mode.
|
* in write-back mode.
|
||||||
*/
|
*/
|
||||||
if (context->get_clusters == ocfs2_di_get_clusters) {
|
if (context->get_clusters == ocfs2_di_get_clusters) {
|
||||||
ret = ocfs2_cow_sync_writeback(sb, context, cpos, num_clusters);
|
ret = ocfs2_cow_sync_writeback(sb, context, cpos,
|
||||||
|
orig_num_clusters);
|
||||||
if (ret)
|
if (ret)
|
||||||
mlog_errno(ret);
|
mlog_errno(ret);
|
||||||
}
|
}
|
||||||
|
@ -1316,7 +1316,7 @@ static int ocfs2_parse_options(struct super_block *sb,
|
|||||||
struct mount_options *mopt,
|
struct mount_options *mopt,
|
||||||
int is_remount)
|
int is_remount)
|
||||||
{
|
{
|
||||||
int status;
|
int status, user_stack = 0;
|
||||||
char *p;
|
char *p;
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
|
||||||
@ -1459,6 +1459,15 @@ static int ocfs2_parse_options(struct super_block *sb,
|
|||||||
memcpy(mopt->cluster_stack, args[0].from,
|
memcpy(mopt->cluster_stack, args[0].from,
|
||||||
OCFS2_STACK_LABEL_LEN);
|
OCFS2_STACK_LABEL_LEN);
|
||||||
mopt->cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
|
mopt->cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
|
||||||
|
/*
|
||||||
|
* Open code the memcmp here as we don't have
|
||||||
|
* an osb to pass to
|
||||||
|
* ocfs2_userspace_stack().
|
||||||
|
*/
|
||||||
|
if (memcmp(mopt->cluster_stack,
|
||||||
|
OCFS2_CLASSIC_CLUSTER_STACK,
|
||||||
|
OCFS2_STACK_LABEL_LEN))
|
||||||
|
user_stack = 1;
|
||||||
break;
|
break;
|
||||||
case Opt_inode64:
|
case Opt_inode64:
|
||||||
mopt->mount_opt |= OCFS2_MOUNT_INODE64;
|
mopt->mount_opt |= OCFS2_MOUNT_INODE64;
|
||||||
@ -1514,14 +1523,17 @@ static int ocfs2_parse_options(struct super_block *sb,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (user_stack == 0) {
|
||||||
/* Ensure only one heartbeat mode */
|
/* Ensure only one heartbeat mode */
|
||||||
tmp = mopt->mount_opt & (OCFS2_MOUNT_HB_LOCAL | OCFS2_MOUNT_HB_GLOBAL |
|
tmp = mopt->mount_opt & (OCFS2_MOUNT_HB_LOCAL |
|
||||||
|
OCFS2_MOUNT_HB_GLOBAL |
|
||||||
OCFS2_MOUNT_HB_NONE);
|
OCFS2_MOUNT_HB_NONE);
|
||||||
if (hweight32(tmp) != 1) {
|
if (hweight32(tmp) != 1) {
|
||||||
mlog(ML_ERROR, "Invalid heartbeat mount options\n");
|
mlog(ML_ERROR, "Invalid heartbeat mount options\n");
|
||||||
status = 0;
|
status = 0;
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
status = 1;
|
status = 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user