Skip to content

Commit

Permalink
NTFS: Enable ATTR_SIZE attribute changes in ntfs_setattr(). This comp…
Browse files Browse the repository at this point in the history
…letes

      the initial implementation of file truncation.  Now both open(2)ing
      a file with the O_TRUNC flag and the {,f}truncate(2) system calls
      will resize a file appropriately.  The limitations are that only
      uncompressed and unencrypted files are supported.  Also, there is
      only very limited support for highly fragmented files (the ones whose
      $DATA attribute is split into multiple attribute extents).

Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
  • Loading branch information
Anton Altaparmakov committed Oct 4, 2005
1 parent dd07233 commit e943825
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
7 changes: 7 additions & 0 deletions fs/ntfs/ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ ToDo/Notes:
but not the initialized size can be extended, too.
- Implement fs/ntfs/inode.[hc]::ntfs_truncate(). It only supports
uncompressed and unencrypted files.
- Enable ATTR_SIZE attribute changes in ntfs_setattr(). This completes
the initial implementation of file truncation. Now both open(2)ing
a file with the O_TRUNC flag and the {,f}truncate(2) system calls
will resize a file appropriately. The limitations are that only
uncompressed and unencrypted files are supported. Also, there is
only very limited support for highly fragmented files (the ones whose
$DATA attribute is split into multiple attribute extents).

2.1.24 - Lots of bug fixes and support more clean journal states.

Expand Down
23 changes: 15 additions & 8 deletions fs/ntfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2845,23 +2845,30 @@ int ntfs_setattr(struct dentry *dentry, struct iattr *attr)

err = inode_change_ok(vi, attr);
if (err)
return err;

goto out;
/* We do not support NTFS ACLs yet. */
if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
ntfs_warning(vi->i_sb, "Changes in user/group/mode are not "
"supported yet, ignoring.");
err = -EOPNOTSUPP;
goto out;
}

if (ia_valid & ATTR_SIZE) {
if (attr->ia_size != i_size_read(vi)) {
ntfs_warning(vi->i_sb, "Changes in inode size are not "
"supported yet, ignoring.");
err = -EOPNOTSUPP;
// TODO: Implement...
// err = vmtruncate(vi, attr->ia_size);
ntfs_inode *ni = NTFS_I(vi);
/*
* FIXME: For now we do not support resizing of
* compressed or encrypted files yet.
*/
if (NInoCompressed(ni) || NInoEncrypted(ni)) {
ntfs_warning(vi->i_sb, "Changes in inode size "
"are not supported yet for "
"%s files, ignoring.",
NInoCompressed(ni) ?
"compressed" : "encrypted");
err = -EOPNOTSUPP;
} else
err = vmtruncate(vi, attr->ia_size);
if (err || ia_valid == ATTR_SIZE)
goto out;
} else {
Expand Down

0 comments on commit e943825

Please sign in to comment.