Whamcloud - gitweb
LU-4049 build: fix 'NULL pointer dereference' errors
[fs/lustre-release.git] / lustre / lov / lovsub_dev.c
index ce76771..0dedfc4 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * GPL HEADER START
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -26,7 +24,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  */
 /*
@@ -136,12 +134,16 @@ static struct lu_device *lovsub_device_fini(const struct lu_env *env,
 static struct lu_device *lovsub_device_free(const struct lu_env *env,
                                             struct lu_device *d)
 {
-        struct lovsub_device *lsd  = lu2lovsub_dev(d);
-        struct lu_device     *next = cl2lu_dev(lsd->acid_next);
-
-        cl_device_fini(lu2cl_dev(d));
-        OBD_FREE_PTR(lsd);
-        return next;
+       struct lovsub_device *lsd  = lu2lovsub_dev(d);
+       struct lu_device     *next = cl2lu_dev(lsd->acid_next);
+
+       if (cfs_atomic_read(&d->ld_ref) && d->ld_site) {
+               LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_ERROR, NULL);
+               lu_site_print(env, d->ld_site, &msgdata, lu_cdebug_printer);
+       }
+       cl_device_fini(lu2cl_dev(d));
+       OBD_FREE_PTR(lsd);
+       return next;
 }
 
 static int lovsub_req_init(const struct lu_env *env, struct cl_device *dev,
@@ -150,7 +152,7 @@ static int lovsub_req_init(const struct lu_env *env, struct cl_device *dev,
         struct lovsub_req *lsr;
         int result;
 
-        OBD_SLAB_ALLOC_PTR_GFP(lsr, lovsub_req_kmem, CFS_ALLOC_IO);
+       OBD_SLAB_ALLOC_PTR_GFP(lsr, lovsub_req_kmem, __GFP_IO);
         if (lsr != NULL) {
                 cl_req_slice_add(req, &lsr->lsrq_cl, dev, &lovsub_req_ops);
                 result = 0;