Commit c551f66c authored by Lee Jones's avatar Lee Jones Committed by Andreas Gruenbacher

gfs2: Fix a number of kernel-doc warnings

Building the kernel with W=1 results in a number of kernel-doc warnings
like incorrect function names and parameter descriptions.  Fix those,
mostly by adding missing parameter descriptions, removing left-over
descriptions, and demoting some less important kernel-doc comments into
regular comments.

Originally proposed by Lee Jones; improved and combined into a single
patch by Andreas.
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent a4122a95
...@@ -540,10 +540,7 @@ int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos, ...@@ -540,10 +540,7 @@ int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos,
/** /**
* gfs2_readahead - Read a bunch of pages at once * gfs2_readahead - Read a bunch of pages at once
* @file: The file to read from * @rac: Read-ahead control structure
* @mapping: Address space info
* @pages: List of pages to read
* @nr_pages: Number of pages to read
* *
* Some notes: * Some notes:
* 1. This is only for readahead, so we can simply ignore any things * 1. This is only for readahead, so we can simply ignore any things
......
...@@ -1479,7 +1479,7 @@ int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length, ...@@ -1479,7 +1479,7 @@ int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
/** /**
* sweep_bh_for_rgrps - find an rgrp in a meta buffer and free blocks therein * sweep_bh_for_rgrps - find an rgrp in a meta buffer and free blocks therein
* @ip: inode * @ip: inode
* @rg_gh: holder of resource group glock * @rd_gh: holder of resource group glock
* @bh: buffer head to sweep * @bh: buffer head to sweep
* @start: starting point in bh * @start: starting point in bh
* @end: end point in bh * @end: end point in bh
...@@ -1660,8 +1660,11 @@ static bool mp_eq_to_hgt(struct metapath *mp, __u16 *list, unsigned int h) ...@@ -1660,8 +1660,11 @@ static bool mp_eq_to_hgt(struct metapath *mp, __u16 *list, unsigned int h)
/** /**
* find_nonnull_ptr - find a non-null pointer given a metapath and height * find_nonnull_ptr - find a non-null pointer given a metapath and height
* @sdp: The superblock
* @mp: starting metapath * @mp: starting metapath
* @h: desired height to search * @h: desired height to search
* @end_list: See punch_hole().
* @end_aligned: See punch_hole().
* *
* Assumes the metapath is valid (with buffers) out to height h. * Assumes the metapath is valid (with buffers) out to height h.
* Returns: true if a non-null pointer was found in the metapath buffer * Returns: true if a non-null pointer was found in the metapath buffer
......
...@@ -118,8 +118,8 @@ static int gfs2_readdir(struct file *file, struct dir_context *ctx) ...@@ -118,8 +118,8 @@ static int gfs2_readdir(struct file *file, struct dir_context *ctx)
return error; return error;
} }
/** /*
* fsflag_gfs2flag * struct fsflag_gfs2flag
* *
* The FS_JOURNAL_DATA_FL flag maps to GFS2_DIF_INHERIT_JDATA for directories, * The FS_JOURNAL_DATA_FL flag maps to GFS2_DIF_INHERIT_JDATA for directories,
* and to GFS2_DIF_JDATA for non-directories. * and to GFS2_DIF_JDATA for non-directories.
...@@ -435,7 +435,6 @@ static int gfs2_allocate_page_backing(struct page *page, unsigned int length) ...@@ -435,7 +435,6 @@ static int gfs2_allocate_page_backing(struct page *page, unsigned int length)
/** /**
* gfs2_page_mkwrite - Make a shared, mmap()ed, page writable * gfs2_page_mkwrite - Make a shared, mmap()ed, page writable
* @vma: The virtual memory area
* @vmf: The virtual memory fault containing the page to become writable * @vmf: The virtual memory fault containing the page to become writable
* *
* When the page becomes writable, we need to ensure that we have * When the page becomes writable, we need to ensure that we have
...@@ -586,7 +585,7 @@ static const struct vm_operations_struct gfs2_vm_ops = { ...@@ -586,7 +585,7 @@ static const struct vm_operations_struct gfs2_vm_ops = {
}; };
/** /**
* gfs2_mmap - * gfs2_mmap
* @file: The file to map * @file: The file to map
* @vma: The VMA which described the mapping * @vma: The VMA which described the mapping
* *
......
...@@ -359,7 +359,8 @@ static void gfs2_holder_wake(struct gfs2_holder *gh) ...@@ -359,7 +359,8 @@ static void gfs2_holder_wake(struct gfs2_holder *gh)
/** /**
* do_error - Something unexpected has happened during a lock request * do_error - Something unexpected has happened during a lock request
* * @gl: The glock
* @ret: The status from the DLM
*/ */
static void do_error(struct gfs2_glock *gl, const int ret) static void do_error(struct gfs2_glock *gl, const int ret)
...@@ -454,8 +455,7 @@ static inline struct gfs2_holder *find_first_waiter(const struct gfs2_glock *gl) ...@@ -454,8 +455,7 @@ static inline struct gfs2_holder *find_first_waiter(const struct gfs2_glock *gl)
/** /**
* state_change - record that the glock is now in a different state * state_change - record that the glock is now in a different state
* @gl: the glock * @gl: the glock
* @new_state the new state * @new_state: the new state
*
*/ */
static void state_change(struct gfs2_glock *gl, unsigned int new_state) static void state_change(struct gfs2_glock *gl, unsigned int new_state)
...@@ -1268,6 +1268,8 @@ int gfs2_glock_async_wait(unsigned int num_gh, struct gfs2_holder *ghs) ...@@ -1268,6 +1268,8 @@ int gfs2_glock_async_wait(unsigned int num_gh, struct gfs2_holder *ghs)
* handle_callback - process a demote request * handle_callback - process a demote request
* @gl: the glock * @gl: the glock
* @state: the state the caller wants us to change to * @state: the state the caller wants us to change to
* @delay: zero to demote immediately; otherwise pending demote
* @remote: true if this came from a different cluster node
* *
* There are only two requests that we are going to see in actual * There are only two requests that we are going to see in actual
* practise: LM_ST_SHARED and LM_ST_UNLOCKED * practise: LM_ST_SHARED and LM_ST_UNLOCKED
...@@ -1569,6 +1571,7 @@ static int glock_compare(const void *arg_a, const void *arg_b) ...@@ -1569,6 +1571,7 @@ static int glock_compare(const void *arg_a, const void *arg_b)
* nq_m_sync - synchonously acquire more than one glock in deadlock free order * nq_m_sync - synchonously acquire more than one glock in deadlock free order
* @num_gh: the number of structures * @num_gh: the number of structures
* @ghs: an array of struct gfs2_holder structures * @ghs: an array of struct gfs2_holder structures
* @p: placeholder for the holder structure to pass back
* *
* Returns: 0 on success (all glocks acquired), * Returns: 0 on success (all glocks acquired),
* errno on failure (no glocks acquired) * errno on failure (no glocks acquired)
...@@ -1985,7 +1988,6 @@ static void dump_glock_func(struct gfs2_glock *gl) ...@@ -1985,7 +1988,6 @@ static void dump_glock_func(struct gfs2_glock *gl)
/** /**
* gfs2_gl_hash_clear - Empty out the glock hash table * gfs2_gl_hash_clear - Empty out the glock hash table
* @sdp: the filesystem * @sdp: the filesystem
* @wait: wait until it's all gone
* *
* Called when unmounting the filesystem. * Called when unmounting the filesystem.
*/ */
......
...@@ -49,6 +49,7 @@ static void gfs2_ail_error(struct gfs2_glock *gl, const struct buffer_head *bh) ...@@ -49,6 +49,7 @@ static void gfs2_ail_error(struct gfs2_glock *gl, const struct buffer_head *bh)
* __gfs2_ail_flush - remove all buffers for a given lock from the AIL * __gfs2_ail_flush - remove all buffers for a given lock from the AIL
* @gl: the glock * @gl: the glock
* @fsync: set when called from fsync (not all buffers will be clean) * @fsync: set when called from fsync (not all buffers will be clean)
* @nr_revokes: Number of buffers to revoke
* *
* None of the buffers should be dirty, locked, or pinned. * None of the buffers should be dirty, locked, or pinned.
*/ */
...@@ -474,8 +475,7 @@ int gfs2_inode_refresh(struct gfs2_inode *ip) ...@@ -474,8 +475,7 @@ int gfs2_inode_refresh(struct gfs2_inode *ip)
/** /**
* inode_go_lock - operation done after an inode lock is locked by a process * inode_go_lock - operation done after an inode lock is locked by a process
* @gl: the glock * @gh: The glock holder
* @flags:
* *
* Returns: errno * Returns: errno
*/ */
...@@ -516,7 +516,7 @@ static int inode_go_lock(struct gfs2_holder *gh) ...@@ -516,7 +516,7 @@ static int inode_go_lock(struct gfs2_holder *gh)
/** /**
* inode_go_dump - print information about an inode * inode_go_dump - print information about an inode
* @seq: The iterator * @seq: The iterator
* @ip: the inode * @gl: The glock
* @fs_id_buf: file system id (may be empty) * @fs_id_buf: file system id (may be empty)
* *
*/ */
...@@ -547,9 +547,6 @@ static void inode_go_dump(struct seq_file *seq, struct gfs2_glock *gl, ...@@ -547,9 +547,6 @@ static void inode_go_dump(struct seq_file *seq, struct gfs2_glock *gl,
/** /**
* freeze_go_sync - promote/demote the freeze glock * freeze_go_sync - promote/demote the freeze glock
* @gl: the glock * @gl: the glock
* @state: the requested state
* @flags:
*
*/ */
static int freeze_go_sync(struct gfs2_glock *gl) static int freeze_go_sync(struct gfs2_glock *gl)
...@@ -594,9 +591,7 @@ static int freeze_go_sync(struct gfs2_glock *gl) ...@@ -594,9 +591,7 @@ static int freeze_go_sync(struct gfs2_glock *gl)
/** /**
* freeze_go_xmote_bh - After promoting/demoting the freeze glock * freeze_go_xmote_bh - After promoting/demoting the freeze glock
* @gl: the glock * @gl: the glock
*
*/ */
static int freeze_go_xmote_bh(struct gfs2_glock *gl) static int freeze_go_xmote_bh(struct gfs2_glock *gl)
{ {
struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
...@@ -624,7 +619,7 @@ static int freeze_go_xmote_bh(struct gfs2_glock *gl) ...@@ -624,7 +619,7 @@ static int freeze_go_xmote_bh(struct gfs2_glock *gl)
} }
/** /**
* trans_go_demote_ok * freeze_go_demote_ok
* @gl: the glock * @gl: the glock
* *
* Always returns 0 * Always returns 0
...@@ -638,6 +633,7 @@ static int freeze_go_demote_ok(const struct gfs2_glock *gl) ...@@ -638,6 +633,7 @@ static int freeze_go_demote_ok(const struct gfs2_glock *gl)
/** /**
* iopen_go_callback - schedule the dcache entry for the inode to be deleted * iopen_go_callback - schedule the dcache entry for the inode to be deleted
* @gl: the glock * @gl: the glock
* @remote: true if this came from a different cluster node
* *
* gl_lockref.lock lock is held while calling this * gl_lockref.lock lock is held while calling this
*/ */
......
...@@ -285,10 +285,9 @@ struct inode *gfs2_lookup_simple(struct inode *dip, const char *name) ...@@ -285,10 +285,9 @@ struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
/** /**
* gfs2_lookupi - Look up a filename in a directory and return its inode * gfs2_lookupi - Look up a filename in a directory and return its inode
* @d_gh: An initialized holder for the directory glock * @dir: The inode of the directory containing the inode to look-up
* @name: The name of the inode to look for * @name: The name of the inode to look for
* @is_root: If 1, ignore the caller's permissions * @is_root: If 1, ignore the caller's permissions
* @i_gh: An uninitialized holder for the new inode glock
* *
* This can be called via the VFS filldir function when NFS is doing * This can be called via the VFS filldir function when NFS is doing
* a readdirplus and the inode which its intending to stat isn't * a readdirplus and the inode which its intending to stat isn't
...@@ -476,7 +475,6 @@ static void gfs2_init_xattr(struct gfs2_inode *ip) ...@@ -476,7 +475,6 @@ static void gfs2_init_xattr(struct gfs2_inode *ip)
* @dip: The directory this inode is being created in * @dip: The directory this inode is being created in
* @ip: The inode * @ip: The inode
* @symname: The symlink destination (if a symlink) * @symname: The symlink destination (if a symlink)
* @bhp: The buffer head (returned to caller)
* *
*/ */
...@@ -514,7 +512,7 @@ static void init_dinode(struct gfs2_inode *dip, struct gfs2_inode *ip, ...@@ -514,7 +512,7 @@ static void init_dinode(struct gfs2_inode *dip, struct gfs2_inode *ip,
} }
/** /**
* gfs2_trans_da_blocks - Calculate number of blocks to link inode * gfs2_trans_da_blks - Calculate number of blocks to link inode
* @dip: The directory we are linking into * @dip: The directory we are linking into
* @da: The dir add information * @da: The dir add information
* @nr_inodes: The number of inodes involved * @nr_inodes: The number of inodes involved
...@@ -595,6 +593,7 @@ static int gfs2_initxattrs(struct inode *inode, const struct xattr *xattr_array, ...@@ -595,6 +593,7 @@ static int gfs2_initxattrs(struct inode *inode, const struct xattr *xattr_array,
* @dev: For device nodes, this is the device number * @dev: For device nodes, this is the device number
* @symname: For symlinks, this is the link destination * @symname: For symlinks, this is the link destination
* @size: The initial size of the inode (ignored for directories) * @size: The initial size of the inode (ignored for directories)
* @excl: Force fail if inode exists
* *
* Returns: 0 on success, or error code * Returns: 0 on success, or error code
*/ */
...@@ -837,9 +836,11 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry, ...@@ -837,9 +836,11 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
/** /**
* gfs2_create - Create a file * gfs2_create - Create a file
* @mnt_userns: User namespace of the mount the inode was found from
* @dir: The directory in which to create the file * @dir: The directory in which to create the file
* @dentry: The dentry of the new file * @dentry: The dentry of the new file
* @mode: The mode of the new file * @mode: The mode of the new file
* @excl: Force fail if inode exists
* *
* Returns: errno * Returns: errno
*/ */
...@@ -1080,8 +1081,7 @@ static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name, ...@@ -1080,8 +1081,7 @@ static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
/** /**
* gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it * gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it
* @dip: The parent directory * @dip: The parent directory
* @name: The name of the entry in the parent directory * @dentry: The dentry to unlink
* @inode: The inode to be removed
* *
* Called with all the locks and in a transaction. This will only be * Called with all the locks and in a transaction. This will only be
* called for a directory after it has been checked to ensure it is empty. * called for a directory after it has been checked to ensure it is empty.
...@@ -1199,6 +1199,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry) ...@@ -1199,6 +1199,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
/** /**
* gfs2_symlink - Create a symlink * gfs2_symlink - Create a symlink
* @mnt_userns: User namespace of the mount the inode was found from
* @dir: The directory to create the symlink in * @dir: The directory to create the symlink in
* @dentry: The dentry to put the symlink in * @dentry: The dentry to put the symlink in
* @symname: The thing which the link points to * @symname: The thing which the link points to
...@@ -1220,6 +1221,7 @@ static int gfs2_symlink(struct user_namespace *mnt_userns, struct inode *dir, ...@@ -1220,6 +1221,7 @@ static int gfs2_symlink(struct user_namespace *mnt_userns, struct inode *dir,
/** /**
* gfs2_mkdir - Make a directory * gfs2_mkdir - Make a directory
* @mnt_userns: User namespace of the mount the inode was found from
* @dir: The parent directory of the new one * @dir: The parent directory of the new one
* @dentry: The dentry of the new directory * @dentry: The dentry of the new directory
* @mode: The mode of the new directory * @mode: The mode of the new directory
...@@ -1236,6 +1238,7 @@ static int gfs2_mkdir(struct user_namespace *mnt_userns, struct inode *dir, ...@@ -1236,6 +1238,7 @@ static int gfs2_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
/** /**
* gfs2_mknod - Make a special file * gfs2_mknod - Make a special file
* @mnt_userns: User namespace of the mount the inode was found from
* @dir: The directory in which the special file will reside * @dir: The directory in which the special file will reside
* @dentry: The dentry of the special file * @dentry: The dentry of the special file
* @mode: The mode of the special file * @mode: The mode of the special file
...@@ -1828,10 +1831,10 @@ static const char *gfs2_get_link(struct dentry *dentry, ...@@ -1828,10 +1831,10 @@ static const char *gfs2_get_link(struct dentry *dentry,
} }
/** /**
* gfs2_permission - * gfs2_permission
* @mnt_userns: User namespace of the mount the inode was found from
* @inode: The inode * @inode: The inode
* @mask: The mask to be tested * @mask: The mask to be tested
* @flags: Indicates whether this is an RCU path walk or not
* *
* This may be called from the VFS directly, or from within GFS2 with the * This may be called from the VFS directly, or from within GFS2 with the
* inode locked, so we look to see if the glock is already locked and only * inode locked, so we look to see if the glock is already locked and only
...@@ -1874,14 +1877,6 @@ static int __gfs2_setattr_simple(struct inode *inode, struct iattr *attr) ...@@ -1874,14 +1877,6 @@ static int __gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
return 0; return 0;
} }
/**
* gfs2_setattr_simple -
* @ip:
* @attr:
*
* Returns: errno
*/
static int gfs2_setattr_simple(struct inode *inode, struct iattr *attr) static int gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
{ {
int error; int error;
...@@ -1962,6 +1957,7 @@ static int setattr_chown(struct inode *inode, struct iattr *attr) ...@@ -1962,6 +1957,7 @@ static int setattr_chown(struct inode *inode, struct iattr *attr)
/** /**
* gfs2_setattr - Change attributes on an inode * gfs2_setattr - Change attributes on an inode
* @mnt_userns: User namespace of the mount the inode was found from
* @dentry: The dentry which is changing * @dentry: The dentry which is changing
* @attr: The structure describing the change * @attr: The structure describing the change
* *
......
...@@ -24,28 +24,31 @@ ...@@ -24,28 +24,31 @@
/** /**
* gfs2_update_stats - Update time based stats * gfs2_update_stats - Update time based stats
* @mv: Pointer to mean/variance structure to update * @s: The stats to update (local or global)
* @index: The index inside @s
* @sample: New data to include * @sample: New data to include
*
* @delta is the difference between the current rtt sample and the
* running average srtt. We add 1/8 of that to the srtt in order to
* update the current srtt estimate. The variance estimate is a bit
* more complicated. We subtract the current variance estimate from
* the abs value of the @delta and add 1/4 of that to the running
* total. That's equivalent to 3/4 of the current variance
* estimate plus 1/4 of the abs of @delta.
*
* Note that the index points at the array entry containing the smoothed
* mean value, and the variance is always in the following entry
*
* Reference: TCP/IP Illustrated, vol 2, p. 831,832
* All times are in units of integer nanoseconds. Unlike the TCP/IP case,
* they are not scaled fixed point.
*/ */
static inline void gfs2_update_stats(struct gfs2_lkstats *s, unsigned index, static inline void gfs2_update_stats(struct gfs2_lkstats *s, unsigned index,
s64 sample) s64 sample)
{ {
/*
* @delta is the difference between the current rtt sample and the
* running average srtt. We add 1/8 of that to the srtt in order to
* update the current srtt estimate. The variance estimate is a bit
* more complicated. We subtract the current variance estimate from
* the abs value of the @delta and add 1/4 of that to the running
* total. That's equivalent to 3/4 of the current variance
* estimate plus 1/4 of the abs of @delta.
*
* Note that the index points at the array entry containing the
* smoothed mean value, and the variance is always in the following
* entry
*
* Reference: TCP/IP Illustrated, vol 2, p. 831,832
* All times are in units of integer nanoseconds. Unlike the TCP/IP
* case, they are not scaled fixed point.
*/
s64 delta = sample - s->stats[index]; s64 delta = sample - s->stats[index];
s->stats[index] += (delta >> 3); s->stats[index] += (delta >> 3);
index++; index++;
......
...@@ -65,7 +65,6 @@ unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct) ...@@ -65,7 +65,6 @@ unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct)
/** /**
* gfs2_remove_from_ail - Remove an entry from the ail lists, updating counters * gfs2_remove_from_ail - Remove an entry from the ail lists, updating counters
* @mapping: The associated mapping (maybe NULL)
* @bd: The gfs2_bufdata to remove * @bd: The gfs2_bufdata to remove
* *
* The ail lock _must_ be held when calling this function * The ail lock _must_ be held when calling this function
...@@ -82,11 +81,11 @@ void gfs2_remove_from_ail(struct gfs2_bufdata *bd) ...@@ -82,11 +81,11 @@ void gfs2_remove_from_ail(struct gfs2_bufdata *bd)
} }
/** /**
* gfs2_ail1_start_one - Start I/O on a part of the AIL * gfs2_ail1_start_one - Start I/O on a transaction
* @sdp: the filesystem * @sdp: The superblock
* @wbc: The writeback control structure * @wbc: The writeback control structure
* @ai: The ail structure * @tr: The transaction to start I/O on
* * @plug: The block plug currently active
*/ */
static int gfs2_ail1_start_one(struct gfs2_sbd *sdp, static int gfs2_ail1_start_one(struct gfs2_sbd *sdp,
...@@ -269,7 +268,7 @@ static void gfs2_log_update_head(struct gfs2_sbd *sdp) ...@@ -269,7 +268,7 @@ static void gfs2_log_update_head(struct gfs2_sbd *sdp)
sdp->sd_log_head = new_head; sdp->sd_log_head = new_head;
} }
/** /*
* gfs2_ail_empty_tr - empty one of the ail lists of a transaction * gfs2_ail_empty_tr - empty one of the ail lists of a transaction
*/ */
...@@ -1018,7 +1017,7 @@ static void trans_drain(struct gfs2_trans *tr) ...@@ -1018,7 +1017,7 @@ static void trans_drain(struct gfs2_trans *tr)
/** /**
* gfs2_log_flush - flush incore transaction(s) * gfs2_log_flush - flush incore transaction(s)
* @sdp: the filesystem * @sdp: The filesystem
* @gl: The glock structure to flush. If NULL, flush the whole incore log * @gl: The glock structure to flush. If NULL, flush the whole incore log
* @flags: The log header flags: GFS2_LOG_HEAD_FLUSH_* and debug flags * @flags: The log header flags: GFS2_LOG_HEAD_FLUSH_* and debug flags
* *
...@@ -1170,7 +1169,7 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags) ...@@ -1170,7 +1169,7 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags)
/** /**
* gfs2_merge_trans - Merge a new transaction into a cached transaction * gfs2_merge_trans - Merge a new transaction into a cached transaction
* @old: Original transaction to be expanded * @sdp: the filesystem
* @new: New transaction to be merged * @new: New transaction to be merged
*/ */
...@@ -1287,7 +1286,7 @@ static inline int gfs2_ail_flush_reqd(struct gfs2_sbd *sdp) ...@@ -1287,7 +1286,7 @@ static inline int gfs2_ail_flush_reqd(struct gfs2_sbd *sdp)
/** /**
* gfs2_logd - Update log tail as Active Items get flushed to in-place blocks * gfs2_logd - Update log tail as Active Items get flushed to in-place blocks
* @sdp: Pointer to GFS2 superblock * @data: Pointer to GFS2 superblock
* *
* Also, periodically check to make sure that we're using the most recent * Also, periodically check to make sure that we're using the most recent
* journal index. * journal index.
......
...@@ -96,9 +96,7 @@ static void maybe_release_space(struct gfs2_bufdata *bd) ...@@ -96,9 +96,7 @@ static void maybe_release_space(struct gfs2_bufdata *bd)
* gfs2_unpin - Unpin a buffer * gfs2_unpin - Unpin a buffer
* @sdp: the filesystem the buffer belongs to * @sdp: the filesystem the buffer belongs to
* @bh: The buffer to unpin * @bh: The buffer to unpin
* @ai: * @tr: The system transaction being flushed
* @flags: The inode dirty flags
*
*/ */
static void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh, static void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh,
...@@ -281,7 +279,7 @@ static struct bio *gfs2_log_alloc_bio(struct gfs2_sbd *sdp, u64 blkno, ...@@ -281,7 +279,7 @@ static struct bio *gfs2_log_alloc_bio(struct gfs2_sbd *sdp, u64 blkno,
* gfs2_log_get_bio - Get cached log bio, or allocate a new one * gfs2_log_get_bio - Get cached log bio, or allocate a new one
* @sdp: The super block * @sdp: The super block
* @blkno: The device block number we want to write to * @blkno: The device block number we want to write to
* @bio: The bio to get or allocate * @biop: The bio to get or allocate
* @op: REQ_OP * @op: REQ_OP
* @end_io: The bi_end_io callback * @end_io: The bi_end_io callback
* @flush: Always flush the current bio and allocate a new one? * @flush: Always flush the current bio and allocate a new one?
...@@ -317,6 +315,7 @@ static struct bio *gfs2_log_get_bio(struct gfs2_sbd *sdp, u64 blkno, ...@@ -317,6 +315,7 @@ static struct bio *gfs2_log_get_bio(struct gfs2_sbd *sdp, u64 blkno,
/** /**
* gfs2_log_write - write to log * gfs2_log_write - write to log
* @sdp: the filesystem * @sdp: the filesystem
* @jd: The journal descriptor
* @page: the page to write * @page: the page to write
* @size: the size of the data to write * @size: the size of the data to write
* @offset: the offset within the page * @offset: the offset within the page
...@@ -417,6 +416,7 @@ static void gfs2_end_log_read(struct bio *bio) ...@@ -417,6 +416,7 @@ static void gfs2_end_log_read(struct bio *bio)
/** /**
* gfs2_jhead_pg_srch - Look for the journal head in a given page. * gfs2_jhead_pg_srch - Look for the journal head in a given page.
* @jd: The journal descriptor * @jd: The journal descriptor
* @head: The journal head to start from
* @page: The page to look in * @page: The page to look in
* *
* Returns: 1 if found, 0 otherwise. * Returns: 1 if found, 0 otherwise.
...@@ -450,6 +450,7 @@ static bool gfs2_jhead_pg_srch(struct gfs2_jdesc *jd, ...@@ -450,6 +450,7 @@ static bool gfs2_jhead_pg_srch(struct gfs2_jdesc *jd,
* gfs2_jhead_process_page - Search/cleanup a page * gfs2_jhead_process_page - Search/cleanup a page
* @jd: The journal descriptor * @jd: The journal descriptor
* @index: Index of the page to look into * @index: Index of the page to look into
* @head: The journal head to start from
* @done: If set, perform only cleanup, else search and set if found. * @done: If set, perform only cleanup, else search and set if found.
* *
* Find the page with 'index' in the journal's mapping. Search the page for * Find the page with 'index' in the journal's mapping. Search the page for
...@@ -502,6 +503,7 @@ static struct bio *gfs2_chain_bio(struct bio *prev, unsigned int nr_iovecs) ...@@ -502,6 +503,7 @@ static struct bio *gfs2_chain_bio(struct bio *prev, unsigned int nr_iovecs)
* gfs2_find_jhead - find the head of a log * gfs2_find_jhead - find the head of a log
* @jd: The journal descriptor * @jd: The journal descriptor
* @head: The log descriptor for the head of the log is returned here * @head: The log descriptor for the head of the log is returned here
* @keep_cache: If set inode pages will not be truncated
* *
* Do a search of a journal by reading it in large chunks using bios and find * Do a search of a journal by reading it in large chunks using bios and find
* the valid log entry with the highest sequence number. (i.e. the log head) * the valid log entry with the highest sequence number. (i.e. the log head)
...@@ -976,7 +978,8 @@ static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) ...@@ -976,7 +978,8 @@ static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass)
/** /**
* databuf_lo_before_commit - Scan the data buffers, writing as we go * databuf_lo_before_commit - Scan the data buffers, writing as we go
* * @sdp: The filesystem
* @tr: The system transaction being flushed
*/ */
static void databuf_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) static void databuf_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
......
...@@ -243,6 +243,7 @@ static void gfs2_submit_bhs(int op, int op_flags, struct buffer_head *bhs[], ...@@ -243,6 +243,7 @@ static void gfs2_submit_bhs(int op, int op_flags, struct buffer_head *bhs[],
* @gl: The glock covering the block * @gl: The glock covering the block
* @blkno: The block number * @blkno: The block number
* @flags: flags * @flags: flags
* @rahead: Do read-ahead
* @bhp: the place where the buffer is returned (NULL on failure) * @bhp: the place where the buffer is returned (NULL on failure)
* *
* Returns: errno * Returns: errno
......
...@@ -150,7 +150,6 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) ...@@ -150,7 +150,6 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb)
/** /**
* gfs2_check_sb - Check superblock * gfs2_check_sb - Check superblock
* @sdp: the filesystem * @sdp: the filesystem
* @sb: The superblock
* @silent: Don't print a message if the check fails * @silent: Don't print a message if the check fails
* *
* Checks the version code of the FS is one that we understand how to * Checks the version code of the FS is one that we understand how to
...@@ -222,7 +221,7 @@ static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf) ...@@ -222,7 +221,7 @@ static void gfs2_sb_in(struct gfs2_sbd *sdp, const void *buf)
* gfs2_read_super - Read the gfs2 super block from disk * gfs2_read_super - Read the gfs2 super block from disk
* @sdp: The GFS2 super block * @sdp: The GFS2 super block
* @sector: The location of the super block * @sector: The location of the super block
* @error: The error code to return * @silent: Don't print a message if the check fails
* *
* This uses the bio functions to read the super block from disk * This uses the bio functions to read the super block from disk
* because we want to be 100% sure that we never read cached data. * because we want to be 100% sure that we never read cached data.
...@@ -982,7 +981,6 @@ static const struct lm_lockops nolock_ops = { ...@@ -982,7 +981,6 @@ static const struct lm_lockops nolock_ops = {
/** /**
* gfs2_lm_mount - mount a locking protocol * gfs2_lm_mount - mount a locking protocol
* @sdp: the filesystem * @sdp: the filesystem
* @args: mount arguments
* @silent: if 1, don't complain if the FS isn't a GFS2 fs * @silent: if 1, don't complain if the FS isn't a GFS2 fs
* *
* Returns: errno * Returns: errno
...@@ -1092,8 +1090,7 @@ void gfs2_online_uevent(struct gfs2_sbd *sdp) ...@@ -1092,8 +1090,7 @@ void gfs2_online_uevent(struct gfs2_sbd *sdp)
/** /**
* gfs2_fill_super - Read in superblock * gfs2_fill_super - Read in superblock
* @sb: The VFS superblock * @sb: The VFS superblock
* @args: Mount options * @fc: Mount options and flags
* @silent: Don't complain if it's not a GFS2 filesystem
* *
* Returns: -errno * Returns: -errno
*/ */
......
...@@ -1534,7 +1534,7 @@ void gfs2_wake_up_statfs(struct gfs2_sbd *sdp) { ...@@ -1534,7 +1534,7 @@ void gfs2_wake_up_statfs(struct gfs2_sbd *sdp) {
/** /**
* gfs2_quotad - Write cached quota changes into the quota file * gfs2_quotad - Write cached quota changes into the quota file
* @sdp: Pointer to GFS2 superblock * @data: Pointer to GFS2 superblock
* *
*/ */
......
...@@ -154,7 +154,7 @@ int __get_log_header(struct gfs2_sbd *sdp, const struct gfs2_log_header *lh, ...@@ -154,7 +154,7 @@ int __get_log_header(struct gfs2_sbd *sdp, const struct gfs2_log_header *lh,
* get_log_header - read the log header for a given segment * get_log_header - read the log header for a given segment
* @jd: the journal * @jd: the journal
* @blk: the block to look at * @blk: the block to look at
* @lh: the log header to return * @head: the log header to return
* *
* Read the log header for a given segement in a given journal. Do a few * Read the log header for a given segement in a given journal. Do a few
* sanity checks on it. * sanity checks on it.
...@@ -187,6 +187,7 @@ static int get_log_header(struct gfs2_jdesc *jd, unsigned int blk, ...@@ -187,6 +187,7 @@ static int get_log_header(struct gfs2_jdesc *jd, unsigned int blk,
* @jd: the journal * @jd: the journal
* @start: the first log header in the active region * @start: the first log header in the active region
* @end: the last log header (don't process the contents of this entry)) * @end: the last log header (don't process the contents of this entry))
* @pass: iteration number (foreach_descriptor() is called in a for() loop)
* *
* Call a given function once for every log descriptor in the active * Call a given function once for every log descriptor in the active
* portion of the log. * portion of the log.
......
...@@ -743,7 +743,7 @@ void gfs2_clear_rgrpd(struct gfs2_sbd *sdp) ...@@ -743,7 +743,7 @@ void gfs2_clear_rgrpd(struct gfs2_sbd *sdp)
} }
/** /**
* gfs2_compute_bitstructs - Compute the bitmap sizes * compute_bitstructs - Compute the bitmap sizes
* @rgd: The resource group descriptor * @rgd: The resource group descriptor
* *
* Calculates bitmap descriptors, one for each block that contains bitmap data * Calculates bitmap descriptors, one for each block that contains bitmap data
...@@ -1534,8 +1534,9 @@ static void rs_insert(struct gfs2_inode *ip) ...@@ -1534,8 +1534,9 @@ static void rs_insert(struct gfs2_inode *ip)
} }
/** /**
* rgd_free - return the number of free blocks we can allocate. * rgd_free - return the number of free blocks we can allocate
* @rgd: the resource group * @rgd: the resource group
* @rs: The reservation to free
* *
* This function returns the number of free blocks for an rgrp. * This function returns the number of free blocks for an rgrp.
* That's the clone-free blocks (blocks that are free, not including those * That's the clone-free blocks (blocks that are free, not including those
...@@ -2019,6 +2020,7 @@ static bool gfs2_select_rgrp(struct gfs2_rgrpd **pos, const struct gfs2_rgrpd *b ...@@ -2019,6 +2020,7 @@ static bool gfs2_select_rgrp(struct gfs2_rgrpd **pos, const struct gfs2_rgrpd *b
/** /**
* fast_to_acquire - determine if a resource group will be fast to acquire * fast_to_acquire - determine if a resource group will be fast to acquire
* @rgd: The rgrp
* *
* If this is one of our preferred rgrps, it should be quicker to acquire, * If this is one of our preferred rgrps, it should be quicker to acquire,
* because we tried to set ourselves up as dlm lock master. * because we tried to set ourselves up as dlm lock master.
......
...@@ -387,8 +387,6 @@ struct lfcc { ...@@ -387,8 +387,6 @@ struct lfcc {
* gfs2_lock_fs_check_clean - Stop all writes to the FS and check that all * gfs2_lock_fs_check_clean - Stop all writes to the FS and check that all
* journals are clean * journals are clean
* @sdp: the file system * @sdp: the file system
* @state: the state to put the transaction lock into
* @t_gh: the hold on the transaction lock
* *
* Returns: errno * Returns: errno
*/ */
...@@ -701,6 +699,7 @@ static void gfs2_put_super(struct super_block *sb) ...@@ -701,6 +699,7 @@ static void gfs2_put_super(struct super_block *sb)
/** /**
* gfs2_sync_fs - sync the filesystem * gfs2_sync_fs - sync the filesystem
* @sb: the superblock * @sb: the superblock
* @wait: true to wait for completion
* *
* Flushes the log to disk. * Flushes the log to disk.
*/ */
...@@ -811,7 +810,7 @@ static int gfs2_unfreeze(struct super_block *sb) ...@@ -811,7 +810,7 @@ static int gfs2_unfreeze(struct super_block *sb)
} }
/** /**
* statfs_fill - fill in the sg for a given RG * statfs_slow_fill - fill in the sg for a given RG
* @rgd: the RG * @rgd: the RG
* @sc: the sc structure * @sc: the sc structure
* *
...@@ -909,7 +908,7 @@ static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host ...@@ -909,7 +908,7 @@ static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host
/** /**
* gfs2_statfs_i - Do a statfs * gfs2_statfs_i - Do a statfs
* @sdp: the filesystem * @sdp: the filesystem
* @sg: the sg structure * @sc: the sc structure
* *
* Returns: errno * Returns: errno
*/ */
...@@ -940,8 +939,8 @@ static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *s ...@@ -940,8 +939,8 @@ static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *s
/** /**
* gfs2_statfs - Gather and return stats about the filesystem * gfs2_statfs - Gather and return stats about the filesystem
* @sb: The superblock * @dentry: The name of the link
* @statfsbuf: The buffer * @buf: The buffer
* *
* Returns: 0 on success or error code * Returns: 0 on success or error code
*/ */
...@@ -1272,6 +1271,7 @@ static bool gfs2_upgrade_iopen_glock(struct inode *inode) ...@@ -1272,6 +1271,7 @@ static bool gfs2_upgrade_iopen_glock(struct inode *inode)
/** /**
* evict_should_delete - determine whether the inode is eligible for deletion * evict_should_delete - determine whether the inode is eligible for deletion
* @inode: The inode to evict * @inode: The inode to evict
* @gh: The glock holder structure
* *
* This function determines whether the evicted inode is eligible to be deleted * This function determines whether the evicted inode is eligible to be deleted
* and locks the inode glock. * and locks the inode glock.
......
...@@ -44,6 +44,7 @@ void gfs2_assert_i(struct gfs2_sbd *sdp) ...@@ -44,6 +44,7 @@ void gfs2_assert_i(struct gfs2_sbd *sdp)
* check_journal_clean - Make sure a journal is clean for a spectator mount * check_journal_clean - Make sure a journal is clean for a spectator mount
* @sdp: The GFS2 superblock * @sdp: The GFS2 superblock
* @jd: The journal descriptor * @jd: The journal descriptor
* @verbose: Show more prints in the log
* *
* Returns: 0 if the journal is clean or locked, else an error * Returns: 0 if the journal is clean or locked, else an error
*/ */
...@@ -362,7 +363,7 @@ int gfs2_withdraw(struct gfs2_sbd *sdp) ...@@ -362,7 +363,7 @@ int gfs2_withdraw(struct gfs2_sbd *sdp)
return -1; return -1;
} }
/** /*
* gfs2_assert_withdraw_i - Cause the machine to withdraw if @assertion is false * gfs2_assert_withdraw_i - Cause the machine to withdraw if @assertion is false
*/ */
...@@ -392,7 +393,7 @@ void gfs2_assert_withdraw_i(struct gfs2_sbd *sdp, char *assertion, ...@@ -392,7 +393,7 @@ void gfs2_assert_withdraw_i(struct gfs2_sbd *sdp, char *assertion,
dump_stack(); dump_stack();
} }
/** /*
* gfs2_assert_warn_i - Print a message to the console if @assertion is false * gfs2_assert_warn_i - Print a message to the console if @assertion is false
*/ */
...@@ -422,7 +423,7 @@ void gfs2_assert_warn_i(struct gfs2_sbd *sdp, char *assertion, ...@@ -422,7 +423,7 @@ void gfs2_assert_warn_i(struct gfs2_sbd *sdp, char *assertion,
sdp->sd_last_warning = jiffies; sdp->sd_last_warning = jiffies;
} }
/** /*
* gfs2_consist_i - Flag a filesystem consistency error and withdraw * gfs2_consist_i - Flag a filesystem consistency error and withdraw
*/ */
...@@ -435,7 +436,7 @@ void gfs2_consist_i(struct gfs2_sbd *sdp, const char *function, ...@@ -435,7 +436,7 @@ void gfs2_consist_i(struct gfs2_sbd *sdp, const char *function,
gfs2_withdraw(sdp); gfs2_withdraw(sdp);
} }
/** /*
* gfs2_consist_inode_i - Flag an inode consistency error and withdraw * gfs2_consist_inode_i - Flag an inode consistency error and withdraw
*/ */
...@@ -454,7 +455,7 @@ void gfs2_consist_inode_i(struct gfs2_inode *ip, ...@@ -454,7 +455,7 @@ void gfs2_consist_inode_i(struct gfs2_inode *ip,
gfs2_withdraw(sdp); gfs2_withdraw(sdp);
} }
/** /*
* gfs2_consist_rgrpd_i - Flag a RG consistency error and withdraw * gfs2_consist_rgrpd_i - Flag a RG consistency error and withdraw
*/ */
...@@ -475,7 +476,7 @@ void gfs2_consist_rgrpd_i(struct gfs2_rgrpd *rgd, ...@@ -475,7 +476,7 @@ void gfs2_consist_rgrpd_i(struct gfs2_rgrpd *rgd,
gfs2_withdraw(sdp); gfs2_withdraw(sdp);
} }
/** /*
* gfs2_meta_check_ii - Flag a magic number consistency error and withdraw * gfs2_meta_check_ii - Flag a magic number consistency error and withdraw
* Returns: -1 if this call withdrew the machine, * Returns: -1 if this call withdrew the machine,
* -2 if it was already withdrawn * -2 if it was already withdrawn
...@@ -497,7 +498,7 @@ int gfs2_meta_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh, ...@@ -497,7 +498,7 @@ int gfs2_meta_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
return (me) ? -1 : -2; return (me) ? -1 : -2;
} }
/** /*
* gfs2_metatype_check_ii - Flag a metadata type consistency error and withdraw * gfs2_metatype_check_ii - Flag a metadata type consistency error and withdraw
* Returns: -1 if this call withdrew the machine, * Returns: -1 if this call withdrew the machine,
* -2 if it was already withdrawn * -2 if it was already withdrawn
...@@ -519,7 +520,7 @@ int gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh, ...@@ -519,7 +520,7 @@ int gfs2_metatype_check_ii(struct gfs2_sbd *sdp, struct buffer_head *bh,
return (me) ? -1 : -2; return (me) ? -1 : -2;
} }
/** /*
* gfs2_io_error_i - Flag an I/O error and withdraw * gfs2_io_error_i - Flag an I/O error and withdraw
* Returns: -1 if this call withdrew the machine, * Returns: -1 if this call withdrew the machine,
* 0 if it was already withdrawn * 0 if it was already withdrawn
...@@ -535,7 +536,7 @@ int gfs2_io_error_i(struct gfs2_sbd *sdp, const char *function, char *file, ...@@ -535,7 +536,7 @@ int gfs2_io_error_i(struct gfs2_sbd *sdp, const char *function, char *file,
return gfs2_withdraw(sdp); return gfs2_withdraw(sdp);
} }
/** /*
* gfs2_io_error_bh_i - Flag a buffer I/O error * gfs2_io_error_bh_i - Flag a buffer I/O error
* @withdraw: withdraw the filesystem * @withdraw: withdraw the filesystem
*/ */
......
...@@ -26,12 +26,9 @@ ...@@ -26,12 +26,9 @@
#include "trans.h" #include "trans.h"
#include "util.h" #include "util.h"
/** /*
* ea_calc_size - returns the acutal number of bytes the request will take up * ea_calc_size - returns the actual number of bytes the request will take up
* (not counting any unstuffed data blocks) * (not counting any unstuffed data blocks)
* @sdp:
* @er:
* @size:
* *
* Returns: 1 if the EA should be stuffed * Returns: 1 if the EA should be stuffed
*/ */
...@@ -219,13 +216,8 @@ static int gfs2_ea_find(struct gfs2_inode *ip, int type, const char *name, ...@@ -219,13 +216,8 @@ static int gfs2_ea_find(struct gfs2_inode *ip, int type, const char *name,
return error; return error;
} }
/** /*
* ea_dealloc_unstuffed - * ea_dealloc_unstuffed
* @ip:
* @bh:
* @ea:
* @prev:
* @private:
* *
* Take advantage of the fact that all unstuffed blocks are * Take advantage of the fact that all unstuffed blocks are
* allocated from the same RG. But watch, this may not always * allocated from the same RG. But watch, this may not always
...@@ -448,8 +440,8 @@ ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size) ...@@ -448,8 +440,8 @@ ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size)
} }
/** /**
* ea_iter_unstuffed - copies the unstuffed xattr data to/from the * gfs2_iter_unstuffed - copies the unstuffed xattr data to/from the
* request buffer * request buffer
* @ip: The GFS2 inode * @ip: The GFS2 inode
* @ea: The extended attribute header structure * @ea: The extended attribute header structure
* @din: The data to be copied in * @din: The data to be copied in
...@@ -573,7 +565,7 @@ int gfs2_xattr_acl_get(struct gfs2_inode *ip, const char *name, char **ppdata) ...@@ -573,7 +565,7 @@ int gfs2_xattr_acl_get(struct gfs2_inode *ip, const char *name, char **ppdata)
} }
/** /**
* gfs2_xattr_get - Get a GFS2 extended attribute * __gfs2_xattr_get - Get a GFS2 extended attribute
* @inode: The inode * @inode: The inode
* @name: The name of the extended attribute * @name: The name of the extended attribute
* @buffer: The buffer to write the result into * @buffer: The buffer to write the result into
...@@ -801,14 +793,11 @@ static int ea_init_i(struct gfs2_inode *ip, struct gfs2_ea_request *er, ...@@ -801,14 +793,11 @@ static int ea_init_i(struct gfs2_inode *ip, struct gfs2_ea_request *er,
return error; return error;
} }
/** /*
* ea_init - initializes a new eattr block * ea_init - initializes a new eattr block
* @ip:
* @er:
* *
* Returns: errno * Returns: errno
*/ */
static int ea_init(struct gfs2_inode *ip, int type, const char *name, static int ea_init(struct gfs2_inode *ip, int type, const char *name,
const void *data, size_t size) const void *data, size_t size)
{ {
...@@ -1164,7 +1153,7 @@ static int gfs2_xattr_remove(struct gfs2_inode *ip, int type, const char *name) ...@@ -1164,7 +1153,7 @@ static int gfs2_xattr_remove(struct gfs2_inode *ip, int type, const char *name)
/** /**
* __gfs2_xattr_set - Set (or remove) a GFS2 extended attribute * __gfs2_xattr_set - Set (or remove) a GFS2 extended attribute
* @ip: The inode * @inode: The inode
* @name: The name of the extended attribute * @name: The name of the extended attribute
* @value: The value of the extended attribute (NULL for remove) * @value: The value of the extended attribute (NULL for remove)
* @size: The size of the @value argument * @size: The size of the @value argument
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment