forked from luck/tmp_suning_uos_patched
3 Cleanups: remove initialization of i_version - Jeff Layton
use ARRAY_SIZE - Jérémy Lefaure call op_release sooner when creating inodes - Martin Brandenburg 1 Patch: stop setting atime on inode dirty - Martin Brandenburg -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJaEyiIAAoJEM9EDqnrzg2+LvEP+QGkMxX7i0Y4KSbIIWPkE3Ec y5OrEV8NjBg3u9eINNIfym65blGiOKK++dltSm7UAM//QoctMpG+HAhUMsFQsf3H XBvosvdRwxd9n/vxkcA9KsICdRKDi//vBoAS9EiyQYZfn1spE4LZBs+uZxtkQpIY ofUOdGYDOsXE5Jb8oBz2PRS3nQWPsflIOs2y1oTiwAfjP6WIBq11tu7wdamUJ02A F7vvFTA5wbxuuZq9cLA52Ho7IVR09GiymSaDTbilPK3d73eaacVl/zlfYcdMVRJA YmsyXcgdpgLhgiKl4B969dWU5p2X7a3cbkexTbIU+iFXcq685OohLj/SacFYH1eA /eZibdz9UhO6rLGwR5YDQ50lMIzwPYxMM98f8E/jjfxdRFrG3Pu4A2yLjDtaJYZc ATJDVk491xnGOhYDARQ6Wt/Dy3Yj0TtPsJeXggR6NiXH4AgsjZxToD2QgHXBhynb 2+dFadBb0erFMT1rB295thBGJWeD6kArIXwZS9alz83z/VH7O5rpjIx0I4Qj5NeP fZEYHf3E2+jFVQzqdw31fK6nTVsCN6/YhSwSYOGo+MAdvurCVxuFp0ulUM6FOCGR cfNYle/KrP3q1A3zzR4lpSDLXbXGKYbmImEYw4pobYH/vnjAtNVOpcEAMaxGyogm NUbQyGgcP9JIglkLSlQ5 =nqnT -----END PGP SIGNATURE----- Merge tag 'for-linus-4.15-ofs1' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux Pull orangefs updates from Mike Marshall: "Fix: - stop setting atime on inode dirty (Martin Brandenburg) Cleanups: - remove initialization of i_version (Jeff Layton) - use ARRAY_SIZE (Jérémy Lefaure) - call op_release sooner when creating inodes (Mike MarshallMartin Brandenburg)" * tag 'for-linus-4.15-ofs1' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux: orangefs: call op_release sooner when creating inodes orangefs: stop setting atime on inode dirty orangefs: use ARRAY_SIZE orangefs: remove initialization of i_version
This commit is contained in:
commit
b620fd2df2
|
@ -155,13 +155,11 @@ int orangefs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
|
|||
|
||||
int orangefs_init_acl(struct inode *inode, struct inode *dir)
|
||||
{
|
||||
struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
|
||||
struct posix_acl *default_acl, *acl;
|
||||
umode_t mode = inode->i_mode;
|
||||
struct iattr iattr;
|
||||
int error = 0;
|
||||
|
||||
ClearModeFlag(orangefs_inode);
|
||||
|
||||
error = posix_acl_create(dir, &mode, &default_acl, &acl);
|
||||
if (error)
|
||||
return error;
|
||||
|
@ -180,9 +178,11 @@ int orangefs_init_acl(struct inode *inode, struct inode *dir)
|
|||
|
||||
/* If mode of the inode was changed, then do a forcible ->setattr */
|
||||
if (mode != inode->i_mode) {
|
||||
SetModeFlag(orangefs_inode);
|
||||
memset(&iattr, 0, sizeof iattr);
|
||||
inode->i_mode = mode;
|
||||
orangefs_flush_inode(inode);
|
||||
iattr.ia_mode = mode;
|
||||
iattr.ia_valid |= ATTR_MODE;
|
||||
orangefs_inode_setattr(inode, &iattr);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
|
|
@ -386,7 +386,6 @@ static int orangefs_dir_release(struct inode *inode, struct file *file)
|
|||
{
|
||||
struct orangefs_dir *od = file->private_data;
|
||||
struct orangefs_dir_part *part = od->part;
|
||||
orangefs_flush_inode(inode);
|
||||
while (part) {
|
||||
struct orangefs_dir_part *next = part->next;
|
||||
vfree(part);
|
||||
|
|
|
@ -383,9 +383,15 @@ static ssize_t do_readv_writev(enum ORANGEFS_io_type type, struct file *file,
|
|||
if (type == ORANGEFS_IO_READ) {
|
||||
file_accessed(file);
|
||||
} else {
|
||||
SetMtimeFlag(orangefs_inode);
|
||||
inode->i_mtime = current_time(inode);
|
||||
mark_inode_dirty_sync(inode);
|
||||
file_update_time(file);
|
||||
/*
|
||||
* Must invalidate to ensure write loop doesn't
|
||||
* prevent kernel from reading updated
|
||||
* attribute. Size probably changed because of
|
||||
* the write, and other clients could update
|
||||
* any other attribute.
|
||||
*/
|
||||
orangefs_inode->getattr_time = jiffies - 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -615,8 +621,6 @@ static int orangefs_file_release(struct inode *inode, struct file *file)
|
|||
"orangefs_file_release: called on %pD\n",
|
||||
file);
|
||||
|
||||
orangefs_flush_inode(inode);
|
||||
|
||||
/*
|
||||
* remove all associated inode pages from the page cache and
|
||||
* readahead cache (if any); this forces an expensive refresh of
|
||||
|
@ -666,8 +670,6 @@ static int orangefs_fsync(struct file *file,
|
|||
ret);
|
||||
|
||||
op_release(new_op);
|
||||
|
||||
orangefs_flush_inode(file_inode(file));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -290,6 +290,22 @@ int orangefs_permission(struct inode *inode, int mask)
|
|||
return generic_permission(inode, mask);
|
||||
}
|
||||
|
||||
int orangefs_update_time(struct inode *inode, struct timespec *time, int flags)
|
||||
{
|
||||
struct iattr iattr;
|
||||
gossip_debug(GOSSIP_INODE_DEBUG, "orangefs_update_time: %pU\n",
|
||||
get_khandle_from_ino(inode));
|
||||
generic_update_time(inode, time, flags);
|
||||
memset(&iattr, 0, sizeof iattr);
|
||||
if (flags & S_ATIME)
|
||||
iattr.ia_valid |= ATTR_ATIME;
|
||||
if (flags & S_CTIME)
|
||||
iattr.ia_valid |= ATTR_CTIME;
|
||||
if (flags & S_MTIME)
|
||||
iattr.ia_valid |= ATTR_MTIME;
|
||||
return orangefs_inode_setattr(inode, &iattr);
|
||||
}
|
||||
|
||||
/* ORANGEDS2 implementation of VFS inode operations for files */
|
||||
const struct inode_operations orangefs_file_inode_operations = {
|
||||
.get_acl = orangefs_get_acl,
|
||||
|
@ -298,6 +314,7 @@ const struct inode_operations orangefs_file_inode_operations = {
|
|||
.getattr = orangefs_getattr,
|
||||
.listxattr = orangefs_listxattr,
|
||||
.permission = orangefs_permission,
|
||||
.update_time = orangefs_update_time,
|
||||
};
|
||||
|
||||
static int orangefs_init_iops(struct inode *inode)
|
||||
|
|
|
@ -22,7 +22,9 @@ static int orangefs_create(struct inode *dir,
|
|||
{
|
||||
struct orangefs_inode_s *parent = ORANGEFS_I(dir);
|
||||
struct orangefs_kernel_op_s *new_op;
|
||||
struct orangefs_object_kref ref;
|
||||
struct inode *inode;
|
||||
struct iattr iattr;
|
||||
int ret;
|
||||
|
||||
gossip_debug(GOSSIP_NAME_DEBUG, "%s: %pd\n",
|
||||
|
@ -55,8 +57,10 @@ static int orangefs_create(struct inode *dir,
|
|||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
inode = orangefs_new_inode(dir->i_sb, dir, S_IFREG | mode, 0,
|
||||
&new_op->downcall.resp.create.refn);
|
||||
ref = new_op->downcall.resp.create.refn;
|
||||
op_release(new_op);
|
||||
|
||||
inode = orangefs_new_inode(dir->i_sb, dir, S_IFREG | mode, 0, &ref);
|
||||
if (IS_ERR(inode)) {
|
||||
gossip_err("%s: Failed to allocate inode for file :%pd:\n",
|
||||
__func__,
|
||||
|
@ -82,12 +86,13 @@ static int orangefs_create(struct inode *dir,
|
|||
__func__,
|
||||
dentry);
|
||||
|
||||
SetMtimeFlag(parent);
|
||||
dir->i_mtime = dir->i_ctime = current_time(dir);
|
||||
memset(&iattr, 0, sizeof iattr);
|
||||
iattr.ia_valid |= ATTR_MTIME;
|
||||
orangefs_inode_setattr(dir, &iattr);
|
||||
mark_inode_dirty_sync(dir);
|
||||
ret = 0;
|
||||
out:
|
||||
op_release(new_op);
|
||||
gossip_debug(GOSSIP_NAME_DEBUG,
|
||||
"%s: %pd: returning %d\n",
|
||||
__func__,
|
||||
|
@ -221,6 +226,7 @@ static int orangefs_unlink(struct inode *dir, struct dentry *dentry)
|
|||
struct inode *inode = dentry->d_inode;
|
||||
struct orangefs_inode_s *parent = ORANGEFS_I(dir);
|
||||
struct orangefs_kernel_op_s *new_op;
|
||||
struct iattr iattr;
|
||||
int ret;
|
||||
|
||||
gossip_debug(GOSSIP_NAME_DEBUG,
|
||||
|
@ -253,8 +259,10 @@ static int orangefs_unlink(struct inode *dir, struct dentry *dentry)
|
|||
if (!ret) {
|
||||
drop_nlink(inode);
|
||||
|
||||
SetMtimeFlag(parent);
|
||||
dir->i_mtime = dir->i_ctime = current_time(dir);
|
||||
memset(&iattr, 0, sizeof iattr);
|
||||
iattr.ia_valid |= ATTR_MTIME;
|
||||
orangefs_inode_setattr(dir, &iattr);
|
||||
mark_inode_dirty_sync(dir);
|
||||
}
|
||||
return ret;
|
||||
|
@ -266,7 +274,9 @@ static int orangefs_symlink(struct inode *dir,
|
|||
{
|
||||
struct orangefs_inode_s *parent = ORANGEFS_I(dir);
|
||||
struct orangefs_kernel_op_s *new_op;
|
||||
struct orangefs_object_kref ref;
|
||||
struct inode *inode;
|
||||
struct iattr iattr;
|
||||
int mode = 755;
|
||||
int ret;
|
||||
|
||||
|
@ -307,8 +317,10 @@ static int orangefs_symlink(struct inode *dir,
|
|||
goto out;
|
||||
}
|
||||
|
||||
inode = orangefs_new_inode(dir->i_sb, dir, S_IFLNK | mode, 0,
|
||||
&new_op->downcall.resp.sym.refn);
|
||||
ref = new_op->downcall.resp.sym.refn;
|
||||
op_release(new_op);
|
||||
|
||||
inode = orangefs_new_inode(dir->i_sb, dir, S_IFLNK | mode, 0, &ref);
|
||||
if (IS_ERR(inode)) {
|
||||
gossip_err
|
||||
("*** Failed to allocate orangefs symlink inode\n");
|
||||
|
@ -331,12 +343,13 @@ static int orangefs_symlink(struct inode *dir,
|
|||
get_khandle_from_ino(inode),
|
||||
dentry);
|
||||
|
||||
SetMtimeFlag(parent);
|
||||
dir->i_mtime = dir->i_ctime = current_time(dir);
|
||||
memset(&iattr, 0, sizeof iattr);
|
||||
iattr.ia_valid |= ATTR_MTIME;
|
||||
orangefs_inode_setattr(dir, &iattr);
|
||||
mark_inode_dirty_sync(dir);
|
||||
ret = 0;
|
||||
out:
|
||||
op_release(new_op);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -344,7 +357,9 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
|
|||
{
|
||||
struct orangefs_inode_s *parent = ORANGEFS_I(dir);
|
||||
struct orangefs_kernel_op_s *new_op;
|
||||
struct orangefs_object_kref ref;
|
||||
struct inode *inode;
|
||||
struct iattr iattr;
|
||||
int ret;
|
||||
|
||||
new_op = op_alloc(ORANGEFS_VFS_OP_MKDIR);
|
||||
|
@ -373,8 +388,10 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
|
|||
goto out;
|
||||
}
|
||||
|
||||
inode = orangefs_new_inode(dir->i_sb, dir, S_IFDIR | mode, 0,
|
||||
&new_op->downcall.resp.mkdir.refn);
|
||||
ref = new_op->downcall.resp.mkdir.refn;
|
||||
op_release(new_op);
|
||||
|
||||
inode = orangefs_new_inode(dir->i_sb, dir, S_IFDIR | mode, 0, &ref);
|
||||
if (IS_ERR(inode)) {
|
||||
gossip_err("*** Failed to allocate orangefs dir inode\n");
|
||||
ret = PTR_ERR(inode);
|
||||
|
@ -400,11 +417,12 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
|
|||
* NOTE: we have no good way to keep nlink consistent for directories
|
||||
* across clients; keep constant at 1.
|
||||
*/
|
||||
SetMtimeFlag(parent);
|
||||
dir->i_mtime = dir->i_ctime = current_time(dir);
|
||||
memset(&iattr, 0, sizeof iattr);
|
||||
iattr.ia_valid |= ATTR_MTIME;
|
||||
orangefs_inode_setattr(dir, &iattr);
|
||||
mark_inode_dirty_sync(dir);
|
||||
out:
|
||||
op_release(new_op);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -470,4 +488,5 @@ const struct inode_operations orangefs_dir_inode_operations = {
|
|||
.getattr = orangefs_getattr,
|
||||
.listxattr = orangefs_listxattr,
|
||||
.permission = orangefs_permission,
|
||||
.update_time = orangefs_update_time,
|
||||
};
|
||||
|
|
|
@ -15,8 +15,10 @@
|
|||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||
#endif
|
||||
|
||||
#define GOSSIP_NO_DEBUG (__u64)0
|
||||
|
@ -88,6 +90,6 @@ static struct __keyword_mask_s s_kmod_keyword_mask_map[] = {
|
|||
};
|
||||
|
||||
static const int num_kmod_keyword_mask_map = (int)
|
||||
(sizeof(s_kmod_keyword_mask_map) / sizeof(struct __keyword_mask_s));
|
||||
(ARRAY_SIZE(s_kmod_keyword_mask_map));
|
||||
|
||||
#endif /* __ORANGEFS_DEBUG_H */
|
||||
|
|
|
@ -209,37 +209,10 @@ struct orangefs_inode_s {
|
|||
struct inode vfs_inode;
|
||||
sector_t last_failed_block_index_read;
|
||||
|
||||
/*
|
||||
* State of in-memory attributes not yet flushed to disk associated
|
||||
* with this object
|
||||
*/
|
||||
unsigned long pinode_flags;
|
||||
|
||||
unsigned long getattr_time;
|
||||
u32 getattr_mask;
|
||||
};
|
||||
|
||||
#define P_ATIME_FLAG 0
|
||||
#define P_MTIME_FLAG 1
|
||||
#define P_CTIME_FLAG 2
|
||||
#define P_MODE_FLAG 3
|
||||
|
||||
#define ClearAtimeFlag(pinode) clear_bit(P_ATIME_FLAG, &(pinode)->pinode_flags)
|
||||
#define SetAtimeFlag(pinode) set_bit(P_ATIME_FLAG, &(pinode)->pinode_flags)
|
||||
#define AtimeFlag(pinode) test_bit(P_ATIME_FLAG, &(pinode)->pinode_flags)
|
||||
|
||||
#define ClearMtimeFlag(pinode) clear_bit(P_MTIME_FLAG, &(pinode)->pinode_flags)
|
||||
#define SetMtimeFlag(pinode) set_bit(P_MTIME_FLAG, &(pinode)->pinode_flags)
|
||||
#define MtimeFlag(pinode) test_bit(P_MTIME_FLAG, &(pinode)->pinode_flags)
|
||||
|
||||
#define ClearCtimeFlag(pinode) clear_bit(P_CTIME_FLAG, &(pinode)->pinode_flags)
|
||||
#define SetCtimeFlag(pinode) set_bit(P_CTIME_FLAG, &(pinode)->pinode_flags)
|
||||
#define CtimeFlag(pinode) test_bit(P_CTIME_FLAG, &(pinode)->pinode_flags)
|
||||
|
||||
#define ClearModeFlag(pinode) clear_bit(P_MODE_FLAG, &(pinode)->pinode_flags)
|
||||
#define SetModeFlag(pinode) set_bit(P_MODE_FLAG, &(pinode)->pinode_flags)
|
||||
#define ModeFlag(pinode) test_bit(P_MODE_FLAG, &(pinode)->pinode_flags)
|
||||
|
||||
/* per superblock private orangefs info */
|
||||
struct orangefs_sb_info_s {
|
||||
struct orangefs_khandle root_khandle;
|
||||
|
@ -436,6 +409,8 @@ int orangefs_getattr(const struct path *path, struct kstat *stat,
|
|||
|
||||
int orangefs_permission(struct inode *inode, int mask);
|
||||
|
||||
int orangefs_update_time(struct inode *, struct timespec *, int);
|
||||
|
||||
/*
|
||||
* defined in xattr.c
|
||||
*/
|
||||
|
@ -478,8 +453,6 @@ bool __is_daemon_in_service(void);
|
|||
*/
|
||||
__s32 fsid_of_op(struct orangefs_kernel_op_s *op);
|
||||
|
||||
int orangefs_flush_inode(struct inode *inode);
|
||||
|
||||
ssize_t orangefs_inode_getxattr(struct inode *inode,
|
||||
const char *name,
|
||||
void *buffer,
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
*
|
||||
* See COPYING in top-level directory.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include "protocol.h"
|
||||
#include "orangefs-kernel.h"
|
||||
#include "orangefs-dev-proto.h"
|
||||
|
@ -437,89 +438,8 @@ int orangefs_inode_setattr(struct inode *inode, struct iattr *iattr)
|
|||
|
||||
op_release(new_op);
|
||||
|
||||
/*
|
||||
* successful setattr should clear the atime, mtime and
|
||||
* ctime flags.
|
||||
*/
|
||||
if (ret == 0) {
|
||||
ClearAtimeFlag(orangefs_inode);
|
||||
ClearMtimeFlag(orangefs_inode);
|
||||
ClearCtimeFlag(orangefs_inode);
|
||||
ClearModeFlag(orangefs_inode);
|
||||
if (ret == 0)
|
||||
orangefs_inode->getattr_time = jiffies - 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int orangefs_flush_inode(struct inode *inode)
|
||||
{
|
||||
/*
|
||||
* If it is a dirty inode, this function gets called.
|
||||
* Gather all the information that needs to be setattr'ed
|
||||
* Right now, this will only be used for mode, atime, mtime
|
||||
* and/or ctime.
|
||||
*/
|
||||
struct iattr wbattr;
|
||||
int ret;
|
||||
int mtime_flag;
|
||||
int ctime_flag;
|
||||
int atime_flag;
|
||||
int mode_flag;
|
||||
struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
|
||||
|
||||
memset(&wbattr, 0, sizeof(wbattr));
|
||||
|
||||
/*
|
||||
* check inode flags up front, and clear them if they are set. This
|
||||
* will prevent multiple processes from all trying to flush the same
|
||||
* inode if they call close() simultaneously
|
||||
*/
|
||||
mtime_flag = MtimeFlag(orangefs_inode);
|
||||
ClearMtimeFlag(orangefs_inode);
|
||||
ctime_flag = CtimeFlag(orangefs_inode);
|
||||
ClearCtimeFlag(orangefs_inode);
|
||||
atime_flag = AtimeFlag(orangefs_inode);
|
||||
ClearAtimeFlag(orangefs_inode);
|
||||
mode_flag = ModeFlag(orangefs_inode);
|
||||
ClearModeFlag(orangefs_inode);
|
||||
|
||||
/* -- Lazy atime,mtime and ctime update --
|
||||
* Note: all times are dictated by server in the new scheme
|
||||
* and not by the clients
|
||||
*
|
||||
* Also mode updates are being handled now..
|
||||
*/
|
||||
|
||||
if (mtime_flag)
|
||||
wbattr.ia_valid |= ATTR_MTIME;
|
||||
if (ctime_flag)
|
||||
wbattr.ia_valid |= ATTR_CTIME;
|
||||
if (atime_flag)
|
||||
wbattr.ia_valid |= ATTR_ATIME;
|
||||
|
||||
if (mode_flag) {
|
||||
wbattr.ia_mode = inode->i_mode;
|
||||
wbattr.ia_valid |= ATTR_MODE;
|
||||
}
|
||||
|
||||
gossip_debug(GOSSIP_UTILS_DEBUG,
|
||||
"*********** orangefs_flush_inode: %pU "
|
||||
"(ia_valid %d)\n",
|
||||
get_khandle_from_ino(inode),
|
||||
wbattr.ia_valid);
|
||||
if (wbattr.ia_valid == 0) {
|
||||
gossip_debug(GOSSIP_UTILS_DEBUG,
|
||||
"orangefs_flush_inode skipping setattr()\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
gossip_debug(GOSSIP_UTILS_DEBUG,
|
||||
"orangefs_flush_inode (%pU) writing mode %o\n",
|
||||
get_khandle_from_ino(inode),
|
||||
inode->i_mode);
|
||||
|
||||
ret = orangefs_inode_setattr(inode, &wbattr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -606,7 +526,7 @@ int orangefs_normalize_to_errno(__s32 error_code)
|
|||
/* Convert ORANGEFS encoded errno values into regular errno values. */
|
||||
} else if ((-error_code) & ORANGEFS_ERROR_BIT) {
|
||||
i = (-error_code) & ~(ORANGEFS_ERROR_BIT|ORANGEFS_ERROR_CLASS_BITS);
|
||||
if (i < sizeof(PINT_errno_mapping)/sizeof(*PINT_errno_mapping))
|
||||
if (i < ARRAY_SIZE(PINT_errno_mapping))
|
||||
error_code = -PINT_errno_mapping[i];
|
||||
else
|
||||
error_code = -EINVAL;
|
||||
|
|
|
@ -99,8 +99,6 @@ static void orangefs_inode_cache_ctor(void *req)
|
|||
|
||||
inode_init_once(&orangefs_inode->vfs_inode);
|
||||
init_rwsem(&orangefs_inode->xattr_sem);
|
||||
|
||||
orangefs_inode->vfs_inode.i_version = 1;
|
||||
}
|
||||
|
||||
static struct inode *orangefs_alloc_inode(struct super_block *sb)
|
||||
|
@ -119,7 +117,6 @@ static struct inode *orangefs_alloc_inode(struct super_block *sb)
|
|||
orangefs_inode->refn.fs_id = ORANGEFS_FS_ID_NULL;
|
||||
orangefs_inode->last_failed_block_index_read = 0;
|
||||
memset(orangefs_inode->link_target, 0, sizeof(orangefs_inode->link_target));
|
||||
orangefs_inode->pinode_flags = 0;
|
||||
|
||||
gossip_debug(GOSSIP_SUPER_DEBUG,
|
||||
"orangefs_alloc_inode: allocated %p\n",
|
||||
|
@ -299,21 +296,9 @@ void fsid_key_table_finalize(void)
|
|||
{
|
||||
}
|
||||
|
||||
/* Called whenever the VFS dirties the inode in response to atime updates */
|
||||
static void orangefs_dirty_inode(struct inode *inode, int flags)
|
||||
{
|
||||
struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
|
||||
|
||||
gossip_debug(GOSSIP_SUPER_DEBUG,
|
||||
"orangefs_dirty_inode: %pU\n",
|
||||
get_khandle_from_ino(inode));
|
||||
SetAtimeFlag(orangefs_inode);
|
||||
}
|
||||
|
||||
static const struct super_operations orangefs_s_ops = {
|
||||
.alloc_inode = orangefs_alloc_inode,
|
||||
.destroy_inode = orangefs_destroy_inode,
|
||||
.dirty_inode = orangefs_dirty_inode,
|
||||
.drop_inode = generic_delete_inode,
|
||||
.statfs = orangefs_statfs,
|
||||
.remount_fs = orangefs_remount_fs,
|
||||
|
|
|
@ -15,4 +15,5 @@ const struct inode_operations orangefs_symlink_inode_operations = {
|
|||
.getattr = orangefs_getattr,
|
||||
.listxattr = orangefs_listxattr,
|
||||
.permission = orangefs_permission,
|
||||
.update_time = orangefs_update_time,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user