Commit 4cd8f319 authored by Martin Brandenburg's avatar Martin Brandenburg

orangefs: Allow dcache and getattr cache time to be configured.

Signed-off-by: default avatarMartin Brandenburg <martin@omnibond.com>
parent 71680c18
...@@ -73,7 +73,7 @@ static int orangefs_revalidate_lookup(struct dentry *dentry) ...@@ -73,7 +73,7 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
} }
} }
dentry->d_time = jiffies + HZ; dentry->d_time = jiffies + dcache_timeout_msecs*HZ/1000;
ret = 1; ret = 1;
out_release_op: out_release_op:
op_release(new_op); op_release(new_op);
......
...@@ -72,7 +72,7 @@ static int orangefs_create(struct inode *dir, ...@@ -72,7 +72,7 @@ static int orangefs_create(struct inode *dir,
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
unlock_new_inode(inode); unlock_new_inode(inode);
dentry->d_time = jiffies + HZ; dentry->d_time = jiffies + dcache_timeout_msecs*HZ/1000;
ORANGEFS_I(inode)->getattr_time = 0; ORANGEFS_I(inode)->getattr_time = 0;
gossip_debug(GOSSIP_NAME_DEBUG, gossip_debug(GOSSIP_NAME_DEBUG,
...@@ -183,7 +183,7 @@ static struct dentry *orangefs_lookup(struct inode *dir, struct dentry *dentry, ...@@ -183,7 +183,7 @@ static struct dentry *orangefs_lookup(struct inode *dir, struct dentry *dentry,
goto out; goto out;
} }
dentry->d_time = jiffies + HZ; dentry->d_time = jiffies + dcache_timeout_msecs*HZ/1000;
inode = orangefs_iget(dir->i_sb, &new_op->downcall.resp.lookup.refn); inode = orangefs_iget(dir->i_sb, &new_op->downcall.resp.lookup.refn);
if (IS_ERR(inode)) { if (IS_ERR(inode)) {
...@@ -322,7 +322,7 @@ static int orangefs_symlink(struct inode *dir, ...@@ -322,7 +322,7 @@ static int orangefs_symlink(struct inode *dir,
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
unlock_new_inode(inode); unlock_new_inode(inode);
dentry->d_time = jiffies + HZ; dentry->d_time = jiffies + dcache_timeout_msecs*HZ/1000;
ORANGEFS_I(inode)->getattr_time = 0; ORANGEFS_I(inode)->getattr_time = 0;
gossip_debug(GOSSIP_NAME_DEBUG, gossip_debug(GOSSIP_NAME_DEBUG,
...@@ -386,7 +386,7 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode ...@@ -386,7 +386,7 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
unlock_new_inode(inode); unlock_new_inode(inode);
dentry->d_time = jiffies + HZ; dentry->d_time = jiffies + dcache_timeout_msecs*HZ/1000;
ORANGEFS_I(inode)->getattr_time = 0; ORANGEFS_I(inode)->getattr_time = 0;
gossip_debug(GOSSIP_NAME_DEBUG, gossip_debug(GOSSIP_NAME_DEBUG,
......
...@@ -548,6 +548,8 @@ extern struct mutex request_mutex; ...@@ -548,6 +548,8 @@ extern struct mutex request_mutex;
extern int debug; extern int debug;
extern int op_timeout_secs; extern int op_timeout_secs;
extern int slot_timeout_secs; extern int slot_timeout_secs;
extern int dcache_timeout_msecs;
extern int getattr_timeout_msecs;
extern struct list_head orangefs_superblocks; extern struct list_head orangefs_superblocks;
extern spinlock_t orangefs_superblocks_lock; extern spinlock_t orangefs_superblocks_lock;
extern struct list_head orangefs_request_list; extern struct list_head orangefs_request_list;
......
...@@ -47,6 +47,8 @@ struct client_debug_mask client_debug_mask = { NULL, 0, 0 }; ...@@ -47,6 +47,8 @@ struct client_debug_mask client_debug_mask = { NULL, 0, 0 };
unsigned int kernel_mask_set_mod_init; /* implicitly false */ unsigned int kernel_mask_set_mod_init; /* implicitly false */
int op_timeout_secs = ORANGEFS_DEFAULT_OP_TIMEOUT_SECS; int op_timeout_secs = ORANGEFS_DEFAULT_OP_TIMEOUT_SECS;
int slot_timeout_secs = ORANGEFS_DEFAULT_SLOT_TIMEOUT_SECS; int slot_timeout_secs = ORANGEFS_DEFAULT_SLOT_TIMEOUT_SECS;
int dcache_timeout_msecs = 1000;
int getattr_timeout_msecs = 1000;
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("ORANGEFS Development Team"); MODULE_AUTHOR("ORANGEFS Development Team");
......
...@@ -61,10 +61,21 @@ ...@@ -61,10 +61,21 @@
* Slots are requested and waited for, * Slots are requested and waited for,
* the wait times out after slot_timeout_secs. * the wait times out after slot_timeout_secs.
* *
* What: /sys/fs/orangefs/dcache_timeout_msecs
* Date: Jul 2016
* Contact: Martin Brandenburg <martin@omnibond.com>
* Description:
* Time lookup is valid in milliseconds.
*
* What: /sys/fs/orangefs/getattr_timeout_msecs
* Date: Jul 2016
* Contact: Martin Brandenburg <martin@omnibond.com>
* Description:
* Time getattr is valid in milliseconds.
* *
* What: /sys/fs/orangefs/acache/... * What: /sys/fs/orangefs/acache/...
* Date: Jun 2015 * Date: Jun 2015
* Contact: Mike Marshall <hubcap@omnibond.com> * Contact: Martin Brandenburg <martin@omnibond.com>
* Description: * Description:
* Attribute cache configurable settings. * Attribute cache configurable settings.
* *
...@@ -117,6 +128,8 @@ struct orangefs_obj { ...@@ -117,6 +128,8 @@ struct orangefs_obj {
int perf_history_size; int perf_history_size;
int perf_time_interval_secs; int perf_time_interval_secs;
int slot_timeout_secs; int slot_timeout_secs;
int dcache_timeout_msecs;
int getattr_timeout_msecs;
}; };
struct acache_orangefs_obj { struct acache_orangefs_obj {
...@@ -658,6 +671,20 @@ static ssize_t sysfs_int_show(char *kobj_id, char *buf, void *attr) ...@@ -658,6 +671,20 @@ static ssize_t sysfs_int_show(char *kobj_id, char *buf, void *attr)
"%d\n", "%d\n",
slot_timeout_secs); slot_timeout_secs);
goto out; goto out;
} else if (!strcmp(orangefs_attr->attr.name,
"dcache_timeout_msecs")) {
rc = scnprintf(buf,
PAGE_SIZE,
"%d\n",
dcache_timeout_msecs);
goto out;
} else if (!strcmp(orangefs_attr->attr.name,
"getattr_timeout_msecs")) {
rc = scnprintf(buf,
PAGE_SIZE,
"%d\n",
getattr_timeout_msecs);
goto out;
} else { } else {
goto out; goto out;
} }
...@@ -734,6 +761,12 @@ static ssize_t int_store(struct orangefs_obj *orangefs_obj, ...@@ -734,6 +761,12 @@ static ssize_t int_store(struct orangefs_obj *orangefs_obj,
} else if (!strcmp(attr->attr.name, "slot_timeout_secs")) { } else if (!strcmp(attr->attr.name, "slot_timeout_secs")) {
rc = kstrtoint(buf, 0, &slot_timeout_secs); rc = kstrtoint(buf, 0, &slot_timeout_secs);
goto out; goto out;
} else if (!strcmp(attr->attr.name, "dcache_timeout_msecs")) {
rc = kstrtoint(buf, 0, &dcache_timeout_msecs);
goto out;
} else if (!strcmp(attr->attr.name, "getattr_timeout_msecs")) {
rc = kstrtoint(buf, 0, &getattr_timeout_msecs);
goto out;
} else { } else {
goto out; goto out;
} }
...@@ -1361,6 +1394,12 @@ static struct orangefs_attribute op_timeout_secs_attribute = ...@@ -1361,6 +1394,12 @@ static struct orangefs_attribute op_timeout_secs_attribute =
static struct orangefs_attribute slot_timeout_secs_attribute = static struct orangefs_attribute slot_timeout_secs_attribute =
__ATTR(slot_timeout_secs, 0664, int_orangefs_show, int_store); __ATTR(slot_timeout_secs, 0664, int_orangefs_show, int_store);
static struct orangefs_attribute dcache_timeout_msecs_attribute =
__ATTR(dcache_timeout_msecs, 0664, int_orangefs_show, int_store);
static struct orangefs_attribute getattr_timeout_msecs_attribute =
__ATTR(getattr_timeout_msecs, 0664, int_orangefs_show, int_store);
static struct orangefs_attribute perf_counter_reset_attribute = static struct orangefs_attribute perf_counter_reset_attribute =
__ATTR(perf_counter_reset, __ATTR(perf_counter_reset,
0664, 0664,
...@@ -1382,6 +1421,8 @@ static struct orangefs_attribute perf_time_interval_secs_attribute = ...@@ -1382,6 +1421,8 @@ static struct orangefs_attribute perf_time_interval_secs_attribute =
static struct attribute *orangefs_default_attrs[] = { static struct attribute *orangefs_default_attrs[] = {
&op_timeout_secs_attribute.attr, &op_timeout_secs_attribute.attr,
&slot_timeout_secs_attribute.attr, &slot_timeout_secs_attribute.attr,
&dcache_timeout_msecs_attribute.attr,
&getattr_timeout_msecs_attribute.attr,
&perf_counter_reset_attribute.attr, &perf_counter_reset_attribute.attr,
&perf_history_size_attribute.attr, &perf_history_size_attribute.attr,
&perf_time_interval_secs_attribute.attr, &perf_time_interval_secs_attribute.attr,
......
...@@ -347,7 +347,7 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass) ...@@ -347,7 +347,7 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass)
inode->i_mode = type | (is_root_handle(inode) ? S_ISVTX : 0) | inode->i_mode = type | (is_root_handle(inode) ? S_ISVTX : 0) |
orangefs_inode_perms(&new_op->downcall.resp.getattr.attributes); orangefs_inode_perms(&new_op->downcall.resp.getattr.attributes);
orangefs_inode->getattr_time = jiffies + HZ; orangefs_inode->getattr_time = jiffies + getattr_timeout_msecs*HZ/1000;
ret = 0; ret = 0;
out: out:
op_release(new_op); op_release(new_op);
......
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