Whamcloud - gitweb
LU-2675 lod: remove lov and lod stuff from obd.h 87/8687/2
authorJohn L. Hammond <john.hammond@intel.com>
Tue, 10 Dec 2013 21:21:01 +0000 (15:21 -0600)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 6 Jan 2014 15:40:37 +0000 (15:40 +0000)
Remove QOS related data structures from obd.h to the
lod_internal.h. Remove the unused functions lov_stripe_md_cmp() and
lov_lum_lsm_cmp(). Remove the declarations of several functions that
no longer exist. Move lov_lum_swab_if_needed() to the one file that
uses it.

Signed-off-by: John L. Hammond <john.hammond@intel.com>
Change-Id: I59874eda50aa333e5e991090fa3ac538ff8dc0f3
Reviewed-on: http://review.whamcloud.com/8687
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
lustre/include/obd.h
lustre/lod/lod_internal.h
lustre/lod/lod_lov.c
lustre/lod/lod_pool.c
lustre/lod/lod_qos.c
lustre/lov/lov_internal.h
lustre/lov/lov_obd.c
lustre/lov/lov_pack.c
lustre/lov/lov_pool.c

index 03ccfea..aceab76 100644 (file)
@@ -181,71 +181,6 @@ struct obd_info {
        char                   *oi_jobid;
 };
 
-/* compare all relevant fields. */
-static inline int lov_stripe_md_cmp(struct lov_stripe_md *m1,
-                                    struct lov_stripe_md *m2)
-{
-        /*
-         * ->lsm_wire contains padding, but it should be zeroed out during
-         * allocation.
-         */
-        return memcmp(&m1->lsm_wire, &m2->lsm_wire, sizeof m1->lsm_wire);
-}
-
-static inline int lov_lum_lsm_cmp(struct lov_user_md *lum,
-                                  struct lov_stripe_md  *lsm)
-{
-        if (lsm->lsm_magic != lum->lmm_magic)
-                return 1;
-        if ((lsm->lsm_stripe_count != 0) && (lum->lmm_stripe_count != 0) &&
-            (lsm->lsm_stripe_count != lum->lmm_stripe_count))
-                return 2;
-        if ((lsm->lsm_stripe_size != 0) && (lum->lmm_stripe_size != 0) &&
-            (lsm->lsm_stripe_size != lum->lmm_stripe_size))
-                return 3;
-        if ((lsm->lsm_pattern != 0) && (lum->lmm_pattern != 0) &&
-            (lsm->lsm_pattern != lum->lmm_pattern))
-                return 4;
-        if ((lsm->lsm_magic == LOV_MAGIC_V3) &&
-            (strncmp(lsm->lsm_pool_name,
-                     ((struct lov_user_md_v3 *)lum)->lmm_pool_name,
-                     LOV_MAXPOOLNAME) != 0))
-                return 5;
-        return 0;
-}
-
-static inline int lov_lum_swab_if_needed(struct lov_user_md_v3 *lumv3,
-                                        int *lmm_magic,
-                                        struct lov_user_md *lum)
-{
-       if (lum && copy_from_user(lumv3, lum, sizeof(struct lov_user_md_v1)))
-               return -EFAULT;
-
-       *lmm_magic = lumv3->lmm_magic;
-
-       if (*lmm_magic == __swab32(LOV_USER_MAGIC_V1)) {
-               lustre_swab_lov_user_md_v1((struct lov_user_md_v1 *)lumv3);
-               *lmm_magic = LOV_USER_MAGIC_V1;
-       } else if (*lmm_magic == LOV_USER_MAGIC_V3) {
-               if (lum && copy_from_user(lumv3, lum, sizeof(*lumv3)))
-                       return -EFAULT;
-       } else if (*lmm_magic == __swab32(LOV_USER_MAGIC_V3)) {
-               if (lum && copy_from_user(lumv3, lum, sizeof(*lumv3)))
-                       return -EFAULT;
-               lustre_swab_lov_user_md_v3(lumv3);
-               *lmm_magic = LOV_USER_MAGIC_V3;
-       } else if (*lmm_magic != LOV_USER_MAGIC_V1) {
-               CDEBUG(D_IOCTL,
-                      "bad userland LOV MAGIC: %#08x != %#08x nor %#08x\n",
-                      *lmm_magic, LOV_USER_MAGIC_V1, LOV_USER_MAGIC_V3);
-                      return -EINVAL;
-       }
-       return 0;
-}
-
-void lov_stripe_lock(struct lov_stripe_md *md);
-void lov_stripe_unlock(struct lov_stripe_md *md);
-
 struct obd_type {
         cfs_list_t typ_chain;
         struct obd_ops *typ_dt_ops;
@@ -461,25 +396,6 @@ struct echo_client_obd {
         __u64                ec_unique;
 };
 
-struct lov_qos_oss {
-        struct obd_uuid     lqo_uuid;       /* ptlrpc's c_remote_uuid */
-        cfs_list_t          lqo_oss_list;   /* link to lov_qos */
-        __u64               lqo_bavail;     /* total bytes avail on OSS */
-        __u64               lqo_penalty;    /* current penalty */
-        __u64               lqo_penalty_per_obj;/* penalty decrease every obj*/
-        time_t              lqo_used;       /* last used time, seconds */
-        __u32               lqo_ost_count;  /* number of osts on this oss */
-};
-
-struct ltd_qos {
-        struct lov_qos_oss *ltq_oss;         /* oss info */
-        __u64               ltq_penalty;     /* current penalty */
-        __u64               ltq_penalty_per_obj; /* penalty decrease every obj*/
-        __u64               ltq_weight;      /* net weighting */
-        time_t              ltq_used;        /* last used time, seconds */
-        unsigned int        ltq_usable:1;    /* usable for striping */
-};
-
 /* Generic subset of OSTs */
 struct ost_pool {
         __u32              *op_array;      /* array of index of
@@ -489,48 +405,14 @@ struct ost_pool {
        struct rw_semaphore op_rw_sem;     /* to protect ost_pool use */
 };
 
-/* Round-robin allocator data */
-struct lov_qos_rr {
-        __u32               lqr_start_idx;   /* start index of new inode */
-        __u32               lqr_offset_idx;  /* aliasing for start_idx  */
-        int                 lqr_start_count; /* reseed counter */
-        struct ost_pool     lqr_pool;        /* round-robin optimized list */
-        unsigned long       lqr_dirty:1;     /* recalc round-robin list */
-};
-
 /* allow statfs data caching for 1 second */
 #define OBD_STATFS_CACHE_SECONDS 1
 
-struct lov_statfs_data {
-        struct obd_info   lsd_oi;
-        struct obd_statfs lsd_statfs;
-};
-/* Stripe placement optimization */
-struct lov_qos {
-        cfs_list_t          lq_oss_list; /* list of OSSs that targets use */
-       struct rw_semaphore lq_rw_sem;
-        __u32               lq_active_oss_count;
-        unsigned int        lq_prio_free;   /* priority for free space */
-        unsigned int        lq_threshold_rr;/* priority for rr */
-        struct lov_qos_rr   lq_rr;          /* round robin qos data */
-        unsigned long       lq_dirty:1,     /* recalc qos data */
-                            lq_same_space:1,/* the ost's all have approx.
-                                               the same space avail */
-                            lq_reset:1,     /* zero current penalties */
-                            lq_statfs_in_progress:1; /* statfs op in
-                                                        progress */
-       /* qos statfs data */
-       struct lov_statfs_data *lq_statfs_data;
-       wait_queue_head_t   lq_statfs_waitq; /* waitqueue to notify statfs
-                                             * requests completion */
-};
-
 struct lov_tgt_desc {
         cfs_list_t          ltd_kill;
         struct obd_uuid     ltd_uuid;
         struct obd_device  *ltd_obd;
         struct obd_export  *ltd_exp;
-        struct ltd_qos      ltd_qos;     /* qos info per target */
         __u32               ltd_gen;
         __u32               ltd_index;   /* index in lov_obd->tgts */
         unsigned long       ltd_active:1,/* is this target up for requests */
@@ -538,24 +420,6 @@ struct lov_tgt_desc {
                             ltd_reap:1;  /* should this target be deleted */
 };
 
-/* Pool metadata */
-#define pool_tgt_size(_p)   _p->pool_obds.op_size
-#define pool_tgt_count(_p)  _p->pool_obds.op_count
-#define pool_tgt_array(_p)  _p->pool_obds.op_array
-#define pool_tgt_rw_sem(_p) _p->pool_obds.op_rw_sem
-
-struct pool_desc {
-        char                  pool_name[LOV_MAXPOOLNAME + 1]; /* name of pool */
-        struct ost_pool       pool_obds;              /* pool members */
-        cfs_atomic_t          pool_refcount;          /* pool ref. counter */
-        struct lov_qos_rr     pool_rr;                /* round robin qos */
-        cfs_hlist_node_t      pool_hash;              /* access by poolname */
-        cfs_list_t            pool_list;              /* serial access */
-        cfs_proc_dir_entry_t *pool_proc_entry;        /* file in /proc */
-       struct obd_device    *pool_lobd;              /* obd of the lov/lod to which
-                                                      * this pool belongs */
-};
-
 struct lov_obd {
         struct lov_desc         desc;
         struct lov_tgt_desc   **lov_tgts;              /* sparse array */
@@ -564,8 +428,6 @@ struct lov_obd {
        struct mutex            lov_lock;
         struct obd_connect_data lov_ocd;
         cfs_atomic_t            lov_refcount;
-        __u32                   lov_tgt_count;         /* how many OBD's */
-        __u32                   lov_active_tgt_count;  /* how many active */
         __u32                   lov_death_row;/* tgts scheduled to be deleted */
         __u32                   lov_tgt_size;   /* size of tgts array */
         int                     lov_connects;
index 0dd077b..ab4b274 100644 (file)
 #define LOV_USES_ASSIGNED_STRIPE        0
 #define LOV_USES_DEFAULT_STRIPE         1
 
+struct lod_qos_rr {
+       __u32                    lqr_start_idx; /* start index of new inode */
+       __u32                    lqr_offset_idx; /* aliasing for start_idx */
+       int                      lqr_start_count; /* reseed counter */
+       struct ost_pool          lqr_pool;      /* round-robin optimized list */
+       unsigned long            lqr_dirty:1;   /* recalc round-robin list */
+};
+
+struct pool_desc {
+       char                     pool_name[LOV_MAXPOOLNAME + 1];
+       struct ost_pool          pool_obds;     /* pool members */
+       atomic_t                 pool_refcount;
+       struct lod_qos_rr        pool_rr;
+       cfs_hlist_node_t         pool_hash;     /* access by poolname */
+       struct list_head         pool_list;
+       struct proc_dir_entry   *pool_proc_entry;
+       struct obd_device       *pool_lobd;     /* owner */
+};
+
+#define pool_tgt_size(p) ((p)->pool_obds.op_size)
+#define pool_tgt_count(p) ((p)->pool_obds.op_count)
+#define pool_tgt_array(p)  ((p)->pool_obds.op_array)
+#define pool_tgt_rw_sem(p) ((p)->pool_obds.op_rw_sem)
+
+struct lod_qos {
+       struct list_head         lq_oss_list;
+       struct rw_semaphore      lq_rw_sem;
+       __u32                    lq_active_oss_count;
+       unsigned int             lq_prio_free;   /* priority for free space */
+       unsigned int             lq_threshold_rr;/* priority for rr */
+       struct lod_qos_rr        lq_rr;          /* round robin qos data */
+       bool                     lq_dirty:1,     /* recalc qos data */
+                                lq_same_space:1,/* the ost's all have approx.
+                                                   the same space avail */
+                                lq_reset:1;     /* zero current penalties */
+};
+
+struct lod_qos_oss {
+       struct obd_uuid          lqo_uuid;      /* ptlrpc's c_remote_uuid */
+       struct list_head         lqo_oss_list;  /* link to lov_qos */
+       __u64                    lqo_bavail;    /* total bytes avail on OSS */
+       __u64                    lqo_penalty;   /* current penalty */
+       __u64                    lqo_penalty_per_obj; /* penalty decrease
+                                                        every obj*/
+       time_t                   lqo_used;      /* last used time, seconds */
+       __u32                    lqo_ost_count; /* number of osts on this oss */
+};
+
+struct ltd_qos {
+       struct lod_qos_oss      *ltq_oss;       /* oss info */
+       __u64                    ltq_penalty;   /* current penalty */
+       __u64                    ltq_penalty_per_obj; /* penalty decrease
+                                                        every obj*/
+       __u64                    ltq_weight;    /* net weighting */
+       time_t                   ltq_used;      /* last used time, seconds */
+       bool                     ltq_usable:1;  /* usable for striping */
+};
+
 struct lod_tgt_desc {
        struct dt_device  *ltd_tgt;
        struct list_head   ltd_kill;
@@ -119,7 +177,7 @@ struct lod_device {
         * structure should be moved to lod_tgt_descs as well.
         */
        /* QoS info per LOD */
-       struct lov_qos        lod_qos; /* qos info per lod */
+       struct lod_qos        lod_qos; /* qos info per lod */
 
        /* OST pool data */
        struct ost_pool       lod_pool_info; /* all OSTs in a packed array */
index 20fd4ea..038e0df 100644 (file)
@@ -1076,11 +1076,6 @@ int lod_pools_init(struct lod_device *lod, struct lustre_cfg *lcfg)
        lod->lod_qos.lq_prio_free = 232;
        /* Default threshold for rr (roughly 17%) */
        lod->lod_qos.lq_threshold_rr = 43;
-       /* Init statfs fields */
-       OBD_ALLOC_PTR(lod->lod_qos.lq_statfs_data);
-       if (NULL == lod->lod_qos.lq_statfs_data)
-               RETURN(-ENOMEM);
-       init_waitqueue_head(&lod->lod_qos.lq_statfs_waitq);
 
        /* Set up OST pool environment */
        lod->lod_pools_hash_body = cfs_hash_create("POOLS", HASH_POOLS_CUR_BITS,
@@ -1090,8 +1085,9 @@ int lod_pools_init(struct lod_device *lod, struct lustre_cfg *lcfg)
                                                   CFS_HASH_MAX_THETA,
                                                   &pool_hash_operations,
                                                   CFS_HASH_DEFAULT);
-       if (!lod->lod_pools_hash_body)
-               GOTO(out_statfs, rc = -ENOMEM);
+       if (lod->lod_pools_hash_body == NULL)
+               RETURN(-ENOMEM);
+
        CFS_INIT_LIST_HEAD(&lod->lod_pool_list);
        lod->lod_pool_count = 0;
        rc = lod_ost_pool_init(&lod->lod_pool_info, 0);
@@ -1107,8 +1103,7 @@ out_pool_info:
        lod_ost_pool_free(&lod->lod_pool_info);
 out_hash:
        cfs_hash_putref(lod->lod_pools_hash_body);
-out_statfs:
-       OBD_FREE_PTR(lod->lod_qos.lq_statfs_data);
+
        return rc;
 }
 
@@ -1132,7 +1127,7 @@ int lod_pools_fini(struct lod_device *lod)
        cfs_hash_putref(lod->lod_pools_hash_body);
        lod_ost_pool_free(&(lod->lod_qos.lq_rr.lqr_pool));
        lod_ost_pool_free(&lod->lod_pool_info);
-       OBD_FREE_PTR(lod->lod_qos.lq_statfs_data);
+
        RETURN(0);
 }
 
index e33ae4d..98b2416 100644 (file)
@@ -452,7 +452,7 @@ int lod_pool_new(struct obd_device *obd, char *poolname)
        if (rc)
                GOTO(out_err, rc);
 
-       memset(&(new_pool->pool_rr), 0, sizeof(struct lov_qos_rr));
+       memset(&new_pool->pool_rr, 0, sizeof(new_pool->pool_rr));
        rc = lod_ost_pool_init(&new_pool->pool_rr.lqr_pool, 0);
        if (rc)
                GOTO(out_free_pool_obds, rc);
index 51d6603..269e4ca 100644 (file)
@@ -61,7 +61,7 @@
 
 int qos_add_tgt(struct lod_device *lod, struct lod_tgt_desc *ost_desc)
 {
-       struct lov_qos_oss *oss = NULL, *temposs;
+       struct lod_qos_oss *oss = NULL, *temposs;
        struct obd_export  *exp = ost_desc->ltd_exp;
        int                 rc = 0, found = 0;
        cfs_list_t         *list;
@@ -120,7 +120,7 @@ out:
 
 int qos_del_tgt(struct lod_device *lod, struct lod_tgt_desc *ost_desc)
 {
-       struct lov_qos_oss *oss;
+       struct lod_qos_oss *oss;
        int                 rc = 0;
        ENTRY;
 
@@ -238,7 +238,7 @@ out:
    depends on size of each ost in an oss */
 static int lod_qos_calc_ppo(struct lod_device *lod)
 {
-       struct lov_qos_oss *oss;
+       struct lod_qos_oss *oss;
        __u64               ba_max, ba_min, temp;
        __u32               num_active;
        int                 rc, i, prio_wide;
@@ -371,7 +371,7 @@ static int lod_qos_used(struct lod_device *lod, struct ost_pool *osts,
                        __u32 index, __u64 *total_wt)
 {
        struct lod_tgt_desc *ost;
-       struct lov_qos_oss  *oss;
+       struct lod_qos_oss  *oss;
        int j;
        ENTRY;
 
@@ -447,9 +447,9 @@ static int lod_qos_used(struct lod_device *lod, struct ost_pool *osts,
 #define LOV_QOS_EMPTY ((__u32)-1)
 /* compute optimal round-robin order, based on OSTs per OSS */
 static int lod_qos_calc_rr(struct lod_device *lod, struct ost_pool *src_pool,
-                          struct lov_qos_rr *lqr)
+                          struct lod_qos_rr *lqr)
 {
-       struct lov_qos_oss  *oss;
+       struct lod_qos_oss  *oss;
        struct lod_tgt_desc *ost;
        unsigned placed, real_count;
        int i, rc;
@@ -671,7 +671,7 @@ static int lod_alloc_rr(const struct lu_env *env, struct lod_object *lo,
        struct obd_statfs *sfs = &lod_env_info(env)->lti_osfs;
        struct pool_desc  *pool = NULL;
        struct ost_pool   *osts;
-       struct lov_qos_rr *lqr;
+       struct lod_qos_rr *lqr;
        struct dt_object  *o;
        unsigned           array_idx;
        int                i, rc;
index 90644fa..440ee7d 100644 (file)
 #include <obd_lov.h>
 #include <lustre/lustre_user.h>
 
+#define pool_tgt_size(p) ((p)->pool_obds.op_size)
+#define pool_tgt_count(p) ((p)->pool_obds.op_count)
+#define pool_tgt_array(p) ((p)->pool_obds.op_array)
+#define pool_tgt_rw_sem(p) ((p)->pool_obds.op_rw_sem)
+
+struct pool_desc {
+       char                     pool_name[LOV_MAXPOOLNAME + 1];
+       struct ost_pool          pool_obds;
+       atomic_t                 pool_refcount;
+       cfs_hlist_node_t         pool_hash;     /* access by poolname */
+       struct list_head         pool_list;     /* serial access */
+       struct proc_dir_entry   *pool_proc_entry;
+       struct obd_device       *pool_lobd;     /* owner */
+};
+
 struct lov_lock_handles {
         struct portals_handle   llh_handle;
         cfs_atomic_t            llh_refcount;
@@ -155,18 +170,6 @@ int lov_stripe_intersects(struct lov_stripe_md *lsm, int stripeno,
                           obd_off *obd_start, obd_off *obd_end);
 int lov_stripe_number(struct lov_stripe_md *lsm, obd_off lov_off);
 
-/* lov_qos.c */
-#define LOV_USES_ASSIGNED_STRIPE        0
-#define LOV_USES_DEFAULT_STRIPE         1
-int qos_add_tgt(struct obd_device *obd, __u32 index);
-int qos_del_tgt(struct obd_device *obd, struct lov_tgt_desc *tgt);
-void qos_shrink_lsm(struct lov_request_set *set);
-int qos_prep_create(struct obd_export *exp, struct lov_request_set *set);
-void qos_update(struct lov_obd *lov);
-void qos_statfs_done(struct lov_obd *lov);
-void qos_statfs_update(struct obd_device *obd, __u64 max_age, int wait);
-int qos_remedy_create(struct lov_request_set *set, struct lov_request *req);
-
 /* lov_request.c */
 void lov_set_add_req(struct lov_request *req, struct lov_request_set *set);
 int lov_set_finished(struct lov_request_set *set, int idempotent);
@@ -236,6 +239,8 @@ int lov_fini_statfs_set(struct lov_request_set *set);
 int lov_statfs_interpret(struct ptlrpc_request_set *rqset, void *data, int rc);
 
 /* lov_obd.c */
+void lov_stripe_lock(struct lov_stripe_md *md);
+void lov_stripe_unlock(struct lov_stripe_md *md);
 void lov_fix_desc(struct lov_desc *desc);
 void lov_fix_desc_stripe_size(__u64 *val);
 void lov_fix_desc_stripe_count(__u32 *val);
index 101ce81..ba32493 100644 (file)
@@ -2720,7 +2720,6 @@ void lov_stripe_lock(struct lov_stripe_md *md)
        LASSERT(md->lsm_lock_owner == 0);
        md->lsm_lock_owner = current_pid();
 }
-EXPORT_SYMBOL(lov_stripe_lock);
 
 void lov_stripe_unlock(struct lov_stripe_md *md)
 {
@@ -2728,7 +2727,6 @@ void lov_stripe_unlock(struct lov_stripe_md *md)
        md->lsm_lock_owner = 0;
        spin_unlock(&md->lsm_lock);
 }
-EXPORT_SYMBOL(lov_stripe_unlock);
 
 static int lov_quotactl(struct obd_device *obd, struct obd_export *exp,
                         struct obd_quotactl *oqctl)
index 39e63f4..bf36c99 100644 (file)
@@ -409,6 +409,35 @@ int lov_unpackmd(struct obd_export *exp,  struct lov_stripe_md **lsmp,
         RETURN(lsm_size);
 }
 
+static inline int lov_lum_swab_if_needed(struct lov_user_md_v3 *lumv3,
+                                        int *lmm_magic,
+                                        struct lov_user_md *lum)
+{
+       if (lum && copy_from_user(lumv3, lum, sizeof(struct lov_user_md_v1)))
+               return -EFAULT;
+
+       *lmm_magic = lumv3->lmm_magic;
+
+       if (*lmm_magic == __swab32(LOV_USER_MAGIC_V1)) {
+               lustre_swab_lov_user_md_v1((struct lov_user_md_v1 *)lumv3);
+               *lmm_magic = LOV_USER_MAGIC_V1;
+       } else if (*lmm_magic == LOV_USER_MAGIC_V3) {
+               if (lum && copy_from_user(lumv3, lum, sizeof(*lumv3)))
+                       return -EFAULT;
+       } else if (*lmm_magic == __swab32(LOV_USER_MAGIC_V3)) {
+               if (lum && copy_from_user(lumv3, lum, sizeof(*lumv3)))
+                       return -EFAULT;
+               lustre_swab_lov_user_md_v3(lumv3);
+               *lmm_magic = LOV_USER_MAGIC_V3;
+       } else if (*lmm_magic != LOV_USER_MAGIC_V1) {
+               CDEBUG(D_IOCTL,
+                      "bad userland LOV MAGIC: %#08x != %#08x nor %#08x\n",
+                      *lmm_magic, LOV_USER_MAGIC_V1, LOV_USER_MAGIC_V3);
+                      return -EINVAL;
+       }
+       return 0;
+}
+
 static int __lov_setstripe(struct obd_export *exp, int max_lmm_size,
                            struct lov_stripe_md **lsmp,
                            struct lov_user_md *lump)
index 32639f0..2c16d9d 100644 (file)
@@ -69,7 +69,6 @@ void lov_pool_putref(struct pool_desc *pool)
                 LASSERT(cfs_hlist_unhashed(&pool->pool_hash));
                 LASSERT(cfs_list_empty(&pool->pool_list));
                 LASSERT(pool->pool_proc_entry == NULL);
-                lov_ost_pool_free(&(pool->pool_rr.lqr_pool));
                 lov_ost_pool_free(&(pool->pool_obds));
                 OBD_FREE_PTR(pool);
                 EXIT;
@@ -460,11 +459,6 @@ int lov_pool_new(struct obd_device *obd, char *poolname)
         if (rc)
                GOTO(out_err, rc);
 
-        memset(&(new_pool->pool_rr), 0, sizeof(struct lov_qos_rr));
-        rc = lov_ost_pool_init(&new_pool->pool_rr.lqr_pool, 0);
-        if (rc)
-                GOTO(out_free_pool_obds, rc);
-
         CFS_INIT_HLIST_NODE(&new_pool->pool_hash);
 
 #ifdef LPROCFS
@@ -507,14 +501,11 @@ out_err:
        cfs_list_del_init(&new_pool->pool_list);
        lov->lov_pool_count--;
        spin_unlock(&obd->obd_dev_lock);
-
         lprocfs_remove(&new_pool->pool_proc_entry);
+       lov_ost_pool_free(&new_pool->pool_obds);
+       OBD_FREE_PTR(new_pool);
 
-        lov_ost_pool_free(&new_pool->pool_rr.lqr_pool);
-out_free_pool_obds:
-        lov_ost_pool_free(&new_pool->pool_obds);
-        OBD_FREE_PTR(new_pool);
-        return rc;
+       return rc;
 }
 
 int lov_pool_del(struct obd_device *obd, char *poolname)
@@ -583,8 +574,6 @@ int lov_pool_add(struct obd_device *obd, char *poolname, char *ostname)
         if (rc)
                 GOTO(out, rc);
 
-        pool->pool_rr.lqr_dirty = 1;
-
         CDEBUG(D_CONFIG, "Added %s to "LOV_POOLNAMEF" as member %d\n",
                ostname, poolname,  pool_tgt_count(pool));
 
@@ -629,8 +618,6 @@ int lov_pool_remove(struct obd_device *obd, char *poolname, char *ostname)
 
         lov_ost_pool_remove(&pool->pool_obds, lov_idx);
 
-        pool->pool_rr.lqr_dirty = 1;
-
         CDEBUG(D_CONFIG, "%s removed from "LOV_POOLNAMEF"\n", ostname,
                poolname);