diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2007-10-18 06:07:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-18 17:37:30 -0400 |
commit | d139d7ffd0c1e81e2a809909b4f8b121a0dc119a (patch) | |
tree | e8c9dd746bfd8ae16d17596009608c4c1a153217 /fs/namei.c | |
parent | 49d4914fd7c10ae846d0f30d5f6f4732cc68499c (diff) |
VFS: allow filesystems to implement atomic open+truncate
Add a new attribute flag ATTR_OPEN, with the meaning: "truncation was
initiated by open() due to the O_TRUNC flag".
This way filesystems wanting to implement truncation within their ->open()
method can ignore such truncate requests.
This is a quick & dirty hack, but it comes for free.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andreas Dilger <adilger@clusterfs.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/namei.c')
-rw-r--r-- | fs/namei.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/namei.c b/fs/namei.c index 464eeccb675b..1e5c71669164 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -1659,8 +1659,10 @@ int may_open(struct nameidata *nd, int acc_mode, int flag) | |||
1659 | error = locks_verify_locked(inode); | 1659 | error = locks_verify_locked(inode); |
1660 | if (!error) { | 1660 | if (!error) { |
1661 | DQUOT_INIT(inode); | 1661 | DQUOT_INIT(inode); |
1662 | 1662 | ||
1663 | error = do_truncate(dentry, 0, ATTR_MTIME|ATTR_CTIME, NULL); | 1663 | error = do_truncate(dentry, 0, |
1664 | ATTR_MTIME|ATTR_CTIME|ATTR_OPEN, | ||
1665 | NULL); | ||
1664 | } | 1666 | } |
1665 | put_write_access(inode); | 1667 | put_write_access(inode); |
1666 | if (error) | 1668 | if (error) |