]> Pileus Git - ~andy/linux/blobdiff - fs/nilfs2/ifile.c
ext4: atomically set inode->i_flags in ext4_set_inode_flags()
[~andy/linux] / fs / nilfs2 / ifile.c
index d8e65bde083c0c46fb157d321d8ed63a6a6e0ad0..6548c7851b485450c6f33dce3eab35e1ff167d8d 100644 (file)
@@ -159,6 +159,28 @@ int nilfs_ifile_get_inode_block(struct inode *ifile, ino_t ino,
        return err;
 }
 
+/**
+ * nilfs_ifile_count_free_inodes - calculate free inodes count
+ * @ifile: ifile inode
+ * @nmaxinodes: current maximum of available inodes count [out]
+ * @nfreeinodes: free inodes count [out]
+ */
+int nilfs_ifile_count_free_inodes(struct inode *ifile,
+                                   u64 *nmaxinodes, u64 *nfreeinodes)
+{
+       u64 nused;
+       int err;
+
+       *nmaxinodes = 0;
+       *nfreeinodes = 0;
+
+       nused = atomic64_read(&NILFS_I(ifile)->i_root->inodes_count);
+       err = nilfs_palloc_count_max_entries(ifile, nused, nmaxinodes);
+       if (likely(!err))
+               *nfreeinodes = *nmaxinodes - nused;
+       return err;
+}
+
 /**
  * nilfs_ifile_read - read or get ifile inode
  * @sb: super block instance