diff options
Diffstat (limited to 'fs/ntfs3/inode.c')
-rw-r--r-- | fs/ntfs3/inode.c | 229 |
1 files changed, 121 insertions, 108 deletions
diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 520471f35e29..b86ec7dd731c 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -20,9 +20,7 @@ #include "ntfs_fs.h" /* - * ntfs_read_mft - * - * reads record and parses MFT + * ntfs_read_mft - Read record and parses MFT. */ static struct inode *ntfs_read_mft(struct inode *inode, const struct cpu_str *name, @@ -91,7 +89,7 @@ static struct inode *ntfs_read_mft(struct inode *inode, } if (le32_to_cpu(rec->total) != sbi->record_size) { - // bad inode? + // Bad inode? err = -EINVAL; goto out; } @@ -99,17 +97,17 @@ static struct inode *ntfs_read_mft(struct inode *inode, if (!is_rec_base(rec)) goto Ok; - /* record should contain $I30 root */ + /* Record should contain $I30 root. */ is_dir = rec->flags & RECORD_FLAG_DIR; inode->i_generation = le16_to_cpu(rec->seq); - /* Enumerate all struct Attributes MFT */ + /* Enumerate all struct Attributes MFT. */ le = NULL; attr = NULL; /* - * to reduce tab pressure use goto instead of + * To reduce tab pressure use goto instead of * while( (attr = ni_enum_attr_ex(ni, attr, &le, NULL) )) */ next_attr: @@ -120,7 +118,7 @@ next_attr: goto end_enum; if (le && le->vcn) { - /* This is non primary attribute segment. Ignore if not MFT */ + /* This is non primary attribute segment. Ignore if not MFT. */ if (ino != MFT_REC_MFT || attr->type != ATTR_DATA) goto next_attr; @@ -190,7 +188,7 @@ next_attr: case ATTR_DATA: if (is_dir) { - /* ignore data attribute in dir record */ + /* Ignore data attribute in dir record. */ goto next_attr; } @@ -204,7 +202,7 @@ next_attr: (ino != MFT_REC_SECURE || !attr->non_res || attr->name_len != ARRAY_SIZE(SDS_NAME) || memcmp(attr_name(attr), SDS_NAME, sizeof(SDS_NAME))))) { - /* file contains stream attribute. ignore it */ + /* File contains stream attribute. Ignore it. */ goto next_attr; } @@ -327,10 +325,10 @@ next_attr: t32 = le16_to_cpu(attr->nres.run_off); } - /* Looks like normal symlink */ + /* Looks like normal symlink. */ ni->i_valid = inode->i_size; - /* Clear directory bit */ + /* Clear directory bit. */ if (ni->ni_flags & NI_FLAG_DIR) { indx_clear(&ni->dir); memset(&ni->dir, 0, sizeof(ni->dir)); @@ -342,7 +340,7 @@ next_attr: is_dir = false; if (attr->non_res) { run = &ni->file.run; - goto attr_unpack_run; // double break + goto attr_unpack_run; // Double break. } break; @@ -388,7 +386,7 @@ end_enum: goto out; if (!is_match && name) { - /* reuse rec as buffer for ascii name */ + /* Reuse rec as buffer for ascii name. */ err = -ENOENT; goto out; } @@ -407,9 +405,9 @@ end_enum: ni->std_fa |= FILE_ATTRIBUTE_DIRECTORY; /* - * dot and dot-dot should be included in count but was not + * Dot and dot-dot should be included in count but was not * included in enumeration. - * Usually a hard links to directories are disabled + * Usually a hard links to directories are disabled. */ inode->i_op = &ntfs_dir_inode_operations; inode->i_fop = &ntfs_dir_operations; @@ -433,7 +431,7 @@ end_enum: init_special_inode(inode, mode, inode->i_rdev); } else if (fname && fname->home.low == cpu_to_le32(MFT_REC_EXTEND) && fname->home.seq == cpu_to_le16(MFT_REC_EXTEND)) { - /* Records in $Extend are not a files or general directories */ + /* Records in $Extend are not a files or general directories. */ } else { err = -EINVAL; goto out; @@ -449,7 +447,7 @@ end_enum: inode->i_mode = mode; if (!(ni->ni_flags & NI_FLAG_EA)) { - /* if no xattr then no security (stored in xattr) */ + /* If no xattr then no security (stored in xattr). */ inode->i_flags |= S_NOSEC; } @@ -469,7 +467,11 @@ out: return ERR_PTR(err); } -/* returns 1 if match */ +/* + * ntfs_test_inode + * + * Return: 1 if match. + */ static int ntfs_test_inode(struct inode *inode, void *data) { struct MFT_REF *ref = data; @@ -499,7 +501,7 @@ struct inode *ntfs_iget5(struct super_block *sb, const struct MFT_REF *ref, if (inode->i_state & I_NEW) inode = ntfs_read_mft(inode, name, ref); else if (ref->seq != ntfs_i(inode)->mi.mrec->seq) { - /* inode overlaps? */ + /* Inode overlaps? */ make_bad_inode(inode); } @@ -530,18 +532,18 @@ static noinline int ntfs_get_block_vbo(struct inode *inode, u64 vbo, CLST vcn, lcn, len; bool new; - /*clear previous state*/ + /* Clear previous state. */ clear_buffer_new(bh); clear_buffer_uptodate(bh); - /* direct write uses 'create=0'*/ + /* Direct write uses 'create=0'. */ if (!create && vbo >= ni->i_valid) { - /* out of valid */ + /* Out of valid. */ return 0; } if (vbo >= inode->i_size) { - /* out of size */ + /* Out of size. */ return 0; } @@ -593,7 +595,7 @@ static noinline int ntfs_get_block_vbo(struct inode *inode, u64 vbo, valid = ni->i_valid; if (ctx == GET_BLOCK_DIRECT_IO_W) { - /*ntfs_direct_IO will update ni->i_valid */ + /* ntfs_direct_IO will update ni->i_valid. */ if (vbo >= valid) set_buffer_new(bh); } else if (create) { @@ -609,17 +611,17 @@ static noinline int ntfs_get_block_vbo(struct inode *inode, u64 vbo, mark_inode_dirty(inode); } } else if (vbo >= valid) { - /* read out of valid data*/ - /* should never be here 'cause already checked */ + /* Read out of valid data. */ + /* Should never be here 'cause already checked. */ clear_buffer_mapped(bh); } else if (vbo + bytes <= valid) { - /* normal read */ + /* Normal read. */ } else if (vbo + block_size <= valid) { - /* normal short read */ + /* Normal short read. */ bytes = block_size; } else { /* - * read across valid size: vbo < valid && valid < vbo + block_size + * Read across valid size: vbo < valid && valid < vbo + block_size */ bytes = block_size; @@ -700,7 +702,7 @@ static int ntfs_readpage(struct file *file, struct page *page) return err; } - /* normal + sparse files */ + /* Normal + sparse files. */ return mpage_readpage(page, ntfs_get_block); } @@ -713,12 +715,12 @@ static void ntfs_readahead(struct readahead_control *rac) loff_t pos; if (is_resident(ni)) { - /* no readahead for resident */ + /* No readahead for resident. */ return; } if (is_compressed(ni)) { - /* no readahead for compressed */ + /* No readahead for compressed. */ return; } @@ -727,7 +729,7 @@ static void ntfs_readahead(struct readahead_control *rac) if (valid < i_size_read(inode) && pos <= valid && valid < pos + readahead_length(rac)) { - /* range cross 'valid'. read it page by page */ + /* Range cross 'valid'. Read it page by page. */ return; } @@ -761,7 +763,7 @@ static ssize_t ntfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) ssize_t ret; if (is_resident(ni)) { - /*switch to buffered write*/ + /* Switch to buffered write. */ ret = 0; goto out; } @@ -781,7 +783,7 @@ static ssize_t ntfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter) mark_inode_dirty(inode); } } else if (vbo < valid && valid < end) { - /* fix page */ + /* Fix page. */ iov_iter_revert(iter, end - valid); iov_iter_zero(end - valid, iter); } @@ -797,7 +799,7 @@ int ntfs_set_size(struct inode *inode, u64 new_size) struct ntfs_inode *ni = ntfs_i(inode); int err; - /* Check for maximum file size */ + /* Check for maximum file size. */ if (is_sparsed(ni) || is_compressed(ni)) { if (new_size > sbi->maxbytes_sparse) { err = -EFBIG; @@ -848,7 +850,7 @@ static int ntfs_writepages(struct address_space *mapping, { struct inode *inode = mapping->host; struct ntfs_inode *ni = ntfs_i(inode); - /* redirect call to 'ntfs_writepage' for resident files*/ + /* Redirect call to 'ntfs_writepage' for resident files. */ get_block_t *get_block = is_resident(ni) ? NULL : &ntfs_get_block; return mpage_writepages(mapping, wbc, get_block); @@ -901,7 +903,9 @@ out: return err; } -/* address_space_operations::write_end */ +/* + * ntfs_write_end - Address_space_operations::write_end. + */ static int ntfs_write_end(struct file *file, struct address_space *mapping, loff_t pos, u32 len, u32 copied, struct page *page, void *fsdata) @@ -919,7 +923,7 @@ static int ntfs_write_end(struct file *file, struct address_space *mapping, ni_unlock(ni); if (!err) { dirty = true; - /* clear any buffers in page*/ + /* Clear any buffers in page. */ if (page_has_buffers(page)) { struct buffer_head *head, *bh; @@ -948,7 +952,7 @@ static int ntfs_write_end(struct file *file, struct address_space *mapping, } if (valid != ni->i_valid) { - /* ni->i_valid is changed in ntfs_get_block_vbo */ + /* ni->i_valid is changed in ntfs_get_block_vbo. */ dirty = true; } @@ -1009,10 +1013,11 @@ int ntfs_sync_inode(struct inode *inode) } /* - * helper function for ntfs_flush_inodes. This writes both the inode - * and the file data blocks, waiting for in flight data blocks before - * the start of the call. It does not wait for any io started - * during the call + * writeback_inode - Helper function for ntfs_flush_inodes(). + * + * This writes both the inode and the file data blocks, waiting + * for in flight data blocks before the start of the call. It + * does not wait for any io started during the call. */ static int writeback_inode(struct inode *inode) { @@ -1024,12 +1029,14 @@ static int writeback_inode(struct inode *inode) } /* - * write data and metadata corresponding to i1 and i2. The io is + * ntfs_flush_inodes + * + * Write data and metadata corresponding to i1 and i2. The io is * started but we do not wait for any of it to finish. * - * filemap_flush is used for the block device, so if there is a dirty + * filemap_flush() is used for the block device, so if there is a dirty * page for a block already in flight, we will not wait and start the - * io over again + * io over again. */ int ntfs_flush_inodes(struct super_block *sb, struct inode *i1, struct inode *i2) @@ -1049,7 +1056,7 @@ int inode_write_data(struct inode *inode, const void *data, size_t bytes) { pgoff_t idx; - /* Write non resident data */ + /* Write non resident data. */ for (idx = 0; bytes; idx++) { size_t op = bytes > PAGE_SIZE ? PAGE_SIZE : bytes; struct page *page = ntfs_map_page(inode->i_mapping, idx); @@ -1076,12 +1083,14 @@ int inode_write_data(struct inode *inode, const void *data, size_t bytes) } /* - * number of bytes to for REPARSE_DATA_BUFFER(IO_REPARSE_TAG_SYMLINK) - * for unicode string of 'uni_len' length + * ntfs_reparse_bytes + * + * Number of bytes to for REPARSE_DATA_BUFFER(IO_REPARSE_TAG_SYMLINK) + * for unicode string of @uni_len length. */ static inline u32 ntfs_reparse_bytes(u32 uni_len) { - /* header + unicode string + decorated unicode string */ + /* Header + unicode string + decorated unicode string. */ return sizeof(short) * (2 * uni_len + 4) + offsetof(struct REPARSE_DATA_BUFFER, SymbolicLinkReparseBuffer.PathBuffer); @@ -1103,14 +1112,14 @@ ntfs_create_reparse_buffer(struct ntfs_sb_info *sbi, const char *symname, rs = &rp->SymbolicLinkReparseBuffer; rp_name = rs->PathBuffer; - /* Convert link name to utf16 */ + /* Convert link name to UTF-16. */ err = ntfs_nls_to_utf16(sbi, symname, size, (struct cpu_str *)(rp_name - 1), 2 * size, UTF16_LITTLE_ENDIAN); if (err < 0) goto out; - /* err = the length of unicode name of symlink */ + /* err = the length of unicode name of symlink. */ *nsize = ntfs_reparse_bytes(err); if (*nsize > sbi->reparse.max_size) { @@ -1118,7 +1127,7 @@ ntfs_create_reparse_buffer(struct ntfs_sb_info *sbi, const char *symname, goto out; } - /* translate linux '/' into windows '\' */ + /* Translate Linux '/' into Windows '\'. */ for (i = 0; i < err; i++) { if (rp_name[i] == cpu_to_le16('/')) rp_name[i] = cpu_to_le16('\\'); @@ -1129,20 +1138,21 @@ ntfs_create_reparse_buffer(struct ntfs_sb_info *sbi, const char *symname, cpu_to_le16(*nsize - offsetof(struct REPARSE_DATA_BUFFER, SymbolicLinkReparseBuffer)); - /* PrintName + SubstituteName */ + /* PrintName + SubstituteName. */ rs->SubstituteNameOffset = cpu_to_le16(sizeof(short) * err); rs->SubstituteNameLength = cpu_to_le16(sizeof(short) * err + 8); rs->PrintNameLength = rs->SubstituteNameOffset; /* - * TODO: use relative path if possible to allow windows to parse this path - * 0-absolute path 1- relative path (SYMLINK_FLAG_RELATIVE) + * TODO: Use relative path if possible to allow Windows to + * parse this path. + * 0-absolute path 1- relative path (SYMLINK_FLAG_RELATIVE). */ rs->Flags = 0; memmove(rp_name + err + 4, rp_name, sizeof(short) * err); - /* decorate SubstituteName */ + /* Decorate SubstituteName. */ rp_name += err; rp_name[0] = cpu_to_le16('\\'); rp_name[1] = cpu_to_le16('?'); @@ -1204,13 +1214,13 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, fa = FILE_ATTRIBUTE_REPARSE_POINT; /* - * linux: there are dir/file/symlink and so on - * NTFS: symlinks are "dir + reparse" or "file + reparse" + * linux: there are dir/file/symlink and so on. + * NTFS: symlinks are "dir + reparse" or "file + reparse". * It is good idea to create: * dir + reparse if 'symname' points to directory * or * file + reparse if 'symname' points to file - * Unfortunately kern_path hangs if symname contains 'dir' + * Unfortunately kern_path hangs if symname contains 'dir'. */ /* @@ -1229,14 +1239,14 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, */ } else if (S_ISREG(mode)) { if (sbi->options.sparse) { - /* sparsed regular file, cause option 'sparse' */ + /* Sparsed regular file, cause option 'sparse'. */ fa = FILE_ATTRIBUTE_SPARSE_FILE | FILE_ATTRIBUTE_ARCHIVE; } else if (dir_ni->std_fa & FILE_ATTRIBUTE_COMPRESSED) { - /* compressed regular file, if parent is compressed */ + /* Compressed regular file, if parent is compressed. */ fa = FILE_ATTRIBUTE_COMPRESSED | FILE_ATTRIBUTE_ARCHIVE; } else { - /* regular file, default attributes */ + /* Regular file, default attributes. */ fa = FILE_ATTRIBUTE_ARCHIVE; } } else { @@ -1246,17 +1256,17 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, if (!(mode & 0222)) fa |= FILE_ATTRIBUTE_READONLY; - /* allocate PATH_MAX bytes */ + /* Allocate PATH_MAX bytes. */ new_de = __getname(); if (!new_de) { err = -ENOMEM; goto out1; } - /*mark rw ntfs as dirty. it will be cleared at umount*/ + /* Mark rw ntfs as dirty. it will be cleared at umount. */ ntfs_set_state(sbi, NTFS_DIRTY_DIRTY); - /* Step 1: allocate and fill new mft record */ + /* Step 1: allocate and fill new mft record. */ err = ntfs_look_free_mft(sbi, &ino, false, NULL, NULL); if (err) goto out2; @@ -1277,7 +1287,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, rec->hard_links = cpu_to_le16(1); attr = Add2Ptr(rec, le16_to_cpu(rec->attr_off)); - /* Get default security id */ + /* Get default security id. */ sd = s_default_security; sd_size = sizeof(s_default_security); @@ -1293,7 +1303,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, } } - /* Insert standard info */ + /* Insert standard info. */ std5 = Add2Ptr(attr, SIZEOF_RESIDENT); if (security_id == SECURITY_ID_INVALID) { @@ -1319,7 +1329,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, attr = Add2Ptr(attr, asize); - /* Insert file name */ + /* Insert file name. */ err = fill_name_de(sbi, new_de, name, uni); if (err) goto out4; @@ -1348,7 +1358,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, attr = Add2Ptr(attr, asize); if (security_id == SECURITY_ID_INVALID) { - /* Insert security attribute */ + /* Insert security attribute. */ asize = SIZEOF_RESIDENT + ALIGN(sd_size, 8); attr->type = ATTR_SECURE; @@ -1363,8 +1373,8 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, if (fa & FILE_ATTRIBUTE_DIRECTORY) { /* - * regular directory or symlink to directory - * Create root attribute + * Regular directory or symlink to directory. + * Create root attribute. */ dsize = sizeof(struct INDEX_ROOT) + sizeof(struct NTFS_DE); asize = sizeof(I30_NAME) + SIZEOF_RESIDENT + dsize; @@ -1394,12 +1404,12 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, e->flags = NTFS_IE_LAST; } else if (S_ISLNK(mode)) { /* - * symlink to file - * Create empty resident data attribute + * Symlink to file. + * Create empty resident data attribute. */ asize = SIZEOF_RESIDENT; - /* insert empty ATTR_DATA */ + /* Insert empty ATTR_DATA */ attr->type = ATTR_DATA; attr->size = cpu_to_le32(SIZEOF_RESIDENT); attr->id = cpu_to_le16(aid++); @@ -1407,13 +1417,13 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, attr->res.data_off = SIZEOF_RESIDENT_LE; } else { /* - * regular file or node + * Regular file or node. */ attr->type = ATTR_DATA; attr->id = cpu_to_le16(aid++); if (S_ISREG(mode)) { - /* Create empty non resident data attribute */ + /* Create empty non resident data attribute. */ attr->non_res = 1; attr->nres.evcn = cpu_to_le64(-1ll); if (fa & FILE_ATTRIBUTE_SPARSE_FILE) { @@ -1437,7 +1447,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, } attr->nres.run_off = attr->name_off; } else { - /* Create empty resident data attribute */ + /* Create empty resident data attribute. */ attr->size = cpu_to_le32(SIZEOF_RESIDENT); attr->name_off = SIZEOF_RESIDENT_LE; if (fa & FILE_ATTRIBUTE_SPARSE_FILE) @@ -1465,13 +1475,13 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, } /* - * Insert ATTR_REPARSE + * Insert ATTR_REPARSE. */ attr = Add2Ptr(attr, asize); attr->type = ATTR_REPARSE; attr->id = cpu_to_le16(aid++); - /* resident or non resident? */ + /* Resident or non resident? */ asize = ALIGN(SIZEOF_RESIDENT + nsize, 8); t16 = PtrOffset(rec, attr); @@ -1479,7 +1489,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, CLST alen; CLST clst = bytes_to_cluster(sbi, nsize); - /* bytes per runs */ + /* Bytes per runs. */ t16 = sbi->record_size - t16 - SIZEOF_NONRESIDENT; attr->non_res = 1; @@ -1534,12 +1544,12 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, rec->used = cpu_to_le32(PtrOffset(rec, attr) + 8); rec->next_attr_id = cpu_to_le16(aid); - /* Step 2: Add new name in index */ + /* Step 2: Add new name in index. */ err = indx_insert_entry(&dir_ni->dir, dir_ni, new_de, sbi, fnd); if (err) goto out6; - /* Update current directory record */ + /* Update current directory record. */ mark_inode_dirty(dir); inode->i_generation = le16_to_cpu(rec->seq); @@ -1577,26 +1587,29 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, inode->i_flags |= S_NOSEC; } - /* Write non resident data */ + /* Write non resident data. */ if (nsize) { err = ntfs_sb_write_run(sbi, &ni->file.run, 0, rp, nsize); if (err) goto out7; } - /* call 'd_instantiate' after inode->i_op is set but before finish_open */ + /* + * Call 'd_instantiate' after inode->i_op is set + * but before finish_open. + */ d_instantiate(dentry, inode); ntfs_save_wsl_perm(inode); mark_inode_dirty(inode); mark_inode_dirty(dir); - /* normal exit */ + /* Normal exit. */ goto out2; out7: - /* undo 'indx_insert_entry' */ + /* Undo 'indx_insert_entry'. */ indx_delete_entry(&dir_ni->dir, dir_ni, new_de + 1, le16_to_cpu(new_de->key_size), sbi); out6: @@ -1649,15 +1662,15 @@ int ntfs_link_inode(struct inode *inode, struct dentry *dentry) if (!dir_root) return -EINVAL; - /* allocate PATH_MAX bytes */ + /* Allocate PATH_MAX bytes. */ new_de = __getname(); if (!new_de) return -ENOMEM; - /*mark rw ntfs as dirty. it will be cleared at umount*/ + /* Mark rw ntfs as dirty. It will be cleared at umount. */ ntfs_set_state(ni->mi.sbi, NTFS_DIRTY_DIRTY); - // Insert file name + /* Insert file name. */ err = fill_name_de(sbi, new_de, name, NULL); if (err) goto out; @@ -1731,23 +1744,23 @@ int ntfs_unlink_inode(struct inode *dir, const struct dentry *dentry) goto out1; } - /* allocate PATH_MAX bytes */ + /* Allocate PATH_MAX bytes. */ uni = __getname(); if (!uni) { err = -ENOMEM; goto out1; } - /* Convert input string to unicode */ + /* Convert input string to unicode. */ err = ntfs_nls_to_utf16(sbi, name->name, name->len, uni, NTFS_NAME_LEN, UTF16_HOST_ENDIAN); if (err < 0) goto out2; - /*mark rw ntfs as dirty. it will be cleared at umount*/ + /* Mark rw ntfs as dirty. It will be cleared at umount. */ ntfs_set_state(sbi, NTFS_DIRTY_DIRTY); - /* find name in record */ + /* Find name in record. */ mi_get_ref(&dir_ni->mi, &ref); le = NULL; @@ -1764,14 +1777,14 @@ int ntfs_unlink_inode(struct inode *dir, const struct dentry *dentry) if (err) goto out3; - /* Then remove name from mft */ + /* Then remove name from MFT. */ ni_remove_attr_le(ni, attr_from_name(fname), le); le16_add_cpu(&ni->mi.mrec->hard_links, -1); ni->mi.dirty = true; if (name_type != FILE_NAME_POSIX) { - /* Now we should delete name by type */ + /* Now we should delete name by type. */ fname = ni_fname_type(ni, name_type, &le); if (fname) { err = indx_delete_entry(indx, dir_ni, fname, @@ -1837,13 +1850,13 @@ static noinline int ntfs_readlink_hlp(struct inode *inode, char *buffer, struct le_str *uni; struct ATTRIB *attr; - /* Reparse data present. Try to parse it */ + /* Reparse data present. Try to parse it. */ static_assert(!offsetof(struct REPARSE_DATA_BUFFER, ReparseTag)); static_assert(sizeof(u32) == sizeof(rp->ReparseTag)); *buffer = 0; - /* Read into temporal buffer */ + /* Read into temporal buffer. */ if (i_size > sbi->reparse.max_size || i_size <= sizeof(u32)) { err = -EINVAL; goto out; @@ -1875,10 +1888,10 @@ static noinline int ntfs_readlink_hlp(struct inode *inode, char *buffer, err = -EINVAL; - /* Microsoft Tag */ + /* Microsoft Tag. */ switch (rp->ReparseTag) { case IO_REPARSE_TAG_MOUNT_POINT: - /* Mount points and junctions */ + /* Mount points and junctions. */ /* Can we use 'Rp->MountPointReparseBuffer.PrintNameLength'? */ if (i_size <= offsetof(struct REPARSE_DATA_BUFFER, MountPointReparseBuffer.PathBuffer)) @@ -1940,20 +1953,20 @@ static noinline int ntfs_readlink_hlp(struct inode *inode, char *buffer, goto out; } - /* Users tag */ + /* Users tag. */ uni = Add2Ptr(rp, sizeof(struct REPARSE_POINT) - 2); nlen = le16_to_cpu(rp->ReparseDataLength) - sizeof(struct REPARSE_POINT); } - /* Convert nlen from bytes to UNICODE chars */ + /* Convert nlen from bytes to UNICODE chars. */ nlen >>= 1; - /* Check that name is available */ + /* Check that name is available. */ if (!nlen || &uni->name[nlen] > (__le16 *)Add2Ptr(rp, i_size)) goto out; - /* If name is already zero terminated then truncate it now */ + /* If name is already zero terminated then truncate it now. */ if (!uni->name[nlen - 1]) nlen -= 1; uni->len = nlen; @@ -1963,13 +1976,13 @@ static noinline int ntfs_readlink_hlp(struct inode *inode, char *buffer, if (err < 0) goto out; - /* translate windows '\' into linux '/' */ + /* Translate Windows '\' into Linux '/'. */ for (i = 0; i < err; i++) { if (buffer[i] == '\\') buffer[i] = '/'; } - /* Always set last zero */ + /* Always set last zero. */ buffer[err] = 0; out: kfree(to_free); |