Re: [PATCH] ceph: fix reset_readdir()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/28/2014 03:13 AM, Yan, Zheng wrote:
> When changing readdir postion, fi->next_offset should be set to 0
> if the new postion is not in the first dirfrag.

Again, looks like this would have been a problem if any
fragment other than the first was being seeked to.

Looks good to me.

Reviewed-by: Alex Elder <elder@xxxxxxxxxx>

> Signed-off-by: Yan, Zheng <zheng.z.yan@xxxxxxxxx>
> ---
>  fs/ceph/dir.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
> index a7eaf96..8ce8833 100644
> --- a/fs/ceph/dir.c
> +++ b/fs/ceph/dir.c
> @@ -454,7 +454,7 @@ more:
>  	return 0;
>  }
>  
> -static void reset_readdir(struct ceph_file_info *fi)
> +static void reset_readdir(struct ceph_file_info *fi, unsigned frag)
>  {
>  	if (fi->last_readdir) {
>  		ceph_mdsc_put_request(fi->last_readdir);
> @@ -462,7 +462,10 @@ static void reset_readdir(struct ceph_file_info *fi)
>  	}
>  	kfree(fi->last_name);
>  	fi->last_name = NULL;
> -	fi->next_offset = 2;  /* compensate for . and .. */
> +	if (ceph_frag_is_leftmost(frag))
> +		fi->next_offset = 2;  /* compensate for . and .. */
> +	else
> +		fi->next_offset = 0;
>  	if (fi->dentry) {
>  		dput(fi->dentry);
>  		fi->dentry = NULL;
> @@ -507,7 +510,7 @@ static loff_t ceph_dir_llseek(struct file *file, loff_t offset, int whence)
>  		    fpos_frag(offset) != fi->frag ||
>  		    fpos_off(offset) < fi->offset) {
>  			dout("dir_llseek dropping %p content\n", file);
> -			reset_readdir(fi);
> +			reset_readdir(fi, fpos_frag(offset));
>  		}
>  
>  		/* bump dir_release_count if we did a forward seek */
> 

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux