UPSTREAM: loop: Call loop_config_discard() only after new config is applied

loop_set_status() calls loop_config_discard() to configure discard for
the loop device; however, the discard configuration depends on whether
the loop device uses encryption, and when we call it the encryption
configuration has not been updated yet. Move the call down so we apply
the correct discard configuration based on the new configuration.

Signed-off-by: Martijn Coenen <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Reviewed-by: Bob Liu <[email protected]>
Reviewed-by: Bart Van Assche <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
(cherry picked from commit 7c5014b0987a30e4989c90633c198aced454c0ec)
Bug: 148607611
Change-Id: I622115f8887f9730339468bb0b90c4b13ea15038
This commit is contained in:
Martijn Coenen 2020-05-13 15:38:35 +02:00
commit e6b3439d08

View file

@ -1331,8 +1331,6 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
}
}
loop_config_discard(lo);
memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
lo->lo_file_name[LO_NAME_SIZE-1] = 0;
@ -1356,6 +1354,8 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
lo->lo_key_owner = uid;
}
loop_config_discard(lo);
/* update dio if lo_offset or transfer is changed */
__loop_update_dio(lo, lo->use_dio);