Whamcloud - gitweb
LU-15800 ofd: take a read lock for fallocate
authorAlex Zhuravlev <bzzz@whamcloud.com>
Tue, 10 May 2022 07:48:55 +0000 (10:48 +0300)
committerAndreas Dilger <adilger@whamcloud.com>
Tue, 31 May 2022 14:54:52 +0000 (14:54 +0000)
there is no need to take an write (exclusive) object's
lock for fallocate - we just need to serialize fallocate
vs destroy, all internal structures should be protected
by OSD and disk filesystem like the write path does.

Lustre-change: https://review.whamcloud.com/47268
Lustre-commit: TBD (from 64e269c800533c4ce15235b21597038c29f0040a)

Fixes: cdaaa87f6b ("LU-14214 ofd: fix locking in ofd_object_fallocate()")
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I65986745865ee329c5257a7efca5e79403830608
Reviewed-on: https://review.whamcloud.com/47477
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/ofd/ofd_objects.c

index b83eb50..a336eaa 100644 (file)
@@ -818,7 +818,7 @@ int ofd_object_fallocate(const struct lu_env *env, struct ofd_object *fo,
        if (rc)
                GOTO(stop, rc);
 
-       ofd_write_lock(env, fo);
+       ofd_read_lock(env, fo);
        if (!ofd_object_exists(fo))
                GOTO(unlock, rc = -ENOENT);
 
@@ -841,7 +841,7 @@ int ofd_object_fallocate(const struct lu_env *env, struct ofd_object *fo,
                        filter_fid_le_to_cpu(&fo->ofo_ff, ff, sizeof(*ff));
        }
 unlock:
-       ofd_write_unlock(env, fo);
+       ofd_read_unlock(env, fo);
 stop:
        ofd_trans_stop(env, ofd, th, rc);
        RETURN(rc);