}
 
 /*
- * called on driver init only. TODO call when a device is created.
- * allocates the drbd_bitmap, and stores it in device->bitmap.
+ * allocates the drbd_bitmap and stores it in device->bitmap.
  */
 int drbd_bm_init(struct drbd_device *device)
 {
        unsigned long bits, words, owords, obits;
        unsigned long want, have, onpages; /* number of pages */
        struct page **npages, **opages = NULL;
-       int err = 0, growing;
+       int err = 0;
+       bool growing;
 
        if (!expect(b))
                return -ENOMEM;
 
        return single_open(file, drbd_version_show, NULL);
 }
 
-static struct file_operations drbd_version_fops = {
+static const struct file_operations drbd_version_fops = {
        .owner = THIS_MODULE,
        .open = drbd_version_open,
        .llseek = seq_lseek,
 
                                        int force);
 extern bool conn_try_outdate_peer(struct drbd_connection *connection);
 extern void conn_try_outdate_peer_async(struct drbd_connection *connection);
-extern int conn_khelper(struct drbd_connection *connection, char *cmd);
+extern enum drbd_peer_state conn_khelper(struct drbd_connection *connection, char *cmd);
 extern int drbd_khelper(struct drbd_device *device, char *cmd);
 
 /* drbd_worker.c */
 /* drbd_proc.c */
 extern struct proc_dir_entry *drbd_proc;
 extern const struct file_operations drbd_proc_fops;
-extern const char *drbd_conn_str(enum drbd_conns s);
-extern const char *drbd_role_str(enum drbd_role s);
 
 /* drbd_actlog.c */
 extern bool drbd_al_begin_io_prepare(struct drbd_device *device, struct drbd_interval *i);
 
 
 struct drbd_interval {
        struct rb_node rb;
-       sector_t sector;        /* start sector of the interval */
-       unsigned int size;      /* size in bytes */
-       sector_t end;           /* highest interval end in subtree */
-       int local:1             /* local or remote request? */;
-       int waiting:1;          /* someone is waiting for this to complete */
-       int completed:1;        /* this has been completed already;
-                                * ignore for conflict detection */
+       sector_t sector;                /* start sector of the interval */
+       unsigned int size;              /* size in bytes */
+       sector_t end;                   /* highest interval end in subtree */
+       unsigned int local:1            /* local or remote request? */;
+       unsigned int waiting:1;         /* someone is waiting for completion */
+       unsigned int completed:1;       /* this has been completed already;
+                                        * ignore for conflict detection */
 };
 
 static inline void drbd_clear_interval(struct drbd_interval *i)
 
 #include <linux/module.h>
 #include <linux/jiffies.h>
 #include <linux/drbd.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
 #include <asm/types.h>
 #include <net/sock.h>
 #include <linux/ctype.h>
 
        return ret;
 }
 
-int conn_khelper(struct drbd_connection *connection, char *cmd)
+enum drbd_peer_state conn_khelper(struct drbd_connection *connection, char *cmd)
 {
        char *envp[] = { "HOME=/",
                        "TERM=linux",
        r = conn_khelper(connection, "fence-peer");
 
        switch ((r>>8) & 0xff) {
-       case 3: /* peer is inconsistent */
+       case P_INCONSISTENT: /* peer is inconsistent */
                ex_to_string = "peer is inconsistent or worse";
                mask.pdsk = D_MASK;
                val.pdsk = D_INCONSISTENT;
                break;
-       case 4: /* peer got outdated, or was already outdated */
+       case P_OUTDATED: /* peer got outdated, or was already outdated */
                ex_to_string = "peer was fenced";
                mask.pdsk = D_MASK;
                val.pdsk = D_OUTDATED;
                break;
-       case 5: /* peer was down */
+       case P_DOWN: /* peer was down */
                if (conn_highest_disk(connection) == D_UP_TO_DATE) {
                        /* we will(have) create(d) a new UUID anyways... */
                        ex_to_string = "peer is unreachable, assumed to be dead";
                        ex_to_string = "peer unreachable, doing nothing since disk != UpToDate";
                }
                break;
-       case 6: /* Peer is primary, voluntarily outdate myself.
+       case P_PRIMARY: /* Peer is primary, voluntarily outdate myself.
                 * This is useful when an unconnected R_SECONDARY is asked to
                 * become R_PRIMARY, but finds the other peer being active. */
                ex_to_string = "peer is active";
                mask.disk = D_MASK;
                val.disk = D_OUTDATED;
                break;
-       case 7:
+       case P_FENCING:
+               /* THINK: do we need to handle this
+                * like case 4, or more like case 5? */
                if (fp != FP_STONITH)
                        drbd_err(connection, "fence-peer() = 7 && fencing != Stonith !!!\n");
                ex_to_string = "peer was stonithed";
 
 
 #include <linux/module.h>
 
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
 #include <linux/fs.h>
 #include <linux/file.h>
 #include <linux/proc_fs.h>
 
        x = res/50;
        y = 20-x;
-       seq_printf(seq, "\t[");
+       seq_puts(seq, "\t[");
        for (i = 1; i < x; i++)
-               seq_printf(seq, "=");
-       seq_printf(seq, ">");
+               seq_putc(seq, '=');
+       seq_putc(seq, '>');
        for (i = 0; i < y; i++)
                seq_printf(seq, ".");
-       seq_printf(seq, "] ");
+       seq_puts(seq, "] ");
 
        if (state.conn == C_VERIFY_S || state.conn == C_VERIFY_T)
-               seq_printf(seq, "verified:");
+               seq_puts(seq, "verified:");
        else
-               seq_printf(seq, "sync'ed:");
+               seq_puts(seq, "sync'ed:");
        seq_printf(seq, "%3u.%u%% ", res / 10, res % 10);
 
        /* if more than a few GB, display in MB */
                            (unsigned long) Bit2KB(rs_left),
                            (unsigned long) Bit2KB(rs_total));
 
-       seq_printf(seq, "\n\t");
+       seq_puts(seq, "\n\t");
 
        /* see drivers/md/md.c
         * We do not want to overflow, so the order of operands and
                rt / 3600, (rt % 3600) / 60, rt % 60);
 
        dbdt = Bit2KB(db/dt);
-       seq_printf(seq, " speed: ");
+       seq_puts(seq, " speed: ");
        seq_printf_with_thousands_grouping(seq, dbdt);
-       seq_printf(seq, " (");
+       seq_puts(seq, " (");
        /* ------------------------- ~3s average ------------------------ */
        if (proc_details >= 1) {
                /* this is what drbd_rs_should_slow_down() uses */
                db = device->rs_mark_left[i] - rs_left;
                dbdt = Bit2KB(db/dt);
                seq_printf_with_thousands_grouping(seq, dbdt);
-               seq_printf(seq, " -- ");
+               seq_puts(seq, " -- ");
        }
 
        /* --------------------- long term average ---------------------- */
        db = rs_total - rs_left;
        dbdt = Bit2KB(db/dt);
        seq_printf_with_thousands_grouping(seq, dbdt);
-       seq_printf(seq, ")");
+       seq_putc(seq, ')');
 
        if (state.conn == C_SYNC_TARGET ||
            state.conn == C_VERIFY_S) {
-               seq_printf(seq, " want: ");
+               seq_puts(seq, " want: ");
                seq_printf_with_thousands_grouping(seq, device->c_sync_rate);
        }
        seq_printf(seq, " K/sec%s\n", stalled ? " (stalled)" : "");
                        (unsigned long long)bm_bits * BM_SECT_PER_BIT);
                if (stop_sector != 0 && stop_sector != ULLONG_MAX)
                        seq_printf(seq, " stop sector: %llu", stop_sector);
-               seq_printf(seq, "\n");
+               seq_putc(seq, '\n');
        }
 }
 
        rcu_read_lock();
        idr_for_each_entry(&drbd_devices, device, i) {
                if (prev_i != i - 1)
-                       seq_printf(seq, "\n");
+                       seq_putc(seq, '\n');
                prev_i = i;
 
                state = device->state;
 
 
 #include <linux/module.h>
 
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
 #include <net/sock.h>
 
 #include <linux/drbd.h>
 static bool overlapping_resync_write(struct drbd_device *device, struct drbd_peer_request *peer_req)
 {
        struct drbd_peer_request *rs_req;
-       bool rv = 0;
+       bool rv = false;
 
        spin_lock_irq(&device->resource->req_lock);
        list_for_each_entry(rs_req, &device->sync_ee, w.list) {
                if (overlaps(peer_req->i.sector, peer_req->i.size,
                             rs_req->i.sector, rs_req->i.size)) {
-                       rv = 1;
+                       rv = true;
                        break;
                }
        }
        }
 
 out_interrupted:
-       drbd_may_finish_epoch(connection, peer_req->epoch, EV_PUT + EV_CLEANUP);
+       drbd_may_finish_epoch(connection, peer_req->epoch, EV_PUT | EV_CLEANUP);
        put_ldev(device);
        drbd_free_peer_req(device, peer_req);
        return err;
 
        finish_wait(&device->misc_wait, &wait);
 }
 
-/* called within req_lock and rcu_read_lock() */
+/* called within req_lock */
 static void maybe_pull_ahead(struct drbd_device *device)
 {
        struct drbd_connection *connection = first_peer_device(device)->connection;
 
                        ns.disk = os.disk;
 
                rv = _drbd_set_state(device, ns, flags, NULL);
-               if (rv < SS_SUCCESS)
-                       BUG();
-
+               BUG_ON(rv < SS_SUCCESS);
                ns.i = device->state.i;
                ns_max.role = max_role(ns.role, ns_max.role);
                ns_max.peer = max_role(ns.peer, ns_max.peer);
 
 extern bool conn_all_vols_unconf(struct drbd_connection *connection);
 
 /**
- * drbd_request_state() - Reqest a state change
+ * drbd_request_state() - Request a state change
  * @device:    DRBD device.
  * @mask:      mask of state bits to change.
  * @val:       value of new state bits.
 
 #include <linux/drbd.h>
 #include "drbd_strings.h"
 
-static const char *drbd_conn_s_names[] = {
+static const char * const drbd_conn_s_names[] = {
        [C_STANDALONE]       = "StandAlone",
        [C_DISCONNECTING]    = "Disconnecting",
        [C_UNCONNECTED]      = "Unconnected",
        [C_BEHIND]           = "Behind",
 };
 
-static const char *drbd_role_s_names[] = {
+static const char * const drbd_role_s_names[] = {
        [R_PRIMARY]   = "Primary",
        [R_SECONDARY] = "Secondary",
        [R_UNKNOWN]   = "Unknown"
 };
 
-static const char *drbd_disk_s_names[] = {
+static const char * const drbd_disk_s_names[] = {
        [D_DISKLESS]     = "Diskless",
        [D_ATTACHING]    = "Attaching",
        [D_FAILED]       = "Failed",
        [D_UP_TO_DATE]   = "UpToDate",
 };
 
-static const char *drbd_state_sw_errors[] = {
+static const char * const drbd_state_sw_errors[] = {
        [-SS_TWO_PRIMARIES] = "Multiple primaries not allowed by config",
        [-SS_NO_UP_TO_DATE_DISK] = "Need access to UpToDate data",
        [-SS_NO_LOCAL_DISK] = "Can not resync without local disk",
 
 {
        struct drbd_peer_request *peer_req = bio->bi_private;
        struct drbd_device *device = peer_req->peer_device->device;
-       int is_write = bio_data_dir(bio) == WRITE;
-       int is_discard = !!(bio_op(bio) == REQ_OP_DISCARD);
+       bool is_write = bio_data_dir(bio) == WRITE;
+       bool is_discard = !!(bio_op(bio) == REQ_OP_DISCARD);
 
        if (bio->bi_error && __ratelimit(&drbd_ratelimit_state))
                drbd_warn(device, "%s: error=%d s=%llus\n",
 
 /**
  * w_e_end_data_req() - Worker callback, to send a P_DATA_REPLY packet in response to a P_DATA_REQUEST
- * @device:    DRBD device.
  * @w:         work object.
  * @cancel:    The connection will be closed anyways
  */
        rcu_read_unlock();
        return connection->agreed_pro_version >= 89 &&          /* supported? */
                connection->csums_tfm &&                        /* configured? */
-               (csums_after_crash_only == 0                    /* use for each resync? */
+               (csums_after_crash_only == false                /* use for each resync? */
                 || test_bit(CRASHED_PRIMARY, &device->flags)); /* or only after Primary crash? */
 }
 
                        device->bm_resync_fo = 0;
                        device->use_csums = use_checksum_based_resync(connection, device);
                } else {
-                       device->use_csums = 0;
+                       device->use_csums = false;
                }
 
                /* Since protocol 96, we must serialize drbd_gen_and_send_sync_uuid
 
        NOTIFY_FLAGS = NOTIFY_CONTINUES,
 };
 
+enum drbd_peer_state {
+       P_INCONSISTENT = 3,
+       P_OUTDATED = 4,
+       P_DOWN = 5,
+       P_PRIMARY = 6,
+       P_FENCING = 7,
+};
+
 #define UUID_JUST_CREATED ((__u64)4)
 
 enum write_ordering_e {