orangefs: Allow dcache and getattr cache time to be configured.
Signed-off-by: Martin Brandenburg <martin@omnibond.com>
This commit is contained in:
parent
71680c18c8
commit
4cd8f31944
|
@ -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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
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;
|
||||||
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 };
|
||||||
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 @@
|
||||||
* 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 {
|
||||||
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)
|
||||||
"%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,
|
||||||
} 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 =
|
||||||
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 =
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue