drbd: Function prototype cleanups
[deliverable/linux.git] / drivers / block / drbd / drbd_int.h
index d393f0bc26fb89d0097b7341c31d341244050612..cf605fa0b9dac3107ff95473d9839c4693312ebb 100644 (file)
@@ -100,37 +100,57 @@ extern char usermode_helper[];
 struct drbd_device;
 struct drbd_connection;
 
-#define drbd_printk(level, device, fmt, args...) \
-       dev_printk(level, disk_to_dev(device->vdisk), fmt, ## args)
-
-#define drbd_dbg(device, fmt, args...) \
-       drbd_printk(KERN_DEBUG, device, fmt, ## args)
-#define drbd_alert(device, fmt, args...) \
-       drbd_printk(KERN_ALERT, device, fmt, ## args)
-#define drbd_err(device, fmt, args...) \
-       drbd_printk(KERN_ERR, device, fmt, ## args)
-#define drbd_warn(device, fmt, args...) \
-       drbd_printk(KERN_WARNING, device, fmt, ## args)
-#define drbd_info(device, fmt, args...) \
-       drbd_printk(KERN_INFO, device, fmt, ## args)
-#define drbd_emerg(device, fmt, args...) \
-       drbd_printk(KERN_EMERG, device, fmt, ## args)
+#define __drbd_printk_device(level, device, fmt, args...) \
+       dev_printk(level, disk_to_dev((device)->vdisk), fmt, ## args)
+#define __drbd_printk_peer_device(level, peer_device, fmt, args...) \
+       dev_printk(level, disk_to_dev((peer_device)->device->vdisk), fmt, ## args)
+#define __drbd_printk_resource(level, resource, fmt, args...) \
+       printk(level "drbd %s: " fmt, (resource)->name, ## args)
+#define __drbd_printk_connection(level, connection, fmt, args...) \
+       printk(level "drbd %s: " fmt, (connection)->resource->name, ## args)
+
+void drbd_printk_with_wrong_object_type(void);
+
+#define __drbd_printk_if_same_type(obj, type, func, level, fmt, args...) \
+       (__builtin_types_compatible_p(typeof(obj), type) || \
+        __builtin_types_compatible_p(typeof(obj), const type)), \
+       func(level, (const type)(obj), fmt, ## args)
+
+#define drbd_printk(level, obj, fmt, args...) \
+       __builtin_choose_expr( \
+         __drbd_printk_if_same_type(obj, struct drbd_device *, \
+                            __drbd_printk_device, level, fmt, ## args), \
+         __builtin_choose_expr( \
+           __drbd_printk_if_same_type(obj, struct drbd_resource *, \
+                              __drbd_printk_resource, level, fmt, ## args), \
+           __builtin_choose_expr( \
+             __drbd_printk_if_same_type(obj, struct drbd_connection *, \
+                                __drbd_printk_connection, level, fmt, ## args), \
+             __builtin_choose_expr( \
+               __drbd_printk_if_same_type(obj, struct drbd_peer_device *, \
+                                __drbd_printk_peer_device, level, fmt, ## args), \
+               drbd_printk_with_wrong_object_type()))))
+
+#define drbd_dbg(obj, fmt, args...) \
+       drbd_printk(KERN_DEBUG, obj, fmt, ## args)
+#define drbd_alert(obj, fmt, args...) \
+       drbd_printk(KERN_ALERT, obj, fmt, ## args)
+#define drbd_err(obj, fmt, args...) \
+       drbd_printk(KERN_ERR, obj, fmt, ## args)
+#define drbd_warn(obj, fmt, args...) \
+       drbd_printk(KERN_WARNING, obj, fmt, ## args)
+#define drbd_info(obj, fmt, args...) \
+       drbd_printk(KERN_INFO, obj, fmt, ## args)
+#define drbd_emerg(obj, fmt, args...) \
+       drbd_printk(KERN_EMERG, obj, fmt, ## args)
 
 #define dynamic_drbd_dbg(device, fmt, args...) \
        dynamic_dev_dbg(disk_to_dev(device->vdisk), fmt, ## args)
 
-#define conn_printk(LEVEL, TCONN, FMT, ARGS...) \
-       printk(LEVEL "d-con %s: " FMT, TCONN->resource->name , ## ARGS)
-#define conn_alert(TCONN, FMT, ARGS...)  conn_printk(KERN_ALERT, TCONN, FMT, ## ARGS)
-#define conn_crit(TCONN, FMT, ARGS...)   conn_printk(KERN_CRIT, TCONN, FMT, ## ARGS)
-#define conn_err(TCONN, FMT, ARGS...)    conn_printk(KERN_ERR, TCONN, FMT, ## ARGS)
-#define conn_warn(TCONN, FMT, ARGS...)   conn_printk(KERN_WARNING, TCONN, FMT, ## ARGS)
-#define conn_notice(TCONN, FMT, ARGS...) conn_printk(KERN_NOTICE, TCONN, FMT, ## ARGS)
-#define conn_info(TCONN, FMT, ARGS...)   conn_printk(KERN_INFO, TCONN, FMT, ## ARGS)
-#define conn_dbg(TCONN, FMT, ARGS...)    conn_printk(KERN_DEBUG, TCONN, FMT, ## ARGS)
-
-#define D_ASSERT(exp)  if (!(exp)) \
-        drbd_err(device, "ASSERT( " #exp " ) in %s:%d\n", __FILE__, __LINE__)
+#define D_ASSERT(device, exp)  do { \
+       if (!(exp)) \
+               drbd_err(device, "ASSERT( " #exp " ) in %s:%d\n", __FILE__, __LINE__); \
+       } while (0)
 
 /**
  * expect  -  Make an assertion
@@ -498,7 +518,7 @@ struct drbd_backing_dev {
        struct block_device *backing_bdev;
        struct block_device *md_bdev;
        struct drbd_md md;
-       struct disk_conf *disk_conf; /* RCU, for updates: first_peer_device(device)->connection->conf_update */
+       struct disk_conf *disk_conf; /* RCU, for updates: resource->conf_update */
        sector_t known_size; /* last known size of that backing device */
 };
 
@@ -558,6 +578,14 @@ struct drbd_resource {
        struct list_head connections;
        struct list_head resources;
        struct res_opts res_opts;
+       struct mutex conf_update;       /* mutex for ready-copy-update of net_conf and disk_conf */
+       spinlock_t req_lock;
+
+       unsigned susp:1;                /* IO suspended by user */
+       unsigned susp_nod:1;            /* IO suspended because no data */
+       unsigned susp_fen:1;            /* IO suspended because fence peer handler runs */
+
+       cpumask_var_t cpu_mask;
 };
 
 struct drbd_connection {
@@ -566,15 +594,11 @@ struct drbd_connection {
        struct kref kref;
        struct idr peer_devices;        /* volume number to peer device mapping */
        enum drbd_conns cstate;         /* Only C_STANDALONE to C_WF_REPORT_PARAMS */
-       unsigned susp:1;                /* IO suspended by user */
-       unsigned susp_nod:1;            /* IO suspended because no data */
-       unsigned susp_fen:1;            /* IO suspended because fence peer handler runs */
        struct mutex cstate_mutex;      /* Protects graceful disconnects */
        unsigned int connect_cnt;       /* Inc each time a connection is established */
 
        unsigned long flags;
        struct net_conf *net_conf;      /* content protected by rcu */
-       struct mutex conf_update;       /* mutex for ready-copy-update of net_conf and disk_conf */
        wait_queue_head_t ping_wait;    /* Woken upon reception of a ping, and a state change */
 
        struct sockaddr_storage my_addr;
@@ -588,8 +612,6 @@ struct drbd_connection {
        unsigned long last_received;    /* in jiffies, either socket */
        unsigned int ko_count;
 
-       spinlock_t req_lock;
-
        struct list_head transfer_log;  /* all requests not yet fully processed */
 
        struct crypto_hash *cram_hmac_tfm;
@@ -612,7 +634,6 @@ struct drbd_connection {
        struct drbd_thread receiver;
        struct drbd_thread worker;
        struct drbd_thread asender;
-       cpumask_var_t cpu_mask;
 
        /* sender side */
        struct drbd_work_queue sender_work;
@@ -860,10 +881,8 @@ extern void _drbd_thread_stop(struct drbd_thread *thi, int restart, int wait);
 extern char *drbd_task_to_thread_name(struct drbd_connection *connection, struct task_struct *task);
 #ifdef CONFIG_SMP
 extern void drbd_thread_current_set_cpu(struct drbd_thread *thi);
-extern void drbd_calc_cpu_mask(struct drbd_connection *connection);
 #else
 #define drbd_thread_current_set_cpu(A) ({})
-#define drbd_calc_cpu_mask(A) ({})
 #endif
 extern void tl_release(struct drbd_connection *, unsigned int barrier_nr,
                       unsigned int set_size);
@@ -1219,9 +1238,9 @@ extern struct bio *bio_alloc_drbd(gfp_t gfp_mask);
 extern rwlock_t global_state_lock;
 
 extern int conn_lowest_minor(struct drbd_connection *connection);
-enum drbd_ret_code drbd_create_minor(struct drbd_connection *connection, unsigned int minor, int vnr);
+enum drbd_ret_code drbd_create_device(struct drbd_resource *resource, unsigned int minor, int vnr);
 extern void drbd_destroy_device(struct kref *kref);
-extern void drbd_delete_minor(struct drbd_device *mdev);
+extern void drbd_delete_device(struct drbd_device *mdev);
 
 extern struct drbd_resource *drbd_create_resource(const char *name);
 extern void drbd_free_resource(struct drbd_resource *resource);
@@ -1326,6 +1345,8 @@ extern void resync_timer_fn(unsigned long data);
 extern void start_resync_timer_fn(unsigned long data);
 
 /* drbd_receiver.c */
+extern int drbd_receiver(struct drbd_thread *thi);
+extern int drbd_asender(struct drbd_thread *thi);
 extern int drbd_rs_should_slow_down(struct drbd_device *device, sector_t sector);
 extern int drbd_submit_peer_request(struct drbd_device *,
                                    struct drbd_peer_request *, const unsigned,
@@ -1488,12 +1509,13 @@ _drbd_set_state(struct drbd_device *device, union drbd_state ns,
 
 static inline union drbd_state drbd_read_state(struct drbd_device *device)
 {
+       struct drbd_resource *resource = device->resource;
        union drbd_state rv;
 
        rv.i = device->state.i;
-       rv.susp = first_peer_device(device)->connection->susp;
-       rv.susp_nod = first_peer_device(device)->connection->susp_nod;
-       rv.susp_fen = first_peer_device(device)->connection->susp_fen;
+       rv.susp = resource->susp;
+       rv.susp_nod = resource->susp_nod;
+       rv.susp_fen = resource->susp_fen;
 
        return rv;
 }
@@ -1575,9 +1597,9 @@ static inline void drbd_chk_io_error_(struct drbd_device *device,
 {
        if (error) {
                unsigned long flags;
-               spin_lock_irqsave(&first_peer_device(device)->connection->req_lock, flags);
+               spin_lock_irqsave(&device->resource->req_lock, flags);
                __drbd_chk_io_error_(device, forcedetach, where);
-               spin_unlock_irqrestore(&first_peer_device(device)->connection->req_lock, flags);
+               spin_unlock_irqrestore(&device->resource->req_lock, flags);
        }
 }
 
@@ -1845,7 +1867,7 @@ static inline void put_ldev(struct drbd_device *device)
         * so we must not sleep here. */
 
        __release(local);
-       D_ASSERT(i >= 0);
+       D_ASSERT(device, i >= 0);
        if (i == 0) {
                if (device->state.disk == D_DISKLESS)
                        /* even internal references gone, safe to destroy */
@@ -2014,9 +2036,9 @@ static inline int drbd_state_is_stable(struct drbd_device *device)
 
 static inline int drbd_suspended(struct drbd_device *device)
 {
-       struct drbd_connection *connection = first_peer_device(device)->connection;
+       struct drbd_resource *resource = device->resource;
 
-       return connection->susp || connection->susp_fen || connection->susp_nod;
+       return resource->susp || resource->susp_fen || resource->susp_nod;
 }
 
 static inline bool may_inc_ap_bio(struct drbd_device *device)
@@ -2049,11 +2071,11 @@ static inline bool inc_ap_bio_cond(struct drbd_device *device)
 {
        bool rv = false;
 
-       spin_lock_irq(&first_peer_device(device)->connection->req_lock);
+       spin_lock_irq(&device->resource->req_lock);
        rv = may_inc_ap_bio(device);
        if (rv)
                atomic_inc(&device->ap_bio_cnt);
-       spin_unlock_irq(&first_peer_device(device)->connection->req_lock);
+       spin_unlock_irq(&device->resource->req_lock);
 
        return rv;
 }
@@ -2076,7 +2098,7 @@ static inline void dec_ap_bio(struct drbd_device *device)
        int mxb = drbd_get_max_buffers(device);
        int ap_bio = atomic_dec_return(&device->ap_bio_cnt);
 
-       D_ASSERT(ap_bio >= 0);
+       D_ASSERT(device, ap_bio >= 0);
 
        if (ap_bio == 0 && test_bit(BITMAP_IO, &device->flags)) {
                if (!test_and_set_bit(BITMAP_IO_QUEUED, &device->flags))
This page took 0.038131 seconds and 5 git commands to generate.