diff --git a/registry/storage/driver/gcs/gcs.go b/registry/storage/driver/gcs/gcs.go
index 2b190dec5..d61d88b85 100644
--- a/registry/storage/driver/gcs/gcs.go
+++ b/registry/storage/driver/gcs/gcs.go
@@ -318,13 +318,13 @@ func retry(maxTries int, req request) error {
 	backoff := time.Second
 	var err error
 	for i := 0; i < maxTries; i++ {
-		err := req()
+		err = req()
 		if err == nil {
 			return nil
 		}
 
-		status := err.(*googleapi.Error)
-		if status == nil || (status.Code != 429 && status.Code < http.StatusInternalServerError) {
+		status, ok := err.(*googleapi.Error)
+		if !ok || (status.Code != 429 && status.Code < http.StatusInternalServerError) {
 			return err
 		}
 
diff --git a/registry/storage/driver/gcs/gcs_test.go b/registry/storage/driver/gcs/gcs_test.go
index 7afc4e709..4062b2a3e 100644
--- a/registry/storage/driver/gcs/gcs_test.go
+++ b/registry/storage/driver/gcs/gcs_test.go
@@ -3,10 +3,13 @@
 package gcs
 
 import (
+	"fmt"
 	"io/ioutil"
 	"os"
 	"testing"
 
+	"google.golang.org/api/googleapi"
+
 	ctx "github.com/docker/distribution/context"
 	storagedriver "github.com/docker/distribution/registry/storage/driver"
 	"github.com/docker/distribution/registry/storage/driver/testsuites"
@@ -55,6 +58,43 @@ func init() {
 	}, skipGCS)
 }
 
+func TestRetry(t *testing.T) {
+	if skipGCS() != "" {
+		t.Skip(skipGCS())
+	}
+
+	assertError := func(expected string, observed error) {
+		observedMsg := "<nil>"
+		if observed != nil {
+			observedMsg = observed.Error()
+		}
+		if observedMsg != expected {
+			t.Fatalf("expected %v, observed %v\n", expected, observedMsg)
+		}
+	}
+
+	err := retry(2, func() error {
+		return &googleapi.Error{
+			Code:    503,
+			Message: "google api error",
+		}
+	})
+	assertError("googleapi: Error 503: google api error", err)
+
+	err = retry(2, func() error {
+		return &googleapi.Error{
+			Code:    404,
+			Message: "google api error",
+		}
+	})
+	assertError("googleapi: Error 404: google api error", err)
+
+	err = retry(2, func() error {
+		return fmt.Errorf("error")
+	})
+	assertError("error", err)
+}
+
 func TestEmptyRootList(t *testing.T) {
 	if skipGCS() != "" {
 		t.Skip(skipGCS())