If all blocks are mapped which means this is overwritting
case or space has been allocated by fallocate.
There is no need to modify exten tree, and we only
need 1 credits for inode.
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Change-Id: I907861d4862256a8a23a81812953e2330e1d9925
Reviewed-on: https://review.whamcloud.com/40604
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
quota_space += PAGE_SIZE;
}
quota_space += PAGE_SIZE;
}
+ credits++; /* inode */
+ /*
+ * overwrite case, no need to modify tree and
+ * allocate blocks.
+ */
+ if (!newblocks)
+ goto out_declare;
/*
* each extent can go into new leaf causing a split
* 5 is max tree depth: inode + 4 index blocks
/*
* each extent can go into new leaf causing a split
* 5 is max tree depth: inode + 4 index blocks
depth = ext_depth(inode);
depth = max(depth, 1) + 1;
newblocks += depth;
depth = ext_depth(inode);
depth = max(depth, 1) + 1;
newblocks += depth;
credits += depth * 2 * extents;
} else {
depth = 3;
newblocks += depth;
credits += depth * 2 * extents;
} else {
depth = 3;
newblocks += depth;
credits += depth * extents;
}
credits += depth * extents;
}
else
credits += newblocks;
else
credits += newblocks;
osd_trans_declare_op(env, oh, OSD_OT_WRITE, credits);
/* make sure the over quota flags were not set */
osd_trans_declare_op(env, oh, OSD_OT_WRITE, credits);
/* make sure the over quota flags were not set */