@@ -6961,6 +6961,24 @@ static int rbd_dev_header_name(struct rbd_device *rbd_dev)
6961
6961
return ret ;
6962
6962
}
6963
6963
6964
+ static void rbd_print_dne (struct rbd_device * rbd_dev , bool is_snap )
6965
+ {
6966
+ if (!is_snap ) {
6967
+ pr_info ("image %s/%s%s%s does not exist\n" ,
6968
+ rbd_dev -> spec -> pool_name ,
6969
+ rbd_dev -> spec -> pool_ns ?: "" ,
6970
+ rbd_dev -> spec -> pool_ns ? "/" : "" ,
6971
+ rbd_dev -> spec -> image_name );
6972
+ } else {
6973
+ pr_info ("snap %s/%s%s%s@%s does not exist\n" ,
6974
+ rbd_dev -> spec -> pool_name ,
6975
+ rbd_dev -> spec -> pool_ns ?: "" ,
6976
+ rbd_dev -> spec -> pool_ns ? "/" : "" ,
6977
+ rbd_dev -> spec -> image_name ,
6978
+ rbd_dev -> spec -> snap_name );
6979
+ }
6980
+ }
6981
+
6964
6982
static void rbd_dev_image_release (struct rbd_device * rbd_dev )
6965
6983
{
6966
6984
rbd_dev_unprobe (rbd_dev );
@@ -6979,6 +6997,7 @@ static void rbd_dev_image_release(struct rbd_device *rbd_dev)
6979
6997
*/
6980
6998
static int rbd_dev_image_probe (struct rbd_device * rbd_dev , int depth )
6981
6999
{
7000
+ bool need_watch = !rbd_is_ro (rbd_dev );
6982
7001
int ret ;
6983
7002
6984
7003
/*
@@ -6995,22 +7014,21 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth)
6995
7014
if (ret )
6996
7015
goto err_out_format ;
6997
7016
6998
- if (! depth ) {
7017
+ if (need_watch ) {
6999
7018
ret = rbd_register_watch (rbd_dev );
7000
7019
if (ret ) {
7001
7020
if (ret == - ENOENT )
7002
- pr_info ("image %s/%s%s%s does not exist\n" ,
7003
- rbd_dev -> spec -> pool_name ,
7004
- rbd_dev -> spec -> pool_ns ?: "" ,
7005
- rbd_dev -> spec -> pool_ns ? "/" : "" ,
7006
- rbd_dev -> spec -> image_name );
7021
+ rbd_print_dne (rbd_dev , false);
7007
7022
goto err_out_format ;
7008
7023
}
7009
7024
}
7010
7025
7011
7026
ret = rbd_dev_header_info (rbd_dev );
7012
- if (ret )
7027
+ if (ret ) {
7028
+ if (ret == - ENOENT && !need_watch )
7029
+ rbd_print_dne (rbd_dev , false);
7013
7030
goto err_out_watch ;
7031
+ }
7014
7032
7015
7033
/*
7016
7034
* If this image is the one being mapped, we have pool name and
@@ -7024,12 +7042,7 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth)
7024
7042
ret = rbd_spec_fill_names (rbd_dev );
7025
7043
if (ret ) {
7026
7044
if (ret == - ENOENT )
7027
- pr_info ("snap %s/%s%s%s@%s does not exist\n" ,
7028
- rbd_dev -> spec -> pool_name ,
7029
- rbd_dev -> spec -> pool_ns ?: "" ,
7030
- rbd_dev -> spec -> pool_ns ? "/" : "" ,
7031
- rbd_dev -> spec -> image_name ,
7032
- rbd_dev -> spec -> snap_name );
7045
+ rbd_print_dne (rbd_dev , true);
7033
7046
goto err_out_probe ;
7034
7047
}
7035
7048
@@ -7061,7 +7074,7 @@ static int rbd_dev_image_probe(struct rbd_device *rbd_dev, int depth)
7061
7074
err_out_probe :
7062
7075
rbd_dev_unprobe (rbd_dev );
7063
7076
err_out_watch :
7064
- if (! depth )
7077
+ if (need_watch )
7065
7078
rbd_unregister_watch (rbd_dev );
7066
7079
err_out_format :
7067
7080
rbd_dev -> image_format = 0 ;
0 commit comments