Commit 091a0f27 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for-linus-4.18-ofs' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux

Pull orangefs updates from Mike Marshall:
 "Fixes and cleanups:

   - fix some sparse warnings

   - cleanup some code formatting

   - fix up some attribute/meta-data related code"

* tag 'for-linus-4.18-ofs' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux:
  orangefs: use sparse annotations for holding locks across function calls.
  orangefs: make debug_help_fops static
  orangefs: remove unused function orangefs_get_bufmap_init
  orangefs: specify user pointers when using dev_map_desc and bufmap
  orangefs: formatting cleanups
  orangefs: set i_size on new symlink
  orangefs: report attributes_mask and attributes for statx
  orangefs: make struct orangefs_file_vm_ops static
  orangefs: revamp block sizes
parents 70f2ae1f b1116bc0
...@@ -281,13 +281,16 @@ static ssize_t orangefs_devreq_read(struct file *file, ...@@ -281,13 +281,16 @@ static ssize_t orangefs_devreq_read(struct file *file,
ret = copy_to_user(buf, &proto_ver, sizeof(__s32)); ret = copy_to_user(buf, &proto_ver, sizeof(__s32));
if (ret != 0) if (ret != 0)
goto error; goto error;
ret = copy_to_user(buf+sizeof(__s32), &magic, sizeof(__s32)); ret = copy_to_user(buf + sizeof(__s32), &magic, sizeof(__s32));
if (ret != 0) if (ret != 0)
goto error; goto error;
ret = copy_to_user(buf+2 * sizeof(__s32), &cur_op->tag, sizeof(__u64)); ret = copy_to_user(buf + 2 * sizeof(__s32),
&cur_op->tag,
sizeof(__u64));
if (ret != 0) if (ret != 0)
goto error; goto error;
ret = copy_to_user(buf+2*sizeof(__s32)+sizeof(__u64), &cur_op->upcall, ret = copy_to_user(buf + 2 * sizeof(__s32) + sizeof(__u64),
&cur_op->upcall,
sizeof(struct orangefs_upcall_s)); sizeof(struct orangefs_upcall_s));
if (ret != 0) if (ret != 0)
goto error; goto error;
......
...@@ -544,7 +544,7 @@ static int orangefs_fault(struct vm_fault *vmf) ...@@ -544,7 +544,7 @@ static int orangefs_fault(struct vm_fault *vmf)
return filemap_fault(vmf); return filemap_fault(vmf);
} }
const struct vm_operations_struct orangefs_file_vm_ops = { static const struct vm_operations_struct orangefs_file_vm_ops = {
.fault = orangefs_fault, .fault = orangefs_fault,
.map_pages = filemap_map_pages, .map_pages = filemap_map_pages,
.page_mkwrite = filemap_page_mkwrite, .page_mkwrite = filemap_page_mkwrite,
......
...@@ -20,8 +20,8 @@ static int read_one_page(struct page *page) ...@@ -20,8 +20,8 @@ static int read_one_page(struct page *page)
int max_block; int max_block;
ssize_t bytes_read = 0; ssize_t bytes_read = 0;
struct inode *inode = page->mapping->host; struct inode *inode = page->mapping->host;
const __u32 blocksize = PAGE_SIZE; /* inode->i_blksize */ const __u32 blocksize = PAGE_SIZE;
const __u32 blockbits = PAGE_SHIFT; /* inode->i_blkbits */ const __u32 blockbits = PAGE_SHIFT;
struct iov_iter to; struct iov_iter to;
struct bio_vec bv = {.bv_page = page, .bv_len = PAGE_SIZE}; struct bio_vec bv = {.bv_page = page, .bv_len = PAGE_SIZE};
...@@ -181,16 +181,15 @@ static int orangefs_setattr_size(struct inode *inode, struct iattr *iattr) ...@@ -181,16 +181,15 @@ static int orangefs_setattr_size(struct inode *inode, struct iattr *iattr)
new_op->upcall.req.truncate.refn = orangefs_inode->refn; new_op->upcall.req.truncate.refn = orangefs_inode->refn;
new_op->upcall.req.truncate.size = (__s64) iattr->ia_size; new_op->upcall.req.truncate.size = (__s64) iattr->ia_size;
ret = service_operation(new_op, __func__, ret = service_operation(new_op,
__func__,
get_interruptible_flag(inode)); get_interruptible_flag(inode));
/* /*
* the truncate has no downcall members to retrieve, but * the truncate has no downcall members to retrieve, but
* the status value tells us if it went through ok or not * the status value tells us if it went through ok or not
*/ */
gossip_debug(GOSSIP_INODE_DEBUG, gossip_debug(GOSSIP_INODE_DEBUG, "%s: ret:%d:\n", __func__, ret);
"orangefs: orangefs_truncate got return value of %d\n",
ret);
op_release(new_op); op_release(new_op);
...@@ -212,7 +211,8 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr) ...@@ -212,7 +211,8 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr)
struct inode *inode = dentry->d_inode; struct inode *inode = dentry->d_inode;
gossip_debug(GOSSIP_INODE_DEBUG, gossip_debug(GOSSIP_INODE_DEBUG,
"orangefs_setattr: called on %pd\n", "%s: called on %pd\n",
__func__,
dentry); dentry);
ret = setattr_prepare(dentry, iattr); ret = setattr_prepare(dentry, iattr);
...@@ -230,7 +230,8 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr) ...@@ -230,7 +230,8 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr)
ret = orangefs_inode_setattr(inode, iattr); ret = orangefs_inode_setattr(inode, iattr);
gossip_debug(GOSSIP_INODE_DEBUG, gossip_debug(GOSSIP_INODE_DEBUG,
"orangefs_setattr: inode_setattr returned %d\n", "%s: orangefs_inode_setattr returned %d\n",
__func__,
ret); ret);
if (!ret && (iattr->ia_valid & ATTR_MODE)) if (!ret && (iattr->ia_valid & ATTR_MODE))
...@@ -238,7 +239,7 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr) ...@@ -238,7 +239,7 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr)
ret = posix_acl_chmod(inode, inode->i_mode); ret = posix_acl_chmod(inode, inode->i_mode);
out: out:
gossip_debug(GOSSIP_INODE_DEBUG, "orangefs_setattr: returning %d\n", ret); gossip_debug(GOSSIP_INODE_DEBUG, "%s: ret:%d:\n", __func__, ret);
return ret; return ret;
} }
...@@ -262,13 +263,19 @@ int orangefs_getattr(const struct path *path, struct kstat *stat, ...@@ -262,13 +263,19 @@ int orangefs_getattr(const struct path *path, struct kstat *stat,
/* override block size reported to stat */ /* override block size reported to stat */
orangefs_inode = ORANGEFS_I(inode); orangefs_inode = ORANGEFS_I(inode);
stat->blksize = orangefs_inode->blksize;
if (request_mask & STATX_SIZE) if (request_mask & STATX_SIZE)
stat->result_mask = STATX_BASIC_STATS; stat->result_mask = STATX_BASIC_STATS;
else else
stat->result_mask = STATX_BASIC_STATS & stat->result_mask = STATX_BASIC_STATS &
~STATX_SIZE; ~STATX_SIZE;
stat->attributes_mask = STATX_ATTR_IMMUTABLE |
STATX_ATTR_APPEND;
if (inode->i_flags & S_IMMUTABLE)
stat->attributes |= STATX_ATTR_IMMUTABLE;
if (inode->i_flags & S_APPEND)
stat->attributes |= STATX_ATTR_APPEND;
} }
return ret; return ret;
} }
...@@ -306,7 +313,7 @@ int orangefs_update_time(struct inode *inode, struct timespec *time, int flags) ...@@ -306,7 +313,7 @@ int orangefs_update_time(struct inode *inode, struct timespec *time, int flags)
return orangefs_inode_setattr(inode, &iattr); return orangefs_inode_setattr(inode, &iattr);
} }
/* ORANGEDS2 implementation of VFS inode operations for files */ /* ORANGEFS2 implementation of VFS inode operations for files */
static const struct inode_operations orangefs_file_inode_operations = { static const struct inode_operations orangefs_file_inode_operations = {
.get_acl = orangefs_get_acl, .get_acl = orangefs_get_acl,
.set_acl = orangefs_set_acl, .set_acl = orangefs_set_acl,
...@@ -325,7 +332,6 @@ static int orangefs_init_iops(struct inode *inode) ...@@ -325,7 +332,6 @@ static int orangefs_init_iops(struct inode *inode)
case S_IFREG: case S_IFREG:
inode->i_op = &orangefs_file_inode_operations; inode->i_op = &orangefs_file_inode_operations;
inode->i_fop = &orangefs_file_operations; inode->i_fop = &orangefs_file_operations;
inode->i_blkbits = PAGE_SHIFT;
break; break;
case S_IFLNK: case S_IFLNK:
inode->i_op = &orangefs_symlink_inode_operations; inode->i_op = &orangefs_symlink_inode_operations;
...@@ -345,8 +351,8 @@ static int orangefs_init_iops(struct inode *inode) ...@@ -345,8 +351,8 @@ static int orangefs_init_iops(struct inode *inode)
} }
/* /*
* Given a ORANGEFS object identifier (fsid, handle), convert it into a ino_t type * Given an ORANGEFS object identifier (fsid, handle), convert it into
* that will be used as a hash-index from where the handle will * a ino_t type that will be used as a hash-index from where the handle will
* be searched for in the VFS hash table of inodes. * be searched for in the VFS hash table of inodes.
*/ */
static inline ino_t orangefs_handle_hash(struct orangefs_object_kref *ref) static inline ino_t orangefs_handle_hash(struct orangefs_object_kref *ref)
...@@ -376,8 +382,10 @@ static int orangefs_test_inode(struct inode *inode, void *data) ...@@ -376,8 +382,10 @@ static int orangefs_test_inode(struct inode *inode, void *data)
struct orangefs_inode_s *orangefs_inode = NULL; struct orangefs_inode_s *orangefs_inode = NULL;
orangefs_inode = ORANGEFS_I(inode); orangefs_inode = ORANGEFS_I(inode);
return (!ORANGEFS_khandle_cmp(&(orangefs_inode->refn.khandle), &(ref->khandle)) /* test handles and fs_ids... */
&& orangefs_inode->refn.fs_id == ref->fs_id); return (!ORANGEFS_khandle_cmp(&(orangefs_inode->refn.khandle),
&(ref->khandle)) &&
orangefs_inode->refn.fs_id == ref->fs_id);
} }
/* /*
...@@ -385,16 +393,21 @@ static int orangefs_test_inode(struct inode *inode, void *data) ...@@ -385,16 +393,21 @@ static int orangefs_test_inode(struct inode *inode, void *data)
* file handle. * file handle.
* *
* @sb: the file system super block instance. * @sb: the file system super block instance.
* @ref: The ORANGEFS object for which we are trying to locate an inode structure. * @ref: The ORANGEFS object for which we are trying to locate an inode.
*/ */
struct inode *orangefs_iget(struct super_block *sb, struct orangefs_object_kref *ref) struct inode *orangefs_iget(struct super_block *sb,
struct orangefs_object_kref *ref)
{ {
struct inode *inode = NULL; struct inode *inode = NULL;
unsigned long hash; unsigned long hash;
int error; int error;
hash = orangefs_handle_hash(ref); hash = orangefs_handle_hash(ref);
inode = iget5_locked(sb, hash, orangefs_test_inode, orangefs_set_inode, ref); inode = iget5_locked(sb,
hash,
orangefs_test_inode,
orangefs_set_inode,
ref);
if (!inode || !(inode->i_state & I_NEW)) if (!inode || !(inode->i_state & I_NEW))
return inode; return inode;
......
...@@ -278,6 +278,13 @@ static int orangefs_symlink(struct inode *dir, ...@@ -278,6 +278,13 @@ static int orangefs_symlink(struct inode *dir,
ret = PTR_ERR(inode); ret = PTR_ERR(inode);
goto out; goto out;
} }
/*
* This is necessary because orangefs_inode_getattr will not
* re-read symlink size as it is impossible for it to change.
* Invalidating the cache does not help. orangefs_new_inode
* does not set the correct size (it does not know symname).
*/
inode->i_size = strlen(symname);
gossip_debug(GOSSIP_NAME_DEBUG, gossip_debug(GOSSIP_NAME_DEBUG,
"Assigned symlink inode new number of %pU\n", "Assigned symlink inode new number of %pU\n",
......
...@@ -138,7 +138,7 @@ static int get(struct slot_map *m) ...@@ -138,7 +138,7 @@ static int get(struct slot_map *m)
/* used to describe mapped buffers */ /* used to describe mapped buffers */
struct orangefs_bufmap_desc { struct orangefs_bufmap_desc {
void *uaddr; /* user space address pointer */ void __user *uaddr; /* user space address pointer */
struct page **page_array; /* array of mapped pages */ struct page **page_array; /* array of mapped pages */
int array_count; /* size of above arrays */ int array_count; /* size of above arrays */
struct list_head list_link; struct list_head list_link;
...@@ -215,20 +215,6 @@ int orangefs_bufmap_shift_query(void) ...@@ -215,20 +215,6 @@ int orangefs_bufmap_shift_query(void)
static DECLARE_WAIT_QUEUE_HEAD(bufmap_waitq); static DECLARE_WAIT_QUEUE_HEAD(bufmap_waitq);
static DECLARE_WAIT_QUEUE_HEAD(readdir_waitq); static DECLARE_WAIT_QUEUE_HEAD(readdir_waitq);
/*
* orangefs_get_bufmap_init
*
* If bufmap_init is 1, then the shared memory system, including the
* buffer_index_array, is available. Otherwise, it is not.
*
* returns the value of bufmap_init
*/
int orangefs_get_bufmap_init(void)
{
return __orangefs_bufmap ? 1 : 0;
}
static struct orangefs_bufmap * static struct orangefs_bufmap *
orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc) orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc)
{ {
......
...@@ -114,7 +114,7 @@ static const struct seq_operations help_debug_ops = { ...@@ -114,7 +114,7 @@ static const struct seq_operations help_debug_ops = {
.show = help_show, .show = help_show,
}; };
const struct file_operations debug_help_fops = { static const struct file_operations debug_help_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = orangefs_debug_help_open, .open = orangefs_debug_help_open,
.read = seq_read, .read = seq_read,
......
...@@ -182,7 +182,6 @@ static inline void set_op_state_purged(struct orangefs_kernel_op_s *op) ...@@ -182,7 +182,6 @@ static inline void set_op_state_purged(struct orangefs_kernel_op_s *op)
struct orangefs_inode_s { struct orangefs_inode_s {
struct orangefs_object_kref refn; struct orangefs_object_kref refn;
char link_target[ORANGEFS_NAME_MAX]; char link_target[ORANGEFS_NAME_MAX];
__s64 blksize;
/* /*
* Reading/Writing Extended attributes need to acquire the appropriate * Reading/Writing Extended attributes need to acquire the appropriate
* reader/writer semaphore on the orangefs_inode_s structure. * reader/writer semaphore on the orangefs_inode_s structure.
......
...@@ -183,9 +183,9 @@ static inline int copy_attributes_from_inode(struct inode *inode, ...@@ -183,9 +183,9 @@ static inline int copy_attributes_from_inode(struct inode *inode,
attrs->mask |= ORANGEFS_ATTR_SYS_CTIME; attrs->mask |= ORANGEFS_ATTR_SYS_CTIME;
/* /*
* ORANGEFS cannot set size with a setattr operation. Probably not likely * ORANGEFS cannot set size with a setattr operation. Probably not
* to be requested through the VFS, but just in case, don't worry about * likely to be requested through the VFS, but just in case, don't
* ATTR_SIZE * worry about ATTR_SIZE
*/ */
if (iattr->ia_valid & ATTR_MODE) { if (iattr->ia_valid & ATTR_MODE) {
...@@ -200,14 +200,16 @@ static inline int copy_attributes_from_inode(struct inode *inode, ...@@ -200,14 +200,16 @@ static inline int copy_attributes_from_inode(struct inode *inode,
tmp_mode -= S_ISVTX; tmp_mode -= S_ISVTX;
} else { } else {
gossip_debug(GOSSIP_UTILS_DEBUG, gossip_debug(GOSSIP_UTILS_DEBUG,
"User attempted to set sticky bit on non-root directory; returning EINVAL.\n"); "%s: setting sticky bit not supported.\n",
__func__);
return -EINVAL; return -EINVAL;
} }
} }
if (tmp_mode & (S_ISUID)) { if (tmp_mode & (S_ISUID)) {
gossip_debug(GOSSIP_UTILS_DEBUG, gossip_debug(GOSSIP_UTILS_DEBUG,
"Attempting to set setuid bit (not supported); returning EINVAL.\n"); "%s: setting setuid bit not supported.\n",
__func__);
return -EINVAL; return -EINVAL;
} }
...@@ -275,7 +277,7 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass, ...@@ -275,7 +277,7 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass,
{ {
struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode); struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
struct orangefs_kernel_op_s *new_op; struct orangefs_kernel_op_s *new_op;
loff_t inode_size, rounded_up_size; loff_t inode_size;
int ret, type; int ret, type;
gossip_debug(GOSSIP_UTILS_DEBUG, "%s: called on inode %pU\n", __func__, gossip_debug(GOSSIP_UTILS_DEBUG, "%s: called on inode %pU\n", __func__,
...@@ -330,22 +332,19 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass, ...@@ -330,22 +332,19 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass,
if (request_mask & STATX_SIZE || new) { if (request_mask & STATX_SIZE || new) {
inode_size = (loff_t)new_op-> inode_size = (loff_t)new_op->
downcall.resp.getattr.attributes.size; downcall.resp.getattr.attributes.size;
rounded_up_size =
(inode_size + (4096 - (inode_size % 4096)));
inode->i_size = inode_size; inode->i_size = inode_size;
orangefs_inode->blksize = inode->i_blkbits = ffs(new_op->downcall.resp.getattr.
new_op->downcall.resp.getattr.attributes.blksize; attributes.blksize);
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);
inode->i_bytes = inode_size; inode->i_bytes = inode_size;
inode->i_blocks = inode->i_blocks =
(unsigned long)(rounded_up_size / 512); (inode_size + 512 - inode_size % 512)/512;
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
} }
break; break;
case S_IFDIR: case S_IFDIR:
if (request_mask & STATX_SIZE || new) { if (request_mask & STATX_SIZE || new) {
inode->i_size = PAGE_SIZE; inode->i_size = PAGE_SIZE;
orangefs_inode->blksize = i_blocksize(inode);
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);
inode_set_bytes(inode, inode->i_size); inode_set_bytes(inode, inode->i_size);
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
...@@ -356,7 +355,6 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass, ...@@ -356,7 +355,6 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass,
if (new) { if (new) {
inode->i_size = (loff_t)strlen(new_op-> inode->i_size = (loff_t)strlen(new_op->
downcall.resp.getattr.link_target); downcall.resp.getattr.link_target);
orangefs_inode->blksize = i_blocksize(inode);
ret = strscpy(orangefs_inode->link_target, ret = strscpy(orangefs_inode->link_target,
new_op->downcall.resp.getattr.link_target, new_op->downcall.resp.getattr.link_target,
ORANGEFS_NAME_MAX); ORANGEFS_NAME_MAX);
...@@ -525,7 +523,9 @@ int orangefs_normalize_to_errno(__s32 error_code) ...@@ -525,7 +523,9 @@ int orangefs_normalize_to_errno(__s32 error_code)
error_code = -ETIMEDOUT; error_code = -ETIMEDOUT;
} else { } else {
/* assume a default error code */ /* assume a default error code */
gossip_err("orangefs: warning: got error code without errno equivalent: %d.\n", error_code); gossip_err("%s: bad error code :%d:.\n",
__func__,
error_code);
error_code = -EINVAL; error_code = -EINVAL;
} }
...@@ -542,7 +542,7 @@ int orangefs_normalize_to_errno(__s32 error_code) ...@@ -542,7 +542,7 @@ int orangefs_normalize_to_errno(__s32 error_code)
* there is a bug somewhere. * there is a bug somewhere.
*/ */
} else { } else {
gossip_err("orangefs: orangefs_normalize_to_errno: got error code which is not from ORANGEFS.\n"); gossip_err("%s: unknown error code.\n", __func__);
error_code = -EINVAL; error_code = -EINVAL;
} }
return error_code; return error_code;
......
...@@ -342,7 +342,7 @@ enum { ...@@ -342,7 +342,7 @@ enum {
* that may be 32 bit! * that may be 32 bit!
*/ */
struct ORANGEFS_dev_map_desc { struct ORANGEFS_dev_map_desc {
void *ptr; void __user *ptr;
__s32 total_size; __s32 total_size;
__s32 size; __s32 size;
__s32 count; __s32 count;
......
...@@ -156,7 +156,8 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -156,7 +156,8 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf)
sb = dentry->d_sb; sb = dentry->d_sb;
gossip_debug(GOSSIP_SUPER_DEBUG, gossip_debug(GOSSIP_SUPER_DEBUG,
"orangefs_statfs: called on sb %p (fs_id is %d)\n", "%s: called on sb %p (fs_id is %d)\n",
__func__,
sb, sb,
(int)(ORANGEFS_SB(sb)->fs_id)); (int)(ORANGEFS_SB(sb)->fs_id));
...@@ -198,7 +199,7 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf) ...@@ -198,7 +199,7 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf)
out_op_release: out_op_release:
op_release(new_op); op_release(new_op);
gossip_debug(GOSSIP_SUPER_DEBUG, "orangefs_statfs: returning %d\n", ret); gossip_debug(GOSSIP_SUPER_DEBUG, "%s: returning %d\n", __func__, ret);
return ret; return ret;
} }
...@@ -423,8 +424,8 @@ static int orangefs_fill_sb(struct super_block *sb, ...@@ -423,8 +424,8 @@ static int orangefs_fill_sb(struct super_block *sb,
sb->s_op = &orangefs_s_ops; sb->s_op = &orangefs_s_ops;
sb->s_d_op = &orangefs_dentry_operations; sb->s_d_op = &orangefs_dentry_operations;
sb->s_blocksize = orangefs_bufmap_size_query(); sb->s_blocksize = PAGE_SIZE;
sb->s_blocksize_bits = orangefs_bufmap_shift_query(); sb->s_blocksize_bits = PAGE_SHIFT;
sb->s_maxbytes = MAX_LFS_FILESIZE; sb->s_maxbytes = MAX_LFS_FILESIZE;
root_object.khandle = ORANGEFS_SB(sb)->root_khandle; root_object.khandle = ORANGEFS_SB(sb)->root_khandle;
......
...@@ -17,8 +17,12 @@ ...@@ -17,8 +17,12 @@
#include "orangefs-kernel.h" #include "orangefs-kernel.h"
#include "orangefs-bufmap.h" #include "orangefs-bufmap.h"
static int wait_for_matching_downcall(struct orangefs_kernel_op_s *, long, bool); static int wait_for_matching_downcall(struct orangefs_kernel_op_s *op,
static void orangefs_clean_up_interrupted_operation(struct orangefs_kernel_op_s *); long timeout,
bool interruptible)
__acquires(op->lock);
static void orangefs_clean_up_interrupted_operation(struct orangefs_kernel_op_s *op)
__releases(op->lock);
/* /*
* What we do in this function is to walk the list of operations that are * What we do in this function is to walk the list of operations that are
...@@ -246,6 +250,7 @@ bool orangefs_cancel_op_in_progress(struct orangefs_kernel_op_s *op) ...@@ -246,6 +250,7 @@ bool orangefs_cancel_op_in_progress(struct orangefs_kernel_op_s *op)
*/ */
static void static void
orangefs_clean_up_interrupted_operation(struct orangefs_kernel_op_s *op) orangefs_clean_up_interrupted_operation(struct orangefs_kernel_op_s *op)
__releases(op->lock)
{ {
/* /*
* handle interrupted cases depending on what state we were in when * handle interrupted cases depending on what state we were in when
...@@ -315,6 +320,7 @@ static void ...@@ -315,6 +320,7 @@ static void
static int wait_for_matching_downcall(struct orangefs_kernel_op_s *op, static int wait_for_matching_downcall(struct orangefs_kernel_op_s *op,
long timeout, long timeout,
bool interruptible) bool interruptible)
__acquires(op->lock)
{ {
long n; long n;
......
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