CREATE = 1,
 };
 
-enum {
-       NO_WAIT = 0,
-       WAIT = 1,
-};
-
 enum {
        NO_FORCE = 0,
        FORCE = 1,
 
                        wake_up_process(sdp->sd_recoverd_process);
                return;
 
-       case LM_CB_DROPLOCKS:
-               gfs2_gl_hash_clear(sdp, NO_WAIT);
-               gfs2_quota_scan(sdp);
-               return;
-
        default:
                gfs2_assert_warn(sdp, 0);
                return;
  * @sdp: the filesystem
  * @wait: wait until it's all gone
  *
- * Called when unmounting the filesystem, or when inter-node lock manager
- * requests DROPLOCKS because it is running out of capacity.
+ * Called when unmounting the filesystem.
  */
 
-void gfs2_gl_hash_clear(struct gfs2_sbd *sdp, int wait)
+void gfs2_gl_hash_clear(struct gfs2_sbd *sdp)
 {
        unsigned long t;
        unsigned int x;
                                cont = 1;
                }
 
-               if (!wait || !cont)
+               if (!cont)
                        break;
 
                if (time_after_eq(jiffies,
 
 void gfs2_glock_cb(void *cb_data, unsigned int type, void *data);
 void gfs2_glock_schedule_for_reclaim(struct gfs2_glock *gl);
 void gfs2_reclaim_glock(struct gfs2_sbd *sdp);
-void gfs2_gl_hash_clear(struct gfs2_sbd *sdp, int wait);
+void gfs2_gl_hash_clear(struct gfs2_sbd *sdp);
 
 int __init gfs2_glock_init(void);
 void gfs2_glock_exit(void);
 
        wait_queue_head_t       wait_control;
        struct task_struct      *thread;
        wait_queue_head_t       thread_wait;
-       unsigned long           drop_time;
-       int                     drop_locks_count;
-       int                     drop_locks_period;
 };
 
 enum {
 
        if (!ls)
                return NULL;
 
-       ls->drop_locks_count = GDLM_DROP_COUNT;
-       ls->drop_locks_period = GDLM_DROP_PERIOD;
        ls->fscb = cb;
        ls->sdp = sdp;
        ls->fsflags = flags;
        INIT_LIST_HEAD(&ls->all_locks);
        init_waitqueue_head(&ls->thread_wait);
        init_waitqueue_head(&ls->wait_control);
-       ls->drop_time = jiffies;
        ls->jid = -1;
 
        strncpy(buf, table_name, 256);
 
        return sprintf(buf, "%d\n", ls->recover_jid_status);
 }
 
-static ssize_t drop_count_show(struct gdlm_ls *ls, char *buf)
-{
-       return sprintf(buf, "%d\n", ls->drop_locks_count);
-}
-
-static ssize_t drop_count_store(struct gdlm_ls *ls, const char *buf, size_t len)
-{
-       ls->drop_locks_count = simple_strtol(buf, NULL, 0);
-       return len;
-}
-
 struct gdlm_attr {
        struct attribute attr;
        ssize_t (*show)(struct gdlm_ls *, char *);
 GDLM_ATTR(recover,        0644, recover_show,        recover_store);
 GDLM_ATTR(recover_done,   0444, recover_done_show,   NULL);
 GDLM_ATTR(recover_status, 0444, recover_status_show, NULL);
-GDLM_ATTR(drop_count,     0644, drop_count_show,     drop_count_store);
 
 static struct attribute *gdlm_attrs[] = {
        &gdlm_attr_proto_name.attr,
        &gdlm_attr_recover.attr,
        &gdlm_attr_recover_done.attr,
        &gdlm_attr_recover_status.attr,
-       &gdlm_attr_drop_count.attr,
        NULL,
 };
 
 
        return ret;
 }
 
-static inline int check_drop(struct gdlm_ls *ls)
-{
-       if (!ls->drop_locks_count)
-               return 0;
-
-       if (time_after(jiffies, ls->drop_time + ls->drop_locks_period * HZ)) {
-               ls->drop_time = jiffies;
-               if (ls->all_locks_count >= ls->drop_locks_count)
-                       return 1;
-       }
-       return 0;
-}
-
 static int gdlm_thread(void *data)
 {
        struct gdlm_ls *ls = (struct gdlm_ls *) data;
                        gdlm_do_lock(lp);
                        spin_lock(&ls->async_lock);
                }
-               /* Does this ever happen these days? I hope not anyway */
-               if (check_drop(ls)) {
-                       spin_unlock(&ls->async_lock);
-                       ls->fscb(ls->sdp, LM_CB_DROPLOCKS, NULL);
-                       spin_lock(&ls->async_lock);
-               }
                spin_unlock(&ls->async_lock);
        }
 
 
 fail_locking:
        init_locking(sdp, &mount_gh, UNDO);
 fail_lm:
-       gfs2_gl_hash_clear(sdp, WAIT);
+       gfs2_gl_hash_clear(sdp);
        gfs2_lm_unmount(sdp);
        while (invalidate_inodes(sb))
                yield();
 
        gfs2_clear_rgrpd(sdp);
        gfs2_jindex_free(sdp);
        /*  Take apart glock structures and buffer lists  */
-       gfs2_gl_hash_clear(sdp, WAIT);
+       gfs2_gl_hash_clear(sdp);
        /*  Unmount the locking protocol  */
        gfs2_lm_unmount(sdp);
 
 
        return len;
 }
 
-static ssize_t shrink_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
-{
-       if (!capable(CAP_SYS_ADMIN))
-               return -EACCES;
-
-       if (simple_strtol(buf, NULL, 0) != 1)
-               return -EINVAL;
-
-       gfs2_gl_hash_clear(sdp, NO_WAIT);
-       return len;
-}
-
 static ssize_t quota_sync_store(struct gfs2_sbd *sdp, const char *buf,
                                size_t len)
 {
 GFS2_ATTR(id,                  0444, id_show,       NULL);
 GFS2_ATTR(fsname,              0444, fsname_show,   NULL);
 GFS2_ATTR(freeze,              0644, freeze_show,   freeze_store);
-GFS2_ATTR(shrink,              0200, NULL,          shrink_store);
 GFS2_ATTR(withdraw,            0644, withdraw_show, withdraw_store);
 GFS2_ATTR(statfs_sync,         0200, NULL,          statfs_sync_store);
 GFS2_ATTR(quota_sync,          0200, NULL,          quota_sync_store);
        &gfs2_attr_id.attr,
        &gfs2_attr_fsname.attr,
        &gfs2_attr_freeze.attr,
-       &gfs2_attr_shrink.attr,
        &gfs2_attr_withdraw.attr,
        &gfs2_attr_statfs_sync.attr,
        &gfs2_attr_quota_sync.attr,
 
  * LM_CB_NEED_RECOVERY
  * The given journal needs to be recovered.
  *
- * LM_CB_DROPLOCKS
- * Reduce the number of cached locks.
- *
  * LM_CB_ASYNC
  * The given lock has been granted.
  */
 #define LM_CB_NEED_D           258
 #define LM_CB_NEED_S           259
 #define LM_CB_NEED_RECOVERY    260
-#define LM_CB_DROPLOCKS                261
 #define LM_CB_ASYNC            262
 
 /*