disklabel - add new freedisklabel op
authorAlex Hornung <ahornung@gmail.com>
Mon, 27 Feb 2012 12:52:08 +0000 (12:52 +0000)
committerAlex Hornung <ahornung@gmail.com>
Mon, 27 Feb 2012 12:52:08 +0000 (12:52 +0000)
 * The freedisklabel op is simply used to free the disklabel stored in a
   disklabel_t (in a diskslice).

 * It deallocates the memory and sets the pointer to NULL.

sys/kern/subr_disklabel32.c
sys/kern/subr_disklabel64.c
sys/sys/disklabel.h

index 02b8eba..93e045f 100644 (file)
@@ -159,6 +159,13 @@ l32_getnumparts(disklabel_t lp)
        return(lp.lab32->d_npartitions);
 }
 
+static void
+l32_freedisklabel(disklabel_t *lpp)
+{
+       kfree((*lpp).lab32, M_DEVBUF);
+       (*lpp).lab32 = NULL;
+}
+
 /*
  * Attempt to read a disk label from a device.  
  *
@@ -626,6 +633,7 @@ struct disklabel_ops disklabel32_ops = {
        .op_getpartbounds = l32_getpartbounds,
        .op_loadpartinfo = l32_loadpartinfo,
        .op_getnumparts = l32_getnumparts,
-       .op_makevirginlabel = l32_makevirginlabel
+       .op_makevirginlabel = l32_makevirginlabel,
+       .op_freedisklabel = l32_freedisklabel
 };
 
index b3f4b8e..8bf14f5 100644 (file)
@@ -112,6 +112,13 @@ l64_getnumparts(disklabel_t lp)
        return(lp.lab64->d_npartitions);
 }
 
+static void
+l64_freedisklabel(disklabel_t *lpp)
+{
+       kfree((*lpp).lab64, M_DEVBUF);
+       (*lpp).lab64 = NULL;
+}
+
 /*
  * Attempt to read a disk label from a device.  64 bit disklabels are
  * sector-agnostic and begin at offset 0 on the device.  64 bit disklabels
@@ -503,6 +510,7 @@ struct disklabel_ops disklabel64_ops = {
        .op_getpartbounds = l64_getpartbounds,
        .op_loadpartinfo = l64_loadpartinfo,
        .op_getnumparts = l64_getnumparts,
-       .op_makevirginlabel = l64_makevirginlabel
+       .op_makevirginlabel = l64_makevirginlabel,
+       .op_freedisklabel = l64_freedisklabel
 };
 
index 089f562..608165a 100644 (file)
@@ -89,6 +89,8 @@ struct disklabel_ops {
        void (*op_makevirginlabel)
                    (disklabel_t, struct diskslices *,
                     struct diskslice *, struct disk_info *);
+       void (*op_freedisklabel)
+                   (disklabel_t *);
 };
 
 typedef struct disklabel_ops   *disklabel_ops_t;