ec: fix truncate lock to cover the write in tuncate clean
ec_truncate_clean does writing under the lock granted for truncate, but the lock is calculated by ec_adjust_offset_up, so that, the write in ec_truncate_clean is out of lock. Updates: bz#1699499 Change-Id: Idbe1fd48d26afe49c36b77db9f12e0907f5a4134 Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> (cherry picked from commit 0e1223491e964096384edfae5032ed0d50d028ad)
This commit is contained in:
parent
88ecd64604
commit
5f51159463
@ -1405,6 +1405,7 @@ int32_t
|
||||
ec_manager_truncate(ec_fop_data_t *fop, int32_t state)
|
||||
{
|
||||
ec_cbk_data_t *cbk;
|
||||
off_t offset_down;
|
||||
|
||||
switch (state) {
|
||||
case EC_STATE_INIT:
|
||||
@ -1416,16 +1417,19 @@ ec_manager_truncate(ec_fop_data_t *fop, int32_t state)
|
||||
/* Fall through */
|
||||
|
||||
case EC_STATE_LOCK:
|
||||
offset_down = fop->user_size;
|
||||
ec_adjust_offset_down(fop->xl->private, &offset_down, _gf_true);
|
||||
|
||||
if (fop->id == GF_FOP_TRUNCATE) {
|
||||
ec_lock_prepare_inode(
|
||||
fop, &fop->loc[0],
|
||||
EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,
|
||||
fop->offset, EC_RANGE_FULL);
|
||||
offset_down, EC_RANGE_FULL);
|
||||
} else {
|
||||
ec_lock_prepare_fd(
|
||||
fop, fop->fd,
|
||||
EC_UPDATE_DATA | EC_UPDATE_META | EC_QUERY_INFO,
|
||||
fop->offset, EC_RANGE_FULL);
|
||||
offset_down, EC_RANGE_FULL);
|
||||
}
|
||||
ec_lock(fop);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user