aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2005-01-04 05:35:33 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-04 05:35:33 -0800
commitf9346132da60953c5d861d9667684c436eb151a4 (patch)
treeda366d2fe1bc097f2ef78144ed7cb63b62aef11b /fs
parent55521f5093f9ee5fe20b69f73fed4d4ba153918a (diff)
downloadhistory-f9346132da60953c5d861d9667684c436eb151a4.tar.gz
[PATCH] udf: fix reservation discarding
UDF discards file preallocations on every ->put_inode which is totally bogus. It already discards them in ->release which makes sense for normal writes, so the only additional discard is in ->clear_inode so we make sure we don't leak any reservations for shared writeable mappings. This follows similar changes to ext2 and ext3. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/udf/inode.c30
-rw-r--r--fs/udf/super.c1
-rw-r--r--fs/udf/udfdecl.h1
3 files changed, 6 insertions, 26 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index a77b41ad72b121..0506e117378450 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -70,30 +70,6 @@ static void udf_update_extents(struct inode *,
static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
/*
- * udf_put_inode
- *
- * PURPOSE
- *
- * DESCRIPTION
- * This routine is called whenever the kernel no longer needs the inode.
- *
- * HISTORY
- * July 1, 1997 - Andrew E. Mileski
- * Written, tested, and released.
- *
- * Called at each iput()
- */
-void udf_put_inode(struct inode * inode)
-{
- if (!(inode->i_sb->s_flags & MS_RDONLY))
- {
- lock_kernel();
- udf_discard_prealloc(inode);
- unlock_kernel();
- }
-}
-
-/*
* udf_delete_inode
*
* PURPOSE
@@ -129,6 +105,12 @@ no_delete:
void udf_clear_inode(struct inode *inode)
{
+ if (!(inode->i_sb->s_flags & MS_RDONLY)) {
+ lock_kernel();
+ udf_discard_prealloc(inode);
+ unlock_kernel();
+ }
+
kfree(UDF_I_DATA(inode));
UDF_I_DATA(inode) = NULL;
}
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 2681bca58cc710..e2fdb47ce82e1e 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -163,7 +163,6 @@ static struct super_operations udf_sb_ops = {
.alloc_inode = udf_alloc_inode,
.destroy_inode = udf_destroy_inode,
.write_inode = udf_write_inode,
- .put_inode = udf_put_inode,
.delete_inode = udf_delete_inode,
.clear_inode = udf_clear_inode,
.put_super = udf_put_super,
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h
index 87a9331bafbf8f..1d5800e0cbe7a7 100644
--- a/fs/udf/udfdecl.h
+++ b/fs/udf/udfdecl.h
@@ -96,7 +96,6 @@ extern struct buffer_head * udf_expand_dir_adinicb(struct inode *, int *, int *)
extern struct buffer_head * udf_bread(struct inode *, int, int, int *);
extern void udf_truncate(struct inode *);
extern void udf_read_inode(struct inode *);
-extern void udf_put_inode(struct inode *);
extern void udf_delete_inode(struct inode *);
extern void udf_clear_inode(struct inode *);
extern int udf_write_inode(struct inode *, int);