mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
gfs2: Replace GIF_DEFER_DELETE with GLF_DEFER_DELETE
[ Upstream commit3774f53d7f
] Having this flag attached to the iopen glock instead of the inode is much simpler; it eliminates a protential weird race in gfs2_try_evict(). Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Stable-dep-of:2c63986dd3
("gfs2: deallocate inodes in gfs2_create_inode") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
7df46e6f88
commit
4f66983aeb
|
@ -994,15 +994,15 @@ static bool gfs2_try_evict(struct gfs2_glock *gl)
|
|||
}
|
||||
}
|
||||
if (ip) {
|
||||
set_bit(GIF_DEFER_DELETE, &ip->i_flags);
|
||||
set_bit(GLF_DEFER_DELETE, &gl->gl_flags);
|
||||
d_prune_aliases(&ip->i_inode);
|
||||
iput(&ip->i_inode);
|
||||
clear_bit(GLF_DEFER_DELETE, &gl->gl_flags);
|
||||
|
||||
/* If the inode was evicted, gl->gl_object will now be NULL. */
|
||||
spin_lock(&gl->gl_lockref.lock);
|
||||
ip = gl->gl_object;
|
||||
if (ip) {
|
||||
clear_bit(GIF_DEFER_DELETE, &ip->i_flags);
|
||||
if (!igrab(&ip->i_inode))
|
||||
ip = NULL;
|
||||
}
|
||||
|
@ -2389,6 +2389,8 @@ static const char *gflags2str(char *buf, const struct gfs2_glock *gl)
|
|||
*p++ = 'e';
|
||||
if (test_bit(GLF_VERIFY_DELETE, gflags))
|
||||
*p++ = 'E';
|
||||
if (test_bit(GLF_DEFER_DELETE, gflags))
|
||||
*p++ = 's';
|
||||
*p = 0;
|
||||
return buf;
|
||||
}
|
||||
|
|
|
@ -331,6 +331,7 @@ enum {
|
|||
GLF_TRY_TO_EVICT = 17, /* iopen glocks only */
|
||||
GLF_VERIFY_DELETE = 18, /* iopen glocks only */
|
||||
GLF_PENDING_REPLY = 19,
|
||||
GLF_DEFER_DELETE = 20, /* iopen glocks only */
|
||||
};
|
||||
|
||||
struct gfs2_glock {
|
||||
|
@ -377,7 +378,6 @@ enum {
|
|||
GIF_SW_PAGED = 3,
|
||||
GIF_FREE_VFS_INODE = 5,
|
||||
GIF_GLOP_PENDING = 6,
|
||||
GIF_DEFER_DELETE = 7,
|
||||
};
|
||||
|
||||
struct gfs2_inode {
|
||||
|
|
|
@ -1326,7 +1326,8 @@ static enum evict_behavior evict_should_delete(struct inode *inode,
|
|||
if (unlikely(test_bit(GIF_ALLOC_FAILED, &ip->i_flags)))
|
||||
goto should_delete;
|
||||
|
||||
if (test_bit(GIF_DEFER_DELETE, &ip->i_flags))
|
||||
if (gfs2_holder_initialized(&ip->i_iopen_gh) &&
|
||||
test_bit(GLF_DEFER_DELETE, &ip->i_iopen_gh.gh_gl->gl_flags))
|
||||
return EVICT_SHOULD_DEFER_DELETE;
|
||||
|
||||
/* Deletes should never happen under memory pressure anymore. */
|
||||
|
|
|
@ -64,7 +64,8 @@
|
|||
{(1UL << GLF_INSTANTIATE_NEEDED), "n" }, \
|
||||
{(1UL << GLF_INSTANTIATE_IN_PROG), "N" }, \
|
||||
{(1UL << GLF_TRY_TO_EVICT), "e" }, \
|
||||
{(1UL << GLF_VERIFY_DELETE), "E" })
|
||||
{(1UL << GLF_VERIFY_DELETE), "E" }, \
|
||||
{(1UL << GLF_DEFER_DELETE), "s" })
|
||||
|
||||
#ifndef NUMPTY
|
||||
#define NUMPTY
|
||||
|
|
Loading…
Reference in New Issue
Block a user