X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosd-zfs%2Fosd_io.c;h=f2a72b673cd385b8aaa5ca985d00b7c0b13b3fb0;hp=59902bde0c8064a1fba3c2e0a55ffcce8c6c6fb5;hb=83d660436a164758fd4a29c1433d11c0f4591196;hpb=eecf86131d099242d2e8c1f5d6be241ec1416c9a diff --git a/lustre/osd-zfs/osd_io.c b/lustre/osd-zfs/osd_io.c index 59902bd..f2a72b6 100644 --- a/lustre/osd-zfs/osd_io.c +++ b/lustre/osd-zfs/osd_io.c @@ -818,7 +818,7 @@ static void osd_evict_dbufs_after_write(struct osd_object *obj, static int osd_write_commit(const struct lu_env *env, struct dt_object *dt, struct niobuf_local *lnb, int npages, - struct thandle *th) + struct thandle *th, __u64 user_size) { struct osd_object *obj = osd_dt_obj(dt); struct osd_device *osd = osd_obj2dev(obj); @@ -847,6 +847,12 @@ static int osd_write_commit(const struct lu_env *env, struct dt_object *dt, if (OBD_FAIL_CHECK(OBD_FAIL_OST_MAPBLK_ENOSPC)) RETURN(-ENOSPC); + /* if la_size is already bigger than specified user_size, + * ignore user_size + */ + if (obj->oo_attr.la_size > user_size) + user_size = 0; + /* LU-8791: take oo_guard to avoid the deadlock that changing block * size and assigning arcbuf take place at the same time. * @@ -948,6 +954,9 @@ static int osd_write_commit(const struct lu_env *env, struct dt_object *dt, RETURN(0); } + /* if file has grown, take user_size into account */ + if (user_size && new_size > user_size) + new_size = user_size; write_lock(&obj->oo_attr_lock); if (obj->oo_attr.la_size < new_size) { obj->oo_attr.la_size = new_size;