|
@@ -46,7 +46,7 @@
|
|
* nilfs uses block-sized chunks. Arguably, sector-sized ones would be
|
|
* nilfs uses block-sized chunks. Arguably, sector-sized ones would be
|
|
* more robust, but we have what we have
|
|
* more robust, but we have what we have
|
|
*/
|
|
*/
|
|
-static inline unsigned nilfs_chunk_size(struct inode *inode)
|
|
|
|
|
|
+static inline unsigned int nilfs_chunk_size(struct inode *inode)
|
|
{
|
|
{
|
|
return inode->i_sb->s_blocksize;
|
|
return inode->i_sb->s_blocksize;
|
|
}
|
|
}
|
|
@@ -61,9 +61,9 @@ static inline void nilfs_put_page(struct page *page)
|
|
* Return the offset into page `page_nr' of the last valid
|
|
* Return the offset into page `page_nr' of the last valid
|
|
* byte in that page, plus one.
|
|
* byte in that page, plus one.
|
|
*/
|
|
*/
|
|
-static unsigned nilfs_last_byte(struct inode *inode, unsigned long page_nr)
|
|
|
|
|
|
+static unsigned int nilfs_last_byte(struct inode *inode, unsigned long page_nr)
|
|
{
|
|
{
|
|
- unsigned last_byte = inode->i_size;
|
|
|
|
|
|
+ unsigned int last_byte = inode->i_size;
|
|
|
|
|
|
last_byte -= page_nr << PAGE_SHIFT;
|
|
last_byte -= page_nr << PAGE_SHIFT;
|
|
if (last_byte > PAGE_SIZE)
|
|
if (last_byte > PAGE_SIZE)
|
|
@@ -71,7 +71,8 @@ static unsigned nilfs_last_byte(struct inode *inode, unsigned long page_nr)
|
|
return last_byte;
|
|
return last_byte;
|
|
}
|
|
}
|
|
|
|
|
|
-static int nilfs_prepare_chunk(struct page *page, unsigned from, unsigned to)
|
|
|
|
|
|
+static int nilfs_prepare_chunk(struct page *page, unsigned int from,
|
|
|
|
+ unsigned int to)
|
|
{
|
|
{
|
|
loff_t pos = page_offset(page) + from;
|
|
loff_t pos = page_offset(page) + from;
|
|
|
|
|
|
@@ -80,12 +81,12 @@ static int nilfs_prepare_chunk(struct page *page, unsigned from, unsigned to)
|
|
|
|
|
|
static void nilfs_commit_chunk(struct page *page,
|
|
static void nilfs_commit_chunk(struct page *page,
|
|
struct address_space *mapping,
|
|
struct address_space *mapping,
|
|
- unsigned from, unsigned to)
|
|
|
|
|
|
+ unsigned int from, unsigned int to)
|
|
{
|
|
{
|
|
struct inode *dir = mapping->host;
|
|
struct inode *dir = mapping->host;
|
|
loff_t pos = page_offset(page) + from;
|
|
loff_t pos = page_offset(page) + from;
|
|
- unsigned len = to - from;
|
|
|
|
- unsigned nr_dirty, copied;
|
|
|
|
|
|
+ unsigned int len = to - from;
|
|
|
|
+ unsigned int nr_dirty, copied;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
nr_dirty = nilfs_page_count_clean_buffers(page, from, to);
|
|
nr_dirty = nilfs_page_count_clean_buffers(page, from, to);
|
|
@@ -103,10 +104,10 @@ static bool nilfs_check_page(struct page *page)
|
|
{
|
|
{
|
|
struct inode *dir = page->mapping->host;
|
|
struct inode *dir = page->mapping->host;
|
|
struct super_block *sb = dir->i_sb;
|
|
struct super_block *sb = dir->i_sb;
|
|
- unsigned chunk_size = nilfs_chunk_size(dir);
|
|
|
|
|
|
+ unsigned int chunk_size = nilfs_chunk_size(dir);
|
|
char *kaddr = page_address(page);
|
|
char *kaddr = page_address(page);
|
|
- unsigned offs, rec_len;
|
|
|
|
- unsigned limit = PAGE_SIZE;
|
|
|
|
|
|
+ unsigned int offs, rec_len;
|
|
|
|
+ unsigned int limit = PAGE_SIZE;
|
|
struct nilfs_dir_entry *p;
|
|
struct nilfs_dir_entry *p;
|
|
char *error;
|
|
char *error;
|
|
|
|
|
|
@@ -256,7 +257,6 @@ static int nilfs_readdir(struct file *file, struct dir_context *ctx)
|
|
unsigned int offset = pos & ~PAGE_MASK;
|
|
unsigned int offset = pos & ~PAGE_MASK;
|
|
unsigned long n = pos >> PAGE_SHIFT;
|
|
unsigned long n = pos >> PAGE_SHIFT;
|
|
unsigned long npages = dir_pages(inode);
|
|
unsigned long npages = dir_pages(inode);
|
|
-/* unsigned chunk_mask = ~(nilfs_chunk_size(inode)-1); */
|
|
|
|
|
|
|
|
if (pos > inode->i_size - NILFS_DIR_REC_LEN(1))
|
|
if (pos > inode->i_size - NILFS_DIR_REC_LEN(1))
|
|
return 0;
|
|
return 0;
|
|
@@ -318,7 +318,7 @@ nilfs_find_entry(struct inode *dir, const struct qstr *qstr,
|
|
{
|
|
{
|
|
const unsigned char *name = qstr->name;
|
|
const unsigned char *name = qstr->name;
|
|
int namelen = qstr->len;
|
|
int namelen = qstr->len;
|
|
- unsigned reclen = NILFS_DIR_REC_LEN(namelen);
|
|
|
|
|
|
+ unsigned int reclen = NILFS_DIR_REC_LEN(namelen);
|
|
unsigned long start, n;
|
|
unsigned long start, n;
|
|
unsigned long npages = dir_pages(dir);
|
|
unsigned long npages = dir_pages(dir);
|
|
struct page *page = NULL;
|
|
struct page *page = NULL;
|
|
@@ -408,8 +408,8 @@ ino_t nilfs_inode_by_name(struct inode *dir, const struct qstr *qstr)
|
|
void nilfs_set_link(struct inode *dir, struct nilfs_dir_entry *de,
|
|
void nilfs_set_link(struct inode *dir, struct nilfs_dir_entry *de,
|
|
struct page *page, struct inode *inode)
|
|
struct page *page, struct inode *inode)
|
|
{
|
|
{
|
|
- unsigned from = (char *) de - (char *) page_address(page);
|
|
|
|
- unsigned to = from + nilfs_rec_len_from_disk(de->rec_len);
|
|
|
|
|
|
+ unsigned int from = (char *)de - (char *)page_address(page);
|
|
|
|
+ unsigned int to = from + nilfs_rec_len_from_disk(de->rec_len);
|
|
struct address_space *mapping = page->mapping;
|
|
struct address_space *mapping = page->mapping;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
@@ -431,15 +431,15 @@ int nilfs_add_link(struct dentry *dentry, struct inode *inode)
|
|
struct inode *dir = d_inode(dentry->d_parent);
|
|
struct inode *dir = d_inode(dentry->d_parent);
|
|
const unsigned char *name = dentry->d_name.name;
|
|
const unsigned char *name = dentry->d_name.name;
|
|
int namelen = dentry->d_name.len;
|
|
int namelen = dentry->d_name.len;
|
|
- unsigned chunk_size = nilfs_chunk_size(dir);
|
|
|
|
- unsigned reclen = NILFS_DIR_REC_LEN(namelen);
|
|
|
|
|
|
+ unsigned int chunk_size = nilfs_chunk_size(dir);
|
|
|
|
+ unsigned int reclen = NILFS_DIR_REC_LEN(namelen);
|
|
unsigned short rec_len, name_len;
|
|
unsigned short rec_len, name_len;
|
|
struct page *page = NULL;
|
|
struct page *page = NULL;
|
|
struct nilfs_dir_entry *de;
|
|
struct nilfs_dir_entry *de;
|
|
unsigned long npages = dir_pages(dir);
|
|
unsigned long npages = dir_pages(dir);
|
|
unsigned long n;
|
|
unsigned long n;
|
|
char *kaddr;
|
|
char *kaddr;
|
|
- unsigned from, to;
|
|
|
|
|
|
+ unsigned int from, to;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -531,13 +531,14 @@ int nilfs_delete_entry(struct nilfs_dir_entry *dir, struct page *page)
|
|
struct address_space *mapping = page->mapping;
|
|
struct address_space *mapping = page->mapping;
|
|
struct inode *inode = mapping->host;
|
|
struct inode *inode = mapping->host;
|
|
char *kaddr = page_address(page);
|
|
char *kaddr = page_address(page);
|
|
- unsigned from = ((char *)dir - kaddr) & ~(nilfs_chunk_size(inode) - 1);
|
|
|
|
- unsigned to = ((char *)dir - kaddr) +
|
|
|
|
- nilfs_rec_len_from_disk(dir->rec_len);
|
|
|
|
- struct nilfs_dir_entry *pde = NULL;
|
|
|
|
- struct nilfs_dir_entry *de = (struct nilfs_dir_entry *)(kaddr + from);
|
|
|
|
|
|
+ unsigned int from, to;
|
|
|
|
+ struct nilfs_dir_entry *de, *pde = NULL;
|
|
int err;
|
|
int err;
|
|
|
|
|
|
|
|
+ from = ((char *)dir - kaddr) & ~(nilfs_chunk_size(inode) - 1);
|
|
|
|
+ to = ((char *)dir - kaddr) + nilfs_rec_len_from_disk(dir->rec_len);
|
|
|
|
+ de = (struct nilfs_dir_entry *)(kaddr + from);
|
|
|
|
+
|
|
while ((char *)de < (char *)dir) {
|
|
while ((char *)de < (char *)dir) {
|
|
if (de->rec_len == 0) {
|
|
if (de->rec_len == 0) {
|
|
nilfs_error(inode->i_sb, __func__,
|
|
nilfs_error(inode->i_sb, __func__,
|
|
@@ -570,7 +571,7 @@ int nilfs_make_empty(struct inode *inode, struct inode *parent)
|
|
{
|
|
{
|
|
struct address_space *mapping = inode->i_mapping;
|
|
struct address_space *mapping = inode->i_mapping;
|
|
struct page *page = grab_cache_page(mapping, 0);
|
|
struct page *page = grab_cache_page(mapping, 0);
|
|
- unsigned chunk_size = nilfs_chunk_size(inode);
|
|
|
|
|
|
+ unsigned int chunk_size = nilfs_chunk_size(inode);
|
|
struct nilfs_dir_entry *de;
|
|
struct nilfs_dir_entry *de;
|
|
int err;
|
|
int err;
|
|
void *kaddr;
|
|
void *kaddr;
|