ocfs2: core atime update functions
This patch adds the core routines for updating atime in ocfs2. Signed-off-by: Tiger Yang <tiger.yang@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
@@ -49,6 +49,7 @@
|
||||
#include "dcache.h"
|
||||
#include "dlmglue.h"
|
||||
#include "extent_map.h"
|
||||
#include "file.h"
|
||||
#include "heartbeat.h"
|
||||
#include "inode.h"
|
||||
#include "journal.h"
|
||||
@@ -1723,6 +1724,44 @@ int ocfs2_meta_lock_with_page(struct inode *inode,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ocfs2_meta_lock_atime(struct inode *inode,
|
||||
struct vfsmount *vfsmnt,
|
||||
int *level)
|
||||
{
|
||||
int ret;
|
||||
|
||||
mlog_entry_void();
|
||||
ret = ocfs2_meta_lock(inode, NULL, 0);
|
||||
if (ret < 0) {
|
||||
mlog_errno(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we should update atime, we will get EX lock,
|
||||
* otherwise we just get PR lock.
|
||||
*/
|
||||
if (ocfs2_should_update_atime(inode, vfsmnt)) {
|
||||
struct buffer_head *bh = NULL;
|
||||
|
||||
ocfs2_meta_unlock(inode, 0);
|
||||
ret = ocfs2_meta_lock(inode, &bh, 1);
|
||||
if (ret < 0) {
|
||||
mlog_errno(ret);
|
||||
return ret;
|
||||
}
|
||||
*level = 1;
|
||||
if (ocfs2_should_update_atime(inode, vfsmnt))
|
||||
ocfs2_update_inode_atime(inode, bh);
|
||||
if (bh)
|
||||
brelse(bh);
|
||||
} else
|
||||
*level = 0;
|
||||
|
||||
mlog_exit(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ocfs2_meta_unlock(struct inode *inode,
|
||||
int ex)
|
||||
{
|
||||
|
Reference in New Issue
Block a user