Whamcloud - gitweb
LU-13992 llite: ASSERTION( last_oap_count > 0 ) failed 50/40050/2
authorAndriy Skulysh <c17819@cray.com>
Tue, 16 Jun 2020 09:49:07 +0000 (12:49 +0300)
committerOleg Drokin <green@whamcloud.com>
Mon, 12 Oct 2020 05:48:17 +0000 (05:48 +0000)
Punch uses o_blocks to send end of a region. So it
can be mixed with real blocks count on error.

Update blocks count only on success.

Change-Id: I86241c4e5723079b20401805b853d356130f58d9
HPE-bug-id: LUS-7407
Test-Parameters: fstype=zfs
Signed-off-by: Andriy Skulysh <c17819@cray.com>
Reviewed-by: Andrew Perepechko <c17827@cray.com>
Reviewed-by: Alexander Boyko <c17825@cray.com>
Tested-by: Elena Gryaznova <c17455@cray.com>
Reviewed-on: https://review.whamcloud.com/40050
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Alexander Boyko <alexander.boyko@hpe.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Arshad Hussain <arshad.super@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osc/osc_io.c

index 67c162f..389363f 100644 (file)
@@ -698,14 +698,17 @@ void osc_io_setattr_end(const struct lu_env *env,
 
        if (cl_io_is_trunc(io)) {
                __u64 size = io->u.ci_setattr.sa_attr.lvb_size;
 
        if (cl_io_is_trunc(io)) {
                __u64 size = io->u.ci_setattr.sa_attr.lvb_size;
-               cl_object_attr_lock(obj);
-               if (oa->o_valid & OBD_MD_FLBLOCKS) {
-                       attr->cat_blocks = oa->o_blocks;
-                       cl_valid |= CAT_BLOCKS;
-               }
 
 
-               cl_object_attr_update(env, obj, attr, cl_valid);
-               cl_object_attr_unlock(obj);
+               if (result == 0) {
+                       cl_object_attr_lock(obj);
+                       if (oa->o_valid & OBD_MD_FLBLOCKS) {
+                               attr->cat_blocks = oa->o_blocks;
+                               cl_valid |= CAT_BLOCKS;
+                       }
+
+                       cl_object_attr_update(env, obj, attr, cl_valid);
+                       cl_object_attr_unlock(obj);
+               }
                osc_trunc_check(env, io, oio, size);
                osc_cache_truncate_end(env, oio->oi_trunc);
                oio->oi_trunc = NULL;
                osc_trunc_check(env, io, oio, size);
                osc_cache_truncate_end(env, oio->oi_trunc);
                oio->oi_trunc = NULL;