Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 7775
b: refs/heads/master
c: 311120e
h: refs/heads/master
i:
  7773: 4804653
  7771: be04979
  7767: b5158bf
  7759: 6011e16
  7743: e5c3c27
v: v3
  • Loading branch information
Anton Altaparmakov committed Sep 8, 2005
1 parent 9b687d8 commit 39e281d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8273d5d4c28a9fde68f830cc6ff61e37e8ae1dca
refs/heads/master: 311120eca0013083f5eb0aff13ffb8aa9fdd050c
5 changes: 2 additions & 3 deletions trunk/fs/ntfs/ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,10 @@ ToDo/Notes:
- Truncate {a,c,m}time to the ntfs supported time granularity when
updating the times in the inode in ntfs_setattr().
- Fixup handling of sparse, compressed, and encrypted attributes in
fs/ntfs/inode.c::ntfs_read_locked_{,attr_,index_}inode().
fs/ntfs/inode.c::ntfs_read_locked_{,attr_,index_}inode(),
fs/ntfs/aops.c::ntfs_{read,write}page().
- Make ntfs_write_block() not instantiate sparse blocks if they contain
only zeroes.
- Fixup handling of sparse, compressed, and encrypted attributes in
fs/ntfs/aops.c::ntfs_writepage().
- Optimize fs/ntfs/aops.c::ntfs_write_block() by extending the page
lock protection over the buffer submission for i/o which allows the
removal of the get_bh()/put_bh() pairs for each buffer.
Expand Down
41 changes: 24 additions & 17 deletions trunk/fs/ntfs/aops.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,31 +379,38 @@ static int ntfs_readpage(struct file *file, struct page *page)
return 0;
}
ni = NTFS_I(page->mapping->host);

/*
* Only $DATA attributes can be encrypted and only unnamed $DATA
* attributes can be compressed. Index root can have the flags set but
* this means to create compressed/encrypted files, not that the
* attribute is compressed/encrypted.
*/
if (ni->type != AT_INDEX_ROOT) {
/* If attribute is encrypted, deny access, just like NT4. */
if (NInoEncrypted(ni)) {
BUG_ON(ni->type != AT_DATA);
err = -EACCES;
goto err_out;
}
/* Compressed data streams are handled in compress.c. */
if (NInoNonResident(ni) && NInoCompressed(ni)) {
BUG_ON(ni->type != AT_DATA);
BUG_ON(ni->name_len);
return ntfs_read_compressed_block(page);
}
}
/* NInoNonResident() == NInoIndexAllocPresent() */
if (NInoNonResident(ni)) {
/*
* Only unnamed $DATA attributes can be compressed or
* encrypted.
*/
if (ni->type == AT_DATA && !ni->name_len) {
/* If file is encrypted, deny access, just like NT4. */
if (NInoEncrypted(ni)) {
err = -EACCES;
goto err_out;
}
/* Compressed data streams are handled in compress.c. */
if (NInoCompressed(ni))
return ntfs_read_compressed_block(page);
}
/* Normal data stream. */
/* Normal, non-resident data stream. */
return ntfs_read_block(page);
}
/*
* Attribute is resident, implying it is not compressed or encrypted.
* This also means the attribute is smaller than an mft record and
* hence smaller than a page, so can simply zero out any pages with
* index above 0.
* index above 0. Note the attribute can actually be marked compressed
* but if it is resident the actual data is not compressed so we are
* ok to ignore the compressed flag here.
*/
if (unlikely(page->index > 0)) {
kaddr = kmap_atomic(page, KM_USER0);
Expand Down

0 comments on commit 39e281d

Please sign in to comment.