don't unlink an active swapfile
Peter Cordes is sorry that he rm'ed his swapfiles while they were in use, he then had no pathname to swapoff. It's a curious little oversight, but not one worth a lot of hackery. Kudos to Willy Tarreau for turning this around from a discussion of synthetic pathnames to how to prevent unlink. Mimic immutable: prohibit unlinking an active swapfile in may_delete() (and don't worry my little head over the tiny race window). Signed-off-by: Hugh Dickins <hugh@veritas.com> Cc: Willy Tarreau <w@1wt.eu> Acked-by: Christoph Hellwig <hch@infradead.org> Cc: Peter Cordes <peter@cordes.ca> Cc: Bodo Eggert <7eggert@gmx.de> Cc: David Newall <davidn@davidnewall.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
63eb6b93ce
Коммит
f9454548e1
|
@ -1378,7 +1378,7 @@ static int may_delete(struct inode *dir,struct dentry *victim,int isdir)
|
||||||
if (IS_APPEND(dir))
|
if (IS_APPEND(dir))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
|
if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
|
||||||
IS_IMMUTABLE(victim->d_inode))
|
IS_IMMUTABLE(victim->d_inode) || IS_SWAPFILE(victim->d_inode))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
if (isdir) {
|
if (isdir) {
|
||||||
if (!S_ISDIR(victim->d_inode->i_mode))
|
if (!S_ISDIR(victim->d_inode->i_mode))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче