diff --git a/backend/b2/b2.go b/backend/b2/b2.go
index f1b0acc31..18c860b62 100644
--- a/backend/b2/b2.go
+++ b/backend/b2/b2.go
@@ -1930,11 +1930,15 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
 			return err
 		}
 	} else if size > int64(o.fs.opt.UploadCutoff) {
-		_, err := multipart.UploadMultipart(ctx, src, in, multipart.UploadMultipartOptions{
+		chunkWriter, err := multipart.UploadMultipart(ctx, src, in, multipart.UploadMultipartOptions{
 			Open:        o.fs,
 			OpenOptions: options,
 		})
-		return err
+		if err != nil {
+			return err
+		}
+		up := chunkWriter.(*largeUpload)
+		return o.decodeMetaDataFileInfo(up.info)
 	}
 
 	modTime := src.ModTime(ctx)
diff --git a/backend/b2/upload.go b/backend/b2/upload.go
index c53ecedfb..206c7abe4 100644
--- a/backend/b2/upload.go
+++ b/backend/b2/upload.go
@@ -85,6 +85,7 @@ type largeUpload struct {
 	uploads   []*api.GetUploadPartURLResponse // result of get upload URL calls
 	chunkSize int64                           // chunk size to use
 	src       *Object                         // if copying, object we are reading from
+	info      *api.FileInfo                   // final response with info about the object
 }
 
 // newLargeUpload starts an upload of object o from in with metadata in src
@@ -352,7 +353,8 @@ func (up *largeUpload) Close(ctx context.Context) error {
 	if err != nil {
 		return err
 	}
-	return up.o.decodeMetaDataFileInfo(&response)
+	up.info = &response
+	return nil
 }
 
 // Abort aborts the large upload