Commit 480e5ae9 authored by Martin Brandenburg's avatar Martin Brandenburg Committed by Mike Marshall

orangefs: simplify orangefs_inode_is_stale

Check whether this is a new inode at location of call.

Raises the question of what to do with an unknown inode type.  Old code
would've marked the inode bad and returned ESTALE.
Signed-off-by: default avatarMartin Brandenburg <martin@omnibond.com>
Signed-off-by: default avatarMike Marshall <hubcap@omnibond.com>
parent cf546ab6
...@@ -249,12 +249,11 @@ static void orangefs_make_bad_inode(struct inode *inode) ...@@ -249,12 +249,11 @@ static void orangefs_make_bad_inode(struct inode *inode)
} }
} }
static int orangefs_inode_is_stale(struct inode *inode, int new, static int orangefs_inode_is_stale(struct inode *inode,
struct ORANGEFS_sys_attr_s *attrs, char *link_target) struct ORANGEFS_sys_attr_s *attrs, char *link_target)
{ {
struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode); struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
int type = orangefs_inode_type(attrs->objtype); int type = orangefs_inode_type(attrs->objtype);
if (!new) {
/* /*
* If the inode type or symlink target have changed then this * If the inode type or symlink target have changed then this
* inode is stale. * inode is stale.
...@@ -268,7 +267,6 @@ static int orangefs_inode_is_stale(struct inode *inode, int new, ...@@ -268,7 +267,6 @@ static int orangefs_inode_is_stale(struct inode *inode, int new,
orangefs_make_bad_inode(inode); orangefs_make_bad_inode(inode);
return 1; return 1;
} }
}
return 0; return 0;
} }
...@@ -313,16 +311,18 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass, ...@@ -313,16 +311,18 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass,
if (ret != 0) if (ret != 0)
goto out; goto out;
type = orangefs_inode_type(new_op-> if (!new) {
downcall.resp.getattr.attributes.objtype); ret = orangefs_inode_is_stale(inode,
ret = orangefs_inode_is_stale(inode, new,
&new_op->downcall.resp.getattr.attributes, &new_op->downcall.resp.getattr.attributes,
new_op->downcall.resp.getattr.link_target); new_op->downcall.resp.getattr.link_target);
if (ret) { if (ret) {
ret = -ESTALE; ret = -ESTALE;
goto out; goto out;
} }
}
type = orangefs_inode_type(new_op->
downcall.resp.getattr.attributes.objtype);
switch (type) { switch (type) {
case S_IFREG: case S_IFREG:
inode->i_flags = orangefs_inode_flags(&new_op-> inode->i_flags = orangefs_inode_flags(&new_op->
...@@ -367,6 +367,12 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass, ...@@ -367,6 +367,12 @@ int orangefs_inode_getattr(struct inode *inode, int new, int bypass,
inode->i_link = orangefs_inode->link_target; inode->i_link = orangefs_inode->link_target;
} }
break; break;
/* i.e. -1 */
default:
/* XXX: ESTALE? This is what is done if it is not new. */
orangefs_make_bad_inode(inode);
ret = -ESTALE;
goto out;
} }
inode->i_uid = make_kuid(&init_user_ns, new_op-> inode->i_uid = make_kuid(&init_user_ns, new_op->
...@@ -420,7 +426,7 @@ int orangefs_inode_check_changed(struct inode *inode) ...@@ -420,7 +426,7 @@ int orangefs_inode_check_changed(struct inode *inode)
if (ret != 0) if (ret != 0)
goto out; goto out;
ret = orangefs_inode_is_stale(inode, 0, ret = orangefs_inode_is_stale(inode,
&new_op->downcall.resp.getattr.attributes, &new_op->downcall.resp.getattr.attributes,
new_op->downcall.resp.getattr.link_target); new_op->downcall.resp.getattr.link_target);
out: out:
......
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